homeassistant-stubs 2025.10.4__py3-none-any.whl → 2025.11.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.

Potentially problematic release.


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

Files changed (453) hide show
  1. homeassistant-stubs/components/acaia/coordinator.pyi +2 -0
  2. homeassistant-stubs/components/airly/config_flow.pyi +3 -0
  3. homeassistant-stubs/components/airos/__init__.pyi +4 -2
  4. homeassistant-stubs/components/airos/config_flow.pyi +10 -1
  5. homeassistant-stubs/components/airos/coordinator.pyi +1 -1
  6. homeassistant-stubs/components/airthings/config_flow.pyi +1 -0
  7. homeassistant-stubs/components/airthings_ble/config_flow.pyi +4 -2
  8. homeassistant-stubs/components/airthings_ble/sensor.pyi +2 -1
  9. homeassistant-stubs/components/alarm_control_panel/__init__.pyi +0 -10
  10. homeassistant-stubs/components/alexa_devices/const.pyi +2 -0
  11. homeassistant-stubs/components/alexa_devices/sensor.pyi +12 -2
  12. homeassistant-stubs/components/androidtv_remote/config_flow.pyi +2 -0
  13. homeassistant-stubs/components/apple_tv/__init__.pyi +3 -3
  14. homeassistant-stubs/components/assist_pipeline/__init__.pyi +3 -3
  15. homeassistant-stubs/components/assist_pipeline/pipeline.pyi +1 -1
  16. homeassistant-stubs/components/asuswrt/bridge.pyi +9 -9
  17. homeassistant-stubs/components/asuswrt/config_flow.pyi +1 -1
  18. homeassistant-stubs/components/asuswrt/device_tracker.pyi +0 -3
  19. homeassistant-stubs/components/asuswrt/helpers.pyi +2 -3
  20. homeassistant-stubs/components/asuswrt/router.pyi +1 -1
  21. homeassistant-stubs/components/backup/http.pyi +1 -0
  22. homeassistant-stubs/components/backup/manager.pyi +2 -1
  23. homeassistant-stubs/components/backup/util.pyi +2 -32
  24. homeassistant-stubs/components/bang_olufsen/media_player.pyi +5 -5
  25. homeassistant-stubs/components/bluetooth/__init__.pyi +2 -5
  26. homeassistant-stubs/components/bluetooth/api.pyi +2 -0
  27. homeassistant-stubs/components/bluetooth/manager.pyi +2 -0
  28. homeassistant-stubs/components/bryant_evolution/climate.pyi +2 -2
  29. homeassistant-stubs/components/calendar/trigger.pyi +1 -1
  30. homeassistant-stubs/components/camera/__init__.pyi +1 -9
  31. homeassistant-stubs/components/cert_expiry/config_flow.pyi +1 -1
  32. homeassistant-stubs/components/cert_expiry/errors.pyi +1 -0
  33. homeassistant-stubs/components/cert_expiry/helper.pyi +1 -1
  34. homeassistant-stubs/components/cloud/__init__.pyi +2 -1
  35. homeassistant-stubs/components/cloud/client.pyi +1 -1
  36. homeassistant-stubs/components/cloud/const.pyi +1 -1
  37. homeassistant-stubs/components/comelit/binary_sensor.pyi +1 -0
  38. homeassistant-stubs/components/comelit/cover.pyi +2 -2
  39. homeassistant-stubs/components/comelit/light.pyi +1 -1
  40. homeassistant-stubs/components/comelit/sensor.pyi +1 -0
  41. homeassistant-stubs/components/comelit/switch.pyi +1 -1
  42. homeassistant-stubs/components/comelit/utils.pyi +5 -1
  43. homeassistant-stubs/components/config/config_entries.pyi +5 -1
  44. homeassistant-stubs/components/cover/__init__.pyi +1 -11
  45. homeassistant-stubs/components/demo/valve.pyi +14 -5
  46. homeassistant-stubs/components/derivative/__init__.pyi +0 -1
  47. homeassistant-stubs/components/derivative/config_flow.pyi +1 -0
  48. homeassistant-stubs/components/derivative/sensor.pyi +2 -1
  49. homeassistant-stubs/components/device_automation/condition.pyi +7 -6
  50. homeassistant-stubs/components/devolo_home_control/binary_sensor.pyi +1 -1
  51. homeassistant-stubs/components/devolo_home_control/entity.pyi +1 -2
  52. homeassistant-stubs/components/devolo_home_control/sensor.pyi +1 -1
  53. homeassistant-stubs/components/devolo_home_control/subscriber.pyi +0 -1
  54. homeassistant-stubs/components/devolo_home_control/switch.pyi +1 -1
  55. homeassistant-stubs/components/dnsip/sensor.pyi +3 -3
  56. homeassistant-stubs/components/ecovacs/button.pyi +1 -1
  57. homeassistant-stubs/components/ecovacs/select.pyi +14 -2
  58. homeassistant-stubs/components/eheimdigital/sensor.pyi +1 -2
  59. homeassistant-stubs/components/enphase_envoy/sensor.pyi +4 -22
  60. homeassistant-stubs/components/eq3btsmart/sensor.pyi +1 -2
  61. homeassistant-stubs/components/esphome/__init__.pyi +1 -1
  62. homeassistant-stubs/components/esphome/assist_satellite.pyi +12 -2
  63. homeassistant-stubs/components/esphome/climate.pyi +1 -0
  64. homeassistant-stubs/components/esphome/config_flow.pyi +7 -4
  65. homeassistant-stubs/components/esphome/const.pyi +2 -0
  66. homeassistant-stubs/components/esphome/entry_data.pyi +1 -0
  67. homeassistant-stubs/components/esphome/manager.pyi +8 -3
  68. homeassistant-stubs/components/esphome/select.pyi +1 -1
  69. homeassistant-stubs/components/evohome/climate.pyi +1 -1
  70. homeassistant-stubs/components/fastdotcom/coordinator.pyi +2 -2
  71. homeassistant-stubs/components/fastdotcom/sensor.pyi +1 -1
  72. homeassistant-stubs/components/filter/__init__.pyi +0 -1
  73. homeassistant-stubs/components/filter/config_flow.pyi +1 -0
  74. homeassistant-stubs/components/firefly_iii/__init__.pyi +8 -0
  75. homeassistant-stubs/components/firefly_iii/config_flow.pyi +24 -0
  76. homeassistant-stubs/components/firefly_iii/const.pyi +3 -0
  77. homeassistant-stubs/components/firefly_iii/coordinator.pyi +30 -0
  78. homeassistant-stubs/components/firefly_iii/diagnostics.pyi +11 -0
  79. homeassistant-stubs/components/firefly_iii/entity.pyi +30 -0
  80. homeassistant-stubs/components/firefly_iii/sensor.pyi +66 -0
  81. homeassistant-stubs/components/fritz/coordinator.pyi +3 -0
  82. homeassistant-stubs/components/fritz/models.pyi +2 -2
  83. homeassistant-stubs/components/fritz/services.pyi +3 -0
  84. homeassistant-stubs/components/fritzbox/climate.pyi +2 -5
  85. homeassistant-stubs/components/generic_hygrostat/__init__.pyi +0 -1
  86. homeassistant-stubs/components/generic_hygrostat/config_flow.pyi +1 -0
  87. homeassistant-stubs/components/generic_thermostat/__init__.pyi +0 -1
  88. homeassistant-stubs/components/generic_thermostat/config_flow.pyi +1 -0
  89. homeassistant-stubs/components/github/__init__.pyi +12 -0
  90. homeassistant-stubs/components/github/config_flow.pyi +28 -0
  91. homeassistant-stubs/components/github/const.pyi +10 -0
  92. homeassistant-stubs/components/github/coordinator.pyi +26 -0
  93. homeassistant-stubs/components/github/diagnostics.pyi +7 -0
  94. homeassistant-stubs/components/github/sensor.pyi +37 -0
  95. homeassistant-stubs/components/go2rtc/__init__.pyi +1 -2
  96. homeassistant-stubs/components/google_assistant_sdk/config_flow.pyi +2 -1
  97. homeassistant-stubs/components/google_drive/api.pyi +1 -0
  98. homeassistant-stubs/components/google_sheets/services.pyi +9 -2
  99. homeassistant-stubs/components/group/__init__.pyi +0 -1
  100. homeassistant-stubs/components/group/config_flow.pyi +2 -0
  101. homeassistant-stubs/components/group/entity.pyi +3 -0
  102. homeassistant-stubs/components/group/light.pyi +1 -1
  103. homeassistant-stubs/components/group/util.pyi +1 -0
  104. homeassistant-stubs/components/group/valve.pyi +47 -0
  105. homeassistant-stubs/components/habitica/__init__.pyi +1 -0
  106. homeassistant-stubs/components/habitica/config_flow.pyi +11 -3
  107. homeassistant-stubs/components/habitica/const.pyi +1 -0
  108. homeassistant-stubs/components/habitica/coordinator.pyi +9 -3
  109. homeassistant-stubs/components/habitica/entity.pyi +15 -2
  110. homeassistant-stubs/components/habitica/image.pyi +6 -2
  111. homeassistant-stubs/components/habitica/notify.pyi +42 -0
  112. homeassistant-stubs/components/habitica/sensor.pyi +9 -4
  113. homeassistant-stubs/components/hardkernel/hardware.pyi +1 -1
  114. homeassistant-stubs/components/hardware/__init__.pyi +2 -10
  115. homeassistant-stubs/components/history_stats/__init__.pyi +0 -1
  116. homeassistant-stubs/components/history_stats/config_flow.pyi +1 -0
  117. homeassistant-stubs/components/home_connect/application_credentials.pyi +1 -0
  118. homeassistant-stubs/components/home_connect/const.pyi +1 -0
  119. homeassistant-stubs/components/home_connect/select.pyi +1 -1
  120. homeassistant-stubs/components/homeassistant_green/config_flow.pyi +4 -2
  121. homeassistant-stubs/components/homeassistant_green/hardware.pyi +1 -1
  122. homeassistant-stubs/components/homeassistant_hardware/const.pyi +1 -0
  123. homeassistant-stubs/components/homeassistant_hardware/helpers.pyi +12 -2
  124. homeassistant-stubs/components/homeassistant_hardware/switch.pyi +23 -0
  125. homeassistant-stubs/components/homeassistant_sky_connect/__init__.pyi +13 -4
  126. homeassistant-stubs/components/homeassistant_sky_connect/config_flow.pyi +4 -0
  127. homeassistant-stubs/components/homeassistant_sky_connect/hardware.pyi +1 -1
  128. homeassistant-stubs/components/homeassistant_sky_connect/switch.pyi +17 -0
  129. homeassistant-stubs/components/homeassistant_sky_connect/update.pyi +5 -7
  130. homeassistant-stubs/components/homeassistant_yellow/__init__.pyi +12 -4
  131. homeassistant-stubs/components/homeassistant_yellow/config_flow.pyi +1 -1
  132. homeassistant-stubs/components/homeassistant_yellow/hardware.pyi +1 -1
  133. homeassistant-stubs/components/homeassistant_yellow/switch.pyi +17 -0
  134. homeassistant-stubs/components/homeassistant_yellow/update.pyi +5 -7
  135. homeassistant-stubs/components/homee/__init__.pyi +1 -0
  136. homeassistant-stubs/components/homewizard/__init__.pyi +2 -0
  137. homeassistant-stubs/components/husqvarna_automower/button.pyi +1 -0
  138. homeassistant-stubs/components/husqvarna_automower/entity.pyi +8 -4
  139. homeassistant-stubs/components/husqvarna_automower/lawn_mower.pyi +5 -0
  140. homeassistant-stubs/components/husqvarna_automower/select.pyi +1 -0
  141. homeassistant-stubs/components/husqvarna_automower/sensor.pyi +2 -0
  142. homeassistant-stubs/components/husqvarna_automower/switch.pyi +2 -0
  143. homeassistant-stubs/components/imap/__init__.pyi +3 -1
  144. homeassistant-stubs/components/imap/coordinator.pyi +4 -1
  145. homeassistant-stubs/components/inels/__init__.pyi +18 -0
  146. homeassistant-stubs/components/inels/config_flow.pyi +13 -0
  147. homeassistant-stubs/components/inels/const.pyi +7 -0
  148. homeassistant-stubs/components/inels/entity.pyi +20 -0
  149. homeassistant-stubs/components/inels/switch.pyi +34 -0
  150. homeassistant-stubs/components/knx/climate.pyi +23 -11
  151. homeassistant-stubs/components/knx/const.pyi +14 -0
  152. homeassistant-stubs/components/knx/schema.pyi +1 -13
  153. homeassistant-stubs/components/knx/sensor.pyi +8 -9
  154. homeassistant-stubs/components/knx/storage/const.pyi +20 -0
  155. homeassistant-stubs/components/knx/storage/entity_store_schema.pyi +13 -2
  156. homeassistant-stubs/components/libre_hardware_monitor/__init__.pyi +3 -0
  157. homeassistant-stubs/components/libre_hardware_monitor/sensor.pyi +2 -3
  158. homeassistant-stubs/components/litterrobot/update.pyi +2 -0
  159. homeassistant-stubs/components/lock/__init__.pyi +1 -6
  160. homeassistant-stubs/components/london_underground/__init__.pyi +9 -0
  161. homeassistant-stubs/components/london_underground/config_flow.pyi +22 -0
  162. homeassistant-stubs/components/london_underground/const.pyi +1 -0
  163. homeassistant-stubs/components/london_underground/coordinator.pyi +3 -1
  164. homeassistant-stubs/components/london_underground/sensor.pyi +10 -5
  165. homeassistant-stubs/components/lunatone/__init__.pyi +12 -0
  166. homeassistant-stubs/components/lunatone/config_flow.pyi +16 -0
  167. homeassistant-stubs/components/lunatone/const.pyi +3 -0
  168. homeassistant-stubs/components/lunatone/coordinator.pyi +29 -0
  169. homeassistant-stubs/components/lunatone/light.pyi +43 -0
  170. homeassistant-stubs/components/matrix/__init__.pyi +10 -2
  171. homeassistant-stubs/components/matrix/const.pyi +5 -0
  172. homeassistant-stubs/components/matrix/services.pyi +3 -1
  173. homeassistant-stubs/components/matter/__init__.pyi +5 -0
  174. homeassistant-stubs/components/matter/binary_sensor.pyi +1 -1
  175. homeassistant-stubs/components/matter/button.pyi +1 -1
  176. homeassistant-stubs/components/matter/climate.pyi +7 -1
  177. homeassistant-stubs/components/matter/cover.pyi +6 -2
  178. homeassistant-stubs/components/matter/entity.pyi +4 -2
  179. homeassistant-stubs/components/matter/event.pyi +5 -1
  180. homeassistant-stubs/components/matter/fan.pyi +5 -1
  181. homeassistant-stubs/components/matter/light.pyi +6 -2
  182. homeassistant-stubs/components/matter/lock.pyi +5 -1
  183. homeassistant-stubs/components/matter/models.pyi +3 -3
  184. homeassistant-stubs/components/matter/number.pyi +1 -1
  185. homeassistant-stubs/components/matter/select.pyi +1 -1
  186. homeassistant-stubs/components/matter/sensor.pyi +4 -1
  187. homeassistant-stubs/components/matter/services.pyi +11 -0
  188. homeassistant-stubs/components/matter/switch.pyi +5 -2
  189. homeassistant-stubs/components/matter/update.pyi +4 -1
  190. homeassistant-stubs/components/matter/vacuum.pyi +6 -2
  191. homeassistant-stubs/components/matter/valve.pyi +6 -2
  192. homeassistant-stubs/components/matter/water_heater.pyi +8 -1
  193. homeassistant-stubs/components/mcp/__init__.pyi +1 -6
  194. homeassistant-stubs/components/mcp/config_flow.pyi +12 -2
  195. homeassistant-stubs/components/mcp/const.pyi +1 -0
  196. homeassistant-stubs/components/mcp/coordinator.pyi +1 -1
  197. homeassistant-stubs/components/mcp_server/__init__.pyi +1 -8
  198. homeassistant-stubs/components/mcp_server/http.pyi +23 -1
  199. homeassistant-stubs/components/mealie/config_flow.pyi +8 -1
  200. homeassistant-stubs/components/media_player/__init__.pyi +1 -9
  201. homeassistant-stubs/components/media_player/const.pyi +10 -69
  202. homeassistant-stubs/components/media_player/intent.pyi +7 -9
  203. homeassistant-stubs/components/metoffice/__init__.pyi +1 -0
  204. homeassistant-stubs/components/metoffice/helpers.pyi +2 -2
  205. homeassistant-stubs/components/metoffice/weather.pyi +11 -11
  206. homeassistant-stubs/components/min_max/__init__.pyi +0 -1
  207. homeassistant-stubs/components/min_max/config_flow.pyi +1 -0
  208. homeassistant-stubs/components/mold_indicator/__init__.pyi +0 -1
  209. homeassistant-stubs/components/mold_indicator/config_flow.pyi +1 -0
  210. homeassistant-stubs/components/mqtt/__init__.pyi +1 -4
  211. homeassistant-stubs/components/mqtt/config_flow.pyi +23 -4
  212. homeassistant-stubs/components/mqtt/const.pyi +7 -1
  213. homeassistant-stubs/components/mqtt/number.pyi +1 -5
  214. homeassistant-stubs/components/mqtt/siren.pyi +1 -9
  215. homeassistant-stubs/components/music_assistant/const.pyi +4 -0
  216. homeassistant-stubs/components/music_assistant/media_player.pyi +1 -1
  217. homeassistant-stubs/components/music_assistant/schemas.pyi +2 -2
  218. homeassistant-stubs/components/nasweb/sensor.pyi +0 -5
  219. homeassistant-stubs/components/nasweb/switch.pyi +1 -0
  220. homeassistant-stubs/components/nextdns/config_flow.pyi +6 -1
  221. homeassistant-stubs/components/number/const.pyi +2 -1
  222. homeassistant-stubs/components/onedrive/backup.pyi +2 -1
  223. homeassistant-stubs/components/onewire/binary_sensor.pyi +5 -12
  224. homeassistant-stubs/components/onewire/const.pyi +0 -2
  225. homeassistant-stubs/components/onewire/diagnostics.pyi +2 -0
  226. homeassistant-stubs/components/onewire/entity.pyi +6 -14
  227. homeassistant-stubs/components/onewire/onewirehub.pyi +5 -5
  228. homeassistant-stubs/components/onewire/select.pyi +3 -10
  229. homeassistant-stubs/components/onewire/sensor.pyi +5 -7
  230. homeassistant-stubs/components/onewire/switch.pyi +7 -14
  231. homeassistant-stubs/components/onkyo/receiver.pyi +1 -1
  232. homeassistant-stubs/components/open_router/entity.pyi +4 -1
  233. homeassistant-stubs/components/openai_conversation/ai_task.pyi +1 -1
  234. homeassistant-stubs/components/openai_conversation/config_flow.pyi +1 -1
  235. homeassistant-stubs/components/openai_conversation/const.pyi +2 -0
  236. homeassistant-stubs/components/openai_conversation/entity.pyi +1 -1
  237. homeassistant-stubs/components/opower/coordinator.pyi +1 -0
  238. homeassistant-stubs/components/ping/__init__.pyi +1 -0
  239. homeassistant-stubs/components/ping/config_flow.pyi +1 -0
  240. homeassistant-stubs/components/ping/device_tracker.pyi +3 -2
  241. homeassistant-stubs/components/ping/entity.pyi +1 -0
  242. homeassistant-stubs/components/portainer/button.pyi +29 -0
  243. homeassistant-stubs/components/portainer/config_flow.pyi +4 -0
  244. homeassistant-stubs/components/portainer/const.pyi +1 -0
  245. homeassistant-stubs/components/portainer/coordinator.pyi +11 -2
  246. homeassistant-stubs/components/portainer/diagnostics.pyi +12 -0
  247. homeassistant-stubs/components/portainer/entity.pyi +2 -0
  248. homeassistant-stubs/components/portainer/sensor.pyi +41 -0
  249. homeassistant-stubs/components/portainer/switch.pyi +35 -0
  250. homeassistant-stubs/components/qbus/entity.pyi +1 -3
  251. homeassistant-stubs/components/raspberry_pi/hardware.pyi +1 -1
  252. homeassistant-stubs/components/recorder/const.pyi +1 -1
  253. homeassistant-stubs/components/recorder/core.pyi +3 -3
  254. homeassistant-stubs/components/recorder/db_schema.pyi +3 -10
  255. homeassistant-stubs/components/recorder/entity_registry.pyi +1 -0
  256. homeassistant-stubs/components/recorder/history/__init__.pyi +2 -2
  257. homeassistant-stubs/components/recorder/migration.pyi +4 -1
  258. homeassistant-stubs/components/recorder/models/statistics.pyi +1 -0
  259. homeassistant-stubs/components/recorder/statistics.pyi +17 -12
  260. homeassistant-stubs/components/recorder/table_managers/states_meta.pyi +0 -1
  261. homeassistant-stubs/components/recorder/table_managers/statistics_meta.pyi +4 -2
  262. homeassistant-stubs/components/recorder/tasks.pyi +1 -0
  263. homeassistant-stubs/components/recorder/util.pyi +1 -1
  264. homeassistant-stubs/components/recorder/websocket_api.pyi +6 -4
  265. homeassistant-stubs/components/renault/sensor.pyi +1 -1
  266. homeassistant-stubs/components/reolink/__init__.pyi +1 -1
  267. homeassistant-stubs/components/reolink/binary_sensor.pyi +15 -0
  268. homeassistant-stubs/components/reolink/siren.pyi +2 -0
  269. homeassistant-stubs/components/reolink/switch.pyi +25 -7
  270. homeassistant-stubs/components/roborock/__init__.pyi +1 -1
  271. homeassistant-stubs/components/roborock/config_flow.pyi +1 -1
  272. homeassistant-stubs/components/roborock/coordinator.pyi +2 -1
  273. homeassistant-stubs/components/roborock/entity.pyi +1 -1
  274. homeassistant-stubs/components/roborock/models.pyi +1 -1
  275. homeassistant-stubs/components/scrape/coordinator.pyi +1 -2
  276. homeassistant-stubs/components/sensibo/__init__.pyi +6 -0
  277. homeassistant-stubs/components/sensibo/climate.pyi +3 -26
  278. homeassistant-stubs/components/sensibo/services.pyi +31 -0
  279. homeassistant-stubs/components/sensor/const.pyi +2 -1
  280. homeassistant-stubs/components/sensor/device_condition.pyi +1 -0
  281. homeassistant-stubs/components/sensor/device_trigger.pyi +1 -0
  282. homeassistant-stubs/components/sensor/recorder.pyi +6 -3
  283. homeassistant-stubs/components/sfr_box/__init__.pyi +4 -6
  284. homeassistant-stubs/components/sfr_box/binary_sensor.pyi +5 -14
  285. homeassistant-stubs/components/sfr_box/button.pyi +4 -9
  286. homeassistant-stubs/components/sfr_box/config_flow.pyi +2 -1
  287. homeassistant-stubs/components/sfr_box/coordinator.pyi +13 -2
  288. homeassistant-stubs/components/sfr_box/diagnostics.pyi +2 -4
  289. homeassistant-stubs/components/sfr_box/entity.pyi +18 -0
  290. homeassistant-stubs/components/sfr_box/sensor.pyi +4 -13
  291. homeassistant-stubs/components/shelly/__init__.pyi +2 -2
  292. homeassistant-stubs/components/shelly/binary_sensor.pyi +6 -2
  293. homeassistant-stubs/components/shelly/button.pyi +26 -16
  294. homeassistant-stubs/components/shelly/climate.pyi +61 -7
  295. homeassistant-stubs/components/shelly/const.pyi +15 -3
  296. homeassistant-stubs/components/shelly/cover.pyi +31 -10
  297. homeassistant-stubs/components/shelly/entity.pyi +5 -4
  298. homeassistant-stubs/components/shelly/event.pyi +4 -0
  299. homeassistant-stubs/components/shelly/light.pyi +23 -7
  300. homeassistant-stubs/components/shelly/number.pyi +11 -2
  301. homeassistant-stubs/components/shelly/repairs.pyi +2 -2
  302. homeassistant-stubs/components/shelly/select.pyi +4 -1
  303. homeassistant-stubs/components/shelly/sensor.pyi +8 -7
  304. homeassistant-stubs/components/shelly/switch.pyi +7 -4
  305. homeassistant-stubs/components/shelly/text.pyi +4 -1
  306. homeassistant-stubs/components/shelly/update.pyi +4 -0
  307. homeassistant-stubs/components/shelly/utils.pyi +10 -5
  308. homeassistant-stubs/components/shelly/valve.pyi +34 -5
  309. homeassistant-stubs/components/sleep_as_android/event.pyi +1 -0
  310. homeassistant-stubs/components/sma/__init__.pyi +15 -0
  311. homeassistant-stubs/components/sma/config_flow.pyi +27 -0
  312. homeassistant-stubs/components/sma/const.pyi +11 -0
  313. homeassistant-stubs/components/sma/coordinator.pyi +28 -0
  314. homeassistant-stubs/components/sma/diagnostics.pyi +10 -0
  315. homeassistant-stubs/components/sma/sensor.pyi +33 -0
  316. homeassistant-stubs/components/sql/__init__.pyi +2 -4
  317. homeassistant-stubs/components/sql/sensor.pyi +6 -13
  318. homeassistant-stubs/components/sql/services.pyi +17 -0
  319. homeassistant-stubs/components/sql/util.pyi +16 -3
  320. homeassistant-stubs/components/squeezebox/__init__.pyi +4 -1
  321. homeassistant-stubs/components/squeezebox/browse_media.pyi +4 -3
  322. homeassistant-stubs/components/squeezebox/button.pyi +1 -0
  323. homeassistant-stubs/components/squeezebox/const.pyi +0 -1
  324. homeassistant-stubs/components/squeezebox/media_player.pyi +7 -2
  325. homeassistant-stubs/components/squeezebox/switch.pyi +1 -0
  326. homeassistant-stubs/components/squeezebox/util.pyi +6 -0
  327. homeassistant-stubs/components/suez_water/coordinator.pyi +2 -1
  328. homeassistant-stubs/components/sun/condition.pyi +10 -5
  329. homeassistant-stubs/components/switch_as_x/__init__.pyi +0 -1
  330. homeassistant-stubs/components/switch_as_x/config_flow.pyi +1 -0
  331. homeassistant-stubs/components/switchbot_cloud/climate.pyi +2 -0
  332. homeassistant-stubs/components/switchbot_cloud/lock.pyi +7 -2
  333. homeassistant-stubs/components/switchbot_cloud/sensor.pyi +25 -2
  334. homeassistant-stubs/components/switchbot_cloud/switch.pyi +13 -1
  335. homeassistant-stubs/components/switchbot_cloud/vacuum.pyi +4 -4
  336. homeassistant-stubs/components/switcher_kis/button.pyi +5 -6
  337. homeassistant-stubs/components/switcher_kis/climate.pyi +3 -3
  338. homeassistant-stubs/components/switcher_kis/const.pyi +1 -0
  339. homeassistant-stubs/components/switcher_kis/cover.pyi +4 -3
  340. homeassistant-stubs/components/switcher_kis/light.pyi +3 -2
  341. homeassistant-stubs/components/switcher_kis/sensor.pyi +4 -2
  342. homeassistant-stubs/components/switcher_kis/switch.pyi +3 -5
  343. homeassistant-stubs/components/systemmonitor/__init__.pyi +0 -1
  344. homeassistant-stubs/components/systemmonitor/config_flow.pyi +1 -0
  345. homeassistant-stubs/components/systemmonitor/coordinator.pyi +1 -0
  346. homeassistant-stubs/components/systemmonitor/sensor.pyi +3 -1
  347. homeassistant-stubs/components/telegram_bot/__init__.pyi +2 -1
  348. homeassistant-stubs/components/telegram_bot/bot.pyi +10 -5
  349. homeassistant-stubs/components/telegram_bot/const.pyi +9 -0
  350. homeassistant-stubs/components/telegram_bot/diagnostics.pyi +11 -0
  351. homeassistant-stubs/components/telegram_bot/entity.pyi +16 -0
  352. homeassistant-stubs/components/telegram_bot/event.pyi +18 -0
  353. homeassistant-stubs/components/telegram_bot/notify.pyi +6 -10
  354. homeassistant-stubs/components/tibber/coordinator.pyi +1 -0
  355. homeassistant-stubs/components/tod/__init__.pyi +0 -1
  356. homeassistant-stubs/components/tod/config_flow.pyi +1 -0
  357. homeassistant-stubs/components/tolo/__init__.pyi +3 -5
  358. homeassistant-stubs/components/tolo/binary_sensor.pyi +4 -6
  359. homeassistant-stubs/components/tolo/button.pyi +3 -5
  360. homeassistant-stubs/components/tolo/climate.pyi +3 -5
  361. homeassistant-stubs/components/tolo/coordinator.pyi +3 -2
  362. homeassistant-stubs/components/tolo/entity.pyi +2 -3
  363. homeassistant-stubs/components/tolo/fan.pyi +3 -5
  364. homeassistant-stubs/components/tolo/light.pyi +3 -5
  365. homeassistant-stubs/components/tolo/number.pyi +3 -5
  366. homeassistant-stubs/components/tolo/select.pyi +4 -5
  367. homeassistant-stubs/components/tolo/sensor.pyi +3 -5
  368. homeassistant-stubs/components/tolo/switch.pyi +3 -5
  369. homeassistant-stubs/components/trend/__init__.pyi +0 -1
  370. homeassistant-stubs/components/trend/config_flow.pyi +1 -0
  371. homeassistant-stubs/components/tts/__init__.pyi +2 -3
  372. homeassistant-stubs/components/unifi/light.pyi +44 -0
  373. homeassistant-stubs/components/uptimerobot/binary_sensor.pyi +2 -0
  374. homeassistant-stubs/components/uptimerobot/sensor.pyi +2 -0
  375. homeassistant-stubs/components/uptimerobot/switch.pyi +2 -0
  376. homeassistant-stubs/components/uptimerobot/utils.pyi +5 -0
  377. homeassistant-stubs/components/usb/__init__.pyi +2 -0
  378. homeassistant-stubs/components/usb/utils.pyi +7 -0
  379. homeassistant-stubs/components/vacuum/__init__.pyi +0 -15
  380. homeassistant-stubs/components/vivotek/__init__.pyi +0 -0
  381. homeassistant-stubs/components/vivotek/camera.pyi +35 -0
  382. homeassistant-stubs/components/vodafone_station/__init__.pyi +3 -1
  383. homeassistant-stubs/components/vodafone_station/config_flow.pyi +3 -2
  384. homeassistant-stubs/components/vodafone_station/const.pyi +3 -0
  385. homeassistant-stubs/components/vodafone_station/coordinator.pyi +4 -4
  386. homeassistant-stubs/components/volvo/__init__.pyi +2 -0
  387. homeassistant-stubs/components/volvo/binary_sensor.pyi +1 -3
  388. homeassistant-stubs/components/volvo/button.pyi +27 -0
  389. homeassistant-stubs/components/volvo/coordinator.pyi +12 -14
  390. homeassistant-stubs/components/volvo/device_tracker.pyi +23 -0
  391. homeassistant-stubs/components/volvo/diagnostics.pyi +12 -0
  392. homeassistant-stubs/components/volvo/entity.pyi +9 -5
  393. homeassistant-stubs/components/volvo/sensor.pyi +9 -8
  394. homeassistant-stubs/components/waqi/__init__.pyi +8 -0
  395. homeassistant-stubs/components/waqi/config_flow.pyi +14 -9
  396. homeassistant-stubs/components/waqi/const.pyi +1 -1
  397. homeassistant-stubs/components/waqi/coordinator.pyi +5 -4
  398. homeassistant-stubs/components/webostv/media_player.pyi +3 -0
  399. homeassistant-stubs/components/websocket_api/commands.pyi +2 -0
  400. homeassistant-stubs/components/wled/select.pyi +6 -3
  401. homeassistant-stubs/components/worldclock/__init__.pyi +0 -1
  402. homeassistant-stubs/components/worldclock/config_flow.pyi +1 -0
  403. homeassistant-stubs/components/zeroconf/__init__.pyi +3 -1
  404. homeassistant-stubs/components/zeroconf/discovery.pyi +8 -1
  405. homeassistant-stubs/components/zeroconf/repairs.pyi +13 -0
  406. homeassistant-stubs/components/zone/condition.pyi +10 -4
  407. homeassistant-stubs/components/zwave_js/config_flow.pyi +1 -0
  408. homeassistant-stubs/components/zwave_js/device_trigger.pyi +1 -1
  409. homeassistant-stubs/components/zwave_js/triggers/event.pyi +6 -8
  410. homeassistant-stubs/components/zwave_js/triggers/value_updated.pyi +6 -6
  411. homeassistant-stubs/config_entries.pyi +9 -0
  412. homeassistant-stubs/const.pyi +4 -21
  413. homeassistant-stubs/core.pyi +1 -7
  414. homeassistant-stubs/data_entry_flow.pyi +2 -0
  415. homeassistant-stubs/helpers/automation.pyi +6 -0
  416. homeassistant-stubs/helpers/condition.pyi +15 -5
  417. homeassistant-stubs/helpers/debounce.pyi +6 -1
  418. homeassistant-stubs/helpers/entity_platform.pyi +1 -1
  419. homeassistant-stubs/helpers/event.pyi +1 -1
  420. homeassistant-stubs/helpers/instance_id.pyi +1 -0
  421. homeassistant-stubs/helpers/llm.pyi +6 -1
  422. homeassistant-stubs/helpers/selector.pyi +5 -4
  423. homeassistant-stubs/helpers/service.pyi +4 -4
  424. homeassistant-stubs/helpers/template/__init__.pyi +0 -5
  425. homeassistant-stubs/helpers/trigger.pyi +18 -5
  426. homeassistant-stubs/helpers/update_coordinator.pyi +1 -0
  427. homeassistant-stubs/runner.pyi +1 -1
  428. homeassistant-stubs/util/async_iterator.pyi +33 -0
  429. homeassistant-stubs/util/unit_conversion.pyi +15 -0
  430. {homeassistant_stubs-2025.10.4.dist-info → homeassistant_stubs-2025.11.0b0.dist-info}/METADATA +2 -2
  431. {homeassistant_stubs-2025.10.4.dist-info → homeassistant_stubs-2025.11.0b0.dist-info}/RECORD +433 -397
  432. homeassistant-stubs/components/elevenlabs/__init__.pyi +0 -22
  433. homeassistant-stubs/components/elevenlabs/config_flow.pyi +0 -33
  434. homeassistant-stubs/components/elevenlabs/const.pyi +0 -14
  435. homeassistant-stubs/components/elevenlabs/tts.pyi +0 -36
  436. homeassistant-stubs/components/neato/__init__.pyi +0 -15
  437. homeassistant-stubs/components/neato/api.pyi +0 -17
  438. homeassistant-stubs/components/neato/application_credentials.pyi +0 -6
  439. homeassistant-stubs/components/neato/button.pyi +0 -18
  440. homeassistant-stubs/components/neato/camera.pyi +0 -34
  441. homeassistant-stubs/components/neato/config_flow.pyi +0 -15
  442. homeassistant-stubs/components/neato/const.pyi +0 -13
  443. homeassistant-stubs/components/neato/entity.pyi +0 -11
  444. homeassistant-stubs/components/neato/hub.pyi +0 -17
  445. homeassistant-stubs/components/neato/sensor.pyi +0 -30
  446. homeassistant-stubs/components/neato/switch.pyi +0 -34
  447. homeassistant-stubs/components/neato/vacuum.pyi +0 -70
  448. homeassistant-stubs/components/recorder/history/legacy.pyi +0 -48
  449. homeassistant-stubs/components/recorder/history/modern.pyi +0 -39
  450. homeassistant-stubs/components/recorder/models/legacy.pyi +0 -45
  451. homeassistant-stubs/components/sfr_box/models.pyi +0 -12
  452. {homeassistant_stubs-2025.10.4.dist-info → homeassistant_stubs-2025.11.0b0.dist-info}/WHEEL +0 -0
  453. {homeassistant_stubs-2025.10.4.dist-info → homeassistant_stubs-2025.11.0b0.dist-info}/licenses/LICENSE +0 -0
@@ -1,5 +1,6 @@
1
+ from .const import MODEL_FRANKEVER_IRRIGATION_CONTROLLER as MODEL_FRANKEVER_IRRIGATION_CONTROLLER, MODEL_LINKEDGO_ST1820_THERMOSTAT as MODEL_LINKEDGO_ST1820_THERMOSTAT, MODEL_LINKEDGO_ST802_THERMOSTAT as MODEL_LINKEDGO_ST802_THERMOSTAT, MODEL_NEO_WATER_VALVE as MODEL_NEO_WATER_VALVE, MODEL_TOP_EV_CHARGER_EVE01 as MODEL_TOP_EV_CHARGER_EVE01, ROLE_GENERIC as ROLE_GENERIC
1
2
  from .coordinator import ShellyBlockCoordinator as ShellyBlockCoordinator, ShellyConfigEntry as ShellyConfigEntry, ShellyRpcCoordinator as ShellyRpcCoordinator
2
- from .entity import BlockEntityDescription as BlockEntityDescription, RpcEntityDescription as RpcEntityDescription, ShellyBlockAttributeEntity as ShellyBlockAttributeEntity, ShellyRpcAttributeEntity as ShellyRpcAttributeEntity, ShellySleepingBlockAttributeEntity as ShellySleepingBlockAttributeEntity, async_setup_entry_attribute_entities as async_setup_entry_attribute_entities, async_setup_entry_rpc as async_setup_entry_rpc
3
+ from .entity import BlockEntityDescription as BlockEntityDescription, RpcEntityDescription as RpcEntityDescription, ShellyBlockAttributeEntity as ShellyBlockAttributeEntity, ShellyRpcAttributeEntity as ShellyRpcAttributeEntity, ShellySleepingBlockAttributeEntity as ShellySleepingBlockAttributeEntity, async_setup_entry_attribute_entities as async_setup_entry_attribute_entities, async_setup_entry_rpc as async_setup_entry_rpc, rpc_call as rpc_call
3
4
  from .utils import async_remove_orphaned_entities as async_remove_orphaned_entities, get_device_entry_gen as get_device_entry_gen, get_virtual_component_ids as get_virtual_component_ids, is_block_exclude_from_relay as is_block_exclude_from_relay, is_rpc_exclude_from_relay as is_rpc_exclude_from_relay, is_view_for_platform as is_view_for_platform
4
5
  from _typeshed import Incomplete
5
6
  from aioshelly.block_device import Block as Block
@@ -26,16 +27,16 @@ class RpcSwitchDescription(RpcEntityDescription, SwitchEntityDescription):
26
27
  is_on: Callable[[dict[str, Any]], bool]
27
28
  method_on: str
28
29
  method_off: str
29
- method_params_fn: Callable[[int | None, bool], dict]
30
+ method_params_fn: Callable[[int | None, bool], tuple]
30
31
 
31
32
  RPC_RELAY_SWITCHES: Incomplete
32
33
  RPC_SWITCHES: Incomplete
33
34
 
34
35
  async def async_setup_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
35
36
  @callback
36
- def async_setup_block_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
37
+ def _async_setup_block_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
37
38
  @callback
38
- def async_setup_rpc_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
39
+ def _async_setup_rpc_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
39
40
 
40
41
  class BlockSleepingMotionSwitch(ShellySleepingBlockAttributeEntity, RestoreEntity, SwitchEntity):
41
42
  entity_description: BlockSwitchDescription
@@ -64,7 +65,9 @@ class RpcSwitch(ShellyRpcAttributeEntity, SwitchEntity):
64
65
  entity_description: RpcSwitchDescription
65
66
  @property
66
67
  def is_on(self) -> bool: ...
68
+ @rpc_call
67
69
  async def async_turn_on(self, **kwargs: Any) -> None: ...
70
+ @rpc_call
68
71
  async def async_turn_off(self, **kwargs: Any) -> None: ...
69
72
 
70
73
  class RpcRelaySwitch(RpcSwitch):
@@ -1,10 +1,11 @@
1
+ from .const import ROLE_GENERIC as ROLE_GENERIC
1
2
  from .coordinator import ShellyConfigEntry as ShellyConfigEntry
2
3
  from .entity import RpcEntityDescription as RpcEntityDescription, ShellyRpcAttributeEntity as ShellyRpcAttributeEntity, async_setup_entry_rpc as async_setup_entry_rpc, rpc_call as rpc_call
3
4
  from .utils import async_remove_orphaned_entities as async_remove_orphaned_entities, get_device_entry_gen as get_device_entry_gen, get_virtual_component_ids as get_virtual_component_ids, is_view_for_platform as is_view_for_platform
4
5
  from _typeshed import Incomplete
5
6
  from dataclasses import dataclass
6
7
  from homeassistant.components.text import TextEntity as TextEntity, TextEntityDescription as TextEntityDescription
7
- from homeassistant.core import HomeAssistant as HomeAssistant
8
+ from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
8
9
  from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
9
10
  from typing import Final
10
11
 
@@ -16,6 +17,8 @@ class RpcTextDescription(RpcEntityDescription, TextEntityDescription): ...
16
17
  RPC_TEXT_ENTITIES: Final[Incomplete]
17
18
 
18
19
  async def async_setup_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
20
+ @callback
21
+ def _async_setup_rpc_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
19
22
 
20
23
  class RpcText(ShellyRpcAttributeEntity, TextEntity):
21
24
  entity_description: RpcTextDescription
@@ -30,6 +30,10 @@ REST_UPDATES: Final[Incomplete]
30
30
  RPC_UPDATES: Final[Incomplete]
31
31
 
32
32
  async def async_setup_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
33
+ @callback
34
+ def _async_setup_block_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
35
+ @callback
36
+ def _async_setup_rpc_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
33
37
 
34
38
  class RestUpdateEntity(ShellyRestAttributeEntity, UpdateEntity):
35
39
  _attr_supported_features: Incomplete
@@ -1,4 +1,4 @@
1
- from .const import API_WS_URL as API_WS_URL, All_LIGHT_TYPES as All_LIGHT_TYPES, BASIC_INPUTS_EVENTS_TYPES as BASIC_INPUTS_EVENTS_TYPES, COMPONENT_ID_PATTERN as COMPONENT_ID_PATTERN, CONF_COAP_PORT as CONF_COAP_PORT, CONF_GEN as CONF_GEN, DEVICES_WITHOUT_FIRMWARE_CHANGELOG as DEVICES_WITHOUT_FIRMWARE_CHANGELOG, DEVICE_UNIT_MAP as DEVICE_UNIT_MAP, DOMAIN as DOMAIN, FIRMWARE_UNSUPPORTED_ISSUE_ID as FIRMWARE_UNSUPPORTED_ISSUE_ID, GEN1_RELEASE_URL as GEN1_RELEASE_URL, GEN2_BETA_RELEASE_URL as GEN2_BETA_RELEASE_URL, GEN2_RELEASE_URL as GEN2_RELEASE_URL, LOGGER as LOGGER, MAX_SCRIPT_SIZE as MAX_SCRIPT_SIZE, RPC_INPUTS_EVENTS_TYPES as RPC_INPUTS_EVENTS_TYPES, SHAIR_MAX_WORK_HOURS as SHAIR_MAX_WORK_HOURS, SHBTN_INPUTS_EVENTS_TYPES as SHBTN_INPUTS_EVENTS_TYPES, SHBTN_MODELS as SHBTN_MODELS, SHELLY_EMIT_EVENT_PATTERN as SHELLY_EMIT_EVENT_PATTERN, SHIX3_1_INPUTS_EVENTS_TYPES as SHIX3_1_INPUTS_EVENTS_TYPES, UPTIME_DEVIATION as UPTIME_DEVIATION, VIRTUAL_COMPONENTS as VIRTUAL_COMPONENTS, VIRTUAL_COMPONENTS_MAP as VIRTUAL_COMPONENTS_MAP
1
+ from .const import API_WS_URL as API_WS_URL, All_LIGHT_TYPES as All_LIGHT_TYPES, BASIC_INPUTS_EVENTS_TYPES as BASIC_INPUTS_EVENTS_TYPES, COMPONENT_ID_PATTERN as COMPONENT_ID_PATTERN, CONF_COAP_PORT as CONF_COAP_PORT, CONF_GEN as CONF_GEN, DEVICES_WITHOUT_FIRMWARE_CHANGELOG as DEVICES_WITHOUT_FIRMWARE_CHANGELOG, DEVICE_UNIT_MAP as DEVICE_UNIT_MAP, DOMAIN as DOMAIN, FIRMWARE_UNSUPPORTED_ISSUE_ID as FIRMWARE_UNSUPPORTED_ISSUE_ID, GEN1_RELEASE_URL as GEN1_RELEASE_URL, GEN2_BETA_RELEASE_URL as GEN2_BETA_RELEASE_URL, GEN2_RELEASE_URL as GEN2_RELEASE_URL, LOGGER as LOGGER, MAX_SCRIPT_SIZE as MAX_SCRIPT_SIZE, ROLE_GENERIC as ROLE_GENERIC, RPC_INPUTS_EVENTS_TYPES as RPC_INPUTS_EVENTS_TYPES, SHAIR_MAX_WORK_HOURS as SHAIR_MAX_WORK_HOURS, SHBTN_INPUTS_EVENTS_TYPES as SHBTN_INPUTS_EVENTS_TYPES, SHBTN_MODELS as SHBTN_MODELS, SHELLY_EMIT_EVENT_PATTERN as SHELLY_EMIT_EVENT_PATTERN, SHIX3_1_INPUTS_EVENTS_TYPES as SHIX3_1_INPUTS_EVENTS_TYPES, UPTIME_DEVIATION as UPTIME_DEVIATION, VIRTUAL_COMPONENTS as VIRTUAL_COMPONENTS, VIRTUAL_COMPONENTS_MAP as VIRTUAL_COMPONENTS_MAP
2
2
  from _typeshed import Incomplete
3
3
  from aiohttp.web import Request as Request, WebSocketResponse as WebSocketResponse
4
4
  from aioshelly.block_device import Block as Block, BlockDevice as BlockDevice, COAP
@@ -10,7 +10,7 @@ from homeassistant.components.http import HomeAssistantView as HomeAssistantView
10
10
  from homeassistant.config_entries import ConfigEntry as ConfigEntry
11
11
  from homeassistant.const import CONF_HOST as CONF_HOST, CONF_MODEL as CONF_MODEL, CONF_PORT as CONF_PORT, EVENT_HOMEASSISTANT_STOP as EVENT_HOMEASSISTANT_STOP
12
12
  from homeassistant.core import Event as Event, HomeAssistant as HomeAssistant, callback as callback
13
- from homeassistant.helpers import singleton as singleton
13
+ from homeassistant.helpers import entity_registry as er, singleton as singleton
14
14
  from homeassistant.helpers.device_registry import CONNECTION_BLUETOOTH as CONNECTION_BLUETOOTH, CONNECTION_NETWORK_MAC as CONNECTION_NETWORK_MAC, DeviceInfo as DeviceInfo
15
15
  from homeassistant.helpers.network import NoURLAvailableError as NoURLAvailableError, get_url as get_url
16
16
  from homeassistant.util.dt import utcnow as utcnow
@@ -46,12 +46,15 @@ def get_model_name(info: dict[str, Any]) -> str: ...
46
46
  def get_shelly_model_name(model: str, sleep_period: int, device: BlockDevice | RpcDevice) -> str | None: ...
47
47
  def get_rpc_channel_name(device: RpcDevice, key: str) -> str | None: ...
48
48
  def get_rpc_sub_device_name(device: RpcDevice, key: str, emeter_phase: str | None = None) -> str: ...
49
- def get_rpc_entity_name(device: RpcDevice, key: str, description: str | None = None) -> str | None: ...
49
+ def get_rpc_entity_name(device: RpcDevice, key: str, name: str | None = None, role: str | None = None) -> str | None: ...
50
50
  def get_device_entry_gen(entry: ConfigEntry) -> int: ...
51
51
  def get_rpc_key_instances(keys_dict: dict[str, Any], key: str, all_lights: bool = False) -> list[str]: ...
52
52
  def get_rpc_key_ids(keys_dict: dict[str, Any], key: str) -> list[int]: ...
53
+ def get_rpc_key_by_role(keys_dict: dict[str, Any], role: str) -> str | None: ...
54
+ def get_rpc_role_by_key(keys_dict: dict[str, Any], key: str) -> str: ...
55
+ def id_from_key(key: str) -> int: ...
53
56
  def is_rpc_momentary_input(config: dict[str, Any], status: dict[str, Any], key: str) -> bool: ...
54
- def is_block_channel_type_light(settings: dict[str, Any], channel: int) -> bool: ...
57
+ def is_block_channel_type_light(settings: dict[str, Any], block: Block) -> bool: ...
55
58
  def is_rpc_channel_type_light(config: dict[str, Any], channel: int) -> bool: ...
56
59
  def is_rpc_thermostat_internal_actuator(status: dict[str, Any]) -> bool: ...
57
60
  def get_rpc_input_triggers(device: RpcDevice) -> list[tuple[str, str]]: ...
@@ -68,7 +71,6 @@ def get_http_port(data: Mapping[str, Any]) -> int: ...
68
71
  def get_host(host: str) -> str: ...
69
72
  @callback
70
73
  def async_remove_shelly_rpc_entities(hass: HomeAssistant, domain: str, mac: str, keys: list[str]) -> None: ...
71
- def is_rpc_thermostat_mode(ident: int, status: dict[str, Any]) -> bool: ...
72
74
  def get_virtual_component_ids(config: dict[str, Any], platform: str) -> list[str]: ...
73
75
  def is_view_for_platform(config: dict[str, Any], key: str, platform: str) -> bool: ...
74
76
  def get_virtual_component_unit(config: dict[str, Any]) -> str | None: ...
@@ -79,6 +81,7 @@ async def get_rpc_script_event_types(device: RpcDevice, id: int) -> list[str]: .
79
81
  def is_rpc_exclude_from_relay(settings: dict[str, Any], status: dict[str, Any], channel: str) -> bool: ...
80
82
  def get_shelly_air_lamp_life(lamp_seconds: int) -> float: ...
81
83
  async def get_rpc_scripts_event_types(device: RpcDevice, ignore_scripts: list[str]) -> dict[int, list[str]]: ...
84
+ def get_irrigation_zone_id(config: dict[str, Any], key: str) -> int | None: ...
82
85
  def get_rpc_device_info(device: RpcDevice, mac: str, configuration_url: str, model: str, model_name: str | None = None, key: str | None = None, emeter_phase: str | None = None, suggested_area: str | None = None) -> DeviceInfo: ...
83
86
  def get_blu_trv_device_info(config: dict[str, Any], ble_addr: str, parent_mac: str, fw_ver: str | None) -> DeviceInfo: ...
84
87
  def get_block_device_info(device: BlockDevice, mac: str, configuration_url: str, model: str, model_name: str | None = None, block: Block | None = None, suggested_area: str | None = None) -> DeviceInfo: ...
@@ -87,3 +90,5 @@ def remove_stale_blu_trv_devices(hass: HomeAssistant, rpc_device: RpcDevice, ent
87
90
  @callback
88
91
  def remove_empty_sub_devices(hass: HomeAssistant, entry: ConfigEntry) -> None: ...
89
92
  def format_ble_addr(ble_addr: str) -> str: ...
93
+ @callback
94
+ def async_migrate_rpc_virtual_components_unique_ids(config: dict[str, Any], entity_entry: er.RegistryEntry) -> dict[str, Any] | None: ...
@@ -1,6 +1,7 @@
1
- from .coordinator import ShellyBlockCoordinator as ShellyBlockCoordinator, ShellyConfigEntry as ShellyConfigEntry
2
- from .entity import BlockEntityDescription as BlockEntityDescription, ShellyBlockAttributeEntity as ShellyBlockAttributeEntity, async_setup_block_attribute_entities as async_setup_block_attribute_entities
3
- from .utils import async_remove_shelly_entity as async_remove_shelly_entity, get_device_entry_gen as get_device_entry_gen
1
+ from .const import MODEL_FRANKEVER_IRRIGATION_CONTROLLER as MODEL_FRANKEVER_IRRIGATION_CONTROLLER, MODEL_FRANKEVER_WATER_VALVE as MODEL_FRANKEVER_WATER_VALVE, MODEL_NEO_WATER_VALVE as MODEL_NEO_WATER_VALVE
2
+ from .coordinator import ShellyBlockCoordinator as ShellyBlockCoordinator, ShellyConfigEntry as ShellyConfigEntry, ShellyRpcCoordinator as ShellyRpcCoordinator
3
+ from .entity import BlockEntityDescription as BlockEntityDescription, RpcEntityDescription as RpcEntityDescription, ShellyBlockAttributeEntity as ShellyBlockAttributeEntity, ShellyRpcAttributeEntity as ShellyRpcAttributeEntity, async_setup_block_attribute_entities as async_setup_block_attribute_entities, async_setup_entry_rpc as async_setup_entry_rpc
4
+ from .utils import get_device_entry_gen as get_device_entry_gen
4
5
  from _typeshed import Incomplete
5
6
  from aioshelly.block_device import Block as Block
6
7
  from dataclasses import dataclass
@@ -13,12 +14,40 @@ PARALLEL_UPDATES: int
13
14
 
14
15
  @dataclass(kw_only=True, frozen=True)
15
16
  class BlockValveDescription(BlockEntityDescription, ValveEntityDescription): ...
17
+ @dataclass(kw_only=True, frozen=True)
18
+ class RpcValveDescription(RpcEntityDescription, ValveEntityDescription): ...
19
+
20
+ BLOCK_VALVES: dict[tuple[str, str], BlockValveDescription]
16
21
 
17
- GAS_VALVE: Incomplete
22
+ class RpcShellyBaseWaterValve(ShellyRpcAttributeEntity, ValveEntity):
23
+ entity_description: RpcValveDescription
24
+ _attr_device_class: Incomplete
25
+ _id: int
26
+ _attr_name: Incomplete
27
+ def __init__(self, coordinator: ShellyRpcCoordinator, key: str, attribute: str, description: RpcEntityDescription) -> None: ...
28
+
29
+ class RpcShellyWaterValve(RpcShellyBaseWaterValve):
30
+ _attr_supported_features: Incomplete
31
+ _attr_reports_position: bool
32
+ @property
33
+ def current_valve_position(self) -> int: ...
34
+ async def async_set_valve_position(self, position: int) -> None: ...
35
+
36
+ class RpcShellySimpleWaterValve(RpcShellyBaseWaterValve):
37
+ _attr_supported_features: Incomplete
38
+ _attr_reports_position: bool
39
+ @property
40
+ def is_closed(self) -> bool | None: ...
41
+ async def async_open_valve(self, **kwargs: Any) -> None: ...
42
+ async def async_close_valve(self, **kwargs: Any) -> None: ...
43
+
44
+ RPC_VALVES: dict[str, RpcValveDescription]
18
45
 
19
46
  async def async_setup_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
20
47
  @callback
21
- def async_setup_block_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
48
+ def _async_setup_block_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
49
+ @callback
50
+ def _async_setup_rpc_entry(hass: HomeAssistant, config_entry: ShellyConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
22
51
 
23
52
  class BlockShellyValve(ShellyBlockAttributeEntity, ValveEntity):
24
53
  entity_description: BlockValveDescription
@@ -22,6 +22,7 @@ class SleepAsAndroidEvent(StrEnum):
22
22
  SLEEP_PHASE = 'sleep_phase'
23
23
  SLEEP_TRACKING = 'sleep_tracking'
24
24
  SOUND_EVENT = 'sound_event'
25
+ JET_LAG_PREVENTION = 'jet_lag_prevention'
25
26
 
26
27
  EVENT_DESCRIPTIONS: tuple[SleepAsAndroidEventEntityDescription, ...]
27
28
 
@@ -0,0 +1,15 @@
1
+ from .const import CONF_GROUP as CONF_GROUP
2
+ from .coordinator import SMADataUpdateCoordinator as SMADataUpdateCoordinator
3
+ from _typeshed import Incomplete
4
+ from homeassistant.config_entries import ConfigEntry as ConfigEntry
5
+ from homeassistant.const import CONF_HOST as CONF_HOST, CONF_PASSWORD as CONF_PASSWORD, CONF_SSL as CONF_SSL, CONF_VERIFY_SSL as CONF_VERIFY_SSL, EVENT_HOMEASSISTANT_STOP as EVENT_HOMEASSISTANT_STOP, Platform as Platform
6
+ from homeassistant.core import Event as Event, HomeAssistant as HomeAssistant
7
+ from homeassistant.helpers.aiohttp_client import async_get_clientsession as async_get_clientsession
8
+
9
+ PLATFORMS: Incomplete
10
+ _LOGGER: Incomplete
11
+ type SMAConfigEntry = ConfigEntry[SMADataUpdateCoordinator]
12
+
13
+ async def async_setup_entry(hass: HomeAssistant, entry: SMAConfigEntry) -> bool: ...
14
+ async def async_unload_entry(hass: HomeAssistant, entry: SMAConfigEntry) -> bool: ...
15
+ async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ...
@@ -0,0 +1,27 @@
1
+ from .const import CONF_GROUP as CONF_GROUP, DOMAIN as DOMAIN, GROUPS as GROUPS
2
+ from _typeshed import Incomplete
3
+ from collections.abc import Mapping
4
+ from homeassistant.config_entries import ConfigFlow as ConfigFlow, ConfigFlowResult as ConfigFlowResult
5
+ from homeassistant.const import CONF_HOST as CONF_HOST, CONF_MAC as CONF_MAC, CONF_NAME as CONF_NAME, CONF_PASSWORD as CONF_PASSWORD, CONF_SSL as CONF_SSL, CONF_VERIFY_SSL as CONF_VERIFY_SSL
6
+ from homeassistant.core import HomeAssistant as HomeAssistant
7
+ from homeassistant.helpers.aiohttp_client import async_get_clientsession as async_get_clientsession
8
+ from homeassistant.helpers.device_registry import format_mac as format_mac
9
+ from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo as DhcpServiceInfo
10
+ from typing import Any
11
+
12
+ _LOGGER: Incomplete
13
+
14
+ async def validate_input(hass: HomeAssistant, user_input: dict[str, Any], data: dict[str, Any] | None = None) -> dict[str, Any]: ...
15
+
16
+ class SmaConfigFlow(ConfigFlow, domain=DOMAIN):
17
+ VERSION: int
18
+ MINOR_VERSION: int
19
+ _data: dict[str, Any]
20
+ _discovery_data: dict[str, Any]
21
+ def __init__(self) -> None: ...
22
+ async def _handle_user_input(self, user_input: dict[str, Any], discovery: bool = False) -> tuple[dict[str, str], dict[str, str]]: ...
23
+ async def async_step_user(self, user_input: dict[str, Any] | None = None) -> ConfigFlowResult: ...
24
+ async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> ConfigFlowResult: ...
25
+ async def async_step_reauth_confirm(self, user_input: dict[str, Any] | None = None) -> ConfigFlowResult: ...
26
+ async def async_step_dhcp(self, discovery_info: DhcpServiceInfo) -> ConfigFlowResult: ...
27
+ async def async_step_discovery_confirm(self, user_input: dict[str, Any] | None = None) -> ConfigFlowResult: ...
@@ -0,0 +1,11 @@
1
+ from _typeshed import Incomplete
2
+
3
+ DOMAIN: str
4
+ PYSMA_COORDINATOR: str
5
+ PYSMA_OBJECT: str
6
+ PYSMA_REMOVE_LISTENER: str
7
+ PYSMA_SENSORS: str
8
+ PYSMA_DEVICE_INFO: str
9
+ CONF_GROUP: str
10
+ DEFAULT_SCAN_INTERVAL: int
11
+ GROUPS: Incomplete
@@ -0,0 +1,28 @@
1
+ from .const import DEFAULT_SCAN_INTERVAL as DEFAULT_SCAN_INTERVAL, DOMAIN as DOMAIN
2
+ from _typeshed import Incomplete
3
+ from dataclasses import dataclass
4
+ from homeassistant.config_entries import ConfigEntry as ConfigEntry
5
+ from homeassistant.const import CONF_SCAN_INTERVAL as CONF_SCAN_INTERVAL
6
+ from homeassistant.core import HomeAssistant as HomeAssistant
7
+ from homeassistant.exceptions import ConfigEntryAuthFailed as ConfigEntryAuthFailed, ConfigEntryNotReady as ConfigEntryNotReady
8
+ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator as DataUpdateCoordinator, UpdateFailed as UpdateFailed
9
+ from pysma import SMAWebConnect as SMAWebConnect
10
+ from pysma.helpers import DeviceInfo
11
+ from pysma.sensor import Sensors
12
+
13
+ _LOGGER: Incomplete
14
+
15
+ @dataclass(slots=True)
16
+ class SMACoordinatorData:
17
+ sma_device_info: DeviceInfo
18
+ sensors: Sensors
19
+
20
+ class SMADataUpdateCoordinator(DataUpdateCoordinator[SMACoordinatorData]):
21
+ config_entry: ConfigEntry
22
+ sma: Incomplete
23
+ _sma_device_info: Incomplete
24
+ _sensors: Incomplete
25
+ def __init__(self, hass: HomeAssistant, config_entry: ConfigEntry, sma: SMAWebConnect) -> None: ...
26
+ async def _async_setup(self) -> None: ...
27
+ async def _async_update_data(self) -> SMACoordinatorData: ...
28
+ async def async_close_sma_session(self) -> None: ...
@@ -0,0 +1,10 @@
1
+ from _typeshed import Incomplete
2
+ from homeassistant.components.diagnostics import async_redact_data as async_redact_data
3
+ from homeassistant.config_entries import ConfigEntry as ConfigEntry
4
+ from homeassistant.const import CONF_PASSWORD as CONF_PASSWORD
5
+ from homeassistant.core import HomeAssistant as HomeAssistant
6
+ from typing import Any
7
+
8
+ TO_REDACT: Incomplete
9
+
10
+ async def async_get_config_entry_diagnostics(hass: HomeAssistant, entry: ConfigEntry) -> dict[str, Any]: ...
@@ -0,0 +1,33 @@
1
+ from . import SMAConfigEntry as SMAConfigEntry
2
+ from .const import DOMAIN as DOMAIN
3
+ from .coordinator import SMADataUpdateCoordinator as SMADataUpdateCoordinator
4
+ from _typeshed import Incomplete
5
+ from homeassistant.components.sensor import SensorDeviceClass as SensorDeviceClass, SensorEntity as SensorEntity, SensorEntityDescription as SensorEntityDescription, SensorStateClass as SensorStateClass
6
+ from homeassistant.const import CONF_HOST as CONF_HOST, CONF_SSL as CONF_SSL, EntityCategory as EntityCategory, PERCENTAGE as PERCENTAGE, UnitOfApparentPower as UnitOfApparentPower, UnitOfElectricCurrent as UnitOfElectricCurrent, UnitOfElectricPotential as UnitOfElectricPotential, UnitOfEnergy as UnitOfEnergy, UnitOfFrequency as UnitOfFrequency, UnitOfPower as UnitOfPower, UnitOfReactivePower as UnitOfReactivePower, UnitOfTemperature as UnitOfTemperature
7
+ from homeassistant.core import HomeAssistant as HomeAssistant
8
+ from homeassistant.helpers.device_registry import DeviceInfo as DeviceInfo
9
+ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
10
+ from homeassistant.helpers.typing import StateType as StateType
11
+ from homeassistant.helpers.update_coordinator import CoordinatorEntity as CoordinatorEntity
12
+ from pysma.sensor import Sensor as Sensor
13
+
14
+ SENSOR_ENTITIES: dict[str, SensorEntityDescription]
15
+
16
+ async def async_setup_entry(hass: HomeAssistant, entry: SMAConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
17
+
18
+ class SMAsensor(CoordinatorEntity[SMADataUpdateCoordinator], SensorEntity):
19
+ entity_description: Incomplete
20
+ _attr_name: Incomplete
21
+ _sensor: Incomplete
22
+ _serial: Incomplete
23
+ _attr_device_info: Incomplete
24
+ _attr_unique_id: Incomplete
25
+ def __init__(self, coordinator: SMADataUpdateCoordinator, description: SensorEntityDescription | None, pysma_sensor: Sensor, entry: SMAConfigEntry) -> None: ...
26
+ @property
27
+ def name(self) -> str: ...
28
+ @property
29
+ def available(self) -> bool: ...
30
+ @property
31
+ def native_value(self) -> StateType: ...
32
+ async def async_added_to_hass(self) -> None: ...
33
+ async def async_will_remove_from_hass(self) -> None: ...
@@ -1,5 +1,6 @@
1
1
  from .const import CONF_ADVANCED_OPTIONS as CONF_ADVANCED_OPTIONS, CONF_COLUMN_NAME as CONF_COLUMN_NAME, CONF_QUERY as CONF_QUERY, DOMAIN as DOMAIN, PLATFORMS as PLATFORMS
2
- from .util import redact_credentials as redact_credentials
2
+ from .services import async_setup_services as async_setup_services
3
+ from .util import redact_credentials as redact_credentials, validate_sql_select as validate_sql_select
3
4
  from _typeshed import Incomplete
4
5
  from homeassistant.components.recorder import CONF_DB_URL as CONF_DB_URL, get_instance as get_instance
5
6
  from homeassistant.components.sensor import CONF_STATE_CLASS as CONF_STATE_CLASS, DEVICE_CLASSES_SCHEMA as DEVICE_CLASSES_SCHEMA, STATE_CLASSES_SCHEMA as STATE_CLASSES_SCHEMA
@@ -11,9 +12,6 @@ from homeassistant.helpers.trigger_template_entity import CONF_AVAILABILITY as C
11
12
  from homeassistant.helpers.typing import ConfigType as ConfigType
12
13
 
13
14
  _LOGGER: Incomplete
14
-
15
- def validate_sql_select(value: str) -> str: ...
16
-
17
15
  QUERY_SCHEMA: Incomplete
18
16
  CONFIG_SCHEMA: Incomplete
19
17
 
@@ -1,35 +1,28 @@
1
1
  from .const import CONF_ADVANCED_OPTIONS as CONF_ADVANCED_OPTIONS, CONF_COLUMN_NAME as CONF_COLUMN_NAME, CONF_QUERY as CONF_QUERY, DOMAIN as DOMAIN
2
- from .models import SQLData as SQLData
3
- from .util import redact_credentials as redact_credentials, resolve_db_url as resolve_db_url
2
+ from .util import async_create_sessionmaker as async_create_sessionmaker, generate_lambda_stmt as generate_lambda_stmt, redact_credentials as redact_credentials, resolve_db_url as resolve_db_url, validate_query as validate_query
4
3
  from _typeshed import Incomplete
5
- from homeassistant.components.recorder import CONF_DB_URL as CONF_DB_URL, SupportedDialect as SupportedDialect, get_instance as get_instance
4
+ from homeassistant.components.recorder import CONF_DB_URL as CONF_DB_URL, get_instance as get_instance
6
5
  from homeassistant.components.sensor import CONF_STATE_CLASS as CONF_STATE_CLASS
7
6
  from homeassistant.config_entries import ConfigEntry as ConfigEntry
8
- from homeassistant.const import CONF_DEVICE_CLASS as CONF_DEVICE_CLASS, CONF_ICON as CONF_ICON, CONF_NAME as CONF_NAME, CONF_UNIQUE_ID as CONF_UNIQUE_ID, CONF_UNIT_OF_MEASUREMENT as CONF_UNIT_OF_MEASUREMENT, CONF_VALUE_TEMPLATE as CONF_VALUE_TEMPLATE, EVENT_HOMEASSISTANT_STOP as EVENT_HOMEASSISTANT_STOP, MATCH_ALL as MATCH_ALL
9
- from homeassistant.core import Event as Event, HomeAssistant as HomeAssistant, callback as callback
7
+ from homeassistant.const import CONF_DEVICE_CLASS as CONF_DEVICE_CLASS, CONF_ICON as CONF_ICON, CONF_NAME as CONF_NAME, CONF_UNIQUE_ID as CONF_UNIQUE_ID, CONF_UNIT_OF_MEASUREMENT as CONF_UNIT_OF_MEASUREMENT, CONF_VALUE_TEMPLATE as CONF_VALUE_TEMPLATE, MATCH_ALL as MATCH_ALL
8
+ from homeassistant.core import HomeAssistant as HomeAssistant
10
9
  from homeassistant.exceptions import TemplateError as TemplateError
11
10
  from homeassistant.helpers.device_registry import DeviceEntryType as DeviceEntryType, DeviceInfo as DeviceInfo
12
11
  from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback, AddEntitiesCallback as AddEntitiesCallback
12
+ from homeassistant.helpers.issue_registry import IssueSeverity as IssueSeverity, async_create_issue as async_create_issue
13
13
  from homeassistant.helpers.template import Template as Template
14
14
  from homeassistant.helpers.trigger_template_entity import CONF_AVAILABILITY as CONF_AVAILABILITY, CONF_PICTURE as CONF_PICTURE, ManualTriggerSensorEntity as ManualTriggerSensorEntity, ValueTemplate as ValueTemplate
15
15
  from homeassistant.helpers.typing import ConfigType as ConfigType, DiscoveryInfoType as DiscoveryInfoType
16
16
  from sqlalchemy.engine import Result as Result
17
- from sqlalchemy.orm import Session as Session, scoped_session
18
- from sqlalchemy.sql.lambdas import StatementLambdaElement as StatementLambdaElement
19
- from sqlalchemy.util import LRUCache
17
+ from sqlalchemy.orm import scoped_session as scoped_session
20
18
  from typing import Any
21
19
 
22
20
  _LOGGER: Incomplete
23
- _SQL_LAMBDA_CACHE: LRUCache
24
21
  TRIGGER_ENTITY_OPTIONS: Incomplete
25
22
 
26
23
  async def async_setup_platform(hass: HomeAssistant, config: ConfigType, async_add_entities: AddEntitiesCallback, discovery_info: DiscoveryInfoType | None = None) -> None: ...
27
24
  async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
28
- @callback
29
- def _async_get_or_init_domain_data(hass: HomeAssistant) -> SQLData: ...
30
25
  async def async_setup_sensor(hass: HomeAssistant, trigger_entity_config: ConfigType, query_str: str, column_name: str, value_template: ValueTemplate | None, unique_id: str | None, db_url: str, yaml: bool, async_add_entities: AddEntitiesCallback | AddConfigEntryEntitiesCallback) -> None: ...
31
- def _validate_and_get_session_maker_for_db_url(db_url: str) -> scoped_session | None: ...
32
- def _generate_lambda_stmt(query: str) -> StatementLambdaElement: ...
33
26
 
34
27
  class SQLSensor(ManualTriggerSensorEntity):
35
28
  _unrecorded_attributes: Incomplete
@@ -0,0 +1,17 @@
1
+ from .const import CONF_QUERY as CONF_QUERY, DOMAIN as DOMAIN
2
+ from .util import async_create_sessionmaker as async_create_sessionmaker, generate_lambda_stmt as generate_lambda_stmt, redact_credentials as redact_credentials, resolve_db_url as resolve_db_url, validate_query as validate_query, validate_sql_select as validate_sql_select
3
+ from _typeshed import Incomplete
4
+ from homeassistant.components.recorder import CONF_DB_URL as CONF_DB_URL, get_instance as get_instance
5
+ from homeassistant.core import HomeAssistant as HomeAssistant, ServiceCall as ServiceCall, ServiceResponse as ServiceResponse, SupportsResponse as SupportsResponse, callback as callback
6
+ from homeassistant.exceptions import ServiceValidationError as ServiceValidationError
7
+ from homeassistant.util.json import JsonValueType as JsonValueType
8
+ from sqlalchemy.engine import Result as Result
9
+ from sqlalchemy.orm import Session as Session
10
+
11
+ _LOGGER: Incomplete
12
+ SERVICE_QUERY: str
13
+ SERVICE_QUERY_SCHEMA: Incomplete
14
+
15
+ async def _async_query_service(call: ServiceCall) -> ServiceResponse: ...
16
+ @callback
17
+ def async_setup_services(hass: HomeAssistant) -> None: ...
@@ -1,9 +1,22 @@
1
- from .const import DB_URL_RE as DB_URL_RE
1
+ from .const import DB_URL_RE as DB_URL_RE, DOMAIN as DOMAIN
2
+ from .models import SQLData as SQLData
2
3
  from _typeshed import Incomplete
3
- from homeassistant.components.recorder import get_instance as get_instance
4
- from homeassistant.core import HomeAssistant as HomeAssistant
4
+ from homeassistant.components.recorder import SupportedDialect as SupportedDialect, get_instance as get_instance
5
+ from homeassistant.const import EVENT_HOMEASSISTANT_STOP as EVENT_HOMEASSISTANT_STOP
6
+ from homeassistant.core import Event as Event, HomeAssistant as HomeAssistant, callback as callback
7
+ from sqlalchemy.orm import Session as Session, scoped_session
8
+ from sqlalchemy.sql.lambdas import StatementLambdaElement as StatementLambdaElement
9
+ from sqlalchemy.util import LRUCache
5
10
 
6
11
  _LOGGER: Incomplete
12
+ _SQL_LAMBDA_CACHE: LRUCache
7
13
 
8
14
  def redact_credentials(data: str | None) -> str: ...
9
15
  def resolve_db_url(hass: HomeAssistant, db_url: str | None) -> str: ...
16
+ def validate_sql_select(value: str) -> str: ...
17
+ async def async_create_sessionmaker(hass: HomeAssistant, db_url: str) -> tuple[scoped_session | None, bool, bool]: ...
18
+ def validate_query(hass: HomeAssistant, query_str: str, uses_recorder_db: bool, unique_id: str | None = None) -> None: ...
19
+ @callback
20
+ def _async_get_or_init_domain_data(hass: HomeAssistant) -> SQLData: ...
21
+ def _validate_and_get_session_maker_for_db_url(db_url: str) -> scoped_session | None: ...
22
+ def generate_lambda_stmt(query: str) -> StatementLambdaElement: ...
@@ -1,4 +1,5 @@
1
- from .const import CONF_HTTPS as CONF_HTTPS, DISCOVERY_INTERVAL as DISCOVERY_INTERVAL, DISCOVERY_TASK as DISCOVERY_TASK, DOMAIN as DOMAIN, SERVER_MANUFACTURER as SERVER_MANUFACTURER, SERVER_MODEL as SERVER_MODEL, SERVER_MODEL_ID as SERVER_MODEL_ID, SIGNAL_PLAYER_DISCOVERED as SIGNAL_PLAYER_DISCOVERED, SIGNAL_PLAYER_REDISCOVERED as SIGNAL_PLAYER_REDISCOVERED, STATUS_API_TIMEOUT as STATUS_API_TIMEOUT, STATUS_QUERY_LIBRARYNAME as STATUS_QUERY_LIBRARYNAME, STATUS_QUERY_MAC as STATUS_QUERY_MAC, STATUS_QUERY_UUID as STATUS_QUERY_UUID, STATUS_QUERY_VERSION as STATUS_QUERY_VERSION
1
+ import asyncio
2
+ from .const import CONF_HTTPS as CONF_HTTPS, DISCOVERY_INTERVAL as DISCOVERY_INTERVAL, DOMAIN as DOMAIN, SERVER_MANUFACTURER as SERVER_MANUFACTURER, SERVER_MODEL as SERVER_MODEL, SERVER_MODEL_ID as SERVER_MODEL_ID, SIGNAL_PLAYER_DISCOVERED as SIGNAL_PLAYER_DISCOVERED, SIGNAL_PLAYER_REDISCOVERED as SIGNAL_PLAYER_REDISCOVERED, STATUS_API_TIMEOUT as STATUS_API_TIMEOUT, STATUS_QUERY_LIBRARYNAME as STATUS_QUERY_LIBRARYNAME, STATUS_QUERY_MAC as STATUS_QUERY_MAC, STATUS_QUERY_UUID as STATUS_QUERY_UUID, STATUS_QUERY_VERSION as STATUS_QUERY_VERSION
2
3
  from .coordinator import LMSStatusDataUpdateCoordinator as LMSStatusDataUpdateCoordinator, SqueezeBoxPlayerUpdateCoordinator as SqueezeBoxPlayerUpdateCoordinator
3
4
  from _typeshed import Incomplete
4
5
  from dataclasses import dataclass, field
@@ -10,10 +11,12 @@ from homeassistant.helpers.aiohttp_client import async_get_clientsession as asyn
10
11
  from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC as CONNECTION_NETWORK_MAC, DeviceEntryType as DeviceEntryType, format_mac as format_mac
11
12
  from homeassistant.helpers.dispatcher import async_dispatcher_send as async_dispatcher_send
12
13
  from homeassistant.helpers.event import async_call_later as async_call_later
14
+ from homeassistant.util.hass_dict import HassKey as HassKey
13
15
  from pysqueezebox import Player as Player, Server
14
16
 
15
17
  _LOGGER: Incomplete
16
18
  PLATFORMS: Incomplete
19
+ SQUEEZEBOX_HASS_DATA: HassKey[asyncio.Task]
17
20
 
18
21
  @dataclass
19
22
  class SqueezeboxData:
@@ -1,8 +1,9 @@
1
1
  from .const import DOMAIN as DOMAIN, UNPLAYABLE_TYPES as UNPLAYABLE_TYPES
2
+ from .media_player import SqueezeBoxMediaPlayerEntity as SqueezeBoxMediaPlayerEntity
2
3
  from _typeshed import Incomplete
3
4
  from dataclasses import dataclass, field
4
5
  from homeassistant.components import media_source as media_source
5
- from homeassistant.components.media_player import BrowseError as BrowseError, BrowseMedia as BrowseMedia, MediaClass as MediaClass, MediaPlayerEntity as MediaPlayerEntity, MediaType as MediaType
6
+ from homeassistant.components.media_player import BrowseError as BrowseError, BrowseMedia as BrowseMedia, MediaClass as MediaClass, MediaType as MediaType
6
7
  from homeassistant.core import HomeAssistant as HomeAssistant
7
8
  from homeassistant.helpers.network import is_internal_request as is_internal_request
8
9
  from pysqueezebox import Player as Player
@@ -29,8 +30,8 @@ class BrowseData:
29
30
  def _build_response_apps_radios_category(browse_data: BrowseData, cmd: str | MediaType, item: dict[str, Any]) -> BrowseMedia: ...
30
31
  def _build_response_known_app(browse_data: BrowseData, search_type: str, item: dict[str, Any]) -> BrowseMedia: ...
31
32
  def _build_response_favorites(item: dict[str, Any]) -> BrowseMedia: ...
32
- def _get_item_thumbnail(item: dict[str, Any], player: Player, entity: MediaPlayerEntity, item_type: str | MediaType | None, search_type: str, internal_request: bool, known_apps_radios: set[str]) -> str | None: ...
33
- async def build_item_response(entity: MediaPlayerEntity, player: Player, payload: dict[str, str | None], browse_limit: int, browse_data: BrowseData) -> BrowseMedia: ...
33
+ def _get_item_thumbnail(item: dict[str, Any], player: Player, entity: SqueezeBoxMediaPlayerEntity, item_type: str | MediaType | None, search_type: str, internal_request: bool, known_apps_radios: set[str]) -> str | None: ...
34
+ async def build_item_response(entity: SqueezeBoxMediaPlayerEntity, player: Player, payload: dict[str, str | None], browse_limit: int, browse_data: BrowseData) -> BrowseMedia: ...
34
35
  async def library_payload(hass: HomeAssistant, player: Player, browse_media: BrowseData) -> BrowseMedia: ...
35
36
  def media_source_content_filter(item: BrowseMedia) -> bool: ...
36
37
  async def generate_playlist(player: Player, payload: dict[str, str], browse_limit: int, browse_media: BrowseData) -> list | None: ...
@@ -2,6 +2,7 @@ from . import SqueezeboxConfigEntry as SqueezeboxConfigEntry
2
2
  from .const import SIGNAL_PLAYER_DISCOVERED as SIGNAL_PLAYER_DISCOVERED
3
3
  from .coordinator import SqueezeBoxPlayerUpdateCoordinator as SqueezeBoxPlayerUpdateCoordinator
4
4
  from .entity import SqueezeboxEntity as SqueezeboxEntity
5
+ from .util import safe_library_call as safe_library_call
5
6
  from _typeshed import Incomplete
6
7
  from dataclasses import dataclass
7
8
  from homeassistant.components.button import ButtonEntity as ButtonEntity, ButtonEntityDescription as ButtonEntityDescription
@@ -1,7 +1,6 @@
1
1
  from _typeshed import Incomplete
2
2
 
3
3
  CONF_HTTPS: str
4
- DISCOVERY_TASK: str
5
4
  DOMAIN: str
6
5
  DEFAULT_PORT: int
7
6
  PLAYER_DISCOVERY_UNSUB: str
@@ -1,8 +1,9 @@
1
- from . import SqueezeboxConfigEntry as SqueezeboxConfigEntry
1
+ from . import SQUEEZEBOX_HASS_DATA as SQUEEZEBOX_HASS_DATA, SqueezeboxConfigEntry as SqueezeboxConfigEntry
2
2
  from .browse_media import BrowseData as BrowseData, build_item_response as build_item_response, generate_playlist as generate_playlist, library_payload as library_payload, media_source_content_filter as media_source_content_filter
3
- from .const import ATTR_ANNOUNCE_TIMEOUT as ATTR_ANNOUNCE_TIMEOUT, ATTR_ANNOUNCE_VOLUME as ATTR_ANNOUNCE_VOLUME, CONF_BROWSE_LIMIT as CONF_BROWSE_LIMIT, CONF_VOLUME_STEP as CONF_VOLUME_STEP, DEFAULT_BROWSE_LIMIT as DEFAULT_BROWSE_LIMIT, DEFAULT_VOLUME_STEP as DEFAULT_VOLUME_STEP, DISCOVERY_TASK as DISCOVERY_TASK, DOMAIN as DOMAIN, SERVER_MANUFACTURER as SERVER_MANUFACTURER, SERVER_MODEL as SERVER_MODEL, SERVER_MODEL_ID as SERVER_MODEL_ID, SIGNAL_PLAYER_DISCOVERED as SIGNAL_PLAYER_DISCOVERED, SQUEEZEBOX_SOURCE_STRINGS as SQUEEZEBOX_SOURCE_STRINGS
3
+ from .const import ATTR_ANNOUNCE_TIMEOUT as ATTR_ANNOUNCE_TIMEOUT, ATTR_ANNOUNCE_VOLUME as ATTR_ANNOUNCE_VOLUME, CONF_BROWSE_LIMIT as CONF_BROWSE_LIMIT, CONF_VOLUME_STEP as CONF_VOLUME_STEP, DEFAULT_BROWSE_LIMIT as DEFAULT_BROWSE_LIMIT, DEFAULT_VOLUME_STEP as DEFAULT_VOLUME_STEP, DOMAIN as DOMAIN, SERVER_MANUFACTURER as SERVER_MANUFACTURER, SERVER_MODEL as SERVER_MODEL, SERVER_MODEL_ID as SERVER_MODEL_ID, SIGNAL_PLAYER_DISCOVERED as SIGNAL_PLAYER_DISCOVERED, SQUEEZEBOX_SOURCE_STRINGS as SQUEEZEBOX_SOURCE_STRINGS
4
4
  from .coordinator import SqueezeBoxPlayerUpdateCoordinator as SqueezeBoxPlayerUpdateCoordinator
5
5
  from .entity import SqueezeboxEntity as SqueezeboxEntity
6
+ from .util import safe_library_call as safe_library_call
6
7
  from _typeshed import Incomplete
7
8
  from collections.abc import Callable as Callable
8
9
  from datetime import datetime
@@ -18,6 +19,8 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect as async_d
18
19
  from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback as AddConfigEntryEntitiesCallback
19
20
  from homeassistant.helpers.start import async_at_start as async_at_start
20
21
  from homeassistant.util.dt import utcnow as utcnow
22
+ from homeassistant.util.ulid import ulid_now as ulid_now
23
+ from lru import LRU
21
24
  from pysqueezebox import Server as Server
22
25
  from typing import Any
23
26
 
@@ -46,6 +49,7 @@ class SqueezeBoxMediaPlayerEntity(SqueezeboxEntity, MediaPlayerEntity):
46
49
  _previous_media_position: int
47
50
  _attr_unique_id: Incomplete
48
51
  _browse_data: Incomplete
52
+ _synthetic_media_browser_thumbnail_items: LRU[str, str]
49
53
  def __init__(self, coordinator: SqueezeBoxPlayerUpdateCoordinator) -> None: ...
50
54
  @callback
51
55
  def _handle_coordinator_update(self) -> None: ...
@@ -111,5 +115,6 @@ class SqueezeBoxMediaPlayerEntity(SqueezeboxEntity, MediaPlayerEntity):
111
115
  async def async_call_query(self, command: str, parameters: list[str] | None = None) -> None: ...
112
116
  async def async_join_players(self, group_members: list[str]) -> None: ...
113
117
  async def async_unjoin_player(self) -> None: ...
118
+ def get_synthetic_id_and_cache_url(self, url: str) -> str: ...
114
119
  async def async_browse_media(self, media_content_type: MediaType | str | None = None, media_content_id: str | None = None) -> BrowseMedia: ...
115
120
  async def async_get_browse_image(self, media_content_type: MediaType | str, media_content_id: str, media_image_id: str | None = None) -> tuple[bytes | None, str | None]: ...
@@ -14,6 +14,7 @@ from pysqueezebox.player import Alarm as Alarm
14
14
  from typing import Any
15
15
 
16
16
  _LOGGER: Incomplete
17
+ PARALLEL_UPDATES: int
17
18
 
18
19
  async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback) -> None: ...
19
20
 
@@ -0,0 +1,6 @@
1
+ from .const import DOMAIN as DOMAIN
2
+ from collections.abc import Awaitable, Callable as Callable
3
+ from homeassistant.exceptions import HomeAssistantError as HomeAssistantError
4
+ from typing import Any
5
+
6
+ async def safe_library_call(method: Callable[..., Awaitable[Any]], *args: Any, translation_key: str, translation_placeholders: dict[str, Any] | None = None, **kwargs: Any) -> Any: ...
@@ -10,6 +10,7 @@ from homeassistant.const import CONF_PASSWORD as CONF_PASSWORD, CONF_USERNAME as
10
10
  from homeassistant.core import HomeAssistant as HomeAssistant
11
11
  from homeassistant.exceptions import ConfigEntryError as ConfigEntryError
12
12
  from homeassistant.helpers.update_coordinator import DataUpdateCoordinator as DataUpdateCoordinator, UpdateFailed as UpdateFailed
13
+ from homeassistant.util.unit_conversion import VolumeConverter as VolumeConverter
13
14
  from pysuez import SuezClient, TelemetryMeasure as TelemetryMeasure
14
15
 
15
16
  _LOGGER: Incomplete
@@ -42,5 +43,5 @@ class SuezWaterCoordinator(DataUpdateCoordinator[SuezWaterData]):
42
43
  async def _update_statistics(self, current_price: float | None) -> None: ...
43
44
  def _build_statistics(self, current_price: float | None, consumption_sum: float, cost_sum: float, last_stats: date | None, usage: list[TelemetryMeasure]) -> tuple[list[StatisticData], list[StatisticData]]: ...
44
45
  def _persist_statistics(self, consumption_statistics: list[StatisticData], cost_statistics: list[StatisticData]) -> None: ...
45
- def _get_statistics_metadata(self, id: str, name: str, unit: str) -> StatisticMetaData: ...
46
+ def _get_statistics_metadata(self, id: str, name: str, unit: str, unit_class: str | None) -> StatisticMetaData: ...
46
47
  async def _get_last_stat(self, id: str) -> StatisticsRow | None: ...
@@ -1,21 +1,26 @@
1
+ import voluptuous as vol
1
2
  from _typeshed import Incomplete
2
3
  from datetime import timedelta
3
- from homeassistant.const import CONF_CONDITION as CONF_CONDITION, SUN_EVENT_SUNRISE as SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET as SUN_EVENT_SUNSET
4
+ from homeassistant.const import CONF_OPTIONS as CONF_OPTIONS, SUN_EVENT_SUNRISE as SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET as SUN_EVENT_SUNSET
4
5
  from homeassistant.core import HomeAssistant as HomeAssistant
5
- from homeassistant.helpers.condition import Condition as Condition, ConditionCheckerType as ConditionCheckerType, condition_trace_set_result as condition_trace_set_result, condition_trace_update_result as condition_trace_update_result, trace_condition_function as trace_condition_function
6
+ from homeassistant.helpers.automation import move_top_level_schema_fields_to_options as move_top_level_schema_fields_to_options
7
+ from homeassistant.helpers.condition import Condition as Condition, ConditionCheckerType as ConditionCheckerType, ConditionConfig as ConditionConfig, condition_trace_set_result as condition_trace_set_result, condition_trace_update_result as condition_trace_update_result, trace_condition_function as trace_condition_function
6
8
  from homeassistant.helpers.sun import get_astral_event_date as get_astral_event_date
7
9
  from homeassistant.helpers.typing import ConfigType as ConfigType, TemplateVarsType as TemplateVarsType
10
+ from typing import Any
8
11
 
12
+ _OPTIONS_SCHEMA_DICT: dict[vol.Marker, Any]
9
13
  _CONDITION_SCHEMA: Incomplete
10
14
 
11
15
  def sun(hass: HomeAssistant, before: str | None = None, after: str | None = None, before_offset: timedelta | None = None, after_offset: timedelta | None = None) -> bool: ...
12
16
 
13
17
  class SunCondition(Condition):
14
- _config: Incomplete
15
- _hass: Incomplete
16
- def __init__(self, hass: HomeAssistant, config: ConfigType) -> None: ...
18
+ _options: dict[str, Any]
19
+ @classmethod
20
+ async def async_validate_complete_config(cls, hass: HomeAssistant, complete_config: ConfigType) -> ConfigType: ...
17
21
  @classmethod
18
22
  async def async_validate_config(cls, hass: HomeAssistant, config: ConfigType) -> ConfigType: ...
23
+ def __init__(self, hass: HomeAssistant, config: ConditionConfig) -> None: ...
19
24
  async def async_get_checker(self) -> ConditionCheckerType: ...
20
25
 
21
26
  CONDITIONS: dict[str, type[Condition]]
@@ -12,6 +12,5 @@ _LOGGER: Incomplete
12
12
  def async_get_parent_device_id(hass: HomeAssistant, entity_id: str) -> str | None: ...
13
13
  async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ...
14
14
  async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: ...
15
- async def config_entry_update_listener(hass: HomeAssistant, entry: ConfigEntry) -> None: ...
16
15
  async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ...
17
16
  async def async_remove_entry(hass: HomeAssistant, entry: ConfigEntry) -> None: ...