PySwitchbot 2.6.0__tar.gz → 2.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/PKG-INFO +1 -1
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/pyproject.toml +1 -1
- pyswitchbot-2.7.0/switchbot/__version__.py +1 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parser.py +12 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/const/__init__.py +1 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/lock.py +11 -0
- pyswitchbot-2.6.0/switchbot/__version__.py +0 -1
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/LICENSE +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/README.md +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/__init__.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/__init__.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/_sensor_th.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/air_purifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/art_frame.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/blind_tilt.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/bot.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/bulb.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/ceiling_light.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/climate_panel.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/contact.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/curtain.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/fan.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/hub2.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/hub3.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/hubmini_matter.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/humidifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/keypad.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/keypad_vision.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/leak.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/light_strip.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/lock.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/meter.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/motion.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/plug.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/presence_sensor.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/relay_switch.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/remote.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/roller_shade.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/smart_thermostat_radiator.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/vacuum.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/adv_parsers/weather_station.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/api_config.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/const/air_purifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/const/climate.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/const/evaporative_humidifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/const/fan.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/const/hub2.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/const/hub3.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/const/light.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/const/lock.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/const/presence_sensor.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/__init__.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/air_purifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/art_frame.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/base_cover.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/base_light.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/blind_tilt.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/bot.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/bulb.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/ceiling_light.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/contact.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/curtain.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/device.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/evaporative_humidifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/fan.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/humidifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/keypad.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/keypad_vision.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/light_strip.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/meter.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/meter_pro.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/motion.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/plug.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/relay_switch.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/roller_shade.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/smart_thermostat_radiator.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/universal_remote.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/devices/vacuum.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/discovery.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/enum.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/helpers.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/models.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.0}/switchbot/utils.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.7.0"
|
|
@@ -898,6 +898,18 @@ SUPPORTED_TYPES: dict[str | bytes, SwitchbotSupportedType] = {
|
|
|
898
898
|
"func": process_wolock_pro,
|
|
899
899
|
"manufacturer_id": 2409,
|
|
900
900
|
},
|
|
901
|
+
b"\x00\x11\x9f\xb8": {
|
|
902
|
+
"modelName": SwitchbotModel.LOCK_ULTRA_MAX,
|
|
903
|
+
"modelFriendlyName": "Lock Ultra Max",
|
|
904
|
+
"func": process_lock2,
|
|
905
|
+
"manufacturer_id": 2409,
|
|
906
|
+
},
|
|
907
|
+
b"\x01\x11\x9f\xb8": {
|
|
908
|
+
"modelName": SwitchbotModel.LOCK_ULTRA_MAX,
|
|
909
|
+
"modelFriendlyName": "Lock Ultra Max",
|
|
910
|
+
"func": process_lock2,
|
|
911
|
+
"manufacturer_id": 2409,
|
|
912
|
+
},
|
|
901
913
|
b"\x00\x11\x07\x60": {
|
|
902
914
|
"modelName": SwitchbotModel.STANDING_FAN,
|
|
903
915
|
"modelFriendlyName": "Standing Fan",
|
|
@@ -22,6 +22,7 @@ COMMAND_LOCK_INFO = {
|
|
|
22
22
|
SwitchbotModel.LOCK_LITE: f"{COMMAND_HEADER}0f4f8101",
|
|
23
23
|
SwitchbotModel.LOCK_PRO: f"{COMMAND_HEADER}0f4f8104",
|
|
24
24
|
SwitchbotModel.LOCK_ULTRA: f"{COMMAND_HEADER}0f4f8107",
|
|
25
|
+
SwitchbotModel.LOCK_ULTRA_MAX: f"{COMMAND_HEADER}0f4f8107",
|
|
25
26
|
SwitchbotModel.LOCK_VISION_PRO: f"{COMMAND_HEADER}0f4f8102",
|
|
26
27
|
SwitchbotModel.LOCK_VISION: f"{COMMAND_HEADER}0f4f8102",
|
|
27
28
|
SwitchbotModel.LOCK_PRO_WIFI: f"{COMMAND_HEADER}0f4f810a",
|
|
@@ -31,6 +32,7 @@ COMMAND_UNLOCK = {
|
|
|
31
32
|
SwitchbotModel.LOCK_LITE: f"{COMMAND_HEADER}0f4e01011080",
|
|
32
33
|
SwitchbotModel.LOCK_PRO: f"{COMMAND_HEADER}0f4e0101000080",
|
|
33
34
|
SwitchbotModel.LOCK_ULTRA: f"{COMMAND_HEADER}0f4e0101000080",
|
|
35
|
+
SwitchbotModel.LOCK_ULTRA_MAX: f"{COMMAND_HEADER}0f4e0101000080",
|
|
34
36
|
SwitchbotModel.LOCK_VISION_PRO: f"{COMMAND_HEADER}0f4e0101000080",
|
|
35
37
|
SwitchbotModel.LOCK_VISION: f"{COMMAND_HEADER}0f4e0101000080",
|
|
36
38
|
SwitchbotModel.LOCK_PRO_WIFI: f"{COMMAND_HEADER}0f4e0101000080",
|
|
@@ -40,6 +42,7 @@ COMMAND_UNLOCK_WITHOUT_UNLATCH = {
|
|
|
40
42
|
SwitchbotModel.LOCK_LITE: f"{COMMAND_HEADER}0f4e010110a0",
|
|
41
43
|
SwitchbotModel.LOCK_PRO: f"{COMMAND_HEADER}0f4e01010000a0",
|
|
42
44
|
SwitchbotModel.LOCK_ULTRA: f"{COMMAND_HEADER}0f4e01010000a0",
|
|
45
|
+
SwitchbotModel.LOCK_ULTRA_MAX: f"{COMMAND_HEADER}0f4e01010000a0",
|
|
43
46
|
SwitchbotModel.LOCK_VISION_PRO: f"{COMMAND_HEADER}0f4e01010000a0",
|
|
44
47
|
SwitchbotModel.LOCK_VISION: f"{COMMAND_HEADER}0f4e01010000a0",
|
|
45
48
|
SwitchbotModel.LOCK_PRO_WIFI: f"{COMMAND_HEADER}0f4e01010000a0",
|
|
@@ -49,6 +52,7 @@ COMMAND_LOCK = {
|
|
|
49
52
|
SwitchbotModel.LOCK_LITE: f"{COMMAND_HEADER}0f4e01011000",
|
|
50
53
|
SwitchbotModel.LOCK_PRO: f"{COMMAND_HEADER}0f4e0101000000",
|
|
51
54
|
SwitchbotModel.LOCK_ULTRA: f"{COMMAND_HEADER}0f4e0101000000",
|
|
55
|
+
SwitchbotModel.LOCK_ULTRA_MAX: f"{COMMAND_HEADER}0f4e0101000000",
|
|
52
56
|
SwitchbotModel.LOCK_VISION_PRO: f"{COMMAND_HEADER}0f4e0101000000",
|
|
53
57
|
SwitchbotModel.LOCK_VISION: f"{COMMAND_HEADER}0f4e0101000000",
|
|
54
58
|
SwitchbotModel.LOCK_PRO_WIFI: f"{COMMAND_HEADER}0f4e0101000000",
|
|
@@ -62,6 +66,7 @@ COMMAND_ENABLE_NOTIFICATIONS = {
|
|
|
62
66
|
SwitchbotModel.LOCK_LITE: f"{COMMAND_HEADER}0e01001e00008101",
|
|
63
67
|
SwitchbotModel.LOCK_PRO: f"{COMMAND_HEADER}0e01001e00008104",
|
|
64
68
|
SwitchbotModel.LOCK_ULTRA: f"{COMMAND_HEADER}0e01001e00008107",
|
|
69
|
+
SwitchbotModel.LOCK_ULTRA_MAX: f"{COMMAND_HEADER}0e01001e00008107",
|
|
65
70
|
SwitchbotModel.LOCK_VISION_PRO: f"{COMMAND_HEADER}0e01001e00008102",
|
|
66
71
|
SwitchbotModel.LOCK_VISION: f"{COMMAND_HEADER}0e01001e00008102",
|
|
67
72
|
SwitchbotModel.LOCK_PRO_WIFI: f"{COMMAND_HEADER}0e01001e0000810a",
|
|
@@ -102,6 +107,7 @@ class SwitchbotLock(SwitchbotSequenceDevice, SwitchbotEncryptedDevice):
|
|
|
102
107
|
SwitchbotModel.LOCK_PRO,
|
|
103
108
|
SwitchbotModel.LOCK_LITE,
|
|
104
109
|
SwitchbotModel.LOCK_ULTRA,
|
|
110
|
+
SwitchbotModel.LOCK_ULTRA_MAX,
|
|
105
111
|
SwitchbotModel.LOCK_VISION_PRO,
|
|
106
112
|
SwitchbotModel.LOCK_VISION,
|
|
107
113
|
SwitchbotModel.LOCK_PRO_WIFI,
|
|
@@ -143,6 +149,11 @@ class SwitchbotLock(SwitchbotSequenceDevice, SwitchbotEncryptedDevice):
|
|
|
143
149
|
|
|
144
150
|
def _parse_basic_data(self, basic_data: bytes) -> dict[str, Any]:
|
|
145
151
|
"""Parse basic data from lock."""
|
|
152
|
+
if self._model is SwitchbotModel.LOCK_ULTRA_MAX:
|
|
153
|
+
# Lock Ultra Max's basic-info response format is not documented.
|
|
154
|
+
# Its advertisement already carries the reliable battery and state
|
|
155
|
+
# data, so never overwrite that data with an unverified response.
|
|
156
|
+
return {}
|
|
146
157
|
return {
|
|
147
158
|
"battery": basic_data[1],
|
|
148
159
|
"firmware": basic_data[2] / 10.0,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "2.6.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|