PySwitchbot 0.52.0__tar.gz → 0.53.2__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.
Files changed (58) hide show
  1. pyswitchbot-0.53.2/PKG-INFO +59 -0
  2. pyswitchbot-0.53.2/PySwitchbot.egg-info/PKG-INFO +59 -0
  3. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/PySwitchbot.egg-info/SOURCES.txt +2 -0
  4. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/README.md +1 -1
  5. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/setup.py +9 -2
  6. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parser.py +9 -2
  7. pyswitchbot-0.53.2/switchbot/adv_parsers/keypad.py +22 -0
  8. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/const.py +4 -2
  9. pyswitchbot-0.53.2/switchbot/devices/motion.py +1 -0
  10. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/relay_switch.py +1 -1
  11. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/discovery.py +4 -0
  12. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/tests/test_adv_parser.py +25 -0
  13. pyswitchbot-0.52.0/PKG-INFO +0 -20
  14. pyswitchbot-0.52.0/PySwitchbot.egg-info/PKG-INFO +0 -20
  15. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/LICENSE +0 -0
  16. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/MANIFEST.in +0 -0
  17. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/PySwitchbot.egg-info/dependency_links.txt +0 -0
  18. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/PySwitchbot.egg-info/requires.txt +0 -0
  19. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/PySwitchbot.egg-info/top_level.txt +0 -0
  20. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/setup.cfg +0 -0
  21. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/__init__.py +0 -0
  22. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/__init__.py +0 -0
  23. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/blind_tilt.py +0 -0
  24. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/bot.py +0 -0
  25. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/bulb.py +0 -0
  26. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/ceiling_light.py +0 -0
  27. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/contact.py +0 -0
  28. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/curtain.py +0 -0
  29. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/hub2.py +0 -0
  30. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/humidifier.py +0 -0
  31. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/light_strip.py +0 -0
  32. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/lock.py +0 -0
  33. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/meter.py +0 -0
  34. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/motion.py +0 -0
  35. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/plug.py +0 -0
  36. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/adv_parsers/relay_switch.py +0 -0
  37. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/api_config.py +0 -0
  38. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/__init__.py +0 -0
  39. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/base_cover.py +0 -0
  40. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/base_light.py +0 -0
  41. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/blind_tilt.py +0 -0
  42. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/bot.py +0 -0
  43. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/bulb.py +0 -0
  44. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/ceiling_light.py +0 -0
  45. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/contact.py +0 -0
  46. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/curtain.py +0 -0
  47. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/device.py +0 -0
  48. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/humidifier.py +0 -0
  49. /pyswitchbot-0.52.0/switchbot/devices/meter.py → /pyswitchbot-0.53.2/switchbot/devices/keypad.py +0 -0
  50. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/light_strip.py +0 -0
  51. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/lock.py +0 -0
  52. /pyswitchbot-0.52.0/switchbot/devices/motion.py → /pyswitchbot-0.53.2/switchbot/devices/meter.py +0 -0
  53. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/devices/plug.py +0 -0
  54. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/enum.py +0 -0
  55. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/switchbot/models.py +0 -0
  56. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/tests/test_base_cover.py +0 -0
  57. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/tests/test_blind_tilt.py +0 -0
  58. {pyswitchbot-0.52.0 → pyswitchbot-0.53.2}/tests/test_curtain.py +0 -0
@@ -0,0 +1,59 @@
1
+ Metadata-Version: 2.1
2
+ Name: PySwitchbot
3
+ Version: 0.53.2
4
+ Summary: A library to communicate with Switchbot
5
+ Home-page: https://github.com/sblibs/pySwitchbot/
6
+ Author: Daniel Hjelseth Hoyer
7
+ License: MIT
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Environment :: Other Environment
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python
13
+ Classifier: Topic :: Home Automation
14
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: aiohttp>=3.9.5
18
+ Requires-Dist: bleak>=0.19.0
19
+ Requires-Dist: bleak-retry-connector>=3.4.0
20
+ Requires-Dist: cryptography>=39.0.0
21
+ Requires-Dist: pyOpenSSL>=23.0.0
22
+
23
+ # pySwitchbot [![Build Status](https://travis-ci.org/sblibs/pySwitchbot.svg?branch=master)](https://travis-ci.org/sblibs/pySwitchbot)
24
+
25
+ Library to control Switchbot IoT devices https://www.switch-bot.com/bot
26
+
27
+ ## Obtaining locks encryption key
28
+
29
+ Using the script `scripts/get_encryption_key.py` you can manually obtain locks encryption key.
30
+
31
+ Usage:
32
+
33
+ ```shell
34
+ $ python3 get_encryption_key.py MAC USERNAME
35
+ Key ID: xx
36
+ Encryption key: xxxxxxxxxxxxxxxx
37
+ ```
38
+
39
+ Where `MAC` is MAC address of the lock and `USERNAME` is your SwitchBot account username, after that script will ask for your password.
40
+ If authentication succeeds then script should output your key id and encryption key.
41
+
42
+ Examples:
43
+
44
+ - WoLock
45
+
46
+ ```python
47
+ import asyncio
48
+ from switchbot.discovery import GetSwitchbotDevices
49
+ from switchbot.devices import lock
50
+
51
+
52
+ async def main():
53
+ wolock = await GetSwitchbotDevices().get_locks()
54
+ await lock.SwitchbotLock(wolock['32C0F607-18B8-xxxx-xxxx-xxxxxxxxxx'].device, "key-id", "encryption-key").get_lock_status()
55
+
56
+
57
+ asyncio.run(main())
58
+
59
+ ```
@@ -0,0 +1,59 @@
1
+ Metadata-Version: 2.1
2
+ Name: PySwitchbot
3
+ Version: 0.53.2
4
+ Summary: A library to communicate with Switchbot
5
+ Home-page: https://github.com/sblibs/pySwitchbot/
6
+ Author: Daniel Hjelseth Hoyer
7
+ License: MIT
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Environment :: Other Environment
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python
13
+ Classifier: Topic :: Home Automation
14
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: aiohttp>=3.9.5
18
+ Requires-Dist: bleak>=0.19.0
19
+ Requires-Dist: bleak-retry-connector>=3.4.0
20
+ Requires-Dist: cryptography>=39.0.0
21
+ Requires-Dist: pyOpenSSL>=23.0.0
22
+
23
+ # pySwitchbot [![Build Status](https://travis-ci.org/sblibs/pySwitchbot.svg?branch=master)](https://travis-ci.org/sblibs/pySwitchbot)
24
+
25
+ Library to control Switchbot IoT devices https://www.switch-bot.com/bot
26
+
27
+ ## Obtaining locks encryption key
28
+
29
+ Using the script `scripts/get_encryption_key.py` you can manually obtain locks encryption key.
30
+
31
+ Usage:
32
+
33
+ ```shell
34
+ $ python3 get_encryption_key.py MAC USERNAME
35
+ Key ID: xx
36
+ Encryption key: xxxxxxxxxxxxxxxx
37
+ ```
38
+
39
+ Where `MAC` is MAC address of the lock and `USERNAME` is your SwitchBot account username, after that script will ask for your password.
40
+ If authentication succeeds then script should output your key id and encryption key.
41
+
42
+ Examples:
43
+
44
+ - WoLock
45
+
46
+ ```python
47
+ import asyncio
48
+ from switchbot.discovery import GetSwitchbotDevices
49
+ from switchbot.devices import lock
50
+
51
+
52
+ async def main():
53
+ wolock = await GetSwitchbotDevices().get_locks()
54
+ await lock.SwitchbotLock(wolock['32C0F607-18B8-xxxx-xxxx-xxxxxxxxxx'].device, "key-id", "encryption-key").get_lock_status()
55
+
56
+
57
+ asyncio.run(main())
58
+
59
+ ```
@@ -23,6 +23,7 @@ switchbot/adv_parsers/contact.py
23
23
  switchbot/adv_parsers/curtain.py
24
24
  switchbot/adv_parsers/hub2.py
25
25
  switchbot/adv_parsers/humidifier.py
26
+ switchbot/adv_parsers/keypad.py
26
27
  switchbot/adv_parsers/light_strip.py
27
28
  switchbot/adv_parsers/lock.py
28
29
  switchbot/adv_parsers/meter.py
@@ -40,6 +41,7 @@ switchbot/devices/contact.py
40
41
  switchbot/devices/curtain.py
41
42
  switchbot/devices/device.py
42
43
  switchbot/devices/humidifier.py
44
+ switchbot/devices/keypad.py
43
45
  switchbot/devices/light_strip.py
44
46
  switchbot/devices/lock.py
45
47
  switchbot/devices/meter.py
@@ -1,4 +1,4 @@
1
- # pySwitchbot [![Build Status](https://travis-ci.org/Danielhiversen/pySwitchbot.svg?branch=master)](https://travis-ci.org/Danielhiversen/pySwitchbot)
1
+ # pySwitchbot [![Build Status](https://travis-ci.org/sblibs/pySwitchbot.svg?branch=master)](https://travis-ci.org/sblibs/pySwitchbot)
2
2
 
3
3
  Library to control Switchbot IoT devices https://www.switch-bot.com/bot
4
4
 
@@ -1,5 +1,10 @@
1
+ from pathlib import Path
2
+
1
3
  from setuptools import setup
2
4
 
5
+ this_directory = Path(__file__).parent
6
+ long_description = (this_directory / "README.md").read_text()
7
+
3
8
  setup(
4
9
  name="PySwitchbot",
5
10
  packages=["switchbot", "switchbot.devices", "switchbot.adv_parsers"],
@@ -10,10 +15,12 @@ setup(
10
15
  "cryptography>=39.0.0",
11
16
  "pyOpenSSL>=23.0.0",
12
17
  ],
13
- version="0.52.0",
18
+ version="0.53.2",
14
19
  description="A library to communicate with Switchbot",
20
+ long_description=long_description,
21
+ long_description_content_type="text/markdown",
15
22
  author="Daniel Hjelseth Hoyer",
16
- url="https://github.com/Danielhiversen/pySwitchbot/",
23
+ url="https://github.com/sblibs/pySwitchbot/",
17
24
  license="MIT",
18
25
  classifiers=[
19
26
  "Development Status :: 3 - Alpha",
@@ -18,6 +18,7 @@ from .adv_parsers.contact import process_wocontact
18
18
  from .adv_parsers.curtain import process_wocurtain
19
19
  from .adv_parsers.hub2 import process_wohub2
20
20
  from .adv_parsers.humidifier import process_wohumidifier
21
+ from .adv_parsers.keypad import process_wokeypad
21
22
  from .adv_parsers.light_strip import process_wostrip
22
23
  from .adv_parsers.lock import process_wolock, process_wolock_pro
23
24
  from .adv_parsers.meter import process_wosensorth, process_wosensorth_c
@@ -177,14 +178,20 @@ SUPPORTED_TYPES: dict[str, SwitchbotSupportedType] = {
177
178
  "func": process_woblindtilt,
178
179
  "manufacturer_id": 2409,
179
180
  },
181
+ "y": {
182
+ "modelName": SwitchbotModel.KEYPAD,
183
+ "modelFriendlyName": "Keypad",
184
+ "func": process_wokeypad,
185
+ "manufacturer_id": 2409,
186
+ },
180
187
  "<": {
181
- "modelName": SwitchbotModel.RelaySwitch1PM,
188
+ "modelName": SwitchbotModel.RELAY_SWITCH_1PM,
182
189
  "modelFriendlyName": "Relay Switch 1PM",
183
190
  "func": process_worelay_switch_1pm,
184
191
  "manufacturer_id": 2409,
185
192
  },
186
193
  ";": {
187
- "modelName": SwitchbotModel.RelaySwitch1Plus,
194
+ "modelName": SwitchbotModel.RELAY_SWITCH_1_PLUS,
188
195
  "modelFriendlyName": "Relay Switch 1",
189
196
  "func": process_worelay_switch_1plus,
190
197
  "manufacturer_id": 2409,
@@ -0,0 +1,22 @@
1
+ """Keypad parser."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+
7
+ _LOGGER = logging.getLogger(__name__)
8
+
9
+
10
+ def process_wokeypad(
11
+ data: bytes | None,
12
+ mfr_data: bytes | None,
13
+ ) -> dict[str, bool | int | None]:
14
+ """Process woKeypad services data."""
15
+ if data is None or mfr_data is None:
16
+ return {"battery": None, "attempt_state": None}
17
+
18
+ _LOGGER.debug("mfr_data: %s", mfr_data.hex())
19
+ if data:
20
+ _LOGGER.debug("data: %s", data.hex())
21
+
22
+ return {"battery": data[2] & 0b01111111, "attempt_state": mfr_data[6]}
@@ -1,4 +1,5 @@
1
1
  """Library to handle connection with Switchbot."""
2
+
2
3
  from __future__ import annotations
3
4
 
4
5
  from enum import Enum
@@ -52,8 +53,9 @@ class SwitchbotModel(StrEnum):
52
53
  LOCK_PRO = "WoLockPro"
53
54
  BLIND_TILT = "WoBlindTilt"
54
55
  HUB2 = "WoHub2"
55
- RelaySwitch1PM = "Relay Switch 1PM"
56
- RelaySwitch1Plus = "Relay Switch 1"
56
+ KEYPAD = "WoKeypad"
57
+ RELAY_SWITCH_1PM = "Relay Switch 1PM"
58
+ RELAY_SWITCH_1_PLUS = "Relay Switch 1"
57
59
 
58
60
 
59
61
  class LockStatus(Enum):
@@ -0,0 +1 @@
1
+ from __future__ import annotations
@@ -25,7 +25,7 @@ class SwitchbotRelaySwitch(SwitchbotSequenceDevice):
25
25
  key_id: str,
26
26
  encryption_key: str,
27
27
  interface: int = 0,
28
- model: SwitchbotModel = SwitchbotModel.RelaySwitch1PM,
28
+ model: SwitchbotModel = SwitchbotModel.RELAY_SWITCH_1PM,
29
29
  **kwargs: Any,
30
30
  ) -> None:
31
31
  if len(key_id) == 0:
@@ -124,6 +124,10 @@ class GetSwitchbotDevices:
124
124
  lock_pros = await self._get_devices_by_model("$")
125
125
  return {**locks, **lock_pros}
126
126
 
127
+ async def get_keypads(self) -> dict[str, SwitchBotAdvertisement]:
128
+ """Return all WoKeypad/Keypad devices with services data."""
129
+ return await self._get_devices_by_model("y")
130
+
127
131
  async def get_device_data(
128
132
  self, address: str
129
133
  ) -> dict[str, SwitchBotAdvertisement] | None:
@@ -1647,3 +1647,28 @@ def test_meter_pro_c_passive() -> None:
1647
1647
  rssi=-67,
1648
1648
  active=False,
1649
1649
  )
1650
+
1651
+
1652
+ def test_parse_advertisement_data_keypad():
1653
+ """Test parse_advertisement_data for the keypad."""
1654
+ ble_device = generate_ble_device("aa:bb:cc:dd:ee:ff", "any")
1655
+ adv_data = generate_advertisement_data(
1656
+ manufacturer_data={2409: b"\xeb\x13\x02\xe6#\x0f\x8fd\x00\x00\x00\x00"},
1657
+ service_data={"0000fd3d-0000-1000-8000-00805f9b34fb": b"y\x00d"},
1658
+ rssi=-67,
1659
+ )
1660
+ result = parse_advertisement_data(ble_device, adv_data, SwitchbotModel.KEYPAD)
1661
+ assert result == SwitchBotAdvertisement(
1662
+ address="aa:bb:cc:dd:ee:ff",
1663
+ data={
1664
+ "data": {"attempt_state": 143, "battery": 100},
1665
+ "isEncrypted": False,
1666
+ "model": "y",
1667
+ "modelFriendlyName": "Keypad",
1668
+ "modelName": SwitchbotModel.KEYPAD,
1669
+ "rawAdvData": b"y\x00d",
1670
+ },
1671
+ device=ble_device,
1672
+ rssi=-67,
1673
+ active=True,
1674
+ )
@@ -1,20 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: PySwitchbot
3
- Version: 0.52.0
4
- Summary: A library to communicate with Switchbot
5
- Home-page: https://github.com/Danielhiversen/pySwitchbot/
6
- Author: Daniel Hjelseth Hoyer
7
- License: MIT
8
- Classifier: Development Status :: 3 - Alpha
9
- Classifier: Environment :: Other Environment
10
- Classifier: Intended Audience :: Developers
11
- Classifier: Operating System :: OS Independent
12
- Classifier: Programming Language :: Python
13
- Classifier: Topic :: Home Automation
14
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
15
- License-File: LICENSE
16
- Requires-Dist: aiohttp>=3.9.5
17
- Requires-Dist: bleak>=0.19.0
18
- Requires-Dist: bleak-retry-connector>=3.4.0
19
- Requires-Dist: cryptography>=39.0.0
20
- Requires-Dist: pyOpenSSL>=23.0.0
@@ -1,20 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: PySwitchbot
3
- Version: 0.52.0
4
- Summary: A library to communicate with Switchbot
5
- Home-page: https://github.com/Danielhiversen/pySwitchbot/
6
- Author: Daniel Hjelseth Hoyer
7
- License: MIT
8
- Classifier: Development Status :: 3 - Alpha
9
- Classifier: Environment :: Other Environment
10
- Classifier: Intended Audience :: Developers
11
- Classifier: Operating System :: OS Independent
12
- Classifier: Programming Language :: Python
13
- Classifier: Topic :: Home Automation
14
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
15
- License-File: LICENSE
16
- Requires-Dist: aiohttp>=3.9.5
17
- Requires-Dist: bleak>=0.19.0
18
- Requires-Dist: bleak-retry-connector>=3.4.0
19
- Requires-Dist: cryptography>=39.0.0
20
- Requires-Dist: pyOpenSSL>=23.0.0
File without changes
File without changes
File without changes