homeassistant-stubs 2025.8.3__py3-none-any.whl → 2025.9.0__py3-none-any.whl

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.

Potentially problematic release.


This version of homeassistant-stubs might be problematic. Click here for more details.

Files changed (243) hide show
  1. homeassistant-stubs/auth/models.pyi +3 -1
  2. homeassistant-stubs/components/airos/binary_sensor.pyi +27 -0
  3. homeassistant-stubs/components/airos/sensor.pyi +4 -2
  4. homeassistant-stubs/components/airq/number.pyi +31 -0
  5. homeassistant-stubs/components/aladdin_connect/__init__.pyi +10 -5
  6. homeassistant-stubs/components/aladdin_connect/api.pyi +12 -0
  7. homeassistant-stubs/components/aladdin_connect/application_credentials.pyi +5 -0
  8. homeassistant-stubs/components/aladdin_connect/config_flow.pyi +15 -4
  9. homeassistant-stubs/components/aladdin_connect/const.pyi +10 -0
  10. homeassistant-stubs/components/aladdin_connect/coordinator.pyi +16 -0
  11. homeassistant-stubs/components/aladdin_connect/cover.pyi +25 -0
  12. homeassistant-stubs/components/aladdin_connect/entity.pyi +15 -0
  13. homeassistant-stubs/components/aladdin_connect/sensor.pyi +25 -0
  14. homeassistant-stubs/components/alexa_devices/__init__.pyi +1 -1
  15. homeassistant-stubs/components/alexa_devices/config_flow.pyi +2 -0
  16. homeassistant-stubs/components/alexa_devices/const.pyi +1 -1
  17. homeassistant-stubs/components/alexa_devices/sensor.pyi +1 -1
  18. homeassistant-stubs/components/alexa_devices/services.pyi +0 -1
  19. homeassistant-stubs/components/amberelectric/const.pyi +0 -1
  20. homeassistant-stubs/components/amberelectric/services.pyi +2 -1
  21. homeassistant-stubs/components/ambient_station/entity.pyi +1 -1
  22. homeassistant-stubs/components/android_ip_webcam/coordinator.pyi +0 -1
  23. homeassistant-stubs/components/apcupsd/binary_sensor.pyi +2 -6
  24. homeassistant-stubs/components/apcupsd/entity.pyi +11 -0
  25. homeassistant-stubs/components/apcupsd/sensor.pyi +2 -6
  26. homeassistant-stubs/components/asuswrt/bridge.pyi +12 -8
  27. homeassistant-stubs/components/asuswrt/helpers.pyi +8 -0
  28. homeassistant-stubs/components/auth/login_flow.pyi +1 -1
  29. homeassistant-stubs/components/auth/mfa_setup_flow.pyi +1 -1
  30. homeassistant-stubs/components/awair/const.pyi +1 -0
  31. homeassistant-stubs/components/awair/sensor.pyi +2 -2
  32. homeassistant-stubs/components/backup/config.pyi +0 -14
  33. homeassistant-stubs/components/bayesian/__init__.pyi +6 -4
  34. homeassistant-stubs/components/bayesian/binary_sensor.pyi +6 -5
  35. homeassistant-stubs/components/bayesian/config_flow.pyi +69 -0
  36. homeassistant-stubs/components/bayesian/const.pyi +5 -0
  37. homeassistant-stubs/components/bayesian/issues.pyi +1 -1
  38. homeassistant-stubs/components/bosch_alarm/const.pyi +0 -1
  39. homeassistant-stubs/components/bosch_alarm/services.pyi +2 -1
  40. homeassistant-stubs/components/braviatv/button.pyi +1 -1
  41. homeassistant-stubs/components/braviatv/coordinator.pyi +1 -0
  42. homeassistant-stubs/components/braviatv/entity.pyi +1 -1
  43. homeassistant-stubs/components/climate/__init__.pyi +1 -1
  44. homeassistant-stubs/components/cloud/alexa_config.pyi +2 -1
  45. homeassistant-stubs/components/cloud/subscription.pyi +2 -4
  46. homeassistant-stubs/components/co2signal/coordinator.pyi +3 -3
  47. homeassistant-stubs/components/co2signal/helpers.pyi +2 -3
  48. homeassistant-stubs/components/co2signal/sensor.pyi +3 -3
  49. homeassistant-stubs/components/config/config_entries.pyi +6 -3
  50. homeassistant-stubs/components/deconz/hub/hub.pyi +0 -1
  51. homeassistant-stubs/components/deconz/services.pyi +0 -1
  52. homeassistant-stubs/components/demo/media_player.pyi +2 -0
  53. homeassistant-stubs/components/device_automation/condition.pyi +2 -2
  54. homeassistant-stubs/components/enphase_envoy/binary_sensor.pyi +29 -1
  55. homeassistant-stubs/components/enphase_envoy/sensor.pyi +30 -1
  56. homeassistant-stubs/components/esphome/manager.pyi +1 -2
  57. homeassistant-stubs/components/esphome/media_player.pyi +5 -0
  58. homeassistant-stubs/components/fan/intent.pyi +7 -0
  59. homeassistant-stubs/components/fritz/coordinator.pyi +0 -1
  60. homeassistant-stubs/components/fyta/const.pyi +4 -0
  61. homeassistant-stubs/components/fyta/sensor.pyi +11 -0
  62. homeassistant-stubs/components/glances/coordinator.pyi +0 -1
  63. homeassistant-stubs/components/group/config_flow.pyi +2 -0
  64. homeassistant-stubs/components/habitica/__init__.pyi +6 -2
  65. homeassistant-stubs/components/habitica/binary_sensor.pyi +13 -4
  66. homeassistant-stubs/components/habitica/coordinator.pyi +18 -4
  67. homeassistant-stubs/components/habitica/entity.pyi +10 -1
  68. homeassistant-stubs/components/habitica/image.pyi +19 -4
  69. homeassistant-stubs/components/habitica/sensor.pyi +27 -3
  70. homeassistant-stubs/components/habitica/util.pyi +5 -2
  71. homeassistant-stubs/components/home_connect/const.pyi +0 -7
  72. homeassistant-stubs/components/home_connect/services.pyi +1 -14
  73. homeassistant-stubs/components/homeassistant_hardware/coordinator.pyi +0 -1
  74. homeassistant-stubs/components/homee/config_flow.pyi +8 -2
  75. homeassistant-stubs/components/homee/const.pyi +3 -0
  76. homeassistant-stubs/components/homekit/accessories.pyi +1 -1
  77. homeassistant-stubs/components/homekit/const.pyi +4 -0
  78. homeassistant-stubs/components/homekit/type_switches.pyi +11 -1
  79. homeassistant-stubs/components/homekit/util.pyi +3 -2
  80. homeassistant-stubs/components/huawei_lte/__init__.pyi +2 -2
  81. homeassistant-stubs/components/huawei_lte/const.pyi +0 -1
  82. homeassistant-stubs/components/huawei_lte/notify.pyi +2 -2
  83. homeassistant-stubs/components/husqvarna_automower/button.pyi +4 -0
  84. homeassistant-stubs/components/husqvarna_automower/const.pyi +1 -0
  85. homeassistant-stubs/components/husqvarna_automower/coordinator.pyi +10 -0
  86. homeassistant-stubs/components/husqvarna_automower/event.pyi +35 -0
  87. homeassistant-stubs/components/husqvarna_automower/sensor.pyi +1 -2
  88. homeassistant-stubs/components/idasen_desk/__init__.pyi +0 -1
  89. homeassistant-stubs/components/jewish_calendar/__init__.pyi +2 -1
  90. homeassistant-stubs/components/jewish_calendar/coordinator.pyi +41 -0
  91. homeassistant-stubs/components/jewish_calendar/entity.pyi +5 -26
  92. homeassistant-stubs/components/jewish_calendar/sensor.pyi +1 -1
  93. homeassistant-stubs/components/knx/scene.pyi +5 -4
  94. homeassistant-stubs/components/knx/storage/entity_store_schema.pyi +5 -11
  95. homeassistant-stubs/components/knx/storage/knx_selector.pyi +57 -6
  96. homeassistant-stubs/components/knx/storage/serialize.pyi +10 -0
  97. homeassistant-stubs/components/knx/storage/util.pyi +2 -0
  98. homeassistant-stubs/components/knx/websocket.pyi +7 -3
  99. homeassistant-stubs/components/letpot/select.pyi +39 -0
  100. homeassistant-stubs/components/mastodon/__init__.pyi +1 -2
  101. homeassistant-stubs/components/mastodon/config_flow.pyi +2 -2
  102. homeassistant-stubs/components/mastodon/const.pyi +0 -1
  103. homeassistant-stubs/components/mastodon/diagnostics.pyi +2 -2
  104. homeassistant-stubs/components/mastodon/services.pyi +2 -1
  105. homeassistant-stubs/components/matter/lock.pyi +6 -0
  106. homeassistant-stubs/components/matter/sensor.pyi +2 -1
  107. homeassistant-stubs/components/mealie/const.pyi +0 -1
  108. homeassistant-stubs/components/mealie/services.pyi +2 -2
  109. homeassistant-stubs/components/media_player/__init__.pyi +4 -0
  110. homeassistant-stubs/components/media_player/intent.pyi +13 -3
  111. homeassistant-stubs/components/met_eireann/const.pyi +1 -1
  112. homeassistant-stubs/components/met_eireann/weather.pyi +4 -0
  113. homeassistant-stubs/components/miele/climate.pyi +3 -1
  114. homeassistant-stubs/components/miele/const.pyi +1 -0
  115. homeassistant-stubs/components/miele/coordinator.pyi +2 -3
  116. homeassistant-stubs/components/miele/entity.pyi +2 -3
  117. homeassistant-stubs/components/miele/sensor.pyi +25 -6
  118. homeassistant-stubs/components/modbus/binary_sensor.pyi +1 -2
  119. homeassistant-stubs/components/modbus/climate.pyi +1 -2
  120. homeassistant-stubs/components/modbus/const.pyi +2 -0
  121. homeassistant-stubs/components/modbus/entity.pyi +7 -16
  122. homeassistant-stubs/components/modbus/light.pyi +0 -1
  123. homeassistant-stubs/components/modbus/modbus.pyi +9 -11
  124. homeassistant-stubs/components/modbus/sensor.pyi +1 -3
  125. homeassistant-stubs/components/mqtt/alarm_control_panel.pyi +2 -23
  126. homeassistant-stubs/components/mqtt/config_flow.pyi +8 -2
  127. homeassistant-stubs/components/mqtt/const.pyi +40 -1
  128. homeassistant-stubs/components/mqtt/lock.pyi +1 -21
  129. homeassistant-stubs/components/mqtt/number.pyi +1 -0
  130. homeassistant-stubs/components/mqtt/sensor.pyi +1 -1
  131. homeassistant-stubs/components/music_assistant/actions.pyi +2 -1
  132. homeassistant-stubs/components/music_assistant/const.pyi +0 -1
  133. homeassistant-stubs/components/music_assistant/media_browser.pyi +1 -1
  134. homeassistant-stubs/components/number/__init__.pyi +3 -0
  135. homeassistant-stubs/components/number/const.pyi +2 -1
  136. homeassistant-stubs/components/open_router/entity.pyi +2 -2
  137. homeassistant-stubs/components/openai_conversation/entity.pyi +3 -3
  138. homeassistant-stubs/components/opower/__init__.pyi +1 -0
  139. homeassistant-stubs/components/opower/repairs.pyi +13 -0
  140. homeassistant-stubs/components/overseerr/const.pyi +0 -1
  141. homeassistant-stubs/components/overseerr/services.pyi +2 -1
  142. homeassistant-stubs/components/person/__init__.pyi +2 -1
  143. homeassistant-stubs/components/qbus/binary_sensor.pyi +43 -0
  144. homeassistant-stubs/components/qbus/climate.pyi +1 -1
  145. homeassistant-stubs/components/qbus/coordinator.pyi +4 -3
  146. homeassistant-stubs/components/qbus/cover.pyi +1 -1
  147. homeassistant-stubs/components/qbus/entity.pyi +6 -5
  148. homeassistant-stubs/components/qbus/light.pyi +1 -1
  149. homeassistant-stubs/components/qbus/scene.pyi +4 -6
  150. homeassistant-stubs/components/qbus/sensor.pyi +67 -0
  151. homeassistant-stubs/components/qbus/switch.pyi +1 -1
  152. homeassistant-stubs/components/recorder/statistics.pyi +1 -1
  153. homeassistant-stubs/components/recorder/websocket_api.pyi +1 -1
  154. homeassistant-stubs/components/rest_command/__init__.pyi +1 -1
  155. homeassistant-stubs/components/romy/coordinator.pyi +0 -1
  156. homeassistant-stubs/components/russound_rio/media_browser.pyi +8 -0
  157. homeassistant-stubs/components/russound_rio/media_player.pyi +3 -2
  158. homeassistant-stubs/components/ruuvitag_ble/sensor.pyi +2 -2
  159. homeassistant-stubs/components/scene/__init__.pyi +13 -4
  160. homeassistant-stubs/components/sensibo/select.pyi +0 -5
  161. homeassistant-stubs/components/sensor/__init__.pyi +3 -0
  162. homeassistant-stubs/components/sensor/const.pyi +3 -2
  163. homeassistant-stubs/components/sensor/recorder.pyi +1 -1
  164. homeassistant-stubs/components/sleep_as_android/__init__.pyi +16 -0
  165. homeassistant-stubs/components/sleep_as_android/config_flow.pyi +2 -0
  166. homeassistant-stubs/components/sleep_as_android/const.pyi +9 -0
  167. homeassistant-stubs/components/sleep_as_android/diagnostics.pyi +5 -0
  168. homeassistant-stubs/components/sleep_as_android/entity.pyi +20 -0
  169. homeassistant-stubs/components/sleep_as_android/event.pyi +33 -0
  170. homeassistant-stubs/components/sleep_as_android/sensor.pyi +25 -0
  171. homeassistant-stubs/components/solarlog/sensor.pyi +11 -1
  172. homeassistant-stubs/components/speedtestdotnet/coordinator.pyi +0 -1
  173. homeassistant-stubs/components/stookwijzer/const.pyi +0 -1
  174. homeassistant-stubs/components/stookwijzer/services.pyi +2 -1
  175. homeassistant-stubs/components/sun/condition.pyi +2 -2
  176. homeassistant-stubs/components/switchbot_cloud/__init__.pyi +1 -0
  177. homeassistant-stubs/components/switchbot_cloud/const.pyi +10 -0
  178. homeassistant-stubs/components/switchbot_cloud/cover.pyi +57 -0
  179. homeassistant-stubs/components/switchbot_cloud/fan.pyi +22 -1
  180. homeassistant-stubs/components/telegram_bot/__init__.pyi +2 -1
  181. homeassistant-stubs/components/telegram_bot/bot.pyi +4 -1
  182. homeassistant-stubs/components/telegram_bot/notify.pyi +21 -0
  183. homeassistant-stubs/components/unifi/switch.pyi +3 -0
  184. homeassistant-stubs/components/volvo/__init__.pyi +1 -1
  185. homeassistant-stubs/components/volvo/binary_sensor.pyi +42 -0
  186. homeassistant-stubs/components/volvo/const.pyi +1 -1
  187. homeassistant-stubs/components/volvo/coordinator.pyi +5 -0
  188. homeassistant-stubs/components/volvo/sensor.pyi +2 -2
  189. homeassistant-stubs/components/webostv/__init__.pyi +2 -2
  190. homeassistant-stubs/components/webostv/const.pyi +0 -1
  191. homeassistant-stubs/components/webostv/notify.pyi +2 -2
  192. homeassistant-stubs/components/websocket_api/http.pyi +1 -0
  193. homeassistant-stubs/components/wemo/coordinator.pyi +0 -1
  194. homeassistant-stubs/components/workday/__init__.pyi +6 -8
  195. homeassistant-stubs/components/workday/binary_sensor.pyi +9 -33
  196. homeassistant-stubs/components/workday/entity.pyi +34 -0
  197. homeassistant-stubs/components/workday/util.pyi +14 -0
  198. homeassistant-stubs/components/yalexs_ble/__init__.pyi +3 -1
  199. homeassistant-stubs/components/yalexs_ble/config_cache.pyi +10 -0
  200. homeassistant-stubs/components/yalexs_ble/config_flow.pyi +4 -0
  201. homeassistant-stubs/components/zone/condition.pyi +2 -2
  202. homeassistant-stubs/components/zwave_js/__init__.pyi +5 -5
  203. homeassistant-stubs/components/zwave_js/binary_sensor.pyi +18 -10
  204. homeassistant-stubs/components/zwave_js/const.pyi +0 -1
  205. homeassistant-stubs/components/zwave_js/discovery.pyi +7 -51
  206. homeassistant-stubs/components/zwave_js/discovery_data_template.pyi +1 -11
  207. homeassistant-stubs/components/zwave_js/entity.pyi +15 -5
  208. homeassistant-stubs/components/zwave_js/helpers.pyi +0 -7
  209. homeassistant-stubs/components/zwave_js/migrate.pyi +2 -2
  210. homeassistant-stubs/components/zwave_js/models.pyi +95 -1
  211. homeassistant-stubs/components/zwave_js/triggers/event.pyi +5 -4
  212. homeassistant-stubs/components/zwave_js/triggers/trigger_helpers.pyi +2 -2
  213. homeassistant-stubs/components/zwave_js/triggers/value_updated.pyi +3 -2
  214. homeassistant-stubs/components/zwave_js/update.pyi +0 -3
  215. homeassistant-stubs/config_entries.pyi +5 -0
  216. homeassistant-stubs/const.pyi +9 -5
  217. homeassistant-stubs/data_entry_flow.pyi +0 -1
  218. homeassistant-stubs/helpers/automation.pyi +2 -0
  219. homeassistant-stubs/helpers/condition.pyi +6 -6
  220. homeassistant-stubs/helpers/config_validation.pyi +3 -0
  221. homeassistant-stubs/helpers/data_entry_flow.pyi +1 -1
  222. homeassistant-stubs/helpers/device_registry.pyi +2 -2
  223. homeassistant-stubs/helpers/entity_registry.pyi +4 -3
  224. homeassistant-stubs/helpers/json.pyi +0 -7
  225. homeassistant-stubs/helpers/llm.pyi +1 -0
  226. homeassistant-stubs/helpers/schema_config_entry_flow.pyi +2 -1
  227. homeassistant-stubs/helpers/selector.pyi +2 -1
  228. homeassistant-stubs/helpers/target.pyi +3 -2
  229. homeassistant-stubs/helpers/trigger.pyi +6 -6
  230. homeassistant-stubs/util/unit_conversion.pyi +11 -1
  231. {homeassistant_stubs-2025.8.3.dist-info → homeassistant_stubs-2025.9.0.dist-info}/METADATA +2 -2
  232. {homeassistant_stubs-2025.8.3.dist-info → homeassistant_stubs-2025.9.0.dist-info}/RECORD +234 -208
  233. homeassistant-stubs/components/linear_garage_door/__init__.pyi +0 -10
  234. homeassistant-stubs/components/linear_garage_door/config_flow.pyi +0 -25
  235. homeassistant-stubs/components/linear_garage_door/const.pyi +0 -1
  236. homeassistant-stubs/components/linear_garage_door/coordinator.pyi +0 -26
  237. homeassistant-stubs/components/linear_garage_door/cover.pyi +0 -28
  238. homeassistant-stubs/components/linear_garage_door/diagnostics.pyi +0 -10
  239. homeassistant-stubs/components/linear_garage_door/entity.pyi +0 -17
  240. homeassistant-stubs/components/linear_garage_door/light.pyi +0 -23
  241. homeassistant-stubs/components/mastodon/notify.pyi +0 -24
  242. {homeassistant_stubs-2025.8.3.dist-info → homeassistant_stubs-2025.9.0.dist-info}/WHEEL +0 -0
  243. {homeassistant_stubs-2025.8.3.dist-info → homeassistant_stubs-2025.9.0.dist-info}/licenses/LICENSE +0 -0
@@ -14,8 +14,8 @@ class ZoneCondition(Condition):
14
14
  _config: Incomplete
15
15
  def __init__(self, hass: HomeAssistant, config: ConfigType) -> None: ...
16
16
  @classmethod
17
- async def async_validate_condition_config(cls, hass: HomeAssistant, config: ConfigType) -> ConfigType: ...
18
- async def async_condition_from_config(self) -> ConditionCheckerType: ...
17
+ async def async_validate_config(cls, hass: HomeAssistant, config: ConfigType) -> ConfigType: ...
18
+ async def async_get_checker(self) -> ConditionCheckerType: ...
19
19
 
20
20
  CONDITIONS: dict[str, type[Condition]]
21
21
 
@@ -2,10 +2,10 @@ import asyncio
2
2
  from .addon import get_addon_manager as get_addon_manager
3
3
  from .api import async_register_api as async_register_api
4
4
  from .const import ATTR_ACKNOWLEDGED_FRAMES as ATTR_ACKNOWLEDGED_FRAMES, ATTR_COMMAND_CLASS as ATTR_COMMAND_CLASS, ATTR_COMMAND_CLASS_NAME as ATTR_COMMAND_CLASS_NAME, ATTR_DATA_TYPE as ATTR_DATA_TYPE, ATTR_DATA_TYPE_LABEL as ATTR_DATA_TYPE_LABEL, ATTR_DIRECTION as ATTR_DIRECTION, ATTR_ENDPOINT as ATTR_ENDPOINT, ATTR_EVENT as ATTR_EVENT, ATTR_EVENT_DATA as ATTR_EVENT_DATA, ATTR_EVENT_LABEL as ATTR_EVENT_LABEL, ATTR_EVENT_TYPE as ATTR_EVENT_TYPE, ATTR_EVENT_TYPE_LABEL as ATTR_EVENT_TYPE_LABEL, ATTR_HOME_ID as ATTR_HOME_ID, ATTR_LABEL as ATTR_LABEL, ATTR_NODE_ID as ATTR_NODE_ID, ATTR_PARAMETERS as ATTR_PARAMETERS, ATTR_PROPERTY as ATTR_PROPERTY, ATTR_PROPERTY_KEY as ATTR_PROPERTY_KEY, ATTR_PROPERTY_KEY_NAME as ATTR_PROPERTY_KEY_NAME, ATTR_PROPERTY_NAME as ATTR_PROPERTY_NAME, ATTR_STATUS as ATTR_STATUS, ATTR_TEST_NODE_ID as ATTR_TEST_NODE_ID, ATTR_TYPE as ATTR_TYPE, ATTR_VALUE as ATTR_VALUE, ATTR_VALUE_RAW as ATTR_VALUE_RAW, CONF_ADDON_DEVICE as CONF_ADDON_DEVICE, CONF_ADDON_LR_S2_ACCESS_CONTROL_KEY as CONF_ADDON_LR_S2_ACCESS_CONTROL_KEY, CONF_ADDON_LR_S2_AUTHENTICATED_KEY as CONF_ADDON_LR_S2_AUTHENTICATED_KEY, CONF_ADDON_NETWORK_KEY as CONF_ADDON_NETWORK_KEY, CONF_ADDON_S0_LEGACY_KEY as CONF_ADDON_S0_LEGACY_KEY, CONF_ADDON_S2_ACCESS_CONTROL_KEY as CONF_ADDON_S2_ACCESS_CONTROL_KEY, CONF_ADDON_S2_AUTHENTICATED_KEY as CONF_ADDON_S2_AUTHENTICATED_KEY, CONF_ADDON_S2_UNAUTHENTICATED_KEY as CONF_ADDON_S2_UNAUTHENTICATED_KEY, CONF_DATA_COLLECTION_OPTED_IN as CONF_DATA_COLLECTION_OPTED_IN, CONF_INSTALLER_MODE as CONF_INSTALLER_MODE, CONF_INTEGRATION_CREATED_ADDON as CONF_INTEGRATION_CREATED_ADDON, CONF_KEEP_OLD_DEVICES as CONF_KEEP_OLD_DEVICES, CONF_LR_S2_ACCESS_CONTROL_KEY as CONF_LR_S2_ACCESS_CONTROL_KEY, CONF_LR_S2_AUTHENTICATED_KEY as CONF_LR_S2_AUTHENTICATED_KEY, CONF_NETWORK_KEY as CONF_NETWORK_KEY, CONF_S0_LEGACY_KEY as CONF_S0_LEGACY_KEY, CONF_S2_ACCESS_CONTROL_KEY as CONF_S2_ACCESS_CONTROL_KEY, CONF_S2_AUTHENTICATED_KEY as CONF_S2_AUTHENTICATED_KEY, CONF_S2_UNAUTHENTICATED_KEY as CONF_S2_UNAUTHENTICATED_KEY, CONF_USB_PATH as CONF_USB_PATH, CONF_USE_ADDON as CONF_USE_ADDON, DOMAIN as DOMAIN, EVENT_DEVICE_ADDED_TO_REGISTRY as EVENT_DEVICE_ADDED_TO_REGISTRY, EVENT_VALUE_UPDATED as EVENT_VALUE_UPDATED, LIB_LOGGER as LIB_LOGGER, LOGGER as LOGGER, LR_ADDON_VERSION as LR_ADDON_VERSION, USER_AGENT as USER_AGENT, ZWAVE_JS_NOTIFICATION_EVENT as ZWAVE_JS_NOTIFICATION_EVENT, ZWAVE_JS_VALUE_NOTIFICATION_EVENT as ZWAVE_JS_VALUE_NOTIFICATION_EVENT, ZWAVE_JS_VALUE_UPDATED_EVENT as ZWAVE_JS_VALUE_UPDATED_EVENT
5
- from .discovery import ZwaveDiscoveryInfo as ZwaveDiscoveryInfo, async_discover_node_values as async_discover_node_values, async_discover_single_value as async_discover_single_value
5
+ from .discovery import async_discover_node_values as async_discover_node_values, async_discover_single_value as async_discover_single_value
6
6
  from .helpers import async_disable_server_logging_if_needed as async_disable_server_logging_if_needed, async_enable_server_logging_if_needed as async_enable_server_logging_if_needed, async_enable_statistics as async_enable_statistics, get_device_id as get_device_id, get_device_id_ext as get_device_id_ext, get_network_identifier_for_notification as get_network_identifier_for_notification, get_unique_id as get_unique_id, get_valueless_base_unique_id as get_valueless_base_unique_id
7
7
  from .migrate import async_migrate_discovered_value as async_migrate_discovered_value
8
- from .models import ZwaveJSConfigEntry as ZwaveJSConfigEntry, ZwaveJSData as ZwaveJSData
8
+ from .models import PlatformZwaveDiscoveryInfo as PlatformZwaveDiscoveryInfo, ZwaveJSConfigEntry as ZwaveJSConfigEntry, ZwaveJSData as ZwaveJSData
9
9
  from .services import async_setup_services as async_setup_services
10
10
  from _typeshed import Incomplete
11
11
  from homeassistant.components.hassio import AddonError as AddonError, AddonManager as AddonManager, AddonState as AddonState
@@ -71,14 +71,14 @@ class NodeEvents:
71
71
  hass: Incomplete
72
72
  def __init__(self, hass: HomeAssistant, controller_events: ControllerEvents) -> None: ...
73
73
  async def async_on_node_ready(self, node: ZwaveNode) -> None: ...
74
- async def async_handle_discovery_info(self, device: dr.DeviceEntry, disc_info: ZwaveDiscoveryInfo, value_updates_disc_info: dict[str, ZwaveDiscoveryInfo]) -> None: ...
75
- async def async_on_value_added(self, value_updates_disc_info: dict[str, ZwaveDiscoveryInfo], value: Value) -> None: ...
74
+ async def async_handle_discovery_info(self, device: dr.DeviceEntry, disc_info: PlatformZwaveDiscoveryInfo, value_updates_disc_info: dict[str, PlatformZwaveDiscoveryInfo]) -> None: ...
75
+ async def async_on_value_added(self, value_updates_disc_info: dict[str, PlatformZwaveDiscoveryInfo], value: Value) -> None: ...
76
76
  @callback
77
77
  def async_on_value_notification(self, notification: ValueNotification) -> None: ...
78
78
  @callback
79
79
  def async_on_notification(self, event: dict[str, Any]) -> None: ...
80
80
  @callback
81
- def async_on_value_updated_fire_event(self, value_updates_disc_info: dict[str, ZwaveDiscoveryInfo], value: Value) -> None: ...
81
+ def async_on_value_updated_fire_event(self, value_updates_disc_info: dict[str, PlatformZwaveDiscoveryInfo], value: Value) -> None: ...
82
82
 
83
83
  async def client_listen(hass: HomeAssistant, entry: ZwaveJSConfigEntry, client: ZwaveClient, driver_ready: asyncio.Event) -> None: ...
84
84
  async def async_unload_entry(hass: HomeAssistant, entry: ZwaveJSConfigEntry) -> bool: ...
@@ -1,14 +1,15 @@
1
1
  from .const import DOMAIN as DOMAIN
2
- from .discovery import ZwaveDiscoveryInfo as ZwaveDiscoveryInfo
3
- from .entity import ZWaveBaseEntity as ZWaveBaseEntity
4
- from .models import ZwaveJSConfigEntry as ZwaveJSConfigEntry
2
+ from .entity import NewZwaveDiscoveryInfo as NewZwaveDiscoveryInfo, ZWaveBaseEntity as ZWaveBaseEntity
3
+ from .models import NewZWaveDiscoverySchema as NewZWaveDiscoverySchema, ValueType as ValueType, ZWaveValueDiscoverySchema as ZWaveValueDiscoverySchema, ZwaveDiscoveryInfo as ZwaveDiscoveryInfo, ZwaveJSConfigEntry as ZwaveJSConfigEntry
5
4
  from _typeshed import Incomplete
6
- from dataclasses import dataclass
5
+ from dataclasses import dataclass, field
7
6
  from homeassistant.components.binary_sensor import BinarySensorDeviceClass as BinarySensorDeviceClass, BinarySensorEntity as BinarySensorEntity, BinarySensorEntityDescription as BinarySensorEntityDescription
8
- from homeassistant.const import EntityCategory as EntityCategory
7
+ from homeassistant.const import EntityCategory as EntityCategory, Platform as Platform
9
8
  from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
10
9
  from homeassistant.helpers.dispatcher import async_dispatcher_connect as async_dispatcher_connect
10
+ from homeassistant.helpers.entity import Entity as Entity
11
11
  from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
12
+ from zwave_js_server.const.command_class.notification import NotificationEvent as NotificationEvent
12
13
  from zwave_js_server.model.driver import Driver as Driver
13
14
 
14
15
  PARALLEL_UPDATES: int
@@ -31,21 +32,26 @@ NOTIFICATION_WEATHER: str
31
32
  NOTIFICATION_IRRIGATION: str
32
33
  NOTIFICATION_GAS: str
33
34
 
34
- @dataclass(frozen=True)
35
+ @dataclass(frozen=True, kw_only=True)
35
36
  class NotificationZWaveJSEntityDescription(BinarySensorEntityDescription):
36
- off_state: str = ...
37
- states: tuple[str, ...] | None = ...
37
+ not_states: set[NotificationEvent | int] = field(default_factory=Incomplete)
38
+ states: set[NotificationEvent | int] | None = ...
38
39
 
39
40
  @dataclass(frozen=True, kw_only=True)
40
41
  class PropertyZWaveJSEntityDescription(BinarySensorEntityDescription):
41
42
  on_states: tuple[str, ...]
42
43
 
44
+ @dataclass(frozen=True, kw_only=True)
45
+ class NewNotificationZWaveJSEntityDescription(BinarySensorEntityDescription):
46
+ state_key: str
47
+
48
+ MIGRATED_NOTIFICATION_TYPES: Incomplete
43
49
  NOTIFICATION_SENSOR_MAPPINGS: tuple[NotificationZWaveJSEntityDescription, ...]
44
50
  PROPERTY_SENSOR_MAPPINGS: dict[str, PropertyZWaveJSEntityDescription]
45
51
  BOOLEAN_SENSOR_MAPPINGS: dict[tuple[int, int | str], BinarySensorEntityDescription]
46
52
 
47
53
  @callback
48
- def is_valid_notification_binary_sensor(info: ZwaveDiscoveryInfo) -> bool | NotificationZWaveJSEntityDescription: ...
54
+ def is_valid_notification_binary_sensor(info: ZwaveDiscoveryInfo | NewZwaveDiscoveryInfo) -> bool | NotificationZWaveJSEntityDescription: ...
49
55
  async def async_setup_entry(hass: HomeAssistant, config_entry: ZwaveJSConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
50
56
 
51
57
  class ZWaveBooleanBinarySensor(ZWaveBaseEntity, BinarySensorEntity):
@@ -60,7 +66,7 @@ class ZWaveNotificationBinarySensor(ZWaveBaseEntity, BinarySensorEntity):
60
66
  entity_description: Incomplete
61
67
  _attr_name: Incomplete
62
68
  _attr_unique_id: Incomplete
63
- def __init__(self, config_entry: ZwaveJSConfigEntry, driver: Driver, info: ZwaveDiscoveryInfo, state_key: str, description: NotificationZWaveJSEntityDescription | None = None) -> None: ...
69
+ def __init__(self, config_entry: ZwaveJSConfigEntry, driver: Driver, info: ZwaveDiscoveryInfo | NewZwaveDiscoveryInfo, state_key: str, description: NotificationZWaveJSEntityDescription | None = None) -> None: ...
64
70
  @property
65
71
  def is_on(self) -> bool | None: ...
66
72
 
@@ -75,3 +81,5 @@ class ZWaveConfigParameterBinarySensor(ZWaveBooleanBinarySensor):
75
81
  _attr_entity_category: Incomplete
76
82
  _attr_name: Incomplete
77
83
  def __init__(self, config_entry: ZwaveJSConfigEntry, driver: Driver, info: ZwaveDiscoveryInfo) -> None: ...
84
+
85
+ DISCOVERY_SCHEMAS: list[NewZWaveDiscoverySchema]
@@ -70,7 +70,6 @@ ATTR_CURRENT_VALUE: str
70
70
  ATTR_CURRENT_VALUE_RAW: str
71
71
  ATTR_DESCRIPTION: str
72
72
  ATTR_EVENT_SOURCE: str
73
- ATTR_CONFIG_ENTRY_ID: str
74
73
  ATTR_PARTIAL_DICT_MATCH: str
75
74
  SERVICE_BULK_SET_PARTIAL_CONFIG_PARAMETERS: str
76
75
  SERVICE_CLEAR_LOCK_USERCODE: str
@@ -1,62 +1,18 @@
1
1
  from .const import COVER_POSITION_PROPERTY_KEYS as COVER_POSITION_PROPERTY_KEYS, COVER_TILT_PROPERTY_KEYS as COVER_TILT_PROPERTY_KEYS, LOGGER as LOGGER
2
2
  from .discovery_data_template import BaseDiscoverySchemaDataTemplate as BaseDiscoverySchemaDataTemplate, ConfigurableFanValueMappingDataTemplate as ConfigurableFanValueMappingDataTemplate, CoverTiltDataTemplate as CoverTiltDataTemplate, DynamicCurrentTempClimateDataTemplate as DynamicCurrentTempClimateDataTemplate, FanValueMapping as FanValueMapping, FixedFanValueMappingDataTemplate as FixedFanValueMappingDataTemplate, NumericSensorDataTemplate as NumericSensorDataTemplate
3
- from .helpers import ZwaveValueID as ZwaveValueID
3
+ from .entity import NewZwaveDiscoveryInfo as NewZwaveDiscoveryInfo
4
+ from .models import FirmwareVersionRange as FirmwareVersionRange, NewZWaveDiscoverySchema as NewZWaveDiscoverySchema, ValueType as ValueType, ZWaveValueDiscoverySchema as ZWaveValueDiscoverySchema, ZwaveDiscoveryInfo as ZwaveDiscoveryInfo, ZwaveValueID as ZwaveValueID
4
5
  from _typeshed import Incomplete
5
- from awesomeversion import AwesomeVersion
6
6
  from collections.abc import Generator
7
- from dataclasses import dataclass, field
8
- from enum import StrEnum
7
+ from dataclasses import dataclass
9
8
  from homeassistant.const import EntityCategory as EntityCategory, Platform as Platform
10
9
  from homeassistant.core import callback as callback
11
10
  from homeassistant.helpers.device_registry import DeviceEntry as DeviceEntry
12
- from typing import Any
13
11
  from zwave_js_server.model.node import Node as ZwaveNode
14
12
  from zwave_js_server.model.value import ConfigurationValue, Value as ZwaveValue
15
13
 
16
- class ValueType(StrEnum):
17
- ANY = 'any'
18
- BOOLEAN = 'boolean'
19
- NUMBER = 'number'
20
- STRING = 'string'
21
-
22
- class DataclassMustHaveAtLeastOne:
23
- def __post_init__(self) -> None: ...
24
-
25
- @dataclass
26
- class FirmwareVersionRange(DataclassMustHaveAtLeastOne):
27
- min: str | None = ...
28
- max: str | None = ...
29
- min_ver: AwesomeVersion | None = field(default=None, init=False)
30
- max_ver: AwesomeVersion | None = field(default=None, init=False)
31
- def __post_init__(self) -> None: ...
32
-
33
- @dataclass
34
- class ZwaveDiscoveryInfo:
35
- node: ZwaveNode
36
- primary_value: ZwaveValue
37
- assumed_state: bool
38
- platform: Platform
39
- platform_data: Any
40
- additional_value_ids_to_watch: set[str]
41
- platform_hint: str | None = ...
42
- platform_data_template: BaseDiscoverySchemaDataTemplate | None = ...
43
- entity_registry_enabled_default: bool = ...
44
- entity_category: EntityCategory | None = ...
45
-
46
- @dataclass
47
- class ZWaveValueDiscoverySchema(DataclassMustHaveAtLeastOne):
48
- command_class: set[int] | None = ...
49
- endpoint: set[int] | None = ...
50
- property: set[str | int] | None = ...
51
- property_name: set[str] | None = ...
52
- property_key: set[str | int | None] | None = ...
53
- not_property_key: set[str | int | None] | None = ...
54
- type: set[str] | None = ...
55
- readable: bool | None = ...
56
- writeable: bool | None = ...
57
- any_available_states: set[tuple[int, str]] | None = ...
58
- value: Any | None = ...
59
- stateful: bool | None = ...
14
+ NEW_DISCOVERY_SCHEMAS: dict[Platform, list[NewZWaveDiscoverySchema]]
15
+ SUPPORTED_PLATFORMS: Incomplete
60
16
 
61
17
  @dataclass
62
18
  class ZWaveDiscoverySchema:
@@ -88,9 +44,9 @@ WINDOW_COVERING_SLAT_CURRENT_VALUE_SCHEMA: Incomplete
88
44
  DISCOVERY_SCHEMAS: Incomplete
89
45
 
90
46
  @callback
91
- def async_discover_node_values(node: ZwaveNode, device: DeviceEntry, discovered_value_ids: dict[str, set[str]]) -> Generator[ZwaveDiscoveryInfo]: ...
47
+ def async_discover_node_values(node: ZwaveNode, device: DeviceEntry, discovered_value_ids: dict[str, set[str]]) -> Generator[ZwaveDiscoveryInfo | NewZwaveDiscoveryInfo]: ...
92
48
  @callback
93
- def async_discover_single_value(value: ZwaveValue, device: DeviceEntry, discovered_value_ids: dict[str, set[str]]) -> Generator[ZwaveDiscoveryInfo]: ...
49
+ def async_discover_single_value(value: ZwaveValue, device: DeviceEntry, discovered_value_ids: dict[str, set[str]]) -> Generator[ZwaveDiscoveryInfo | NewZwaveDiscoveryInfo]: ...
94
50
  @callback
95
51
  def async_discover_single_configuration_value(value: ConfigurationValue) -> Generator[ZwaveDiscoveryInfo]: ...
96
52
  @callback
@@ -1,5 +1,5 @@
1
1
  from .const import ENTITY_DESC_KEY_BATTERY_LEVEL as ENTITY_DESC_KEY_BATTERY_LEVEL, ENTITY_DESC_KEY_BATTERY_LIST_STATE as ENTITY_DESC_KEY_BATTERY_LIST_STATE, ENTITY_DESC_KEY_BATTERY_MAXIMUM_CAPACITY as ENTITY_DESC_KEY_BATTERY_MAXIMUM_CAPACITY, ENTITY_DESC_KEY_BATTERY_TEMPERATURE as ENTITY_DESC_KEY_BATTERY_TEMPERATURE, ENTITY_DESC_KEY_CO as ENTITY_DESC_KEY_CO, ENTITY_DESC_KEY_CO2 as ENTITY_DESC_KEY_CO2, ENTITY_DESC_KEY_CURRENT as ENTITY_DESC_KEY_CURRENT, ENTITY_DESC_KEY_ENERGY_MEASUREMENT as ENTITY_DESC_KEY_ENERGY_MEASUREMENT, ENTITY_DESC_KEY_ENERGY_PRODUCTION_POWER as ENTITY_DESC_KEY_ENERGY_PRODUCTION_POWER, ENTITY_DESC_KEY_ENERGY_PRODUCTION_TIME as ENTITY_DESC_KEY_ENERGY_PRODUCTION_TIME, ENTITY_DESC_KEY_ENERGY_PRODUCTION_TODAY as ENTITY_DESC_KEY_ENERGY_PRODUCTION_TODAY, ENTITY_DESC_KEY_ENERGY_PRODUCTION_TOTAL as ENTITY_DESC_KEY_ENERGY_PRODUCTION_TOTAL, ENTITY_DESC_KEY_ENERGY_TOTAL_INCREASING as ENTITY_DESC_KEY_ENERGY_TOTAL_INCREASING, ENTITY_DESC_KEY_HUMIDITY as ENTITY_DESC_KEY_HUMIDITY, ENTITY_DESC_KEY_ILLUMINANCE as ENTITY_DESC_KEY_ILLUMINANCE, ENTITY_DESC_KEY_MEASUREMENT as ENTITY_DESC_KEY_MEASUREMENT, ENTITY_DESC_KEY_POWER as ENTITY_DESC_KEY_POWER, ENTITY_DESC_KEY_POWER_FACTOR as ENTITY_DESC_KEY_POWER_FACTOR, ENTITY_DESC_KEY_PRESSURE as ENTITY_DESC_KEY_PRESSURE, ENTITY_DESC_KEY_SIGNAL_STRENGTH as ENTITY_DESC_KEY_SIGNAL_STRENGTH, ENTITY_DESC_KEY_TARGET_TEMPERATURE as ENTITY_DESC_KEY_TARGET_TEMPERATURE, ENTITY_DESC_KEY_TEMPERATURE as ENTITY_DESC_KEY_TEMPERATURE, ENTITY_DESC_KEY_TOTAL_INCREASING as ENTITY_DESC_KEY_TOTAL_INCREASING, ENTITY_DESC_KEY_UV_INDEX as ENTITY_DESC_KEY_UV_INDEX, ENTITY_DESC_KEY_VOLTAGE as ENTITY_DESC_KEY_VOLTAGE
2
- from .helpers import ZwaveValueID as ZwaveValueID
2
+ from .models import BaseDiscoverySchemaDataTemplate as BaseDiscoverySchemaDataTemplate, ZwaveValueID as ZwaveValueID
3
3
  from _typeshed import Incomplete
4
4
  from collections.abc import Iterable, Mapping
5
5
  from dataclasses import dataclass, field
@@ -9,7 +9,6 @@ from typing import Any
9
9
  from zwave_js_server.const.command_class.energy_production import EnergyProductionParameter, EnergyProductionScaleType as EnergyProductionScaleType
10
10
  from zwave_js_server.const.command_class.meter import MeterScaleType as MeterScaleType
11
11
  from zwave_js_server.const.command_class.multilevel_sensor import MultilevelSensorScaleType as MultilevelSensorScaleType, MultilevelSensorType
12
- from zwave_js_server.model.node import Node as ZwaveNode
13
12
  from zwave_js_server.model.value import ConfigurationValue as ZwaveConfigurationValue, Value as ZwaveValue
14
13
 
15
14
  ENERGY_PRODUCTION_DEVICE_CLASS_MAP: dict[str, list[EnergyProductionParameter]]
@@ -20,15 +19,6 @@ METER_UNIT_MAP: dict[str, list[MeterScaleType]]
20
19
  MULTILEVEL_SENSOR_UNIT_MAP: dict[str, list[MultilevelSensorScaleType]]
21
20
  _LOGGER: Incomplete
22
21
 
23
- @dataclass
24
- class BaseDiscoverySchemaDataTemplate:
25
- static_data: Any | None = ...
26
- def resolve_data(self, value: ZwaveValue) -> Any: ...
27
- def values_to_watch(self, resolved_data: Any) -> Iterable[ZwaveValue | None]: ...
28
- def value_ids_to_watch(self, resolved_data: Any) -> set[str]: ...
29
- @staticmethod
30
- def _get_value_from_id(node: ZwaveNode, value_id_obj: ZwaveValueID) -> ZwaveValue | ZwaveConfigurationValue | None: ...
31
-
32
22
  @dataclass
33
23
  class DynamicCurrentTempClimateDataTemplate(BaseDiscoverySchemaDataTemplate):
34
24
  lookup_table: dict[str | int, ZwaveValueID] = field(default_factory=dict)
@@ -1,14 +1,16 @@
1
1
  from .const import DOMAIN as DOMAIN, EVENT_VALUE_UPDATED as EVENT_VALUE_UPDATED, LOGGER as LOGGER
2
- from .discovery import ZwaveDiscoveryInfo as ZwaveDiscoveryInfo
2
+ from .discovery_data_template import BaseDiscoverySchemaDataTemplate as BaseDiscoverySchemaDataTemplate
3
3
  from .helpers import get_device_id as get_device_id, get_unique_id as get_unique_id, get_valueless_base_unique_id as get_valueless_base_unique_id
4
+ from .models import PlatformZwaveDiscoveryInfo as PlatformZwaveDiscoveryInfo, ZwaveDiscoveryInfo as ZwaveDiscoveryInfo
4
5
  from _typeshed import Incomplete
5
6
  from collections.abc import Sequence
7
+ from dataclasses import dataclass
6
8
  from homeassistant.config_entries import ConfigEntry as ConfigEntry
7
9
  from homeassistant.core import callback as callback
8
10
  from homeassistant.exceptions import HomeAssistantError as HomeAssistantError
9
11
  from homeassistant.helpers.device_registry import DeviceInfo as DeviceInfo
10
12
  from homeassistant.helpers.dispatcher import async_dispatcher_connect as async_dispatcher_connect
11
- from homeassistant.helpers.entity import Entity as Entity
13
+ from homeassistant.helpers.entity import Entity as Entity, EntityDescription as EntityDescription
12
14
  from homeassistant.helpers.typing import UNDEFINED as UNDEFINED
13
15
  from typing import Any
14
16
  from zwave_js_server.model.driver import Driver as Driver
@@ -16,6 +18,13 @@ from zwave_js_server.model.value import SetValueResult as SetValueResult, Value
16
18
 
17
19
  EVENT_VALUE_REMOVED: str
18
20
 
21
+ @dataclass(kw_only=True)
22
+ class NewZwaveDiscoveryInfo(PlatformZwaveDiscoveryInfo):
23
+ entity_class: type[ZWaveBaseEntity]
24
+ entity_description: EntityDescription
25
+ platform_data: Any = ...
26
+ platform_data_template: BaseDiscoverySchemaDataTemplate | None = ...
27
+
19
28
  class ZWaveBaseEntity(Entity):
20
29
  _attr_should_poll: bool
21
30
  _attr_has_entity_name: bool
@@ -25,11 +34,12 @@ class ZWaveBaseEntity(Entity):
25
34
  watched_value_ids: Incomplete
26
35
  _attr_name: Incomplete
27
36
  _attr_unique_id: Incomplete
28
- _attr_entity_registry_enabled_default: bool
37
+ entity_description: Incomplete
38
+ _attr_entity_registry_enabled_default: Incomplete
29
39
  _attr_entity_category: Incomplete
30
- _attr_assumed_state: bool
40
+ _attr_assumed_state: Incomplete
31
41
  _attr_device_info: Incomplete
32
- def __init__(self, config_entry: ConfigEntry, driver: Driver, info: ZwaveDiscoveryInfo) -> None: ...
42
+ def __init__(self, config_entry: ConfigEntry, driver: Driver, info: ZwaveDiscoveryInfo | NewZwaveDiscoveryInfo) -> None: ...
33
43
  @callback
34
44
  def on_value_update(self) -> None: ...
35
45
  async def _async_poll_value(self, value_or_id: str | ZwaveValue) -> None: ...
@@ -23,13 +23,6 @@ from zwave_js_server.version import VersionInfo as VersionInfo
23
23
  DRIVER_READY_EVENT_TIMEOUT: int
24
24
  SERVER_VERSION_TIMEOUT: int
25
25
 
26
- @dataclass
27
- class ZwaveValueID:
28
- property_: str | int
29
- command_class: int
30
- endpoint: int | None = ...
31
- property_key: str | int | None = ...
32
-
33
26
  @dataclass
34
27
  class ZwaveValueMatcher:
35
28
  property_: str | int | None = ...
@@ -1,6 +1,6 @@
1
1
  from .const import DOMAIN as DOMAIN
2
- from .discovery import ZwaveDiscoveryInfo as ZwaveDiscoveryInfo
3
2
  from .helpers import get_unique_id as get_unique_id, get_valueless_base_unique_id as get_valueless_base_unique_id
3
+ from .models import PlatformZwaveDiscoveryInfo as PlatformZwaveDiscoveryInfo
4
4
  from _typeshed import Incomplete
5
5
  from dataclasses import dataclass
6
6
  from homeassistant.const import Platform as Platform, STATE_UNAVAILABLE as STATE_UNAVAILABLE
@@ -29,7 +29,7 @@ def async_migrate_old_entity(hass: HomeAssistant, ent_reg: er.EntityRegistry, re
29
29
  @callback
30
30
  def async_migrate_unique_id(ent_reg: er.EntityRegistry, platform: Platform, old_unique_id: str, new_unique_id: str) -> None: ...
31
31
  @callback
32
- def async_migrate_discovered_value(hass: HomeAssistant, ent_reg: er.EntityRegistry, registered_unique_ids: set[str], device: dr.DeviceEntry, driver: Driver, disc_info: ZwaveDiscoveryInfo) -> None: ...
32
+ def async_migrate_discovered_value(hass: HomeAssistant, ent_reg: er.EntityRegistry, registered_unique_ids: set[str], device: dr.DeviceEntry, driver: Driver, disc_info: PlatformZwaveDiscoveryInfo) -> None: ...
33
33
  @callback
34
34
  def async_migrate_statistics_sensors(hass: HomeAssistant, driver: Driver, node: Node, key_map: dict[str, str]) -> None: ...
35
35
  @callback
@@ -1,8 +1,16 @@
1
1
  from . import DriverEvents as DriverEvents
2
- from dataclasses import dataclass
2
+ from awesomeversion import AwesomeVersion
3
+ from collections.abc import Iterable
4
+ from dataclasses import dataclass, field
5
+ from enum import StrEnum
3
6
  from homeassistant.config_entries import ConfigEntry as ConfigEntry
7
+ from homeassistant.const import EntityCategory as EntityCategory, Platform as Platform
8
+ from homeassistant.helpers.entity import EntityDescription as EntityDescription
9
+ from typing import Any
4
10
  from zwave_js_server.client import Client as ZwaveClient
5
11
  from zwave_js_server.const import LogLevel as LogLevel
12
+ from zwave_js_server.model.node import Node as ZwaveNode
13
+ from zwave_js_server.model.value import ConfigurationValue as ZwaveConfigurationValue, Value as ZwaveValue
6
14
 
7
15
  @dataclass
8
16
  class ZwaveJSData:
@@ -10,3 +18,89 @@ class ZwaveJSData:
10
18
  driver_events: DriverEvents
11
19
  old_server_log_level: LogLevel | None = ...
12
20
  type ZwaveJSConfigEntry = ConfigEntry[ZwaveJSData]
21
+
22
+ @dataclass
23
+ class ZwaveValueID:
24
+ property_: str | int
25
+ command_class: int
26
+ endpoint: int | None = ...
27
+ property_key: str | int | None = ...
28
+
29
+ class ValueType(StrEnum):
30
+ ANY = 'any'
31
+ BOOLEAN = 'boolean'
32
+ NUMBER = 'number'
33
+ STRING = 'string'
34
+
35
+ class DataclassMustHaveAtLeastOne:
36
+ def __post_init__(self) -> None: ...
37
+
38
+ @dataclass
39
+ class FirmwareVersionRange(DataclassMustHaveAtLeastOne):
40
+ min: str | None = ...
41
+ max: str | None = ...
42
+ min_ver: AwesomeVersion | None = field(default=None, init=False)
43
+ max_ver: AwesomeVersion | None = field(default=None, init=False)
44
+ def __post_init__(self) -> None: ...
45
+
46
+ @dataclass
47
+ class PlatformZwaveDiscoveryInfo:
48
+ node: ZwaveNode
49
+ primary_value: ZwaveValue
50
+ assumed_state: bool
51
+ platform: Platform
52
+ additional_value_ids_to_watch: set[str]
53
+
54
+ @dataclass
55
+ class ZwaveDiscoveryInfo(PlatformZwaveDiscoveryInfo):
56
+ platform_data: Any = ...
57
+ platform_data_template: BaseDiscoverySchemaDataTemplate | None = ...
58
+ platform_hint: str | None = ...
59
+ entity_registry_enabled_default: bool = ...
60
+ entity_category: EntityCategory | None = ...
61
+
62
+ @dataclass
63
+ class ZWaveValueDiscoverySchema(DataclassMustHaveAtLeastOne):
64
+ command_class: set[int] | None = ...
65
+ endpoint: set[int] | None = ...
66
+ property: set[str | int] | None = ...
67
+ property_name: set[str] | None = ...
68
+ property_key: set[str | int | None] | None = ...
69
+ not_property_key: set[str | int | None] | None = ...
70
+ type: set[str] | None = ...
71
+ readable: bool | None = ...
72
+ writeable: bool | None = ...
73
+ any_available_states: set[tuple[int, str]] | None = ...
74
+ any_available_states_keys: set[int] | None = ...
75
+ any_available_cc_specific: set[tuple[Any, Any]] | None = ...
76
+ value: Any | None = ...
77
+ stateful: bool | None = ...
78
+
79
+ @dataclass
80
+ class NewZWaveDiscoverySchema:
81
+ platform: Platform
82
+ entity_description: EntityDescription
83
+ entity_class: type
84
+ primary_value: ZWaveValueDiscoverySchema
85
+ data_template: BaseDiscoverySchemaDataTemplate | None = ...
86
+ manufacturer_id: set[int] | None = ...
87
+ product_id: set[int] | None = ...
88
+ product_type: set[int] | None = ...
89
+ firmware_version_range: FirmwareVersionRange | None = ...
90
+ firmware_version: set[str] | None = ...
91
+ device_class_basic: set[str | int] | None = ...
92
+ device_class_generic: set[str | int] | None = ...
93
+ device_class_specific: set[str | int] | None = ...
94
+ required_values: list[ZWaveValueDiscoverySchema] | None = ...
95
+ absent_values: list[ZWaveValueDiscoverySchema] | None = ...
96
+ allow_multi: bool = ...
97
+ assumed_state: bool = ...
98
+
99
+ @dataclass
100
+ class BaseDiscoverySchemaDataTemplate:
101
+ static_data: Any | None = ...
102
+ def resolve_data(self, value: ZwaveValue) -> Any: ...
103
+ def values_to_watch(self, resolved_data: Any) -> Iterable[ZwaveValue | None]: ...
104
+ def value_ids_to_watch(self, resolved_data: Any) -> set[str]: ...
105
+ @staticmethod
106
+ def _get_value_from_id(node: ZwaveNode, value_id_obj: ZwaveValueID) -> ZwaveValue | ZwaveConfigurationValue | None: ...
@@ -1,15 +1,16 @@
1
- from ..const import ATTR_CONFIG_ENTRY_ID as ATTR_CONFIG_ENTRY_ID, ATTR_EVENT as ATTR_EVENT, ATTR_EVENT_DATA as ATTR_EVENT_DATA, ATTR_EVENT_SOURCE as ATTR_EVENT_SOURCE, ATTR_NODE_ID as ATTR_NODE_ID, ATTR_PARTIAL_DICT_MATCH as ATTR_PARTIAL_DICT_MATCH, DOMAIN as DOMAIN
1
+ from ..const import ATTR_EVENT as ATTR_EVENT, ATTR_EVENT_DATA as ATTR_EVENT_DATA, ATTR_EVENT_SOURCE as ATTR_EVENT_SOURCE, ATTR_NODE_ID as ATTR_NODE_ID, ATTR_PARTIAL_DICT_MATCH as ATTR_PARTIAL_DICT_MATCH, DOMAIN as DOMAIN
2
2
  from ..helpers import async_get_nodes_from_targets as async_get_nodes_from_targets, get_device_id as get_device_id, get_home_and_node_id_from_device_entry as get_home_and_node_id_from_device_entry
3
3
  from .trigger_helpers import async_bypass_dynamic_config_validation as async_bypass_dynamic_config_validation
4
4
  from _typeshed import Incomplete
5
5
  from collections.abc import Callable as Callable
6
- from homeassistant.const import ATTR_DEVICE_ID as ATTR_DEVICE_ID, ATTR_ENTITY_ID as ATTR_ENTITY_ID, CONF_PLATFORM as CONF_PLATFORM
6
+ from homeassistant.const import ATTR_CONFIG_ENTRY_ID as ATTR_CONFIG_ENTRY_ID, ATTR_DEVICE_ID as ATTR_DEVICE_ID, ATTR_ENTITY_ID as ATTR_ENTITY_ID, CONF_PLATFORM as CONF_PLATFORM
7
7
  from homeassistant.core import CALLBACK_TYPE as CALLBACK_TYPE, HassJob as HassJob, HomeAssistant as HomeAssistant, callback as callback
8
8
  from homeassistant.helpers.dispatcher import async_dispatcher_connect as async_dispatcher_connect
9
9
  from homeassistant.helpers.trigger import Trigger as Trigger, TriggerActionType as TriggerActionType, TriggerInfo as TriggerInfo
10
10
  from homeassistant.helpers.typing import ConfigType as ConfigType
11
11
  from zwave_js_server.model.driver import Driver as Driver
12
12
 
13
+ RELATIVE_PLATFORM_TYPE: Incomplete
13
14
  PLATFORM_TYPE: Incomplete
14
15
 
15
16
  def validate_non_node_event_source(obj: dict) -> dict: ...
@@ -26,5 +27,5 @@ class EventTrigger(Trigger):
26
27
  _hass: Incomplete
27
28
  def __init__(self, hass: HomeAssistant, config: ConfigType) -> None: ...
28
29
  @classmethod
29
- async def async_validate_trigger_config(cls, hass: HomeAssistant, config: ConfigType) -> ConfigType: ...
30
- async def async_attach_trigger(self, action: TriggerActionType, trigger_info: TriggerInfo) -> CALLBACK_TYPE: ...
30
+ async def async_validate_config(cls, hass: HomeAssistant, config: ConfigType) -> ConfigType: ...
31
+ async def async_attach(self, action: TriggerActionType, trigger_info: TriggerInfo) -> CALLBACK_TYPE: ...
@@ -1,6 +1,6 @@
1
- from ..const import ATTR_CONFIG_ENTRY_ID as ATTR_CONFIG_ENTRY_ID, DOMAIN as DOMAIN
1
+ from ..const import DOMAIN as DOMAIN
2
2
  from homeassistant.config_entries import ConfigEntryState as ConfigEntryState
3
- from homeassistant.const import ATTR_DEVICE_ID as ATTR_DEVICE_ID, ATTR_ENTITY_ID as ATTR_ENTITY_ID
3
+ from homeassistant.const import ATTR_CONFIG_ENTRY_ID as ATTR_CONFIG_ENTRY_ID, ATTR_DEVICE_ID as ATTR_DEVICE_ID, ATTR_ENTITY_ID as ATTR_ENTITY_ID
4
4
  from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
5
5
  from homeassistant.helpers.typing import ConfigType as ConfigType
6
6
 
@@ -12,6 +12,7 @@ from homeassistant.helpers.typing import ConfigType as ConfigType
12
12
  from zwave_js_server.model.driver import Driver as Driver
13
13
  from zwave_js_server.model.value import Value as Value
14
14
 
15
+ RELATIVE_PLATFORM_TYPE: Incomplete
15
16
  PLATFORM_TYPE: Incomplete
16
17
  ATTR_FROM: str
17
18
  ATTR_TO: str
@@ -25,5 +26,5 @@ class ValueUpdatedTrigger(Trigger):
25
26
  _hass: Incomplete
26
27
  def __init__(self, hass: HomeAssistant, config: ConfigType) -> None: ...
27
28
  @classmethod
28
- async def async_validate_trigger_config(cls, hass: HomeAssistant, config: ConfigType) -> ConfigType: ...
29
- async def async_attach_trigger(self, action: TriggerActionType, trigger_info: TriggerInfo) -> CALLBACK_TYPE: ...
29
+ async def async_validate_config(cls, hass: HomeAssistant, config: ConfigType) -> ConfigType: ...
30
+ async def async_attach(self, action: TriggerActionType, trigger_info: TriggerInfo) -> CALLBACK_TYPE: ...
@@ -51,7 +51,6 @@ class ZWaveFirmwareUpdateEntity(UpdateEntity):
51
51
  _attr_has_entity_name: bool
52
52
  _attr_should_poll: bool
53
53
  _latest_version_firmware: FirmwareUpdateInfo | None
54
- _status_unsub: Callable[[], None] | None
55
54
  _poll_unsub: Callable[[], None] | None
56
55
  _progress_unsub: Callable[[], None] | None
57
56
  _finished_unsub: Callable[[], None] | None
@@ -66,8 +65,6 @@ class ZWaveFirmwareUpdateEntity(UpdateEntity):
66
65
  def __init__(self, driver: Driver, node: ZwaveNode, delay: timedelta, entity_description: ZWaveUpdateEntityDescription) -> None: ...
67
66
  @property
68
67
  def extra_restore_state_data(self) -> ZWaveFirmwareUpdateExtraStoredData: ...
69
- @callback
70
- def _update_on_status_change(self, _: dict[str, Any]) -> None: ...
71
68
  _attr_in_progress: bool
72
69
  _attr_update_percentage: Incomplete
73
70
  @callback
@@ -129,6 +129,7 @@ class ConfigFlowContext(FlowContext, total=False):
129
129
  class ConfigFlowResult(FlowResult[ConfigFlowContext, str], total=False):
130
130
  minor_version: int
131
131
  options: Mapping[str, Any]
132
+ result: ConfigEntry
132
133
  subentries: Iterable[ConfigSubentryData]
133
134
  version: int
134
135
 
@@ -444,7 +445,11 @@ class ConfigSubentryFlow(data_entry_flow.FlowHandler[SubentryFlowContext, Subent
444
445
  @callback
445
446
  def async_create_entry(self, *, title: str | None = None, data: Mapping[str, Any], description: str | None = None, description_placeholders: Mapping[str, str] | None = None, unique_id: str | None = None) -> SubentryFlowResult: ...
446
447
  @callback
448
+ def _async_update(self, entry: ConfigEntry, subentry: ConfigSubentry, *, unique_id: str | None | UndefinedType = ..., title: str | UndefinedType = ..., data: Mapping[str, Any] | UndefinedType = ..., data_updates: Mapping[str, Any] | UndefinedType = ...) -> bool: ...
449
+ @callback
447
450
  def async_update_and_abort(self, entry: ConfigEntry, subentry: ConfigSubentry, *, unique_id: str | None | UndefinedType = ..., title: str | UndefinedType = ..., data: Mapping[str, Any] | UndefinedType = ..., data_updates: Mapping[str, Any] | UndefinedType = ...) -> SubentryFlowResult: ...
451
+ @callback
452
+ def async_update_reload_and_abort(self, entry: ConfigEntry, subentry: ConfigSubentry, *, unique_id: str | None | UndefinedType = ..., title: str | UndefinedType = ..., data: Mapping[str, Any] | UndefinedType = ..., data_updates: Mapping[str, Any] | UndefinedType = ..., reload_even_if_entry_is_unchanged: bool = True) -> SubentryFlowResult: ...
448
453
  @property
449
454
  def _entry_id(self) -> str: ...
450
455
  @property
@@ -341,6 +341,7 @@ ATTR_SERVICE_DATA: Final[str]
341
341
  ATTR_ID: Final[str]
342
342
  ATTR_NAME: Final[str]
343
343
  ATTR_ENTITY_ID: Final[str]
344
+ ATTR_CONFIG_ENTRY_ID: Final[str]
344
345
  ATTR_AREA_ID: Final[str]
345
346
  ATTR_DEVICE_ID: Final[str]
346
347
  ATTR_FLOOR_ID: Final[str]
@@ -392,6 +393,7 @@ ATTR_TEMPERATURE: Final[str]
392
393
  ATTR_PERSONS: Final[str]
393
394
 
394
395
  class UnitOfApparentPower(StrEnum):
396
+ MILLIVOLT_AMPERE = 'mVA'
395
397
  VOLT_AMPERE = 'VA'
396
398
 
397
399
  class UnitOfPower(StrEnum):
@@ -404,6 +406,7 @@ class UnitOfPower(StrEnum):
404
406
  BTU_PER_HOUR = 'BTU/h'
405
407
 
406
408
  class UnitOfReactivePower(StrEnum):
409
+ MILLIVOLT_AMPERE_REACTIVE = 'mvar'
407
410
  VOLT_AMPERE_REACTIVE = 'var'
408
411
  KILO_VOLT_AMPERE_REACTIVE = 'kvar'
409
412
 
@@ -440,7 +443,7 @@ class UnitOfElectricCurrent(StrEnum):
440
443
  AMPERE = 'A'
441
444
 
442
445
  class UnitOfElectricPotential(StrEnum):
443
- MICROVOLT = 'µV'
446
+ MICROVOLT = 'μV'
444
447
  MILLIVOLT = 'mV'
445
448
  VOLT = 'V'
446
449
  KILOVOLT = 'kV'
@@ -510,6 +513,7 @@ class UnitOfVolume(StrEnum):
510
513
 
511
514
  class UnitOfVolumeFlowRate(StrEnum):
512
515
  CUBIC_METERS_PER_HOUR = 'm³/h'
516
+ CUBIC_METERS_PER_MINUTE = 'm³/min'
513
517
  CUBIC_METERS_PER_SECOND = 'm³/s'
514
518
  CUBIC_FEET_PER_MINUTE = 'ft³/min'
515
519
  LITERS_PER_HOUR = 'L/h'
@@ -536,17 +540,17 @@ class UnitOfMass(StrEnum):
536
540
  GRAMS = 'g'
537
541
  KILOGRAMS = 'kg'
538
542
  MILLIGRAMS = 'mg'
539
- MICROGRAMS = 'µg'
543
+ MICROGRAMS = 'μg'
540
544
  OUNCES = 'oz'
541
545
  POUNDS = 'lb'
542
546
  STONES = 'st'
543
547
 
544
548
  class UnitOfConductivity(StrEnum, deprecated={'SIEMENS': ('UnitOfConductivity.SIEMENS_PER_CM', '2025.11.0'), 'MICROSIEMENS': ('UnitOfConductivity.MICROSIEMENS_PER_CM', '2025.11.0'), 'MILLISIEMENS': ('UnitOfConductivity.MILLISIEMENS_PER_CM', '2025.11.0')}, metaclass=EnumWithDeprecatedMembers):
545
549
  SIEMENS_PER_CM = 'S/cm'
546
- MICROSIEMENS_PER_CM = 'µS/cm'
550
+ MICROSIEMENS_PER_CM = 'μS/cm'
547
551
  MILLISIEMENS_PER_CM = 'mS/cm'
548
552
  SIEMENS = 'S/cm'
549
- MICROSIEMENS = 'µS/cm'
553
+ MICROSIEMENS = 'μS/cm'
550
554
  MILLISIEMENS = 'mS/cm'
551
555
 
552
556
  _DEPRECATED_CONDUCTIVITY: Final[Incomplete]
@@ -571,8 +575,8 @@ class UnitOfPrecipitationDepth(StrEnum):
571
575
  CENTIMETERS = 'cm'
572
576
 
573
577
  CONCENTRATION_GRAMS_PER_CUBIC_METER: Final[str]
574
- CONCENTRATION_MICROGRAMS_PER_CUBIC_METER: Final[str]
575
578
  CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER: Final[str]
579
+ CONCENTRATION_MICROGRAMS_PER_CUBIC_METER: Final[str]
576
580
  CONCENTRATION_MICROGRAMS_PER_CUBIC_FOOT: Final[str]
577
581
  CONCENTRATION_PARTS_PER_CUBIC_METER: Final[str]
578
582
  CONCENTRATION_PARTS_PER_MILLION: Final[str]
@@ -69,7 +69,6 @@ class FlowResult(TypedDict, Generic[_FlowContextT, _HandlerT], total=False):
69
69
  progress_task: asyncio.Task[Any] | None
70
70
  reason: str
71
71
  required: bool
72
- result: Any
73
72
  step_id: str
74
73
  title: str
75
74
  translation_domain: str
@@ -0,0 +1,2 @@
1
+ def get_absolute_description_key(domain: str, key: str) -> str: ...
2
+ def get_relative_description_key(domain: str, key: str) -> str: ...