PySwitchbot 2.9.0__tar.gz → 2.10.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.
Files changed (84) hide show
  1. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/PKG-INFO +2 -1
  2. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/pyproject.toml +1 -1
  3. pyswitchbot-2.10.0/switchbot/__version__.py +1 -0
  4. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/_sensor_th.py +1 -1
  5. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/art_frame.py +16 -0
  6. pyswitchbot-2.9.0/switchbot/__version__.py +0 -1
  7. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/LICENSE +0 -0
  8. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/README.md +0 -0
  9. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/__init__.py +0 -0
  10. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parser.py +0 -0
  11. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/__init__.py +0 -0
  12. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/air_purifier.py +0 -0
  13. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/art_frame.py +0 -0
  14. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/blind_tilt.py +0 -0
  15. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/bot.py +0 -0
  16. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/bulb.py +0 -0
  17. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/ceiling_light.py +0 -0
  18. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/climate_panel.py +0 -0
  19. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/contact.py +0 -0
  20. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/curtain.py +0 -0
  21. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/fan.py +0 -0
  22. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/hub2.py +0 -0
  23. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/hub3.py +0 -0
  24. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/hubmini_matter.py +0 -0
  25. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/humidifier.py +0 -0
  26. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/keypad.py +0 -0
  27. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/keypad_vision.py +0 -0
  28. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/leak.py +0 -0
  29. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/light_strip.py +0 -0
  30. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/lock.py +0 -0
  31. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/meter.py +0 -0
  32. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/motion.py +0 -0
  33. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/plug.py +0 -0
  34. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/presence_sensor.py +0 -0
  35. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/relay_switch.py +0 -0
  36. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/remote.py +0 -0
  37. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/roller_shade.py +0 -0
  38. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/smart_thermostat_radiator.py +0 -0
  39. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/vacuum.py +0 -0
  40. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/adv_parsers/weather_station.py +0 -0
  41. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/api_config.py +0 -0
  42. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/const/__init__.py +0 -0
  43. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/const/air_purifier.py +0 -0
  44. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/const/climate.py +0 -0
  45. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/const/evaporative_humidifier.py +0 -0
  46. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/const/fan.py +0 -0
  47. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/const/hub2.py +0 -0
  48. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/const/hub3.py +0 -0
  49. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/const/light.py +0 -0
  50. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/const/lock.py +0 -0
  51. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/const/presence_sensor.py +0 -0
  52. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/__init__.py +0 -0
  53. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/air_purifier.py +0 -0
  54. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/base_cover.py +0 -0
  55. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/base_light.py +0 -0
  56. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/blind_tilt.py +0 -0
  57. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/bot.py +0 -0
  58. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/bulb.py +0 -0
  59. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/ceiling_light.py +0 -0
  60. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/contact.py +0 -0
  61. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/curtain.py +0 -0
  62. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/device.py +0 -0
  63. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/evaporative_humidifier.py +0 -0
  64. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/fan.py +0 -0
  65. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/humidifier.py +0 -0
  66. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/keypad.py +0 -0
  67. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/keypad_vision.py +0 -0
  68. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/light_strip.py +0 -0
  69. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/lock.py +0 -0
  70. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/meter.py +0 -0
  71. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/meter_pro.py +0 -0
  72. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/motion.py +0 -0
  73. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/plug.py +0 -0
  74. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/relay_switch.py +0 -0
  75. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/roller_shade.py +0 -0
  76. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/smart_thermostat_radiator.py +0 -0
  77. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/universal_remote.py +0 -0
  78. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/devices/vacuum.py +0 -0
  79. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/discovery.py +0 -0
  80. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/enum.py +0 -0
  81. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/helpers.py +0 -0
  82. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/models.py +0 -0
  83. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/oauth.py +0 -0
  84. {pyswitchbot-2.9.0 → pyswitchbot-2.10.0}/switchbot/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PySwitchbot
3
- Version: 2.9.0
3
+ Version: 2.10.0
4
4
  Summary: A library to communicate with Switchbot
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.11
17
17
  Classifier: Programming Language :: Python :: 3.12
18
18
  Classifier: Programming Language :: Python :: 3.13
19
19
  Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Programming Language :: Python :: 3.15
20
21
  Classifier: Topic :: Home Automation
21
22
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
23
  Requires-Dist: aiohttp (>=3.9.5)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "PySwitchbot"
3
- version = "2.9.0"
3
+ version = "2.10.0"
4
4
  description = "A library to communicate with Switchbot"
5
5
  authors = ["Daniel Hjelseth Hoyer"]
6
6
  license = "MIT"
@@ -0,0 +1 @@
1
+ __version__ = "2.10.0"
@@ -24,7 +24,7 @@ def decode_temp_humidity(temp_data: bytes, battery: int | None) -> dict[str, Any
24
24
  _temp_f = (_temp_f * 10) / 10
25
25
  humidity = temp_data[2] & 0b01111111
26
26
 
27
- if _temp_c == 0 and humidity == 0 and battery == 0:
27
+ if _temp_c == 0 and humidity == 0:
28
28
  return {}
29
29
 
30
30
  return {
@@ -1,6 +1,7 @@
1
1
  """Device handler for the Art Frame."""
2
2
 
3
3
  import logging
4
+ import secrets
4
5
  from typing import Any
5
6
 
6
7
  from ..const import SwitchbotModel
@@ -87,6 +88,21 @@ class SwitchbotArtFrame(SwitchbotSequenceDevice, SwitchbotEncryptedDevice):
87
88
  result = await self._send_command(COMMAND_SET_IMAGE.format(f"{idx:02X}"))
88
89
  return self._check_command_result(result, 0, {1})
89
90
 
91
+ @update_after_operation
92
+ async def random_image(self) -> bool:
93
+ """Display a random image other than the current one."""
94
+ await self._get_current_image_index()
95
+ current_index = self.get_current_image_index()
96
+ all_images_index = self.get_all_images_index()
97
+
98
+ choices = [idx for idx in all_images_index or [] if idx != current_index]
99
+ if not choices:
100
+ raise RuntimeError("No images available to select from.")
101
+
102
+ idx = secrets.choice(choices)
103
+ result = await self._send_command(COMMAND_SET_IMAGE.format(f"{idx:02X}"))
104
+ return self._check_command_result(result, 0, {1})
105
+
90
106
  @update_after_operation
91
107
  async def set_image(self, index: int) -> bool:
92
108
  """Set the image by index."""
@@ -1 +0,0 @@
1
- __version__ = "2.9.0"
File without changes
File without changes