homeassistant-stubs 2025.8.3__py3-none-any.whl → 2025.9.0b0__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.
Files changed (229) 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/amberelectric/const.pyi +0 -1
  17. homeassistant-stubs/components/amberelectric/services.pyi +2 -1
  18. homeassistant-stubs/components/ambient_station/entity.pyi +1 -1
  19. homeassistant-stubs/components/android_ip_webcam/coordinator.pyi +0 -1
  20. homeassistant-stubs/components/apcupsd/binary_sensor.pyi +2 -6
  21. homeassistant-stubs/components/apcupsd/entity.pyi +11 -0
  22. homeassistant-stubs/components/apcupsd/sensor.pyi +2 -6
  23. homeassistant-stubs/components/asuswrt/bridge.pyi +10 -8
  24. homeassistant-stubs/components/asuswrt/helpers.pyi +8 -0
  25. homeassistant-stubs/components/auth/login_flow.pyi +1 -1
  26. homeassistant-stubs/components/auth/mfa_setup_flow.pyi +1 -1
  27. homeassistant-stubs/components/awair/const.pyi +1 -0
  28. homeassistant-stubs/components/awair/sensor.pyi +2 -2
  29. homeassistant-stubs/components/backup/config.pyi +0 -14
  30. homeassistant-stubs/components/bayesian/__init__.pyi +6 -4
  31. homeassistant-stubs/components/bayesian/binary_sensor.pyi +6 -5
  32. homeassistant-stubs/components/bayesian/config_flow.pyi +69 -0
  33. homeassistant-stubs/components/bayesian/const.pyi +5 -0
  34. homeassistant-stubs/components/bayesian/issues.pyi +1 -1
  35. homeassistant-stubs/components/bosch_alarm/const.pyi +0 -1
  36. homeassistant-stubs/components/bosch_alarm/services.pyi +2 -1
  37. homeassistant-stubs/components/braviatv/button.pyi +1 -1
  38. homeassistant-stubs/components/braviatv/coordinator.pyi +1 -0
  39. homeassistant-stubs/components/braviatv/entity.pyi +1 -1
  40. homeassistant-stubs/components/climate/__init__.pyi +1 -1
  41. homeassistant-stubs/components/cloud/alexa_config.pyi +2 -1
  42. homeassistant-stubs/components/cloud/subscription.pyi +2 -4
  43. homeassistant-stubs/components/co2signal/coordinator.pyi +3 -3
  44. homeassistant-stubs/components/co2signal/helpers.pyi +2 -3
  45. homeassistant-stubs/components/co2signal/sensor.pyi +3 -3
  46. homeassistant-stubs/components/config/config_entries.pyi +6 -3
  47. homeassistant-stubs/components/demo/media_player.pyi +2 -0
  48. homeassistant-stubs/components/device_automation/condition.pyi +2 -2
  49. homeassistant-stubs/components/enphase_envoy/binary_sensor.pyi +29 -1
  50. homeassistant-stubs/components/enphase_envoy/sensor.pyi +30 -1
  51. homeassistant-stubs/components/esphome/manager.pyi +1 -2
  52. homeassistant-stubs/components/esphome/media_player.pyi +5 -0
  53. homeassistant-stubs/components/fan/intent.pyi +7 -0
  54. homeassistant-stubs/components/fritz/coordinator.pyi +0 -1
  55. homeassistant-stubs/components/fyta/const.pyi +4 -0
  56. homeassistant-stubs/components/fyta/sensor.pyi +11 -0
  57. homeassistant-stubs/components/glances/coordinator.pyi +0 -1
  58. homeassistant-stubs/components/group/config_flow.pyi +2 -0
  59. homeassistant-stubs/components/habitica/__init__.pyi +6 -2
  60. homeassistant-stubs/components/habitica/binary_sensor.pyi +13 -4
  61. homeassistant-stubs/components/habitica/coordinator.pyi +18 -4
  62. homeassistant-stubs/components/habitica/entity.pyi +10 -1
  63. homeassistant-stubs/components/habitica/image.pyi +19 -4
  64. homeassistant-stubs/components/habitica/sensor.pyi +27 -3
  65. homeassistant-stubs/components/habitica/util.pyi +5 -2
  66. homeassistant-stubs/components/home_connect/const.pyi +0 -7
  67. homeassistant-stubs/components/home_connect/services.pyi +1 -14
  68. homeassistant-stubs/components/homeassistant_hardware/coordinator.pyi +0 -1
  69. homeassistant-stubs/components/homee/config_flow.pyi +8 -2
  70. homeassistant-stubs/components/homee/const.pyi +3 -0
  71. homeassistant-stubs/components/homekit/accessories.pyi +1 -1
  72. homeassistant-stubs/components/homekit/const.pyi +4 -0
  73. homeassistant-stubs/components/homekit/type_switches.pyi +11 -1
  74. homeassistant-stubs/components/homekit/util.pyi +3 -2
  75. homeassistant-stubs/components/huawei_lte/__init__.pyi +2 -2
  76. homeassistant-stubs/components/huawei_lte/const.pyi +0 -1
  77. homeassistant-stubs/components/huawei_lte/notify.pyi +2 -2
  78. homeassistant-stubs/components/husqvarna_automower/button.pyi +4 -0
  79. homeassistant-stubs/components/husqvarna_automower/const.pyi +1 -0
  80. homeassistant-stubs/components/husqvarna_automower/coordinator.pyi +10 -0
  81. homeassistant-stubs/components/husqvarna_automower/event.pyi +35 -0
  82. homeassistant-stubs/components/husqvarna_automower/sensor.pyi +1 -2
  83. homeassistant-stubs/components/idasen_desk/__init__.pyi +0 -1
  84. homeassistant-stubs/components/jewish_calendar/__init__.pyi +2 -1
  85. homeassistant-stubs/components/jewish_calendar/coordinator.pyi +41 -0
  86. homeassistant-stubs/components/jewish_calendar/entity.pyi +5 -26
  87. homeassistant-stubs/components/jewish_calendar/sensor.pyi +1 -1
  88. homeassistant-stubs/components/knx/scene.pyi +5 -4
  89. homeassistant-stubs/components/knx/storage/entity_store_schema.pyi +5 -11
  90. homeassistant-stubs/components/knx/storage/knx_selector.pyi +57 -6
  91. homeassistant-stubs/components/knx/storage/serialize.pyi +10 -0
  92. homeassistant-stubs/components/knx/storage/util.pyi +2 -0
  93. homeassistant-stubs/components/knx/websocket.pyi +7 -3
  94. homeassistant-stubs/components/letpot/select.pyi +39 -0
  95. homeassistant-stubs/components/mastodon/__init__.pyi +1 -2
  96. homeassistant-stubs/components/mastodon/const.pyi +0 -1
  97. homeassistant-stubs/components/mastodon/services.pyi +2 -1
  98. homeassistant-stubs/components/matter/lock.pyi +6 -0
  99. homeassistant-stubs/components/matter/sensor.pyi +2 -1
  100. homeassistant-stubs/components/mealie/const.pyi +0 -1
  101. homeassistant-stubs/components/mealie/services.pyi +2 -2
  102. homeassistant-stubs/components/media_player/__init__.pyi +4 -0
  103. homeassistant-stubs/components/media_player/intent.pyi +13 -3
  104. homeassistant-stubs/components/met_eireann/const.pyi +1 -1
  105. homeassistant-stubs/components/met_eireann/weather.pyi +4 -0
  106. homeassistant-stubs/components/miele/const.pyi +1 -0
  107. homeassistant-stubs/components/miele/coordinator.pyi +2 -3
  108. homeassistant-stubs/components/miele/entity.pyi +2 -3
  109. homeassistant-stubs/components/miele/sensor.pyi +25 -6
  110. homeassistant-stubs/components/modbus/binary_sensor.pyi +1 -2
  111. homeassistant-stubs/components/modbus/climate.pyi +1 -2
  112. homeassistant-stubs/components/modbus/const.pyi +2 -0
  113. homeassistant-stubs/components/modbus/entity.pyi +8 -10
  114. homeassistant-stubs/components/modbus/light.pyi +0 -1
  115. homeassistant-stubs/components/modbus/modbus.pyi +9 -11
  116. homeassistant-stubs/components/modbus/sensor.pyi +1 -3
  117. homeassistant-stubs/components/mqtt/alarm_control_panel.pyi +2 -23
  118. homeassistant-stubs/components/mqtt/config_flow.pyi +8 -2
  119. homeassistant-stubs/components/mqtt/const.pyi +40 -1
  120. homeassistant-stubs/components/mqtt/lock.pyi +1 -21
  121. homeassistant-stubs/components/mqtt/number.pyi +1 -0
  122. homeassistant-stubs/components/mqtt/sensor.pyi +1 -1
  123. homeassistant-stubs/components/music_assistant/actions.pyi +2 -1
  124. homeassistant-stubs/components/music_assistant/const.pyi +0 -1
  125. homeassistant-stubs/components/number/__init__.pyi +3 -0
  126. homeassistant-stubs/components/number/const.pyi +2 -1
  127. homeassistant-stubs/components/open_router/entity.pyi +2 -2
  128. homeassistant-stubs/components/openai_conversation/entity.pyi +3 -3
  129. homeassistant-stubs/components/opower/__init__.pyi +1 -0
  130. homeassistant-stubs/components/opower/repairs.pyi +13 -0
  131. homeassistant-stubs/components/overseerr/const.pyi +0 -1
  132. homeassistant-stubs/components/overseerr/services.pyi +2 -1
  133. homeassistant-stubs/components/person/__init__.pyi +2 -1
  134. homeassistant-stubs/components/qbus/binary_sensor.pyi +43 -0
  135. homeassistant-stubs/components/qbus/climate.pyi +1 -1
  136. homeassistant-stubs/components/qbus/coordinator.pyi +4 -3
  137. homeassistant-stubs/components/qbus/cover.pyi +1 -1
  138. homeassistant-stubs/components/qbus/entity.pyi +6 -5
  139. homeassistant-stubs/components/qbus/light.pyi +1 -1
  140. homeassistant-stubs/components/qbus/scene.pyi +4 -6
  141. homeassistant-stubs/components/qbus/sensor.pyi +67 -0
  142. homeassistant-stubs/components/qbus/switch.pyi +1 -1
  143. homeassistant-stubs/components/recorder/statistics.pyi +1 -1
  144. homeassistant-stubs/components/recorder/websocket_api.pyi +1 -1
  145. homeassistant-stubs/components/rest_command/__init__.pyi +1 -1
  146. homeassistant-stubs/components/romy/coordinator.pyi +0 -1
  147. homeassistant-stubs/components/russound_rio/media_browser.pyi +8 -0
  148. homeassistant-stubs/components/russound_rio/media_player.pyi +3 -2
  149. homeassistant-stubs/components/ruuvitag_ble/sensor.pyi +2 -2
  150. homeassistant-stubs/components/scene/__init__.pyi +13 -4
  151. homeassistant-stubs/components/sensibo/select.pyi +0 -5
  152. homeassistant-stubs/components/sensor/__init__.pyi +3 -0
  153. homeassistant-stubs/components/sensor/const.pyi +3 -2
  154. homeassistant-stubs/components/sensor/recorder.pyi +1 -1
  155. homeassistant-stubs/components/sleep_as_android/__init__.pyi +16 -0
  156. homeassistant-stubs/components/sleep_as_android/config_flow.pyi +2 -0
  157. homeassistant-stubs/components/sleep_as_android/const.pyi +9 -0
  158. homeassistant-stubs/components/sleep_as_android/diagnostics.pyi +5 -0
  159. homeassistant-stubs/components/sleep_as_android/entity.pyi +20 -0
  160. homeassistant-stubs/components/sleep_as_android/event.pyi +33 -0
  161. homeassistant-stubs/components/sleep_as_android/sensor.pyi +25 -0
  162. homeassistant-stubs/components/solarlog/sensor.pyi +11 -1
  163. homeassistant-stubs/components/speedtestdotnet/coordinator.pyi +0 -1
  164. homeassistant-stubs/components/stookwijzer/const.pyi +0 -1
  165. homeassistant-stubs/components/stookwijzer/services.pyi +2 -1
  166. homeassistant-stubs/components/sun/condition.pyi +2 -2
  167. homeassistant-stubs/components/switchbot_cloud/__init__.pyi +1 -0
  168. homeassistant-stubs/components/switchbot_cloud/const.pyi +10 -0
  169. homeassistant-stubs/components/switchbot_cloud/cover.pyi +57 -0
  170. homeassistant-stubs/components/switchbot_cloud/fan.pyi +22 -1
  171. homeassistant-stubs/components/telegram_bot/__init__.pyi +2 -1
  172. homeassistant-stubs/components/telegram_bot/bot.pyi +4 -1
  173. homeassistant-stubs/components/telegram_bot/notify.pyi +21 -0
  174. homeassistant-stubs/components/unifi/switch.pyi +3 -0
  175. homeassistant-stubs/components/volvo/__init__.pyi +1 -1
  176. homeassistant-stubs/components/volvo/binary_sensor.pyi +42 -0
  177. homeassistant-stubs/components/volvo/const.pyi +1 -1
  178. homeassistant-stubs/components/volvo/coordinator.pyi +5 -0
  179. homeassistant-stubs/components/volvo/sensor.pyi +2 -2
  180. homeassistant-stubs/components/webostv/__init__.pyi +2 -2
  181. homeassistant-stubs/components/webostv/const.pyi +0 -1
  182. homeassistant-stubs/components/webostv/notify.pyi +2 -2
  183. homeassistant-stubs/components/wemo/coordinator.pyi +0 -1
  184. homeassistant-stubs/components/workday/__init__.pyi +6 -8
  185. homeassistant-stubs/components/workday/binary_sensor.pyi +9 -33
  186. homeassistant-stubs/components/workday/entity.pyi +34 -0
  187. homeassistant-stubs/components/workday/util.pyi +14 -0
  188. homeassistant-stubs/components/zone/condition.pyi +2 -2
  189. homeassistant-stubs/components/zwave_js/__init__.pyi +5 -5
  190. homeassistant-stubs/components/zwave_js/binary_sensor.pyi +17 -10
  191. homeassistant-stubs/components/zwave_js/const.pyi +0 -1
  192. homeassistant-stubs/components/zwave_js/discovery.pyi +7 -51
  193. homeassistant-stubs/components/zwave_js/discovery_data_template.pyi +1 -11
  194. homeassistant-stubs/components/zwave_js/entity.pyi +15 -5
  195. homeassistant-stubs/components/zwave_js/helpers.pyi +0 -7
  196. homeassistant-stubs/components/zwave_js/migrate.pyi +2 -2
  197. homeassistant-stubs/components/zwave_js/models.pyi +95 -1
  198. homeassistant-stubs/components/zwave_js/triggers/event.pyi +5 -4
  199. homeassistant-stubs/components/zwave_js/triggers/trigger_helpers.pyi +2 -2
  200. homeassistant-stubs/components/zwave_js/triggers/value_updated.pyi +3 -2
  201. homeassistant-stubs/components/zwave_js/update.pyi +0 -3
  202. homeassistant-stubs/config_entries.pyi +5 -0
  203. homeassistant-stubs/const.pyi +9 -5
  204. homeassistant-stubs/data_entry_flow.pyi +0 -1
  205. homeassistant-stubs/helpers/automation.pyi +2 -0
  206. homeassistant-stubs/helpers/condition.pyi +6 -6
  207. homeassistant-stubs/helpers/config_validation.pyi +3 -0
  208. homeassistant-stubs/helpers/data_entry_flow.pyi +1 -1
  209. homeassistant-stubs/helpers/device_registry.pyi +1 -1
  210. homeassistant-stubs/helpers/json.pyi +0 -7
  211. homeassistant-stubs/helpers/llm.pyi +1 -0
  212. homeassistant-stubs/helpers/schema_config_entry_flow.pyi +2 -1
  213. homeassistant-stubs/helpers/selector.pyi +2 -1
  214. homeassistant-stubs/helpers/target.pyi +3 -2
  215. homeassistant-stubs/helpers/trigger.pyi +6 -6
  216. homeassistant-stubs/util/unit_conversion.pyi +11 -1
  217. {homeassistant_stubs-2025.8.3.dist-info → homeassistant_stubs-2025.9.0b0.dist-info}/METADATA +2 -2
  218. {homeassistant_stubs-2025.8.3.dist-info → homeassistant_stubs-2025.9.0b0.dist-info}/RECORD +220 -195
  219. homeassistant-stubs/components/linear_garage_door/__init__.pyi +0 -10
  220. homeassistant-stubs/components/linear_garage_door/config_flow.pyi +0 -25
  221. homeassistant-stubs/components/linear_garage_door/const.pyi +0 -1
  222. homeassistant-stubs/components/linear_garage_door/coordinator.pyi +0 -26
  223. homeassistant-stubs/components/linear_garage_door/cover.pyi +0 -28
  224. homeassistant-stubs/components/linear_garage_door/diagnostics.pyi +0 -10
  225. homeassistant-stubs/components/linear_garage_door/entity.pyi +0 -17
  226. homeassistant-stubs/components/linear_garage_door/light.pyi +0 -23
  227. homeassistant-stubs/components/mastodon/notify.pyi +0 -24
  228. {homeassistant_stubs-2025.8.3.dist-info → homeassistant_stubs-2025.9.0b0.dist-info}/WHEEL +0 -0
  229. {homeassistant_stubs-2025.8.3.dist-info → homeassistant_stubs-2025.9.0b0.dist-info}/licenses/LICENSE +0 -0
@@ -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: ...
@@ -1,5 +1,6 @@
1
1
  import abc
2
2
  import logging
3
+ from .automation import get_absolute_description_key as get_absolute_description_key, get_relative_description_key as get_relative_description_key
3
4
  from .integration_platform import async_process_integration_platforms as async_process_integration_platforms
4
5
  from .template import Template as Template, render_complex as render_complex
5
6
  from .trace import TraceElement as TraceElement, trace_append_element as trace_append_element, trace_path as trace_path, trace_path_get as trace_path_get, trace_stack_cv as trace_stack_cv, trace_stack_pop as trace_stack_pop, trace_stack_push as trace_stack_push, trace_stack_top as trace_stack_top
@@ -15,7 +16,6 @@ from homeassistant.loader import Integration as Integration, IntegrationNotFound
15
16
  from homeassistant.util.async_ import run_callback_threadsafe as run_callback_threadsafe
16
17
  from homeassistant.util.hass_dict import HassKey as HassKey
17
18
  from homeassistant.util.yaml import load_yaml_dict as load_yaml_dict
18
- from homeassistant.util.yaml.loader import JSON_TYPE as JSON_TYPE
19
19
  from typing import Any, Protocol
20
20
 
21
21
  ASYNC_FROM_CONFIG_FORMAT: str
@@ -43,9 +43,9 @@ class Condition(abc.ABC, metaclass=abc.ABCMeta):
43
43
  def __init__(self, hass: HomeAssistant, config: ConfigType) -> None: ...
44
44
  @classmethod
45
45
  @abc.abstractmethod
46
- async def async_validate_condition_config(cls, hass: HomeAssistant, config: ConfigType) -> ConfigType: ...
46
+ async def async_validate_config(cls, hass: HomeAssistant, config: ConfigType) -> ConfigType: ...
47
47
  @abc.abstractmethod
48
- async def async_condition_from_config(self) -> ConditionCheckerType: ...
48
+ async def async_get_checker(self) -> ConditionCheckerType: ...
49
49
 
50
50
  class ConditionProtocol(Protocol):
51
51
  async def async_get_conditions(self, hass: HomeAssistant) -> dict[str, type[Condition]]: ...
@@ -57,7 +57,7 @@ def condition_trace_update_result(**kwargs: Any) -> None: ...
57
57
  @contextmanager
58
58
  def trace_condition(variables: TemplateVarsType) -> Generator[TraceElement]: ...
59
59
  def trace_condition_function(condition: ConditionCheckerType) -> ConditionCheckerType: ...
60
- async def _async_get_condition_platform(hass: HomeAssistant, config: ConfigType) -> ConditionProtocol | None: ...
60
+ async def _async_get_condition_platform(hass: HomeAssistant, condition_key: str) -> tuple[str, ConditionProtocol | None]: ...
61
61
  async def async_from_config(hass: HomeAssistant, config: ConfigType) -> ConditionCheckerType: ...
62
62
  async def async_and_from_config(hass: HomeAssistant, config: ConfigType) -> ConditionCheckerType: ...
63
63
  async def async_or_from_config(hass: HomeAssistant, config: ConfigType) -> ConditionCheckerType: ...
@@ -82,6 +82,6 @@ async def async_conditions_from_config(hass: HomeAssistant, condition_configs: l
82
82
  def async_extract_entities(config: ConfigType | Template) -> set[str]: ...
83
83
  @callback
84
84
  def async_extract_devices(config: ConfigType | Template) -> set[str]: ...
85
- def _load_conditions_file(hass: HomeAssistant, integration: Integration) -> JSON_TYPE: ...
86
- def _load_conditions_files(hass: HomeAssistant, integrations: Iterable[Integration]) -> dict[str, JSON_TYPE]: ...
85
+ def _load_conditions_file(integration: Integration) -> dict[str, Any]: ...
86
+ def _load_conditions_files(integrations: Iterable[Integration]) -> dict[str, dict[str, Any]]: ...
87
87
  async def async_get_all_descriptions(hass: HomeAssistant) -> dict[str, dict[str, Any] | None]: ...
@@ -71,6 +71,7 @@ def ensure_list[_T](value: list[_T]) -> list[_T]: ...
71
71
  @overload
72
72
  def ensure_list[_T](value: list[_T] | _T) -> list[_T]: ...
73
73
  def entity_id(value: Any) -> str: ...
74
+ def strict_entity_id(value: Any) -> str: ...
74
75
  def entity_id_or_uuid(value: Any) -> str: ...
75
76
  def _entity_ids(value: str | list, allow_uuid: bool) -> list[str]: ...
76
77
  def entity_ids(value: str | list) -> list[str]: ...
@@ -108,6 +109,7 @@ positive_time_period: Incomplete
108
109
  def remove_falsy[_T](value: list[_T]) -> list[_T]: ...
109
110
  def service(value: Any) -> str: ...
110
111
  def slug(value: Any) -> str: ...
112
+ def underscore_slug(value: Any) -> str: ...
111
113
  def schema_with_slug_keys(value_schema: dict | Callable, *, slug_validator: Callable[[Any], str] = ...) -> Callable: ...
112
114
  def slugify(value: Any) -> str: ...
113
115
  def string(value: Any) -> str: ...
@@ -158,6 +160,7 @@ def platform_only_config_schema(domain: str) -> Callable[[dict], dict]: ...
158
160
 
159
161
  PLATFORM_SCHEMA: Incomplete
160
162
  PLATFORM_SCHEMA_BASE: Incomplete
163
+ TARGET_FIELDS: VolDictType
161
164
  ENTITY_SERVICE_FIELDS: VolDictType
162
165
  TARGET_SERVICE_FIELDS: Incomplete
163
166
  _HAS_ENTITY_SERVICE_FIELD: Incomplete
@@ -10,7 +10,7 @@ _FlowManagerT = TypeVar('_FlowManagerT', bound=data_entry_flow.FlowManager[Any,
10
10
  class _BaseFlowManagerView(HomeAssistantView, Generic[_FlowManagerT]):
11
11
  _flow_mgr: Incomplete
12
12
  def __init__(self, flow_mgr: _FlowManagerT) -> None: ...
13
- def _prepare_result_json(self, result: data_entry_flow.FlowResult) -> data_entry_flow.FlowResult: ...
13
+ def _prepare_result_json(self, result: data_entry_flow.FlowResult) -> dict[str, Any]: ...
14
14
 
15
15
  class FlowManagerIndexView(_BaseFlowManagerView[_FlowManagerT]):
16
16
  async def post(self, request: web.Request, data: dict[str, Any]) -> web.Response: ...
@@ -165,7 +165,7 @@ class DeletedDeviceEntry:
165
165
  name_by_user: str | None
166
166
  orphaned_timestamp: float | None
167
167
  _cache: dict[str, Any]
168
- def to_device_entry(self, config_entry_id: str, config_subentry_id: str | None, connections: set[tuple[str, str]], identifiers: set[tuple[str, str]]) -> DeviceEntry: ...
168
+ def to_device_entry(self, config_entry: ConfigEntry, config_subentry_id: str | None, connections: set[tuple[str, str]], identifiers: set[tuple[str, str]]) -> DeviceEntry: ...
169
169
  @under_cached_property
170
170
  def as_storage_fragment(self) -> json_fragment: ...
171
171
  def __init__(self, area_id, config_entries, config_entries_subentries, connections, created_at, disabled_by, id, identifiers, labels, modified_at, name_by_user, orphaned_timestamp, cache) -> None: ...
@@ -1,18 +1,11 @@
1
1
  import json
2
2
  import orjson
3
- from .deprecation import DeprecatedConstant as DeprecatedConstant, all_with_deprecated_constants as all_with_deprecated_constants, check_if_deprecated_constant as check_if_deprecated_constant, deprecated_function as deprecated_function, dir_with_deprecated_constants as dir_with_deprecated_constants
4
3
  from _typeshed import Incomplete
5
4
  from collections.abc import Callable as Callable
6
5
  from homeassistant.util.file import write_utf8_file as write_utf8_file, write_utf8_file_atomic as write_utf8_file_atomic
7
6
  from homeassistant.util.json import SerializationError as SerializationError, format_unserializable_data as format_unserializable_data
8
7
  from typing import Any, Final
9
8
 
10
- _DEPRECATED_JSON_DECODE_EXCEPTIONS: Incomplete
11
- _DEPRECATED_JSON_ENCODE_EXCEPTIONS: Incomplete
12
- json_loads: Incomplete
13
- __getattr__: Incomplete
14
- __dir__: Incomplete
15
- __all__: Incomplete
16
9
  _LOGGER: Incomplete
17
10
 
18
11
  class JSONEncoder(json.JSONEncoder):
@@ -50,6 +50,7 @@ class ToolInput:
50
50
  tool_name: str
51
51
  tool_args: dict[str, Any]
52
52
  id: str = dc_field(default_factory=Incomplete)
53
+ external: bool = ...
53
54
 
54
55
  class Tool(metaclass=abc.ABCMeta):
55
56
  name: str
@@ -26,7 +26,7 @@ class SchemaFlowFormStep(SchemaFlowStep):
26
26
 
27
27
  @dataclass(slots=True)
28
28
  class SchemaFlowMenuStep(SchemaFlowStep):
29
- options: Container[str]
29
+ options: Container[str] | Callable[[SchemaCommonFlowHandler], Coroutine[Any, Any, Container[str]]]
30
30
 
31
31
  class SchemaCommonFlowHandler:
32
32
  _flow: Incomplete
@@ -41,6 +41,7 @@ class SchemaCommonFlowHandler:
41
41
  @property
42
42
  def flow_state(self) -> dict[str, Any]: ...
43
43
  async def async_step(self, step_id: str, user_input: dict[str, Any] | None = None) -> ConfigFlowResult: ...
44
+ async def _get_options(self, form_step: SchemaFlowMenuStep) -> Container[str]: ...
44
45
  async def _get_schema(self, form_step: SchemaFlowFormStep) -> vol.Schema | None: ...
45
46
  async def _async_form_step(self, step_id: str, user_input: dict[str, Any] | None = None) -> ConfigFlowResult: ...
46
47
  def _update_and_remove_omitted_optional_keys(self, values: dict[str, Any], user_input: dict[str, Any], data_schema: vol.Schema | None) -> None: ...
@@ -389,12 +389,13 @@ class SelectSelector(Selector[SelectSelectorConfig]):
389
389
  class StateSelectorConfig(BaseSelectorConfig, total=False):
390
390
  entity_id: str
391
391
  hide_states: list[str]
392
+ multiple: bool
392
393
 
393
394
  class StateSelector(Selector[StateSelectorConfig]):
394
395
  selector_type: str
395
396
  CONFIG_SCHEMA: Incomplete
396
397
  def __init__(self, config: StateSelectorConfig) -> None: ...
397
- def __call__(self, data: Any) -> str: ...
398
+ def __call__(self, data: Any) -> str | list[str]: ...
398
399
 
399
400
  class StatisticSelectorConfig(BaseSelectorConfig, total=False):
400
401
  multiple: bool