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
@@ -0,0 +1,43 @@
1
+ from .const import DOMAIN as DOMAIN
2
+ from .coordinator import QbusConfigEntry as QbusConfigEntry
3
+ from .entity import QbusEntity as QbusEntity, create_device_identifier as create_device_identifier, create_unique_id as create_unique_id, determine_new_outputs as determine_new_outputs
4
+ from _typeshed import Incomplete
5
+ from dataclasses import dataclass
6
+ from homeassistant.components.binary_sensor import BinarySensorDeviceClass as BinarySensorDeviceClass, BinarySensorEntity as BinarySensorEntity, BinarySensorEntityDescription as BinarySensorEntityDescription
7
+ from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
8
+ from homeassistant.helpers.device_registry import DeviceInfo as DeviceInfo
9
+ from homeassistant.helpers.dispatcher import async_dispatcher_connect as async_dispatcher_connect
10
+ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
11
+ from qbusmqttapi.discovery import QbusMqttDevice as QbusMqttDevice, QbusMqttOutput as QbusMqttOutput
12
+ from qbusmqttapi.state import QbusMqttDeviceState as QbusMqttDeviceState, QbusMqttWeatherState
13
+
14
+ PARALLEL_UPDATES: int
15
+
16
+ @dataclass(frozen=True, kw_only=True)
17
+ class QbusWeatherDescription(BinarySensorEntityDescription):
18
+ property: str
19
+
20
+ _WEATHER_DESCRIPTIONS: Incomplete
21
+
22
+ async def async_setup_entry(hass: HomeAssistant, entry: QbusConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
23
+
24
+ class QbusWeatherBinarySensor(QbusEntity, BinarySensorEntity):
25
+ _state_cls = QbusMqttWeatherState
26
+ entity_description: QbusWeatherDescription
27
+ def __init__(self, mqtt_output: QbusMqttOutput, description: QbusWeatherDescription) -> None: ...
28
+ _attr_is_on: Incomplete
29
+ async def _handle_state_received(self, state: QbusMqttWeatherState) -> None: ...
30
+
31
+ class QbusControllerConnectedBinarySensor(BinarySensorEntity):
32
+ _attr_has_entity_name: bool
33
+ _attr_name: Incomplete
34
+ _attr_should_poll: bool
35
+ _attr_device_class: Incomplete
36
+ _controller: Incomplete
37
+ _attr_unique_id: Incomplete
38
+ _attr_device_info: Incomplete
39
+ def __init__(self, controller: QbusMqttDevice) -> None: ...
40
+ async def async_added_to_hass(self) -> None: ...
41
+ _attr_is_on: Incomplete
42
+ @callback
43
+ def _state_received(self, state: QbusMqttDeviceState) -> None: ...
@@ -1,6 +1,6 @@
1
1
  from .const import DOMAIN as DOMAIN
2
2
  from .coordinator import QbusConfigEntry as QbusConfigEntry
3
- from .entity import QbusEntity as QbusEntity, add_new_outputs as add_new_outputs
3
+ from .entity import QbusEntity as QbusEntity, create_new_entities as create_new_entities
4
4
  from _typeshed import Incomplete
5
5
  from homeassistant.components.climate import ClimateEntity as ClimateEntity, ClimateEntityFeature as ClimateEntityFeature, HVACAction as HVACAction, HVACMode as HVACMode
6
6
  from homeassistant.const import ATTR_TEMPERATURE as ATTR_TEMPERATURE, UnitOfTemperature as UnitOfTemperature
@@ -5,16 +5,17 @@ from homeassistant.config_entries import ConfigEntry as ConfigEntry
5
5
  from homeassistant.const import EVENT_HOMEASSISTANT_STOP as EVENT_HOMEASSISTANT_STOP
6
6
  from homeassistant.core import CALLBACK_TYPE as CALLBACK_TYPE, Event as Event, HomeAssistant as HomeAssistant
7
7
  from homeassistant.helpers.device_registry import format_mac as format_mac
8
+ from homeassistant.helpers.dispatcher import async_dispatcher_send as async_dispatcher_send
8
9
  from homeassistant.helpers.event import async_call_later as async_call_later
9
10
  from homeassistant.helpers.update_coordinator import DataUpdateCoordinator as DataUpdateCoordinator
10
11
  from homeassistant.util.hass_dict import HassKey as HassKey
11
- from qbusmqttapi.discovery import QbusDiscovery as QbusDiscovery, QbusMqttDevice as QbusMqttDevice, QbusMqttOutput
12
+ from qbusmqttapi.discovery import QbusDiscovery as QbusDiscovery, QbusMqttDevice
12
13
 
13
14
  _LOGGER: Incomplete
14
15
  type QbusConfigEntry = ConfigEntry[QbusControllerCoordinator]
15
16
  QBUS_KEY: HassKey[QbusConfigCoordinator]
16
17
 
17
- class QbusControllerCoordinator(DataUpdateCoordinator[list[QbusMqttOutput]]):
18
+ class QbusControllerCoordinator(DataUpdateCoordinator[QbusMqttDevice | None]):
18
19
  _STATE_REQUEST_DELAY: int
19
20
  config_entry: QbusConfigEntry
20
21
  _message_factory: Incomplete
@@ -23,7 +24,7 @@ class QbusControllerCoordinator(DataUpdateCoordinator[list[QbusMqttOutput]]):
23
24
  _subscribed_to_controller_state: bool
24
25
  _controller: QbusMqttDevice | None
25
26
  def __init__(self, hass: HomeAssistant, entry: QbusConfigEntry) -> None: ...
26
- async def _async_update_data(self) -> list[QbusMqttOutput]: ...
27
+ async def _async_update_data(self) -> QbusMqttDevice | None: ...
27
28
  def shutdown(self, event: Event | None = None) -> None: ...
28
29
  async def async_update_controller_config(self, config: QbusDiscovery) -> None: ...
29
30
  def _update_device_info(self) -> None: ...
@@ -1,5 +1,5 @@
1
1
  from .coordinator import QbusConfigEntry as QbusConfigEntry
2
- from .entity import QbusEntity as QbusEntity, add_new_outputs as add_new_outputs
2
+ from .entity import QbusEntity as QbusEntity, create_new_entities as create_new_entities
3
3
  from _typeshed import Incomplete
4
4
  from homeassistant.components.cover import ATTR_POSITION as ATTR_POSITION, ATTR_TILT_POSITION as ATTR_TILT_POSITION, CoverDeviceClass as CoverDeviceClass, CoverEntity as CoverEntity, CoverEntityFeature as CoverEntityFeature
5
5
  from homeassistant.core import HomeAssistant as HomeAssistant
@@ -7,17 +7,18 @@ from collections.abc import Callable as Callable
7
7
  from homeassistant.components.mqtt import ReceiveMessage as ReceiveMessage
8
8
  from homeassistant.helpers.device_registry import DeviceInfo as DeviceInfo, format_mac as format_mac
9
9
  from homeassistant.helpers.entity import Entity as Entity
10
- from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
11
- from qbusmqttapi.discovery import QbusMqttOutput as QbusMqttOutput
10
+ from qbusmqttapi.discovery import QbusMqttDevice as QbusMqttDevice, QbusMqttOutput as QbusMqttOutput
12
11
  from qbusmqttapi.state import QbusMqttState
13
12
  from typing import Generic, TypeVar
14
13
 
15
14
  _REFID_REGEX: Incomplete
16
15
  StateT = TypeVar('StateT', bound=QbusMqttState)
17
16
 
18
- def add_new_outputs(coordinator: QbusControllerCoordinator, added_outputs: list[QbusMqttOutput], filter_fn: Callable[[QbusMqttOutput], bool], entity_type: type[QbusEntity], async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
17
+ def create_new_entities(coordinator: QbusControllerCoordinator, added_outputs: list[QbusMqttOutput], filter_fn: Callable[[QbusMqttOutput], bool], entity_type: type[QbusEntity]) -> list[QbusEntity]: ...
18
+ def determine_new_outputs(coordinator: QbusControllerCoordinator, added_outputs: list[QbusMqttOutput], filter_fn: Callable[[QbusMqttOutput], bool]) -> list[QbusMqttOutput]: ...
19
19
  def format_ref_id(ref_id: str) -> str | None: ...
20
- def create_main_device_identifier(mqtt_output: QbusMqttOutput) -> tuple[str, str]: ...
20
+ def create_device_identifier(mqtt_device: QbusMqttDevice) -> tuple[str, str]: ...
21
+ def create_unique_id(serial_number: str, suffix: str) -> str: ...
21
22
 
22
23
  class QbusEntity(Entity, ABC, Generic[StateT], metaclass=abc.ABCMeta):
23
24
  _state_cls: type[StateT]
@@ -29,7 +30,7 @@ class QbusEntity(Entity, ABC, Generic[StateT], metaclass=abc.ABCMeta):
29
30
  _state_topic: Incomplete
30
31
  _attr_unique_id: Incomplete
31
32
  _attr_device_info: Incomplete
32
- def __init__(self, mqtt_output: QbusMqttOutput) -> None: ...
33
+ def __init__(self, mqtt_output: QbusMqttOutput, *, id_suffix: str = '', link_to_main_device: bool = False) -> None: ...
33
34
  async def async_added_to_hass(self) -> None: ...
34
35
  async def _state_received(self, msg: ReceiveMessage) -> None: ...
35
36
  @abstractmethod
@@ -1,5 +1,5 @@
1
1
  from .coordinator import QbusConfigEntry as QbusConfigEntry
2
- from .entity import QbusEntity as QbusEntity, add_new_outputs as add_new_outputs
2
+ from .entity import QbusEntity as QbusEntity, create_new_entities as create_new_entities
3
3
  from _typeshed import Incomplete
4
4
  from homeassistant.components.light import ATTR_BRIGHTNESS as ATTR_BRIGHTNESS, ColorMode as ColorMode, LightEntity as LightEntity
5
5
  from homeassistant.core import HomeAssistant as HomeAssistant
@@ -1,9 +1,8 @@
1
1
  from .coordinator import QbusConfigEntry as QbusConfigEntry
2
- from .entity import QbusEntity as QbusEntity, add_new_outputs as add_new_outputs, create_main_device_identifier as create_main_device_identifier
2
+ from .entity import QbusEntity as QbusEntity, create_new_entities as create_new_entities
3
3
  from _typeshed import Incomplete
4
- from homeassistant.components.scene import Scene as Scene
4
+ from homeassistant.components.scene import BaseScene as BaseScene
5
5
  from homeassistant.core import HomeAssistant as HomeAssistant
6
- from homeassistant.helpers.device_registry import DeviceInfo as DeviceInfo
7
6
  from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
8
7
  from qbusmqttapi.discovery import QbusMqttOutput as QbusMqttOutput
9
8
  from qbusmqttapi.state import QbusMqttState
@@ -13,9 +12,8 @@ PARALLEL_UPDATES: int
13
12
 
14
13
  async def async_setup_entry(hass: HomeAssistant, entry: QbusConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
15
14
 
16
- class QbusScene(QbusEntity, Scene):
17
- _attr_device_info: Incomplete
15
+ class QbusScene(QbusEntity, BaseScene):
18
16
  _attr_name: Incomplete
19
17
  def __init__(self, mqtt_output: QbusMqttOutput) -> None: ...
20
- async def async_activate(self, **kwargs: Any) -> None: ...
18
+ async def _async_activate(self, **kwargs: Any) -> None: ...
21
19
  async def _handle_state_received(self, state: QbusMqttState) -> None: ...
@@ -0,0 +1,67 @@
1
+ from .coordinator import QbusConfigEntry as QbusConfigEntry
2
+ from .entity import QbusEntity as QbusEntity, create_new_entities as create_new_entities, determine_new_outputs as determine_new_outputs
3
+ from _typeshed import Incomplete
4
+ from dataclasses import dataclass
5
+ from homeassistant.components.sensor import SensorDeviceClass as SensorDeviceClass, SensorEntity as SensorEntity, SensorEntityDescription as SensorEntityDescription, SensorStateClass as SensorStateClass
6
+ from homeassistant.const import CONCENTRATION_PARTS_PER_MILLION as CONCENTRATION_PARTS_PER_MILLION, LIGHT_LUX as LIGHT_LUX, PERCENTAGE as PERCENTAGE, UnitOfElectricCurrent as UnitOfElectricCurrent, UnitOfElectricPotential as UnitOfElectricPotential, UnitOfEnergy as UnitOfEnergy, UnitOfLength as UnitOfLength, UnitOfPower as UnitOfPower, UnitOfPressure as UnitOfPressure, UnitOfSoundPressure as UnitOfSoundPressure, UnitOfSpeed as UnitOfSpeed, UnitOfTemperature as UnitOfTemperature, UnitOfVolume as UnitOfVolume, UnitOfVolumeFlowRate as UnitOfVolumeFlowRate
7
+ from homeassistant.core import HomeAssistant as HomeAssistant
8
+ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
9
+ from qbusmqttapi.discovery import QbusMqttOutput as QbusMqttOutput
10
+ from qbusmqttapi.state import QbusMqttGaugeState, QbusMqttHumidityState, QbusMqttThermoState, QbusMqttVentilationState, QbusMqttWeatherState
11
+
12
+ PARALLEL_UPDATES: int
13
+
14
+ @dataclass(frozen=True, kw_only=True)
15
+ class QbusWeatherDescription(SensorEntityDescription):
16
+ property: str
17
+
18
+ _WEATHER_DESCRIPTIONS: Incomplete
19
+ _GAUGE_VARIANT_DESCRIPTIONS: Incomplete
20
+
21
+ def _is_gauge_with_variant(output: QbusMqttOutput) -> bool: ...
22
+ def _is_ventilation_with_co2(output: QbusMqttOutput) -> bool: ...
23
+ async def async_setup_entry(hass: HomeAssistant, entry: QbusConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
24
+
25
+ class QbusGaugeVariantSensor(QbusEntity, SensorEntity):
26
+ _state_cls = QbusMqttGaugeState
27
+ _attr_name: Incomplete
28
+ _attr_suggested_display_precision: int
29
+ entity_description: Incomplete
30
+ def __init__(self, mqtt_output: QbusMqttOutput) -> None: ...
31
+ _attr_native_value: Incomplete
32
+ async def _handle_state_received(self, state: QbusMqttGaugeState) -> None: ...
33
+
34
+ class QbusHumiditySensor(QbusEntity, SensorEntity):
35
+ _state_cls = QbusMqttHumidityState
36
+ _attr_device_class: Incomplete
37
+ _attr_name: Incomplete
38
+ _attr_native_unit_of_measurement = PERCENTAGE
39
+ _attr_state_class: Incomplete
40
+ _attr_native_value: Incomplete
41
+ async def _handle_state_received(self, state: QbusMqttHumidityState) -> None: ...
42
+
43
+ class QbusThermoSensor(QbusEntity, SensorEntity):
44
+ _state_cls = QbusMqttThermoState
45
+ _attr_device_class: Incomplete
46
+ _attr_native_unit_of_measurement: Incomplete
47
+ _attr_state_class: Incomplete
48
+ _attr_native_value: Incomplete
49
+ async def _handle_state_received(self, state: QbusMqttThermoState) -> None: ...
50
+
51
+ class QbusVentilationSensor(QbusEntity, SensorEntity):
52
+ _state_cls = QbusMqttVentilationState
53
+ _attr_device_class: Incomplete
54
+ _attr_name: Incomplete
55
+ _attr_native_unit_of_measurement = CONCENTRATION_PARTS_PER_MILLION
56
+ _attr_state_class: Incomplete
57
+ _attr_suggested_display_precision: int
58
+ _attr_native_value: Incomplete
59
+ async def _handle_state_received(self, state: QbusMqttVentilationState) -> None: ...
60
+
61
+ class QbusWeatherSensor(QbusEntity, SensorEntity):
62
+ _state_cls = QbusMqttWeatherState
63
+ entity_description: QbusWeatherDescription
64
+ _attr_name: Incomplete
65
+ def __init__(self, mqtt_output: QbusMqttOutput, description: QbusWeatherDescription) -> None: ...
66
+ native_value: Incomplete
67
+ async def _handle_state_received(self, state: QbusMqttWeatherState) -> None: ...
@@ -1,5 +1,5 @@
1
1
  from .coordinator import QbusConfigEntry as QbusConfigEntry
2
- from .entity import QbusEntity as QbusEntity, add_new_outputs as add_new_outputs
2
+ from .entity import QbusEntity as QbusEntity, create_new_entities as create_new_entities
3
3
  from _typeshed import Incomplete
4
4
  from homeassistant.components.switch import SwitchDeviceClass as SwitchDeviceClass, SwitchEntity as SwitchEntity
5
5
  from homeassistant.core import HomeAssistant as HomeAssistant
@@ -15,7 +15,7 @@ from homeassistant.helpers.singleton import singleton as singleton
15
15
  from homeassistant.helpers.typing import UNDEFINED as UNDEFINED, UndefinedType as UndefinedType
16
16
  from homeassistant.util.collection import chunked_or_all as chunked_or_all
17
17
  from homeassistant.util.enum import try_parse_enum as try_parse_enum
18
- from homeassistant.util.unit_conversion import AreaConverter as AreaConverter, BaseUnitConverter as BaseUnitConverter, BloodGlucoseConcentrationConverter as BloodGlucoseConcentrationConverter, ConductivityConverter as ConductivityConverter, DataRateConverter as DataRateConverter, DistanceConverter as DistanceConverter, DurationConverter as DurationConverter, ElectricCurrentConverter as ElectricCurrentConverter, ElectricPotentialConverter as ElectricPotentialConverter, EnergyConverter as EnergyConverter, EnergyDistanceConverter as EnergyDistanceConverter, InformationConverter as InformationConverter, MassConverter as MassConverter, MassVolumeConcentrationConverter as MassVolumeConcentrationConverter, PowerConverter as PowerConverter, PressureConverter as PressureConverter, ReactiveEnergyConverter as ReactiveEnergyConverter, SpeedConverter as SpeedConverter, TemperatureConverter as TemperatureConverter, UnitlessRatioConverter as UnitlessRatioConverter, VolumeConverter as VolumeConverter, VolumeFlowRateConverter as VolumeFlowRateConverter
18
+ from homeassistant.util.unit_conversion import ApparentPowerConverter as ApparentPowerConverter, AreaConverter as AreaConverter, BaseUnitConverter as BaseUnitConverter, BloodGlucoseConcentrationConverter as BloodGlucoseConcentrationConverter, ConductivityConverter as ConductivityConverter, DataRateConverter as DataRateConverter, DistanceConverter as DistanceConverter, DurationConverter as DurationConverter, ElectricCurrentConverter as ElectricCurrentConverter, ElectricPotentialConverter as ElectricPotentialConverter, EnergyConverter as EnergyConverter, EnergyDistanceConverter as EnergyDistanceConverter, InformationConverter as InformationConverter, MassConverter as MassConverter, MassVolumeConcentrationConverter as MassVolumeConcentrationConverter, PowerConverter as PowerConverter, PressureConverter as PressureConverter, ReactiveEnergyConverter as ReactiveEnergyConverter, ReactivePowerConverter as ReactivePowerConverter, SpeedConverter as SpeedConverter, TemperatureConverter as TemperatureConverter, UnitlessRatioConverter as UnitlessRatioConverter, VolumeConverter as VolumeConverter, VolumeFlowRateConverter as VolumeFlowRateConverter
19
19
  from sqlalchemy import Label as Label, Select as Select
20
20
  from sqlalchemy.engine.row import Row
21
21
  from sqlalchemy.orm.session import Session as Session
@@ -8,7 +8,7 @@ from homeassistant.components.websocket_api import messages as messages
8
8
  from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback, valid_entity_id as valid_entity_id
9
9
  from homeassistant.exceptions import HomeAssistantError as HomeAssistantError
10
10
  from homeassistant.helpers.json import json_bytes as json_bytes
11
- from homeassistant.util.unit_conversion import AreaConverter as AreaConverter, BloodGlucoseConcentrationConverter as BloodGlucoseConcentrationConverter, ConductivityConverter as ConductivityConverter, DataRateConverter as DataRateConverter, DistanceConverter as DistanceConverter, DurationConverter as DurationConverter, ElectricCurrentConverter as ElectricCurrentConverter, ElectricPotentialConverter as ElectricPotentialConverter, EnergyConverter as EnergyConverter, EnergyDistanceConverter as EnergyDistanceConverter, InformationConverter as InformationConverter, MassConverter as MassConverter, MassVolumeConcentrationConverter as MassVolumeConcentrationConverter, PowerConverter as PowerConverter, PressureConverter as PressureConverter, ReactiveEnergyConverter as ReactiveEnergyConverter, SpeedConverter as SpeedConverter, TemperatureConverter as TemperatureConverter, UnitlessRatioConverter as UnitlessRatioConverter, VolumeConverter as VolumeConverter, VolumeFlowRateConverter as VolumeFlowRateConverter
11
+ from homeassistant.util.unit_conversion import ApparentPowerConverter as ApparentPowerConverter, AreaConverter as AreaConverter, BloodGlucoseConcentrationConverter as BloodGlucoseConcentrationConverter, ConductivityConverter as ConductivityConverter, DataRateConverter as DataRateConverter, DistanceConverter as DistanceConverter, DurationConverter as DurationConverter, ElectricCurrentConverter as ElectricCurrentConverter, ElectricPotentialConverter as ElectricPotentialConverter, EnergyConverter as EnergyConverter, EnergyDistanceConverter as EnergyDistanceConverter, InformationConverter as InformationConverter, MassConverter as MassConverter, MassVolumeConcentrationConverter as MassVolumeConcentrationConverter, PowerConverter as PowerConverter, PressureConverter as PressureConverter, ReactiveEnergyConverter as ReactiveEnergyConverter, ReactivePowerConverter as ReactivePowerConverter, SpeedConverter as SpeedConverter, TemperatureConverter as TemperatureConverter, UnitlessRatioConverter as UnitlessRatioConverter, VolumeConverter as VolumeConverter, VolumeFlowRateConverter as VolumeFlowRateConverter
12
12
  from typing import Any, Literal
13
13
 
14
14
  CLEAR_STATISTICS_TIME_OUT: int
@@ -1,5 +1,5 @@
1
1
  from _typeshed import Incomplete
2
- from homeassistant.const import CONF_HEADERS as CONF_HEADERS, CONF_METHOD as CONF_METHOD, CONF_PASSWORD as CONF_PASSWORD, CONF_PAYLOAD as CONF_PAYLOAD, CONF_TIMEOUT as CONF_TIMEOUT, CONF_URL as CONF_URL, CONF_USERNAME as CONF_USERNAME, CONF_VERIFY_SSL as CONF_VERIFY_SSL, SERVICE_RELOAD as SERVICE_RELOAD
2
+ from homeassistant.const import CONF_AUTHENTICATION as CONF_AUTHENTICATION, CONF_HEADERS as CONF_HEADERS, CONF_METHOD as CONF_METHOD, CONF_PASSWORD as CONF_PASSWORD, CONF_PAYLOAD as CONF_PAYLOAD, CONF_TIMEOUT as CONF_TIMEOUT, CONF_URL as CONF_URL, CONF_USERNAME as CONF_USERNAME, CONF_VERIFY_SSL as CONF_VERIFY_SSL, HTTP_BASIC_AUTHENTICATION as HTTP_BASIC_AUTHENTICATION, HTTP_DIGEST_AUTHENTICATION as HTTP_DIGEST_AUTHENTICATION, SERVICE_RELOAD as SERVICE_RELOAD
3
3
  from homeassistant.core import HomeAssistant as HomeAssistant, ServiceCall as ServiceCall, ServiceResponse as ServiceResponse, SupportsResponse as SupportsResponse, callback as callback
4
4
  from homeassistant.exceptions import HomeAssistantError as HomeAssistantError
5
5
  from homeassistant.helpers.aiohttp_client import async_get_clientsession as async_get_clientsession
@@ -7,7 +7,6 @@ from romy import RomyRobot as RomyRobot
7
7
 
8
8
  class RomyVacuumCoordinator(DataUpdateCoordinator[None]):
9
9
  config_entry: ConfigEntry
10
- hass: Incomplete
11
10
  romy: Incomplete
12
11
  def __init__(self, hass: HomeAssistant, config_entry: ConfigEntry, romy: RomyRobot) -> None: ...
13
12
  async def _async_update_data(self) -> None: ...
@@ -0,0 +1,8 @@
1
+ from aiorussound import RussoundClient as RussoundClient, Zone as Zone
2
+ from homeassistant.components.media_player import BrowseMedia as BrowseMedia, MediaClass as MediaClass
3
+ from homeassistant.core import HomeAssistant as HomeAssistant
4
+
5
+ async def async_browse_media(hass: HomeAssistant, client: RussoundClient, media_content_id: str | None, media_content_type: str | None, zone: Zone) -> BrowseMedia: ...
6
+ async def _root_payload(hass: HomeAssistant, presets_by_zone: dict[int, dict[int, str]]) -> BrowseMedia: ...
7
+ async def _presets_payload(presets_by_zone: dict[int, dict[int, str]]) -> BrowseMedia: ...
8
+ def _find_presets_by_zone(client: RussoundClient, zone: Zone) -> dict[int, dict[int, str]]: ...
@@ -1,11 +1,11 @@
1
1
  import datetime as dt
2
- from . import RussoundConfigEntry as RussoundConfigEntry
2
+ from . import RussoundConfigEntry as RussoundConfigEntry, media_browser as media_browser
3
3
  from .const import DOMAIN as DOMAIN, RUSSOUND_MEDIA_TYPE_PRESET as RUSSOUND_MEDIA_TYPE_PRESET, SELECT_SOURCE_DELAY as SELECT_SOURCE_DELAY
4
4
  from .entity import RussoundBaseEntity as RussoundBaseEntity, command as command
5
5
  from _typeshed import Incomplete
6
6
  from aiorussound import Controller as Controller
7
7
  from aiorussound.models import Source as Source
8
- from homeassistant.components.media_player import MediaPlayerDeviceClass as MediaPlayerDeviceClass, MediaPlayerEntity as MediaPlayerEntity, MediaPlayerEntityFeature as MediaPlayerEntityFeature, MediaPlayerState as MediaPlayerState, MediaType as MediaType
8
+ from homeassistant.components.media_player import BrowseMedia as BrowseMedia, MediaPlayerDeviceClass as MediaPlayerDeviceClass, MediaPlayerEntity as MediaPlayerEntity, MediaPlayerEntityFeature as MediaPlayerEntityFeature, MediaPlayerState as MediaPlayerState, MediaType as MediaType
9
9
  from homeassistant.core import HomeAssistant as HomeAssistant
10
10
  from homeassistant.exceptions import HomeAssistantError as HomeAssistantError, ServiceValidationError as ServiceValidationError
11
11
  from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
@@ -69,3 +69,4 @@ class RussoundZoneDevice(RussoundBaseEntity, MediaPlayerEntity):
69
69
  async def async_media_seek(self, position: float) -> None: ...
70
70
  @command
71
71
  async def async_play_media(self, media_type: MediaType | str, media_id: str, **kwargs: Any) -> None: ...
72
+ async def async_browse_media(self, media_content_type: MediaType | str | None = None, media_content_id: str | None = None) -> BrowseMedia: ...
@@ -5,14 +5,14 @@ from homeassistant.components.bluetooth.passive_update_processor import PassiveB
5
5
  from homeassistant.components.sensor import SensorDeviceClass as SensorDeviceClass, SensorEntity as SensorEntity, SensorEntityDescription as SensorEntityDescription, SensorStateClass as SensorStateClass
6
6
  from homeassistant.const import PERCENTAGE as PERCENTAGE, SIGNAL_STRENGTH_DECIBELS_MILLIWATT as SIGNAL_STRENGTH_DECIBELS_MILLIWATT, UnitOfElectricPotential as UnitOfElectricPotential, UnitOfPressure as UnitOfPressure, UnitOfTemperature as UnitOfTemperature
7
7
  from homeassistant.core import HomeAssistant as HomeAssistant
8
+ from homeassistant.helpers.entity import EntityDescription as EntityDescription
8
9
  from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
9
10
  from homeassistant.helpers.sensor import sensor_device_info_to_hass_device_info as sensor_device_info_to_hass_device_info
10
- from sensor_state_data import DeviceKey as DeviceKey, SensorDescription as SensorDescription, SensorDeviceClass as SSDSensorDeviceClass, SensorUpdate, Units
11
+ from sensor_state_data import DeviceKey as DeviceKey, SensorUpdate
11
12
 
12
13
  SENSOR_DESCRIPTIONS: Incomplete
13
14
 
14
15
  def _device_key_to_bluetooth_entity_key(device_key: DeviceKey) -> PassiveBluetoothEntityKey: ...
15
- def _to_sensor_key(description: SensorDescription) -> tuple[SSDSensorDeviceClass, Units | None]: ...
16
16
  def sensor_update_to_bluetooth_data_update(sensor_update: SensorUpdate) -> PassiveBluetoothDataUpdate: ...
17
17
  async def async_setup_entry(hass: HomeAssistant, entry: config_entries.ConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
18
18
 
@@ -2,15 +2,16 @@ from _typeshed import Incomplete
2
2
  from homeassistant.components.light import ATTR_TRANSITION as ATTR_TRANSITION
3
3
  from homeassistant.config_entries import ConfigEntry as ConfigEntry
4
4
  from homeassistant.const import CONF_PLATFORM as CONF_PLATFORM, SERVICE_TURN_ON as SERVICE_TURN_ON, STATE_UNAVAILABLE as STATE_UNAVAILABLE
5
- from homeassistant.core import HomeAssistant as HomeAssistant
5
+ from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
6
6
  from homeassistant.helpers.entity_component import EntityComponent as EntityComponent
7
7
  from homeassistant.helpers.restore_state import RestoreEntity as RestoreEntity
8
8
  from homeassistant.helpers.typing import ConfigType as ConfigType
9
+ from homeassistant.util.async_ import run_callback_threadsafe as run_callback_threadsafe
9
10
  from homeassistant.util.hass_dict import HassKey as HassKey
10
11
  from typing import Any, Final, final
11
12
 
12
13
  DOMAIN: Final[str]
13
- DATA_COMPONENT: HassKey[EntityComponent[Scene]]
14
+ DATA_COMPONENT: HassKey[EntityComponent[BaseScene]]
14
15
  STATES: Final[str]
15
16
 
16
17
  def _hass_domain_validator(config: dict[str, Any]) -> dict[str, Any]: ...
@@ -22,14 +23,22 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: ...
22
23
  async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ...
23
24
  async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ...
24
25
 
25
- class Scene(RestoreEntity):
26
+ class BaseScene(RestoreEntity):
26
27
  _attr_should_poll: bool
27
28
  __last_activated: str | None
28
29
  @property
29
30
  @final
30
31
  def state(self) -> str | None: ...
31
32
  @final
32
- async def _async_activate(self, **kwargs: Any) -> None: ...
33
+ def _record_activation(self) -> None: ...
34
+ @final
35
+ @callback
36
+ def _async_record_activation(self) -> None: ...
33
37
  async def async_internal_added_to_hass(self) -> None: ...
38
+ async def _async_activate(self, **kwargs: Any) -> None: ...
34
39
  def activate(self, **kwargs: Any) -> None: ...
35
40
  async def async_activate(self, **kwargs: Any) -> None: ...
41
+
42
+ class Scene(BaseScene):
43
+ @final
44
+ async def _async_activate(self, **kwargs: Any) -> None: ...
@@ -1,16 +1,12 @@
1
1
  from . import SensiboConfigEntry as SensiboConfigEntry
2
- from .const import DOMAIN as DOMAIN
3
2
  from .coordinator import SensiboDataUpdateCoordinator as SensiboDataUpdateCoordinator
4
3
  from .entity import SensiboDeviceBaseEntity as SensiboDeviceBaseEntity, async_handle_api_call as async_handle_api_call
5
4
  from _typeshed import Incomplete
6
5
  from collections.abc import Callable as Callable
7
6
  from dataclasses import dataclass
8
- from homeassistant.components.automation import automations_with_entity as automations_with_entity
9
- from homeassistant.components.script import scripts_with_entity as scripts_with_entity
10
7
  from homeassistant.components.select import SelectEntity as SelectEntity, SelectEntityDescription as SelectEntityDescription
11
8
  from homeassistant.core import HomeAssistant as HomeAssistant
12
9
  from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
13
- from homeassistant.helpers.issue_registry import IssueSeverity as IssueSeverity, async_create_issue as async_create_issue, async_delete_issue as async_delete_issue
14
10
  from pysensibo.model import SensiboDevice as SensiboDevice
15
11
  from typing import Any
16
12
 
@@ -23,7 +19,6 @@ class SensiboSelectEntityDescription(SelectEntityDescription):
23
19
  options_fn: Callable[[SensiboDevice], list[str] | None]
24
20
  transformation: Callable[[SensiboDevice], dict | None]
25
21
 
26
- HORIZONTAL_SWING_MODE_TYPE: Incomplete
27
22
  DEVICE_SELECT_TYPES: Incomplete
28
23
 
29
24
  async def async_setup_entry(hass: HomeAssistant, entry: SensiboConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
@@ -80,6 +80,9 @@ class SensorEntity(Entity, cached_properties=CACHED_PROPERTIES_WITH_ATTR_):
80
80
  def suggested_display_precision(self) -> int | None: ...
81
81
  @cached_property
82
82
  def native_unit_of_measurement(self) -> str | None: ...
83
+ @final
84
+ @property
85
+ def __native_unit_of_measurement_compat(self) -> str | None: ...
83
86
  @cached_property
84
87
  def suggested_unit_of_measurement(self) -> str | None: ...
85
88
  @final
@@ -1,7 +1,7 @@
1
1
  from _typeshed import Incomplete
2
2
  from enum import StrEnum
3
- from homeassistant.const import CONCENTRATION_GRAMS_PER_CUBIC_METER as CONCENTRATION_GRAMS_PER_CUBIC_METER, CONCENTRATION_MICROGRAMS_PER_CUBIC_METER as CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER as CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER, CONCENTRATION_PARTS_PER_BILLION as CONCENTRATION_PARTS_PER_BILLION, CONCENTRATION_PARTS_PER_MILLION as CONCENTRATION_PARTS_PER_MILLION, DEGREE as DEGREE, LIGHT_LUX as LIGHT_LUX, PERCENTAGE as PERCENTAGE, SIGNAL_STRENGTH_DECIBELS as SIGNAL_STRENGTH_DECIBELS, SIGNAL_STRENGTH_DECIBELS_MILLIWATT as SIGNAL_STRENGTH_DECIBELS_MILLIWATT, UnitOfApparentPower as UnitOfApparentPower, UnitOfArea as UnitOfArea, UnitOfBloodGlucoseConcentration as UnitOfBloodGlucoseConcentration, UnitOfConductivity as UnitOfConductivity, UnitOfDataRate as UnitOfDataRate, UnitOfElectricCurrent as UnitOfElectricCurrent, UnitOfElectricPotential as UnitOfElectricPotential, UnitOfEnergy as UnitOfEnergy, UnitOfEnergyDistance as UnitOfEnergyDistance, UnitOfFrequency as UnitOfFrequency, UnitOfInformation as UnitOfInformation, UnitOfIrradiance as UnitOfIrradiance, UnitOfLength as UnitOfLength, UnitOfMass as UnitOfMass, UnitOfPower as UnitOfPower, UnitOfPrecipitationDepth as UnitOfPrecipitationDepth, UnitOfPressure as UnitOfPressure, UnitOfReactiveEnergy as UnitOfReactiveEnergy, UnitOfReactivePower as UnitOfReactivePower, UnitOfSoundPressure as UnitOfSoundPressure, UnitOfSpeed as UnitOfSpeed, UnitOfTemperature as UnitOfTemperature, UnitOfTime as UnitOfTime, UnitOfVolume as UnitOfVolume, UnitOfVolumeFlowRate as UnitOfVolumeFlowRate, UnitOfVolumetricFlux as UnitOfVolumetricFlux
4
- from homeassistant.util.unit_conversion import AreaConverter as AreaConverter, BaseUnitConverter as BaseUnitConverter, BloodGlucoseConcentrationConverter as BloodGlucoseConcentrationConverter, ConductivityConverter as ConductivityConverter, DataRateConverter as DataRateConverter, DistanceConverter as DistanceConverter, DurationConverter as DurationConverter, ElectricCurrentConverter as ElectricCurrentConverter, ElectricPotentialConverter as ElectricPotentialConverter, EnergyConverter as EnergyConverter, EnergyDistanceConverter as EnergyDistanceConverter, InformationConverter as InformationConverter, MassConverter as MassConverter, MassVolumeConcentrationConverter as MassVolumeConcentrationConverter, PowerConverter as PowerConverter, PressureConverter as PressureConverter, ReactiveEnergyConverter as ReactiveEnergyConverter, SpeedConverter as SpeedConverter, TemperatureConverter as TemperatureConverter, UnitlessRatioConverter as UnitlessRatioConverter, VolumeConverter as VolumeConverter, VolumeFlowRateConverter as VolumeFlowRateConverter
3
+ from homeassistant.const import CONCENTRATION_GRAMS_PER_CUBIC_METER as CONCENTRATION_GRAMS_PER_CUBIC_METER, CONCENTRATION_MICROGRAMS_PER_CUBIC_FOOT as CONCENTRATION_MICROGRAMS_PER_CUBIC_FOOT, CONCENTRATION_MICROGRAMS_PER_CUBIC_METER as CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER as CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER, CONCENTRATION_PARTS_PER_BILLION as CONCENTRATION_PARTS_PER_BILLION, CONCENTRATION_PARTS_PER_MILLION as CONCENTRATION_PARTS_PER_MILLION, DEGREE as DEGREE, LIGHT_LUX as LIGHT_LUX, PERCENTAGE as PERCENTAGE, SIGNAL_STRENGTH_DECIBELS as SIGNAL_STRENGTH_DECIBELS, SIGNAL_STRENGTH_DECIBELS_MILLIWATT as SIGNAL_STRENGTH_DECIBELS_MILLIWATT, UnitOfApparentPower as UnitOfApparentPower, UnitOfArea as UnitOfArea, UnitOfBloodGlucoseConcentration as UnitOfBloodGlucoseConcentration, UnitOfConductivity as UnitOfConductivity, UnitOfDataRate as UnitOfDataRate, UnitOfElectricCurrent as UnitOfElectricCurrent, UnitOfElectricPotential as UnitOfElectricPotential, UnitOfEnergy as UnitOfEnergy, UnitOfEnergyDistance as UnitOfEnergyDistance, UnitOfFrequency as UnitOfFrequency, UnitOfInformation as UnitOfInformation, UnitOfIrradiance as UnitOfIrradiance, UnitOfLength as UnitOfLength, UnitOfMass as UnitOfMass, UnitOfPower as UnitOfPower, UnitOfPrecipitationDepth as UnitOfPrecipitationDepth, UnitOfPressure as UnitOfPressure, UnitOfReactiveEnergy as UnitOfReactiveEnergy, UnitOfReactivePower as UnitOfReactivePower, UnitOfSoundPressure as UnitOfSoundPressure, UnitOfSpeed as UnitOfSpeed, UnitOfTemperature as UnitOfTemperature, UnitOfTime as UnitOfTime, UnitOfVolume as UnitOfVolume, UnitOfVolumeFlowRate as UnitOfVolumeFlowRate, UnitOfVolumetricFlux as UnitOfVolumetricFlux
4
+ from homeassistant.util.unit_conversion import ApparentPowerConverter as ApparentPowerConverter, AreaConverter as AreaConverter, BaseUnitConverter as BaseUnitConverter, BloodGlucoseConcentrationConverter as BloodGlucoseConcentrationConverter, ConductivityConverter as ConductivityConverter, DataRateConverter as DataRateConverter, DistanceConverter as DistanceConverter, DurationConverter as DurationConverter, ElectricCurrentConverter as ElectricCurrentConverter, ElectricPotentialConverter as ElectricPotentialConverter, EnergyConverter as EnergyConverter, EnergyDistanceConverter as EnergyDistanceConverter, InformationConverter as InformationConverter, MassConverter as MassConverter, MassVolumeConcentrationConverter as MassVolumeConcentrationConverter, PowerConverter as PowerConverter, PressureConverter as PressureConverter, ReactiveEnergyConverter as ReactiveEnergyConverter, ReactivePowerConverter as ReactivePowerConverter, SpeedConverter as SpeedConverter, TemperatureConverter as TemperatureConverter, UnitlessRatioConverter as UnitlessRatioConverter, VolumeConverter as VolumeConverter, VolumeFlowRateConverter as VolumeFlowRateConverter
5
5
  from typing import Final
6
6
 
7
7
  DOMAIN: Final[str]
@@ -88,3 +88,4 @@ DEFAULT_PRECISION_LIMIT: int
88
88
  UNITS_PRECISION: Incomplete
89
89
  DEVICE_CLASS_STATE_CLASSES: dict[SensorDeviceClass, set[SensorStateClass]]
90
90
  STATE_CLASS_UNITS: dict[SensorStateClass | str, set[type[StrEnum] | str | None]]
91
+ AMBIGUOUS_UNITS: dict[str | None, str]
@@ -1,5 +1,5 @@
1
1
  import datetime
2
- from .const import ATTR_LAST_RESET as ATTR_LAST_RESET, ATTR_STATE_CLASS as ATTR_STATE_CLASS, DOMAIN as DOMAIN, SensorStateClass as SensorStateClass, UnitOfVolumeFlowRate as UnitOfVolumeFlowRate
2
+ from .const import AMBIGUOUS_UNITS as AMBIGUOUS_UNITS, ATTR_LAST_RESET as ATTR_LAST_RESET, ATTR_STATE_CLASS as ATTR_STATE_CLASS, DOMAIN as DOMAIN, SensorStateClass as SensorStateClass, UnitOfVolumeFlowRate as UnitOfVolumeFlowRate
3
3
  from _typeshed import Incomplete
4
4
  from collections.abc import Callable as Callable, Iterable
5
5
  from dataclasses import dataclass
@@ -0,0 +1,16 @@
1
+ from .const import ATTR_EVENT as ATTR_EVENT, ATTR_VALUE1 as ATTR_VALUE1, ATTR_VALUE2 as ATTR_VALUE2, ATTR_VALUE3 as ATTR_VALUE3, DOMAIN as DOMAIN
2
+ from _typeshed import Incomplete
3
+ from aiohttp.web import Request as Request, Response
4
+ from homeassistant.components import webhook as webhook
5
+ from homeassistant.config_entries import ConfigEntry as ConfigEntry
6
+ from homeassistant.const import CONF_WEBHOOK_ID as CONF_WEBHOOK_ID, Platform as Platform
7
+ from homeassistant.core import HomeAssistant as HomeAssistant
8
+ from homeassistant.helpers.dispatcher import async_dispatcher_send as async_dispatcher_send
9
+
10
+ PLATFORMS: list[Platform]
11
+ type SleepAsAndroidConfigEntry = ConfigEntry
12
+ WEBHOOK_SCHEMA: Incomplete
13
+
14
+ async def handle_webhook(hass: HomeAssistant, webhook_id: str, request: Request) -> Response: ...
15
+ async def async_setup_entry(hass: HomeAssistant, entry: SleepAsAndroidConfigEntry) -> bool: ...
16
+ async def async_unload_entry(hass: HomeAssistant, entry: SleepAsAndroidConfigEntry) -> bool: ...
@@ -0,0 +1,2 @@
1
+ from .const import DOMAIN as DOMAIN
2
+ from homeassistant.helpers import config_entry_flow as config_entry_flow
@@ -0,0 +1,9 @@
1
+ from _typeshed import Incomplete
2
+
3
+ DOMAIN: str
4
+ ATTR_EVENT: str
5
+ ATTR_VALUE1: str
6
+ ATTR_VALUE2: str
7
+ ATTR_VALUE3: str
8
+ MAP_EVENTS: Incomplete
9
+ ALARM_LABEL_DEFAULT: str
@@ -0,0 +1,5 @@
1
+ from . import SleepAsAndroidConfigEntry as SleepAsAndroidConfigEntry
2
+ from homeassistant.core import HomeAssistant as HomeAssistant
3
+ from typing import Any
4
+
5
+ async def async_get_config_entry_diagnostics(hass: HomeAssistant, config_entry: SleepAsAndroidConfigEntry) -> dict[str, Any]: ...
@@ -0,0 +1,20 @@
1
+ import abc
2
+ from . import SleepAsAndroidConfigEntry as SleepAsAndroidConfigEntry
3
+ from .const import DOMAIN as DOMAIN
4
+ from _typeshed import Incomplete
5
+ from abc import abstractmethod
6
+ from homeassistant.const import CONF_WEBHOOK_ID as CONF_WEBHOOK_ID
7
+ from homeassistant.helpers.device_registry import DeviceInfo as DeviceInfo
8
+ from homeassistant.helpers.dispatcher import async_dispatcher_connect as async_dispatcher_connect
9
+ from homeassistant.helpers.entity import Entity as Entity, EntityDescription as EntityDescription
10
+
11
+ class SleepAsAndroidEntity(Entity, metaclass=abc.ABCMeta):
12
+ _attr_has_entity_name: bool
13
+ _attr_unique_id: Incomplete
14
+ entity_description: Incomplete
15
+ webhook_id: Incomplete
16
+ _attr_device_info: Incomplete
17
+ def __init__(self, config_entry: SleepAsAndroidConfigEntry, entity_description: EntityDescription) -> None: ...
18
+ @abstractmethod
19
+ def _async_handle_event(self, webhook_id: str, data: dict[str, str]) -> None: ...
20
+ async def async_added_to_hass(self) -> None: ...
@@ -0,0 +1,33 @@
1
+ from . import SleepAsAndroidConfigEntry as SleepAsAndroidConfigEntry
2
+ from .const import ATTR_EVENT as ATTR_EVENT, MAP_EVENTS as MAP_EVENTS
3
+ from .entity import SleepAsAndroidEntity as SleepAsAndroidEntity
4
+ from dataclasses import dataclass
5
+ from enum import StrEnum
6
+ from homeassistant.components.event import EventDeviceClass as EventDeviceClass, EventEntity as EventEntity, EventEntityDescription as EventEntityDescription
7
+ from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
8
+ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
9
+
10
+ PARALLEL_UPDATES: int
11
+
12
+ @dataclass(kw_only=True, frozen=True)
13
+ class SleepAsAndroidEventEntityDescription(EventEntityDescription):
14
+ event_types: list[str]
15
+
16
+ class SleepAsAndroidEvent(StrEnum):
17
+ ALARM_CLOCK = 'alarm_clock'
18
+ USER_NOTIFICATION = 'user_notification'
19
+ SMART_WAKEUP = 'smart_wakeup'
20
+ SLEEP_HEALTH = 'sleep_health'
21
+ LULLABY = 'lullaby'
22
+ SLEEP_PHASE = 'sleep_phase'
23
+ SLEEP_TRACKING = 'sleep_tracking'
24
+ SOUND_EVENT = 'sound_event'
25
+
26
+ EVENT_DESCRIPTIONS: tuple[SleepAsAndroidEventEntityDescription, ...]
27
+
28
+ async def async_setup_entry(hass: HomeAssistant, config_entry: SleepAsAndroidConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
29
+
30
+ class SleepAsAndroidEventEntity(SleepAsAndroidEntity, EventEntity):
31
+ entity_description: SleepAsAndroidEventEntityDescription
32
+ @callback
33
+ def _async_handle_event(self, webhook_id: str, data: dict[str, str]) -> None: ...
@@ -0,0 +1,25 @@
1
+ from . import SleepAsAndroidConfigEntry as SleepAsAndroidConfigEntry
2
+ from .const import ALARM_LABEL_DEFAULT as ALARM_LABEL_DEFAULT, ATTR_EVENT as ATTR_EVENT, ATTR_VALUE1 as ATTR_VALUE1, ATTR_VALUE2 as ATTR_VALUE2
3
+ from .entity import SleepAsAndroidEntity as SleepAsAndroidEntity
4
+ from _typeshed import Incomplete
5
+ from enum import StrEnum
6
+ from homeassistant.components.sensor import RestoreSensor as RestoreSensor, SensorDeviceClass as SensorDeviceClass, SensorEntityDescription as SensorEntityDescription
7
+ from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
8
+ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
9
+
10
+ PARALLEL_UPDATES: int
11
+
12
+ class SleepAsAndroidSensor(StrEnum):
13
+ NEXT_ALARM = 'next_alarm'
14
+ ALARM_LABEL = 'alarm_label'
15
+
16
+ SENSOR_DESCRIPTIONS: tuple[SensorEntityDescription, ...]
17
+
18
+ async def async_setup_entry(hass: HomeAssistant, config_entry: SleepAsAndroidConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
19
+
20
+ class SleepAsAndroidSensorEntity(SleepAsAndroidEntity, RestoreSensor):
21
+ entity_description: SensorEntityDescription
22
+ _attr_native_value: Incomplete
23
+ @callback
24
+ def _async_handle_event(self, webhook_id: str, data: dict[str, str]) -> None: ...
25
+ async def async_added_to_hass(self) -> None: ...
@@ -8,17 +8,22 @@ from homeassistant.const import PERCENTAGE as PERCENTAGE, UnitOfElectricPotentia
8
8
  from homeassistant.core import HomeAssistant as HomeAssistant
9
9
  from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
10
10
  from homeassistant.helpers.typing import StateType as StateType
11
- from solarlog_cli.solarlog_models import InverterData as InverterData, SolarlogData as SolarlogData
11
+ from solarlog_cli.solarlog_models import BatteryData as BatteryData, InverterData as InverterData, SolarlogData as SolarlogData
12
12
 
13
13
  @dataclass(frozen=True, kw_only=True)
14
14
  class SolarLogCoordinatorSensorEntityDescription(SensorEntityDescription):
15
15
  value_fn: Callable[[SolarlogData], StateType | datetime | None]
16
16
 
17
+ @dataclass(frozen=True, kw_only=True)
18
+ class SolarLogBatterySensorEntityDescription(SensorEntityDescription):
19
+ value_fn: Callable[[BatteryData], float | int | None]
20
+
17
21
  @dataclass(frozen=True, kw_only=True)
18
22
  class SolarLogInverterSensorEntityDescription(SensorEntityDescription):
19
23
  value_fn: Callable[[InverterData], float | None]
20
24
 
21
25
  SOLARLOG_SENSOR_TYPES: tuple[SolarLogCoordinatorSensorEntityDescription, ...]
26
+ BATTERY_SENSOR_TYPES: tuple[SolarLogBatterySensorEntityDescription, ...]
22
27
  INVERTER_SENSOR_TYPES: tuple[SolarLogInverterSensorEntityDescription, ...]
23
28
 
24
29
  async def async_setup_entry(hass: HomeAssistant, entry: SolarlogConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
@@ -28,6 +33,11 @@ class SolarLogCoordinatorSensor(SolarLogCoordinatorEntity, SensorEntity):
28
33
  @property
29
34
  def native_value(self) -> StateType | datetime: ...
30
35
 
36
+ class SolarLogBatterySensor(SolarLogCoordinatorEntity, SensorEntity):
37
+ entity_description: SolarLogBatterySensorEntityDescription
38
+ @property
39
+ def native_value(self) -> StateType: ...
40
+
31
41
  class SolarLogInverterSensor(SolarLogInverterEntity, SensorEntity):
32
42
  entity_description: SolarLogInverterSensorEntityDescription
33
43
  @property
@@ -11,7 +11,6 @@ type SpeedTestConfigEntry = ConfigEntry[SpeedTestDataCoordinator]
11
11
 
12
12
  class SpeedTestDataCoordinator(DataUpdateCoordinator[dict[str, Any]]):
13
13
  config_entry: SpeedTestConfigEntry
14
- hass: Incomplete
15
14
  api: Incomplete
16
15
  servers: dict[str, dict]
17
16
  def __init__(self, hass: HomeAssistant, config_entry: SpeedTestConfigEntry, api: speedtest.Speedtest) -> None: ...
@@ -3,5 +3,4 @@ from typing import Final
3
3
 
4
4
  DOMAIN: Final[str]
5
5
  LOGGER: Incomplete
6
- ATTR_CONFIG_ENTRY_ID: str
7
6
  SERVICE_GET_FORECAST: str