homeassistant-stubs 2025.1.4__py3-none-any.whl → 2025.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (731) hide show
  1. homeassistant-stubs/auth/mfa_modules/__init__.pyi +2 -4
  2. homeassistant-stubs/auth/models.pyi +1 -1
  3. homeassistant-stubs/auth/permissions/__init__.pyi +1 -1
  4. homeassistant-stubs/auth/providers/__init__.pyi +2 -4
  5. homeassistant-stubs/backup_restore.pyi +2 -0
  6. homeassistant-stubs/components/airgradient/button.pyi +4 -1
  7. homeassistant-stubs/components/airgradient/config_flow.pyi +5 -3
  8. homeassistant-stubs/components/airgradient/entity.pyi +5 -0
  9. homeassistant-stubs/components/airgradient/number.pyi +4 -1
  10. homeassistant-stubs/components/airgradient/select.pyi +4 -1
  11. homeassistant-stubs/components/airgradient/sensor.pyi +2 -0
  12. homeassistant-stubs/components/airgradient/switch.pyi +5 -1
  13. homeassistant-stubs/components/airgradient/update.pyi +2 -1
  14. homeassistant-stubs/components/airnow/coordinator.pyi +1 -1
  15. homeassistant-stubs/components/airzone/__init__.pyi +2 -0
  16. homeassistant-stubs/components/airzone/config_flow.pyi +3 -2
  17. homeassistant-stubs/components/alarm_control_panel/__init__.pyi +1 -1
  18. homeassistant-stubs/components/androidtv_remote/config_flow.pyi +2 -2
  19. homeassistant-stubs/components/api/__init__.pyi +1 -1
  20. homeassistant-stubs/components/apple_tv/config_flow.pyi +2 -1
  21. homeassistant-stubs/components/apsystems/coordinator.pyi +1 -0
  22. homeassistant-stubs/components/aranet/sensor.pyi +1 -1
  23. homeassistant-stubs/components/arcam_fmj/config_flow.pyi +2 -2
  24. homeassistant-stubs/components/assist_pipeline/__init__.pyi +2 -2
  25. homeassistant-stubs/components/assist_pipeline/pipeline.pyi +4 -1
  26. homeassistant-stubs/components/assist_pipeline/select.pyi +2 -2
  27. homeassistant-stubs/components/assist_pipeline/websocket_api.pyi +2 -2
  28. homeassistant-stubs/components/assist_satellite/__init__.pyi +1 -1
  29. homeassistant-stubs/components/assist_satellite/const.pyi +1 -0
  30. homeassistant-stubs/components/assist_satellite/entity.pyi +7 -1
  31. homeassistant-stubs/components/assist_satellite/intent.pyi +13 -0
  32. homeassistant-stubs/components/assist_satellite/websocket_api.pyi +0 -2
  33. homeassistant-stubs/components/automation/__init__.pyi +1 -1
  34. homeassistant-stubs/components/awair/config_flow.pyi +3 -2
  35. homeassistant-stubs/components/axis/config_flow.pyi +6 -4
  36. homeassistant-stubs/components/backup/__init__.pyi +8 -3
  37. homeassistant-stubs/components/backup/agent.pyi +6 -5
  38. homeassistant-stubs/components/backup/backup.pyi +6 -4
  39. homeassistant-stubs/components/backup/config.pyi +45 -3
  40. homeassistant-stubs/components/backup/http.pyi +8 -0
  41. homeassistant-stubs/components/backup/manager.pyi +42 -22
  42. homeassistant-stubs/components/backup/models.pyi +18 -3
  43. homeassistant-stubs/components/backup/store.pyi +7 -2
  44. homeassistant-stubs/components/backup/util.pyi +94 -0
  45. homeassistant-stubs/components/backup/websocket.pyi +6 -3
  46. homeassistant-stubs/components/baf/config_flow.pyi +2 -2
  47. homeassistant-stubs/components/bang_olufsen/config_flow.pyi +1 -1
  48. homeassistant-stubs/components/bang_olufsen/const.pyi +6 -0
  49. homeassistant-stubs/components/bang_olufsen/event.pyi +23 -0
  50. homeassistant-stubs/components/bang_olufsen/websocket.pyi +3 -2
  51. homeassistant-stubs/components/binary_sensor/__init__.pyi +1 -1
  52. homeassistant-stubs/components/blueprint/importer.pyi +0 -1
  53. homeassistant-stubs/components/blueprint/models.pyi +0 -1
  54. homeassistant-stubs/components/blueprint/websocket_api.pyi +0 -1
  55. homeassistant-stubs/components/bluesound/__init__.pyi +2 -0
  56. homeassistant-stubs/components/bluesound/config_flow.pyi +2 -3
  57. homeassistant-stubs/components/bluesound/coordinator.pyi +30 -0
  58. homeassistant-stubs/components/bluesound/media_player.pyi +10 -25
  59. homeassistant-stubs/components/bluetooth/__init__.pyi +2 -2
  60. homeassistant-stubs/components/bluetooth/api.pyi +3 -1
  61. homeassistant-stubs/components/bluetooth/config_flow.pyi +10 -3
  62. homeassistant-stubs/components/bluetooth/const.pyi +5 -0
  63. homeassistant-stubs/components/bluetooth/manager.pyi +5 -1
  64. homeassistant-stubs/components/bluetooth/passive_update_coordinator.pyi +1 -4
  65. homeassistant-stubs/components/bluetooth/storage.pyi +2 -0
  66. homeassistant-stubs/components/bluetooth/util.pyi +6 -1
  67. homeassistant-stubs/components/bluetooth/websocket_api.pyi +46 -0
  68. homeassistant-stubs/components/bond/config_flow.pyi +2 -2
  69. homeassistant-stubs/components/braviatv/config_flow.pyi +2 -2
  70. homeassistant-stubs/components/brother/config_flow.pyi +2 -2
  71. homeassistant-stubs/components/button/__init__.pyi +1 -1
  72. homeassistant-stubs/components/cambridge_audio/config_flow.pyi +2 -2
  73. homeassistant-stubs/components/camera/__init__.pyi +1 -1
  74. homeassistant-stubs/components/canary/__init__.pyi +7 -7
  75. homeassistant-stubs/components/canary/alarm_control_panel.pyi +2 -4
  76. homeassistant-stubs/components/canary/camera.pyi +3 -4
  77. homeassistant-stubs/components/canary/const.pyi +0 -2
  78. homeassistant-stubs/components/canary/coordinator.pyi +3 -1
  79. homeassistant-stubs/components/canary/sensor.pyi +3 -4
  80. homeassistant-stubs/components/climate/__init__.pyi +2 -2
  81. homeassistant-stubs/components/climate/const.pyi +1 -0
  82. homeassistant-stubs/components/climate/intent.pyi +9 -1
  83. homeassistant-stubs/components/cloud/__init__.pyi +1 -1
  84. homeassistant-stubs/components/cloud/backup.pyi +3 -9
  85. homeassistant-stubs/components/cloud/const.pyi +0 -1
  86. homeassistant-stubs/components/cloud/http_api.pyi +7 -1
  87. homeassistant-stubs/components/config/core.pyi +1 -1
  88. homeassistant-stubs/components/cookidoo/__init__.pyi +6 -2
  89. homeassistant-stubs/components/cookidoo/button.pyi +27 -0
  90. homeassistant-stubs/components/cookidoo/config_flow.pyi +4 -1
  91. homeassistant-stubs/components/cookidoo/const.pyi +3 -0
  92. homeassistant-stubs/components/cookidoo/coordinator.pyi +3 -1
  93. homeassistant-stubs/components/cookidoo/diagnostics.pyi +10 -0
  94. homeassistant-stubs/components/cookidoo/helpers.pyi +9 -0
  95. homeassistant-stubs/components/cookidoo/sensor.pyi +34 -0
  96. homeassistant-stubs/components/cover/__init__.pyi +1 -1
  97. homeassistant-stubs/components/crownstone/__init__.pyi +6 -5
  98. homeassistant-stubs/components/crownstone/config_flow.pyi +6 -4
  99. homeassistant-stubs/components/crownstone/entry_manager.pyi +6 -6
  100. homeassistant-stubs/components/crownstone/helpers.pyi +2 -1
  101. homeassistant-stubs/components/crownstone/light.pyi +3 -4
  102. homeassistant-stubs/components/date/__init__.pyi +1 -1
  103. homeassistant-stubs/components/datetime/__init__.pyi +1 -1
  104. homeassistant-stubs/components/deconz/__init__.pyi +5 -4
  105. homeassistant-stubs/components/deconz/alarm_control_panel.pyi +2 -2
  106. homeassistant-stubs/components/deconz/binary_sensor.pyi +2 -2
  107. homeassistant-stubs/components/deconz/button.pyi +2 -2
  108. homeassistant-stubs/components/deconz/climate.pyi +2 -2
  109. homeassistant-stubs/components/deconz/config_flow.pyi +3 -6
  110. homeassistant-stubs/components/deconz/cover.pyi +2 -2
  111. homeassistant-stubs/components/deconz/device_trigger.pyi +1 -2
  112. homeassistant-stubs/components/deconz/diagnostics.pyi +2 -3
  113. homeassistant-stubs/components/deconz/fan.pyi +2 -2
  114. homeassistant-stubs/components/deconz/hub/api.pyi +2 -2
  115. homeassistant-stubs/components/deconz/hub/config.pyi +3 -3
  116. homeassistant-stubs/components/deconz/hub/hub.pyi +4 -6
  117. homeassistant-stubs/components/deconz/light.pyi +2 -2
  118. homeassistant-stubs/components/deconz/lock.pyi +2 -3
  119. homeassistant-stubs/components/deconz/number.pyi +2 -2
  120. homeassistant-stubs/components/deconz/scene.pyi +2 -3
  121. homeassistant-stubs/components/deconz/select.pyi +2 -3
  122. homeassistant-stubs/components/deconz/sensor.pyi +2 -2
  123. homeassistant-stubs/components/deconz/services.pyi +2 -1
  124. homeassistant-stubs/components/deconz/siren.pyi +2 -3
  125. homeassistant-stubs/components/deconz/switch.pyi +2 -3
  126. homeassistant-stubs/components/deconz/util.pyi +7 -0
  127. homeassistant-stubs/components/device_tracker/config_entry.pyi +1 -1
  128. homeassistant-stubs/components/device_tracker/legacy.pyi +1 -1
  129. homeassistant-stubs/components/devolo_home_control/config_flow.pyi +2 -2
  130. homeassistant-stubs/components/devolo_home_network/config_flow.pyi +2 -1
  131. homeassistant-stubs/components/dhcp/__init__.pyi +6 -7
  132. homeassistant-stubs/components/discovergy/sensor.pyi +2 -0
  133. homeassistant-stubs/components/dlna_dmr/config_flow.pyi +7 -6
  134. homeassistant-stubs/components/dlna_dmr/media_player.pyi +2 -1
  135. homeassistant-stubs/components/dlna_dms/config_flow.pyi +5 -4
  136. homeassistant-stubs/components/dlna_dms/dms.pyi +3 -2
  137. homeassistant-stubs/components/doorbird/config_flow.pyi +2 -2
  138. homeassistant-stubs/components/doorbird/device.pyi +1 -1
  139. homeassistant-stubs/components/dormakaba_dkey/__init__.pyi +5 -9
  140. homeassistant-stubs/components/dormakaba_dkey/binary_sensor.pyi +3 -7
  141. homeassistant-stubs/components/dormakaba_dkey/coordinator.pyi +15 -0
  142. homeassistant-stubs/components/dormakaba_dkey/entity.pyi +4 -5
  143. homeassistant-stubs/components/dormakaba_dkey/lock.pyi +3 -7
  144. homeassistant-stubs/components/dormakaba_dkey/sensor.pyi +3 -7
  145. homeassistant-stubs/components/dunehd/__init__.pyi +4 -3
  146. homeassistant-stubs/components/dunehd/media_player.pyi +2 -2
  147. homeassistant-stubs/components/duotecno/__init__.pyi +4 -3
  148. homeassistant-stubs/components/duotecno/binary_sensor.pyi +2 -4
  149. homeassistant-stubs/components/duotecno/climate.pyi +2 -4
  150. homeassistant-stubs/components/duotecno/cover.pyi +2 -4
  151. homeassistant-stubs/components/duotecno/light.pyi +2 -4
  152. homeassistant-stubs/components/duotecno/switch.pyi +2 -4
  153. homeassistant-stubs/components/eheimdigital/climate.pyi +40 -0
  154. homeassistant-stubs/components/eheimdigital/config_flow.pyi +1 -1
  155. homeassistant-stubs/components/eheimdigital/const.pyi +4 -0
  156. homeassistant-stubs/components/eheimdigital/coordinator.pyi +2 -3
  157. homeassistant-stubs/components/eheimdigital/light.pyi +1 -0
  158. homeassistant-stubs/components/electrasmart/__init__.pyi +6 -4
  159. homeassistant-stubs/components/electrasmart/climate.pyi +2 -2
  160. homeassistant-stubs/components/electric_kiwi/__init__.pyi +3 -5
  161. homeassistant-stubs/components/electric_kiwi/const.pyi +0 -2
  162. homeassistant-stubs/components/electric_kiwi/coordinator.pyi +10 -2
  163. homeassistant-stubs/components/electric_kiwi/select.pyi +3 -4
  164. homeassistant-stubs/components/electric_kiwi/sensor.pyi +3 -4
  165. homeassistant-stubs/components/elevenlabs/const.pyi +1 -0
  166. homeassistant-stubs/components/elevenlabs/tts.pyi +1 -1
  167. homeassistant-stubs/components/elgato/config_flow.pyi +3 -2
  168. homeassistant-stubs/components/elkm1/binary_sensor.pyi +1 -1
  169. homeassistant-stubs/components/elkm1/config_flow.pyi +2 -2
  170. homeassistant-stubs/components/elkm1/sensor.pyi +5 -5
  171. homeassistant-stubs/components/energenie_power_sockets/__init__.pyi +5 -4
  172. homeassistant-stubs/components/energenie_power_sockets/switch.pyi +2 -2
  173. homeassistant-stubs/components/enphase_envoy/config_flow.pyi +5 -5
  174. homeassistant-stubs/components/enphase_envoy/coordinator.pyi +7 -0
  175. homeassistant-stubs/components/enphase_envoy/select.pyi +2 -2
  176. homeassistant-stubs/components/enphase_envoy/sensor.pyi +1 -4
  177. homeassistant-stubs/components/esphome/__init__.pyi +1 -0
  178. homeassistant-stubs/components/esphome/bluetooth.pyi +2 -1
  179. homeassistant-stubs/components/esphome/config_flow.pyi +5 -3
  180. homeassistant-stubs/components/esphome/dashboard.pyi +2 -1
  181. homeassistant-stubs/components/esphome/manager.pyi +1 -1
  182. homeassistant-stubs/components/event/__init__.pyi +2 -2
  183. homeassistant-stubs/components/evil_genius_labs/__init__.pyi +3 -5
  184. homeassistant-stubs/components/evil_genius_labs/coordinator.pyi +4 -1
  185. homeassistant-stubs/components/evil_genius_labs/diagnostics.pyi +2 -4
  186. homeassistant-stubs/components/evil_genius_labs/light.pyi +2 -4
  187. homeassistant-stubs/components/fan/__init__.pyi +1 -1
  188. homeassistant-stubs/components/feedreader/__init__.pyi +3 -5
  189. homeassistant-stubs/components/feedreader/coordinator.pyi +5 -3
  190. homeassistant-stubs/components/filter/__init__.pyi +6 -4
  191. homeassistant-stubs/components/filter/config_flow.pyi +28 -0
  192. homeassistant-stubs/components/filter/const.pyi +29 -0
  193. homeassistant-stubs/components/filter/sensor.pyi +3 -24
  194. homeassistant-stubs/components/flux_led/config_flow.pyi +2 -2
  195. homeassistant-stubs/components/fritz/__init__.pyi +9 -7
  196. homeassistant-stubs/components/fritz/binary_sensor.pyi +2 -4
  197. homeassistant-stubs/components/fritz/button.pyi +3 -4
  198. homeassistant-stubs/components/fritz/config_flow.pyi +6 -5
  199. homeassistant-stubs/components/fritz/const.pyi +0 -3
  200. homeassistant-stubs/components/fritz/coordinator.pyi +12 -10
  201. homeassistant-stubs/components/fritz/device_tracker.pyi +2 -4
  202. homeassistant-stubs/components/fritz/diagnostics.pyi +2 -4
  203. homeassistant-stubs/components/fritz/image.pyi +2 -4
  204. homeassistant-stubs/components/fritz/sensor.pyi +3 -4
  205. homeassistant-stubs/components/fritz/services.pyi +5 -8
  206. homeassistant-stubs/components/fritz/switch.pyi +3 -4
  207. homeassistant-stubs/components/fritz/update.pyi +2 -4
  208. homeassistant-stubs/components/fritzbox/config_flow.pyi +2 -2
  209. homeassistant-stubs/components/fritzbox/coordinator.pyi +1 -1
  210. homeassistant-stubs/components/fronius/config_flow.pyi +1 -1
  211. homeassistant-stubs/components/frontend/__init__.pyi +1 -1
  212. homeassistant-stubs/components/fujitsu_fglair/climate.pyi +2 -8
  213. homeassistant-stubs/components/fujitsu_fglair/entity.pyi +15 -0
  214. homeassistant-stubs/components/fujitsu_fglair/sensor.pyi +21 -0
  215. homeassistant-stubs/components/fully_kiosk/config_flow.pyi +1 -1
  216. homeassistant-stubs/components/fyta/binary_sensor.pyi +23 -0
  217. homeassistant-stubs/components/fyta/entity.pyi +2 -2
  218. homeassistant-stubs/components/fyta/image.pyi +18 -0
  219. homeassistant-stubs/components/generic_thermostat/climate.pyi +1 -0
  220. homeassistant-stubs/components/geo_location/__init__.pyi +1 -1
  221. homeassistant-stubs/components/goalzero/config_flow.pyi +2 -2
  222. homeassistant-stubs/components/google_drive/__init__.pyi +17 -0
  223. homeassistant-stubs/components/google_drive/api.pyi +35 -0
  224. homeassistant-stubs/components/google_drive/application_credentials.pyi +6 -0
  225. homeassistant-stubs/components/google_drive/backup.pyi +28 -0
  226. homeassistant-stubs/components/google_drive/config_flow.pyi +24 -0
  227. homeassistant-stubs/components/google_drive/const.pyi +1 -0
  228. homeassistant-stubs/components/guardian/config_flow.pyi +4 -3
  229. homeassistant-stubs/components/habitica/__init__.pyi +16 -0
  230. homeassistant-stubs/components/habitica/binary_sensor.pyi +33 -0
  231. homeassistant-stubs/components/habitica/button.pyi +53 -0
  232. homeassistant-stubs/components/habitica/calendar.pyi +56 -0
  233. homeassistant-stubs/components/habitica/config_flow.pyi +27 -0
  234. homeassistant-stubs/components/habitica/const.pyi +44 -0
  235. homeassistant-stubs/components/habitica/coordinator.pyi +29 -0
  236. homeassistant-stubs/components/habitica/diagnostics.pyi +7 -0
  237. homeassistant-stubs/components/habitica/entity.pyi +14 -0
  238. homeassistant-stubs/components/habitica/image.pyi +26 -0
  239. homeassistant-stubs/components/habitica/sensor.pyi +81 -0
  240. homeassistant-stubs/components/habitica/services.pyi +24 -0
  241. homeassistant-stubs/components/habitica/switch.pyi +32 -0
  242. homeassistant-stubs/components/habitica/todo.pyi +43 -0
  243. homeassistant-stubs/components/habitica/types.pyi +10 -0
  244. homeassistant-stubs/components/habitica/util.pyi +15 -0
  245. homeassistant-stubs/components/heos/__init__.pyi +15 -0
  246. homeassistant-stubs/components/heos/config_flow.pyi +32 -0
  247. homeassistant-stubs/components/heos/const.pyi +5 -0
  248. homeassistant-stubs/components/heos/coordinator.pyi +44 -0
  249. homeassistant-stubs/components/heos/diagnostics.pyi +14 -0
  250. homeassistant-stubs/components/heos/media_player.pyi +95 -0
  251. homeassistant-stubs/components/heos/services.pyi +16 -0
  252. homeassistant-stubs/components/holiday/config_flow.pyi +3 -1
  253. homeassistant-stubs/components/homeassistant_hardware/firmware_config_flow.pyi +1 -3
  254. homeassistant-stubs/components/homeassistant_hardware/util.pyi +13 -1
  255. homeassistant-stubs/components/homeassistant_sky_connect/config_flow.pyi +4 -2
  256. homeassistant-stubs/components/homeassistant_sky_connect/util.pyi +2 -2
  257. homeassistant-stubs/components/homeassistant_yellow/config_flow.pyi +1 -0
  258. homeassistant-stubs/components/homee/__init__.pyi +14 -0
  259. homeassistant-stubs/components/homee/config_flow.pyi +14 -0
  260. homeassistant-stubs/components/homee/const.pyi +9 -0
  261. homeassistant-stubs/components/homee/cover.pyi +43 -0
  262. homeassistant-stubs/components/homee/entity.pyi +43 -0
  263. homeassistant-stubs/components/homee/helpers.pyi +6 -0
  264. homeassistant-stubs/components/homee/sensor.pyi +49 -0
  265. homeassistant-stubs/components/homekit/util.pyi +1 -1
  266. homeassistant-stubs/components/homekit_controller/config_flow.pyi +3 -2
  267. homeassistant-stubs/components/homewizard/__init__.pyi +5 -0
  268. homeassistant-stubs/components/homewizard/config_flow.pyi +19 -19
  269. homeassistant-stubs/components/homewizard/const.pyi +0 -11
  270. homeassistant-stubs/components/homewizard/coordinator.pyi +6 -12
  271. homeassistant-stubs/components/homewizard/number.pyi +0 -1
  272. homeassistant-stubs/components/homewizard/repairs.pyi +17 -0
  273. homeassistant-stubs/components/homewizard/sensor.pyi +8 -5
  274. homeassistant-stubs/components/homewizard/switch.pyi +4 -4
  275. homeassistant-stubs/components/http/ban.pyi +0 -1
  276. homeassistant-stubs/components/huawei_lte/config_flow.pyi +2 -2
  277. homeassistant-stubs/components/humidifier/__init__.pyi +1 -1
  278. homeassistant-stubs/components/husqvarna_automower/__init__.pyi +0 -3
  279. homeassistant-stubs/components/husqvarna_automower/coordinator.pyi +14 -0
  280. homeassistant-stubs/components/husqvarna_automower/number.pyi +1 -1
  281. homeassistant-stubs/components/hydrawise/__init__.pyi +3 -1
  282. homeassistant-stubs/components/hydrawise/config_flow.pyi +13 -5
  283. homeassistant-stubs/components/hydrawise/coordinator.pyi +4 -4
  284. homeassistant-stubs/components/hydrawise/switch.pyi +3 -3
  285. homeassistant-stubs/components/hyperion/config_flow.pyi +2 -2
  286. homeassistant-stubs/components/image/__init__.pyi +1 -1
  287. homeassistant-stubs/components/imgw_pib/__init__.pyi +1 -1
  288. homeassistant-stubs/components/imgw_pib/sensor.pyi +2 -1
  289. homeassistant-stubs/components/incomfort/__init__.pyi +18 -0
  290. homeassistant-stubs/components/incomfort/binary_sensor.pyi +33 -0
  291. homeassistant-stubs/components/incomfort/climate.pyi +42 -0
  292. homeassistant-stubs/components/incomfort/config_flow.pyi +37 -0
  293. homeassistant-stubs/components/incomfort/const.pyi +2 -0
  294. homeassistant-stubs/components/incomfort/coordinator.pyi +25 -0
  295. homeassistant-stubs/components/incomfort/diagnostics.pyi +12 -0
  296. homeassistant-stubs/components/incomfort/entity.pyi +14 -0
  297. homeassistant-stubs/components/incomfort/errors.pyi +18 -0
  298. homeassistant-stubs/components/incomfort/sensor.pyi +33 -0
  299. homeassistant-stubs/components/incomfort/water_heater.pyi +32 -0
  300. homeassistant-stubs/components/intent/__init__.pyi +1 -1
  301. homeassistant-stubs/components/intent/timers.pyi +1 -2
  302. homeassistant-stubs/components/ipp/config_flow.pyi +2 -2
  303. homeassistant-stubs/components/iron_os/button.pyi +31 -0
  304. homeassistant-stubs/components/iron_os/coordinator.pyi +4 -1
  305. homeassistant-stubs/components/iron_os/diagnostics.pyi +6 -0
  306. homeassistant-stubs/components/iron_os/number.pyi +1 -2
  307. homeassistant-stubs/components/iron_os/select.pyi +2 -4
  308. homeassistant-stubs/components/iron_os/switch.pyi +43 -0
  309. homeassistant-stubs/components/isy994/__init__.pyi +1 -2
  310. homeassistant-stubs/components/isy994/config_flow.pyi +4 -3
  311. homeassistant-stubs/components/kaleidescape/config_flow.pyi +2 -2
  312. homeassistant-stubs/components/knx/binary_sensor.pyi +18 -10
  313. homeassistant-stubs/components/knx/climate.pyi +10 -2
  314. homeassistant-stubs/components/knx/const.pyi +2 -0
  315. homeassistant-stubs/components/knx/entity.pyi +1 -1
  316. homeassistant-stubs/components/knx/light.pyi +1 -1
  317. homeassistant-stubs/components/knx/schema.pyi +5 -7
  318. homeassistant-stubs/components/knx/sensor.pyi +1 -1
  319. homeassistant-stubs/components/knx/storage/const.pyi +1 -0
  320. homeassistant-stubs/components/knx/storage/entity_store_schema.pyi +4 -2
  321. homeassistant-stubs/components/lamarzocco/config_flow.pyi +2 -2
  322. homeassistant-stubs/components/lametric/config_flow.pyi +2 -2
  323. homeassistant-stubs/components/lawn_mower/__init__.pyi +1 -1
  324. homeassistant-stubs/components/lcn/__init__.pyi +2 -2
  325. homeassistant-stubs/components/lcn/climate.pyi +2 -1
  326. homeassistant-stubs/components/lcn/const.pyi +1 -0
  327. homeassistant-stubs/components/lcn/schemas.pyi +1 -1
  328. homeassistant-stubs/components/lektrico/config_flow.pyi +1 -1
  329. homeassistant-stubs/components/letpot/__init__.pyi +13 -0
  330. homeassistant-stubs/components/letpot/config_flow.pyi +19 -0
  331. homeassistant-stubs/components/letpot/const.pyi +6 -0
  332. homeassistant-stubs/components/letpot/coordinator.pyi +20 -0
  333. homeassistant-stubs/components/letpot/entity.pyi +10 -0
  334. homeassistant-stubs/components/letpot/time.pyi +33 -0
  335. homeassistant-stubs/components/lifx/config_flow.pyi +3 -3
  336. homeassistant-stubs/components/lifx/coordinator.pyi +1 -1
  337. homeassistant-stubs/components/lifx/manager.pyi +16 -1
  338. homeassistant-stubs/components/light/__init__.pyi +1 -1
  339. homeassistant-stubs/components/linkplay/config_flow.pyi +2 -2
  340. homeassistant-stubs/components/litterrobot/__init__.pyi +2 -6
  341. homeassistant-stubs/components/litterrobot/binary_sensor.pyi +6 -9
  342. homeassistant-stubs/components/litterrobot/button.pyi +6 -10
  343. homeassistant-stubs/components/litterrobot/{hub.pyi → coordinator.pyi} +11 -10
  344. homeassistant-stubs/components/litterrobot/entity.pyi +5 -7
  345. homeassistant-stubs/components/litterrobot/select.pyi +5 -14
  346. homeassistant-stubs/components/litterrobot/sensor.pyi +7 -7
  347. homeassistant-stubs/components/litterrobot/switch.pyi +7 -9
  348. homeassistant-stubs/components/litterrobot/time.pyi +3 -6
  349. homeassistant-stubs/components/litterrobot/update.pyi +1 -1
  350. homeassistant-stubs/components/litterrobot/vacuum.pyi +1 -5
  351. homeassistant-stubs/components/lock/__init__.pyi +1 -1
  352. homeassistant-stubs/components/logbook/models.pyi +1 -1
  353. homeassistant-stubs/components/lookin/config_flow.pyi +2 -2
  354. homeassistant-stubs/components/lovelace/__init__.pyi +39 -0
  355. homeassistant-stubs/components/lovelace/cast.pyi +18 -0
  356. homeassistant-stubs/components/lovelace/const.pyi +33 -0
  357. homeassistant-stubs/components/lovelace/dashboard.pyi +83 -0
  358. homeassistant-stubs/components/lovelace/resources.pyi +42 -0
  359. homeassistant-stubs/components/lovelace/system_health.pyi +9 -0
  360. homeassistant-stubs/components/lovelace/websocket.pyi +26 -0
  361. homeassistant-stubs/components/mastodon/config_flow.pyi +2 -3
  362. homeassistant-stubs/components/mastodon/notify.pyi +1 -3
  363. homeassistant-stubs/components/matter/config_flow.pyi +1 -1
  364. homeassistant-stubs/components/matter/cover.pyi +0 -1
  365. homeassistant-stubs/components/matter/discovery.pyi +2 -2
  366. homeassistant-stubs/components/matter/entity.pyi +11 -4
  367. homeassistant-stubs/components/matter/light.pyi +0 -1
  368. homeassistant-stubs/components/matter/lock.pyi +0 -2
  369. homeassistant-stubs/components/matter/models.pyi +10 -1
  370. homeassistant-stubs/components/matter/number.pyi +1 -1
  371. homeassistant-stubs/components/matter/select.pyi +32 -2
  372. homeassistant-stubs/components/matter/sensor.pyi +24 -0
  373. homeassistant-stubs/components/matter/switch.pyi +15 -2
  374. homeassistant-stubs/components/matter/vacuum.pyi +0 -1
  375. homeassistant-stubs/components/matter/valve.pyi +0 -2
  376. homeassistant-stubs/components/mcp/__init__.pyi +16 -0
  377. homeassistant-stubs/components/mcp/config_flow.pyi +23 -0
  378. homeassistant-stubs/components/mcp/const.pyi +1 -0
  379. homeassistant-stubs/components/mcp/coordinator.pyi +40 -0
  380. homeassistant-stubs/components/mcp/types.pyi +4 -0
  381. homeassistant-stubs/components/mcp_server/__init__.pyi +13 -0
  382. homeassistant-stubs/components/mcp_server/config_flow.pyi +14 -0
  383. homeassistant-stubs/components/mcp_server/const.pyi +4 -0
  384. homeassistant-stubs/components/mcp_server/http.pyi +31 -0
  385. homeassistant-stubs/components/mcp_server/llm_api.pyi +15 -0
  386. homeassistant-stubs/components/mcp_server/server.pyi +13 -0
  387. homeassistant-stubs/components/mcp_server/session.pyi +20 -0
  388. homeassistant-stubs/components/mcp_server/types.pyi +4 -0
  389. homeassistant-stubs/components/media_player/__init__.pyi +1 -1
  390. homeassistant-stubs/components/media_source/__init__.pyi +1 -1
  391. homeassistant-stubs/components/media_source/models.pyi +1 -2
  392. homeassistant-stubs/components/minecraft_server/__init__.pyi +1 -1
  393. homeassistant-stubs/components/modbus/__init__.pyi +2 -2
  394. homeassistant-stubs/components/modbus/binary_sensor.pyi +1 -3
  395. homeassistant-stubs/components/modbus/climate.pyi +4 -3
  396. homeassistant-stubs/components/modbus/const.pyi +4 -0
  397. homeassistant-stubs/components/modbus/cover.pyi +1 -2
  398. homeassistant-stubs/components/modbus/entity.pyi +15 -8
  399. homeassistant-stubs/components/modbus/light.pyi +0 -1
  400. homeassistant-stubs/components/modbus/modbus.pyi +4 -0
  401. homeassistant-stubs/components/modbus/sensor.pyi +1 -2
  402. homeassistant-stubs/components/modbus/switch.pyi +0 -1
  403. homeassistant-stubs/components/modem_callerid/config_flow.pyi +2 -1
  404. homeassistant-stubs/components/motionmount/__init__.pyi +2 -2
  405. homeassistant-stubs/components/motionmount/config_flow.pyi +16 -6
  406. homeassistant-stubs/components/motionmount/entity.pyi +3 -2
  407. homeassistant-stubs/components/motionmount/select.pyi +2 -0
  408. homeassistant-stubs/components/mqtt/__init__.pyi +11 -34
  409. homeassistant-stubs/components/mqtt/alarm_control_panel.pyi +1 -1
  410. homeassistant-stubs/components/mqtt/config_flow.pyi +3 -5
  411. homeassistant-stubs/components/mqtt/const.pyi +7 -1
  412. homeassistant-stubs/components/mqtt/diagnostics.pyi +0 -1
  413. homeassistant-stubs/components/mqtt/light/schema_basic.pyi +2 -1
  414. homeassistant-stubs/components/mqtt/light/schema_json.pyi +2 -1
  415. homeassistant-stubs/components/mqtt/light/schema_template.pyi +2 -1
  416. homeassistant-stubs/components/music_assistant/config_flow.pyi +2 -2
  417. homeassistant-stubs/components/nam/config_flow.pyi +2 -2
  418. homeassistant-stubs/components/nanoleaf/config_flow.pyi +6 -5
  419. homeassistant-stubs/components/nest/__init__.pyi +3 -4
  420. homeassistant-stubs/components/nest/api.pyi +2 -2
  421. homeassistant-stubs/components/nest/climate.pyi +2 -0
  422. homeassistant-stubs/components/nest/config_flow.pyi +6 -2
  423. homeassistant-stubs/components/netatmo/button.pyi +25 -0
  424. homeassistant-stubs/components/netatmo/const.pyi +1 -0
  425. homeassistant-stubs/components/netatmo/data_handler.pyi +1 -1
  426. homeassistant-stubs/components/network/system_health.pyi +11 -0
  427. homeassistant-stubs/components/notify/__init__.pyi +1 -1
  428. homeassistant-stubs/components/number/__init__.pyi +2 -2
  429. homeassistant-stubs/components/nut/config_flow.pyi +2 -2
  430. homeassistant-stubs/components/onboarding/views.pyi +30 -2
  431. homeassistant-stubs/components/onedrive/__init__.pyi +26 -0
  432. homeassistant-stubs/components/onedrive/application_credentials.pyi +5 -0
  433. homeassistant-stubs/components/onedrive/backup.pyi +41 -0
  434. homeassistant-stubs/components/onedrive/config_flow.pyi +18 -0
  435. homeassistant-stubs/components/onedrive/const.pyi +10 -0
  436. homeassistant-stubs/components/onewire/__init__.pyi +4 -4
  437. homeassistant-stubs/components/onewire/binary_sensor.pyi +8 -4
  438. homeassistant-stubs/components/onewire/config_flow.pyi +12 -7
  439. homeassistant-stubs/components/onewire/const.pyi +0 -2
  440. homeassistant-stubs/components/onewire/diagnostics.pyi +1 -1
  441. homeassistant-stubs/components/onewire/onewirehub.pyi +22 -14
  442. homeassistant-stubs/components/onewire/select.pyi +27 -0
  443. homeassistant-stubs/components/onewire/sensor.pyi +7 -4
  444. homeassistant-stubs/components/onewire/switch.pyi +8 -4
  445. homeassistant-stubs/components/onkyo/config_flow.pyi +9 -4
  446. homeassistant-stubs/components/open_meteo/__init__.pyi +4 -8
  447. homeassistant-stubs/components/open_meteo/coordinator.pyi +15 -0
  448. homeassistant-stubs/components/open_meteo/diagnostics.pyi +2 -5
  449. homeassistant-stubs/components/open_meteo/weather.pyi +3 -3
  450. homeassistant-stubs/components/openai_conversation/conversation.pyi +6 -6
  451. homeassistant-stubs/components/overkiz/__init__.pyi +1 -1
  452. homeassistant-stubs/components/overkiz/climate/__init__.pyi +1 -0
  453. homeassistant-stubs/components/overkiz/climate/atlantic_pass_apc_zone_control_zone.pyi +1 -1
  454. homeassistant-stubs/components/overkiz/climate/evo_home_controller.pyi +24 -0
  455. homeassistant-stubs/components/overkiz/config_flow.pyi +4 -3
  456. homeassistant-stubs/components/overkiz/const.pyi +1 -0
  457. homeassistant-stubs/components/overkiz/coordinator.pyi +5 -3
  458. homeassistant-stubs/components/overseerr/__init__.pyi +37 -0
  459. homeassistant-stubs/components/overseerr/config_flow.pyi +14 -0
  460. homeassistant-stubs/components/overseerr/const.pyi +12 -0
  461. homeassistant-stubs/components/overseerr/coordinator.pyi +18 -0
  462. homeassistant-stubs/components/overseerr/diagnostics.pyi +6 -0
  463. homeassistant-stubs/components/overseerr/entity.pyi +11 -0
  464. homeassistant-stubs/components/overseerr/event.pyi +35 -0
  465. homeassistant-stubs/components/overseerr/sensor.pyi +27 -0
  466. homeassistant-stubs/components/overseerr/services.pyi +16 -0
  467. homeassistant-stubs/components/pandora/__init__.pyi +0 -0
  468. homeassistant-stubs/components/pandora/media_player.pyi +51 -0
  469. homeassistant-stubs/components/peblar/config_flow.pyi +3 -3
  470. homeassistant-stubs/components/person/__init__.pyi +103 -0
  471. homeassistant-stubs/components/person/const.pyi +1 -0
  472. homeassistant-stubs/components/person/significant_change.pyi +5 -0
  473. homeassistant-stubs/components/plugwise/config_flow.pyi +1 -1
  474. homeassistant-stubs/components/powerfox/sensor.pyi +3 -2
  475. homeassistant-stubs/components/powerwall/__init__.pyi +8 -3
  476. homeassistant-stubs/components/powerwall/config_flow.pyi +3 -3
  477. homeassistant-stubs/components/powerwall/const.pyi +2 -0
  478. homeassistant-stubs/components/proximity/__init__.pyi +2 -3
  479. homeassistant-stubs/components/proximity/coordinator.pyi +1 -2
  480. homeassistant-stubs/components/pure_energie/config_flow.pyi +2 -2
  481. homeassistant-stubs/components/python_script/__init__.pyi +48 -0
  482. homeassistant-stubs/components/qbus/__init__.pyi +15 -0
  483. homeassistant-stubs/components/qbus/config_flow.pyi +26 -0
  484. homeassistant-stubs/components/qbus/const.pyi +7 -0
  485. homeassistant-stubs/components/qbus/coordinator.pyi +48 -0
  486. homeassistant-stubs/components/qbus/entity.pyi +29 -0
  487. homeassistant-stubs/components/qbus/switch.pyi +21 -0
  488. homeassistant-stubs/components/qnap_qsw/config_flow.pyi +2 -2
  489. homeassistant-stubs/components/qnap_qsw/sensor.pyi +1 -4
  490. homeassistant-stubs/components/rabbitair/config_flow.pyi +2 -1
  491. homeassistant-stubs/components/rainforest_raven/config_flow.pyi +3 -2
  492. homeassistant-stubs/components/rainmachine/config_flow.pyi +4 -4
  493. homeassistant-stubs/components/recorder/auto_repairs/statistics/duplicates.pyi +1 -1
  494. homeassistant-stubs/components/recorder/const.pyi +0 -2
  495. homeassistant-stubs/components/recorder/core.pyi +2 -2
  496. homeassistant-stubs/components/recorder/db_schema.pyi +5 -2
  497. homeassistant-stubs/components/recorder/migration.pyi +1 -1
  498. homeassistant-stubs/components/recorder/models/state.pyi +1 -1
  499. homeassistant-stubs/components/recorder/util.pyi +1 -7
  500. homeassistant-stubs/components/remote/__init__.pyi +1 -1
  501. homeassistant-stubs/components/reolink/__init__.pyi +4 -2
  502. homeassistant-stubs/components/reolink/config_flow.pyi +7 -3
  503. homeassistant-stubs/components/reolink/const.pyi +1 -0
  504. homeassistant-stubs/components/reolink/entity.pyi +1 -1
  505. homeassistant-stubs/components/reolink/host.pyi +9 -2
  506. homeassistant-stubs/components/reolink/switch.pyi +5 -1
  507. homeassistant-stubs/components/reolink/util.pyi +6 -5
  508. homeassistant-stubs/components/repairs/__init__.pyi +1 -1
  509. homeassistant-stubs/components/ring/__init__.pyi +4 -15
  510. homeassistant-stubs/components/ring/binary_sensor.pyi +2 -0
  511. homeassistant-stubs/components/ring/button.pyi +1 -0
  512. homeassistant-stubs/components/ring/camera.pyi +1 -0
  513. homeassistant-stubs/components/ring/config_flow.pyi +2 -2
  514. homeassistant-stubs/components/ring/coordinator.pyi +14 -4
  515. homeassistant-stubs/components/ring/entity.pyi +1 -2
  516. homeassistant-stubs/components/ring/event.pyi +2 -0
  517. homeassistant-stubs/components/ring/light.pyi +1 -0
  518. homeassistant-stubs/components/ring/number.pyi +2 -0
  519. homeassistant-stubs/components/ring/sensor.pyi +2 -0
  520. homeassistant-stubs/components/ring/siren.pyi +1 -0
  521. homeassistant-stubs/components/ring/switch.pyi +1 -0
  522. homeassistant-stubs/components/roborock/__init__.pyi +3 -1
  523. homeassistant-stubs/components/roborock/const.pyi +4 -0
  524. homeassistant-stubs/components/roborock/coordinator.pyi +10 -6
  525. homeassistant-stubs/components/roborock/image.pyi +10 -11
  526. homeassistant-stubs/components/roborock/roborock_storage.pyi +23 -0
  527. homeassistant-stubs/components/roborock/sensor.pyi +1 -1
  528. homeassistant-stubs/components/roborock/vacuum.pyi +5 -1
  529. homeassistant-stubs/components/roku/config_flow.pyi +4 -3
  530. homeassistant-stubs/components/romy/config_flow.pyi +2 -2
  531. homeassistant-stubs/components/russound_rio/config_flow.pyi +6 -2
  532. homeassistant-stubs/components/russound_rio/const.pyi +0 -2
  533. homeassistant-stubs/components/russound_rio/media_player.pyi +13 -6
  534. homeassistant-stubs/components/ruuvi_gateway/config_flow.pyi +2 -2
  535. homeassistant-stubs/components/samsungtv/config_flow.pyi +6 -4
  536. homeassistant-stubs/components/scrape/sensor.pyi +2 -0
  537. homeassistant-stubs/components/script/__init__.pyi +1 -1
  538. homeassistant-stubs/components/select/__init__.pyi +2 -2
  539. homeassistant-stubs/components/sensibo/__init__.pyi +3 -3
  540. homeassistant-stubs/components/sensibo/binary_sensor.pyi +1 -0
  541. homeassistant-stubs/components/sensibo/climate.pyi +13 -7
  542. homeassistant-stubs/components/sensibo/config_flow.pyi +1 -1
  543. homeassistant-stubs/components/sensibo/coordinator.pyi +2 -0
  544. homeassistant-stubs/components/sensibo/entity.pyi +5 -1
  545. homeassistant-stubs/components/sensibo/select.pyi +6 -1
  546. homeassistant-stubs/components/sensibo/sensor.pyi +2 -0
  547. homeassistant-stubs/components/sensor/__init__.pyi +2 -2
  548. homeassistant-stubs/components/shelly/__init__.pyi +2 -0
  549. homeassistant-stubs/components/shelly/binary_sensor.pyi +11 -6
  550. homeassistant-stubs/components/shelly/bluetooth/__init__.pyi +1 -1
  551. homeassistant-stubs/components/shelly/climate.pyi +25 -2
  552. homeassistant-stubs/components/shelly/config_flow.pyi +1 -1
  553. homeassistant-stubs/components/shelly/const.pyi +3 -0
  554. homeassistant-stubs/components/shelly/coordinator.pyi +3 -2
  555. homeassistant-stubs/components/shelly/entity.pyi +4 -1
  556. homeassistant-stubs/components/shelly/number.pyi +21 -13
  557. homeassistant-stubs/components/shelly/sensor.pyi +12 -7
  558. homeassistant-stubs/components/shelly/utils.pyi +1 -1
  559. homeassistant-stubs/components/siren/__init__.pyi +1 -1
  560. homeassistant-stubs/components/slack/config_flow.pyi +2 -1
  561. homeassistant-stubs/components/slack/entity.pyi +3 -5
  562. homeassistant-stubs/components/slack/notify.pyi +4 -2
  563. homeassistant-stubs/components/slack/sensor.pyi +2 -2
  564. homeassistant-stubs/components/slack/utils.pyi +6 -0
  565. homeassistant-stubs/components/smhi/config_flow.pyi +1 -1
  566. homeassistant-stubs/components/smhi/weather.pyi +3 -3
  567. homeassistant-stubs/components/smlight/config_flow.pyi +7 -5
  568. homeassistant-stubs/components/spotify/__init__.pyi +1 -1
  569. homeassistant-stubs/components/spotify/browse_media.pyi +1 -1
  570. homeassistant-stubs/components/spotify/coordinator.pyi +2 -0
  571. homeassistant-stubs/components/squeezebox/config_flow.pyi +2 -2
  572. homeassistant-stubs/components/ssdp/__init__.pyi +34 -44
  573. homeassistant-stubs/components/starlink/coordinator.pyi +1 -0
  574. homeassistant-stubs/components/steamist/config_flow.pyi +2 -2
  575. homeassistant-stubs/components/stream/__init__.pyi +3 -15
  576. homeassistant-stubs/components/stream/const.pyi +9 -1
  577. homeassistant-stubs/components/stream/exceptions.pyi +13 -0
  578. homeassistant-stubs/components/stream/worker.pyi +4 -5
  579. homeassistant-stubs/components/stt/__init__.pyi +1 -1
  580. homeassistant-stubs/components/suez_water/__init__.pyi +4 -0
  581. homeassistant-stubs/components/switch/__init__.pyi +1 -1
  582. homeassistant-stubs/components/switchbot_cloud/__init__.pyi +5 -5
  583. homeassistant-stubs/components/switchbot_cloud/button.pyi +17 -0
  584. homeassistant-stubs/components/switchbot_cloud/entity.pyi +5 -0
  585. homeassistant-stubs/components/switchbot_cloud/lock.pyi +2 -3
  586. homeassistant-stubs/components/switchbot_cloud/sensor.pyi +5 -5
  587. homeassistant-stubs/components/switchbot_cloud/switch.pyi +3 -6
  588. homeassistant-stubs/components/switchbot_cloud/vacuum.pyi +1 -2
  589. homeassistant-stubs/components/switcher_kis/switch.pyi +29 -0
  590. homeassistant-stubs/components/synology_dsm/__init__.pyi +5 -2
  591. homeassistant-stubs/components/synology_dsm/backup.pyi +36 -0
  592. homeassistant-stubs/components/synology_dsm/common.pyi +5 -2
  593. homeassistant-stubs/components/synology_dsm/config_flow.pyi +11 -4
  594. homeassistant-stubs/components/synology_dsm/const.pyi +6 -0
  595. homeassistant-stubs/components/synology_dsm/coordinator.pyi +1 -1
  596. homeassistant-stubs/components/system_health/__init__.pyi +3 -1
  597. homeassistant-stubs/components/systemmonitor/__init__.pyi +3 -3
  598. homeassistant-stubs/components/systemmonitor/config_flow.pyi +0 -4
  599. homeassistant-stubs/components/systemmonitor/coordinator.pyi +2 -1
  600. homeassistant-stubs/components/tailwind/config_flow.pyi +3 -3
  601. homeassistant-stubs/components/technove/binary_sensor.pyi +0 -4
  602. homeassistant-stubs/components/technove/config_flow.pyi +3 -2
  603. homeassistant-stubs/components/tedee/coordinator.pyi +1 -1
  604. homeassistant-stubs/components/text/__init__.pyi +1 -1
  605. homeassistant-stubs/components/tile/__init__.pyi +4 -15
  606. homeassistant-stubs/components/tile/binary_sensor.pyi +24 -0
  607. homeassistant-stubs/components/tile/config_flow.pyi +0 -1
  608. homeassistant-stubs/components/tile/coordinator.pyi +18 -0
  609. homeassistant-stubs/components/tile/device_tracker.pyi +6 -20
  610. homeassistant-stubs/components/tile/diagnostics.pyi +2 -4
  611. homeassistant-stubs/components/tile/entity.pyi +13 -0
  612. homeassistant-stubs/components/time/__init__.pyi +1 -1
  613. homeassistant-stubs/components/todo/__init__.pyi +1 -1
  614. homeassistant-stubs/components/tolo/config_flow.pyi +2 -2
  615. homeassistant-stubs/components/tplink/__init__.pyi +3 -6
  616. homeassistant-stubs/components/tplink/binary_sensor.pyi +1 -0
  617. homeassistant-stubs/components/tplink/button.pyi +2 -1
  618. homeassistant-stubs/components/tplink/camera.pyi +9 -9
  619. homeassistant-stubs/components/tplink/climate.pyi +18 -12
  620. homeassistant-stubs/components/tplink/config_flow.pyi +3 -2
  621. homeassistant-stubs/components/tplink/const.pyi +1 -1
  622. homeassistant-stubs/components/tplink/coordinator.pyi +20 -4
  623. homeassistant-stubs/components/tplink/deprecate.pyi +5 -3
  624. homeassistant-stubs/components/tplink/entity.pyi +30 -11
  625. homeassistant-stubs/components/tplink/fan.pyi +15 -7
  626. homeassistant-stubs/components/tplink/light.pyi +22 -11
  627. homeassistant-stubs/components/tplink/number.pyi +1 -0
  628. homeassistant-stubs/components/tplink/select.pyi +1 -0
  629. homeassistant-stubs/components/tplink/sensor.pyi +7 -2
  630. homeassistant-stubs/components/tplink/siren.pyi +22 -7
  631. homeassistant-stubs/components/tplink/switch.pyi +1 -0
  632. homeassistant-stubs/components/tplink/vacuum.pyi +43 -0
  633. homeassistant-stubs/components/tradfri/config_flow.pyi +2 -2
  634. homeassistant-stubs/components/trafikverket_camera/__init__.pyi +2 -2
  635. homeassistant-stubs/components/trafikverket_camera/camera.pyi +2 -0
  636. homeassistant-stubs/components/trafikverket_ferry/__init__.pyi +1 -1
  637. homeassistant-stubs/components/trafikverket_ferry/coordinator.pyi +1 -1
  638. homeassistant-stubs/components/trafikverket_ferry/sensor.pyi +1 -0
  639. homeassistant-stubs/components/trafikverket_train/__init__.pyi +6 -3
  640. homeassistant-stubs/components/trafikverket_train/config_flow.pyi +10 -4
  641. homeassistant-stubs/components/trafikverket_train/coordinator.pyi +2 -2
  642. homeassistant-stubs/components/trafikverket_train/sensor.pyi +1 -0
  643. homeassistant-stubs/components/trafikverket_weatherstation/__init__.pyi +1 -1
  644. homeassistant-stubs/components/trafikverket_weatherstation/coordinator.pyi +1 -1
  645. homeassistant-stubs/components/trafikverket_weatherstation/diagnostics.pyi +5 -0
  646. homeassistant-stubs/components/trafikverket_weatherstation/sensor.pyi +1 -0
  647. homeassistant-stubs/components/tts/__init__.pyi +2 -2
  648. homeassistant-stubs/components/unifi/config_flow.pyi +2 -2
  649. homeassistant-stubs/components/unifi/device_tracker.pyi +1 -1
  650. homeassistant-stubs/components/unifi/switch.pyi +1 -0
  651. homeassistant-stubs/components/unifiprotect/__init__.pyi +1 -1
  652. homeassistant-stubs/components/unifiprotect/config_flow.pyi +4 -3
  653. homeassistant-stubs/components/unifiprotect/light.pyi +1 -1
  654. homeassistant-stubs/components/unifiprotect/views.pyi +8 -0
  655. homeassistant-stubs/components/upcloud/__init__.pyi +6 -12
  656. homeassistant-stubs/components/upcloud/binary_sensor.pyi +2 -4
  657. homeassistant-stubs/components/upcloud/config_flow.pyi +3 -2
  658. homeassistant-stubs/components/upcloud/const.pyi +0 -1
  659. homeassistant-stubs/components/upcloud/coordinator.pyi +3 -2
  660. homeassistant-stubs/components/upcloud/entity.pyi +3 -3
  661. homeassistant-stubs/components/upcloud/switch.pyi +3 -4
  662. homeassistant-stubs/components/update/__init__.pyi +2 -2
  663. homeassistant-stubs/components/usb/__init__.pyi +21 -18
  664. homeassistant-stubs/components/usb/models.pyi +1 -1
  665. homeassistant-stubs/components/vacuum/__init__.pyi +1 -1
  666. homeassistant-stubs/components/velbus/config_flow.pyi +2 -2
  667. homeassistant-stubs/components/velbus/const.pyi +1 -0
  668. homeassistant-stubs/components/velbus/diagnostics.pyi +1 -3
  669. homeassistant-stubs/components/velbus/entity.pyi +4 -0
  670. homeassistant-stubs/components/velbus/services.pyi +5 -1
  671. homeassistant-stubs/components/wake_word/__init__.pyi +1 -1
  672. homeassistant-stubs/components/water_heater/__init__.pyi +7 -3
  673. homeassistant-stubs/components/weather/__init__.pyi +2 -3
  674. homeassistant-stubs/components/webhook/__init__.pyi +0 -1
  675. homeassistant-stubs/components/webostv/__init__.pyi +8 -24
  676. homeassistant-stubs/components/webostv/config_flow.pyi +14 -13
  677. homeassistant-stubs/components/webostv/const.pyi +0 -1
  678. homeassistant-stubs/components/webostv/device_trigger.pyi +1 -2
  679. homeassistant-stubs/components/webostv/diagnostics.pyi +2 -3
  680. homeassistant-stubs/components/webostv/helpers.pyi +11 -4
  681. homeassistant-stubs/components/webostv/media_player.pyi +17 -13
  682. homeassistant-stubs/components/webostv/notify.pyi +6 -4
  683. homeassistant-stubs/components/webostv/trigger.pyi +2 -0
  684. homeassistant-stubs/components/wiz/config_flow.pyi +3 -2
  685. homeassistant-stubs/components/wled/config_flow.pyi +3 -2
  686. homeassistant-stubs/components/worldclock/sensor.pyi +2 -7
  687. homeassistant-stubs/components/zeroconf/__init__.pyi +12 -20
  688. homeassistant-stubs/components/zwave_js/api.pyi +1 -1
  689. homeassistant-stubs/components/zwave_js/config_flow.pyi +3 -2
  690. homeassistant-stubs/config_entries.pyi +7 -9
  691. homeassistant-stubs/const.pyi +2 -0
  692. homeassistant-stubs/core.pyi +2 -3
  693. homeassistant-stubs/core_config.pyi +3 -3
  694. homeassistant-stubs/data_entry_flow.pyi +1 -2
  695. homeassistant-stubs/helpers/aiohttp_client.pyi +12 -1
  696. homeassistant-stubs/helpers/area_registry.pyi +11 -4
  697. homeassistant-stubs/helpers/collection.pyi +5 -7
  698. homeassistant-stubs/helpers/config_entry_flow.pyi +3 -3
  699. homeassistant-stubs/helpers/config_entry_oauth2_flow.pyi +3 -0
  700. homeassistant-stubs/helpers/data_entry_flow.pyi +1 -2
  701. homeassistant-stubs/helpers/deprecation.pyi +2 -2
  702. homeassistant-stubs/helpers/device_registry.pyi +1 -1
  703. homeassistant-stubs/helpers/entity.pyi +1 -1
  704. homeassistant-stubs/helpers/entity_component.pyi +2 -4
  705. homeassistant-stubs/helpers/entity_registry.pyi +2 -2
  706. homeassistant-stubs/helpers/frame.pyi +1 -1
  707. homeassistant-stubs/helpers/httpx_client.pyi +2 -1
  708. homeassistant-stubs/helpers/intent.pyi +4 -2
  709. homeassistant-stubs/helpers/llm.pyi +23 -8
  710. homeassistant-stubs/helpers/script.pyi +1 -1
  711. homeassistant-stubs/helpers/service_info/dhcp.pyi +8 -0
  712. homeassistant-stubs/helpers/service_info/ssdp.pyi +34 -0
  713. homeassistant-stubs/helpers/service_info/usb.pyi +11 -0
  714. homeassistant-stubs/helpers/service_info/zeroconf.pyi +20 -0
  715. homeassistant-stubs/helpers/singleton.pyi +6 -2
  716. homeassistant-stubs/helpers/storage.pyi +1 -1
  717. homeassistant-stubs/helpers/template.pyi +4 -4
  718. homeassistant-stubs/helpers/update_coordinator.pyi +7 -6
  719. homeassistant-stubs/loader.pyi +1 -1
  720. homeassistant-stubs/scripts/benchmark/__init__.pyi +8 -8
  721. homeassistant-stubs/util/event_type.pyi +1 -2
  722. homeassistant-stubs/util/ulid.pyi +1 -1
  723. homeassistant-stubs/util/yaml/__init__.pyi +1 -1
  724. homeassistant-stubs/util/yaml/loader.pyi +1 -1
  725. {homeassistant_stubs-2025.1.4.dist-info → homeassistant_stubs-2025.2.0.dist-info}/METADATA +4 -4
  726. {homeassistant_stubs-2025.1.4.dist-info → homeassistant_stubs-2025.2.0.dist-info}/RECORD +728 -593
  727. homeassistant-stubs/components/dormakaba_dkey/models.pyi +0 -8
  728. homeassistant-stubs/components/imgw_pib/binary_sensor.pyi +0 -27
  729. homeassistant-stubs/components/tplink/models.pyi +0 -10
  730. {homeassistant_stubs-2025.1.4.dist-info → homeassistant_stubs-2025.2.0.dist-info}/WHEEL +0 -0
  731. {homeassistant_stubs-2025.1.4.dist-info → homeassistant_stubs-2025.2.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,5 +1,10 @@
1
1
  from .agent import BackupAgent as BackupAgent, BackupAgentError as BackupAgentError, BackupAgentPlatformProtocol as BackupAgentPlatformProtocol, LocalBackupAgent as LocalBackupAgent
2
- from .manager import BackupPlatformProtocol as BackupPlatformProtocol, BackupReaderWriter as BackupReaderWriter, BackupReaderWriterError as BackupReaderWriterError, CreateBackupEvent as CreateBackupEvent, IncorrectPasswordError as IncorrectPasswordError, ManagerBackup as ManagerBackup, NewBackup as NewBackup, WrittenBackup as WrittenBackup
3
- from .models import AddonInfo as AddonInfo, AgentBackup as AgentBackup, Folder as Folder
2
+ from .manager import BackupManager, BackupManagerError as BackupManagerError, BackupPlatformProtocol as BackupPlatformProtocol, BackupReaderWriter as BackupReaderWriter, BackupReaderWriterError as BackupReaderWriterError, CreateBackupEvent as CreateBackupEvent, CreateBackupStage as CreateBackupStage, CreateBackupState as CreateBackupState, IdleEvent as IdleEvent, IncorrectPasswordError as IncorrectPasswordError, ManagerBackup as ManagerBackup, NewBackup as NewBackup, RestoreBackupEvent as RestoreBackupEvent, RestoreBackupStage as RestoreBackupStage, RestoreBackupState as RestoreBackupState, WrittenBackup as WrittenBackup
3
+ from .models import AddonInfo as AddonInfo, AgentBackup as AgentBackup, BackupNotFound as BackupNotFound, Folder as Folder
4
+ from .util import suggested_filename as suggested_filename, suggested_filename_from_name_date as suggested_filename_from_name_date
5
+ from homeassistant.core import HomeAssistant, callback
4
6
 
5
- __all__ = ['AddonInfo', 'AgentBackup', 'ManagerBackup', 'BackupAgent', 'BackupAgentError', 'BackupAgentPlatformProtocol', 'BackupPlatformProtocol', 'BackupReaderWriter', 'BackupReaderWriterError', 'CreateBackupEvent', 'Folder', 'IncorrectPasswordError', 'LocalBackupAgent', 'NewBackup', 'WrittenBackup']
7
+ __all__ = ['AddonInfo', 'AgentBackup', 'BackupAgent', 'BackupAgentError', 'BackupAgentPlatformProtocol', 'BackupManagerError', 'BackupNotFound', 'BackupPlatformProtocol', 'BackupReaderWriter', 'BackupReaderWriterError', 'CreateBackupEvent', 'CreateBackupStage', 'CreateBackupState', 'Folder', 'IdleEvent', 'IncorrectPasswordError', 'LocalBackupAgent', 'ManagerBackup', 'NewBackup', 'RestoreBackupEvent', 'RestoreBackupStage', 'RestoreBackupState', 'WrittenBackup', 'async_get_manager', 'suggested_filename', 'suggested_filename_from_name_date']
8
+
9
+ @callback
10
+ def async_get_manager(hass: HomeAssistant) -> BackupManager: ...
@@ -1,20 +1,19 @@
1
1
  import abc
2
- from .models import AgentBackup as AgentBackup
2
+ from .models import AgentBackup as AgentBackup, BackupAgentError as BackupAgentError
3
3
  from collections.abc import AsyncIterator, Callable as Callable, Coroutine
4
4
  from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
5
- from homeassistant.exceptions import HomeAssistantError as HomeAssistantError
6
5
  from pathlib import Path
7
- from propcache import cached_property
6
+ from propcache.api import cached_property
8
7
  from typing import Any, Protocol
9
8
 
10
- class BackupAgentError(HomeAssistantError): ...
11
-
12
9
  class BackupAgentUnreachableError(BackupAgentError):
10
+ error_code: str
13
11
  _message: str
14
12
 
15
13
  class BackupAgent(abc.ABC, metaclass=abc.ABCMeta):
16
14
  domain: str
17
15
  name: str
16
+ unique_id: str
18
17
  @cached_property
19
18
  def agent_id(self) -> str: ...
20
19
  @abc.abstractmethod
@@ -31,6 +30,8 @@ class BackupAgent(abc.ABC, metaclass=abc.ABCMeta):
31
30
  class LocalBackupAgent(BackupAgent, metaclass=abc.ABCMeta):
32
31
  @abc.abstractmethod
33
32
  def get_backup_path(self, backup_id: str) -> Path: ...
33
+ @abc.abstractmethod
34
+ def get_new_backup_path(self, backup: AgentBackup) -> Path: ...
34
35
 
35
36
  class BackupAgentPlatformProtocol(Protocol):
36
37
  async def async_get_backup_agents(self, hass: HomeAssistant, **kwargs: Any) -> list[BackupAgent]: ...
@@ -1,7 +1,7 @@
1
1
  from .agent import BackupAgent as BackupAgent, LocalBackupAgent as LocalBackupAgent
2
2
  from .const import DOMAIN as DOMAIN, LOGGER as LOGGER
3
- from .models import AgentBackup as AgentBackup
4
- from .util import read_backup as read_backup
3
+ from .models import AgentBackup as AgentBackup, BackupNotFound as BackupNotFound
4
+ from .util import read_backup as read_backup, suggested_filename as suggested_filename
5
5
  from _typeshed import Incomplete
6
6
  from collections.abc import AsyncIterator, Callable as Callable, Coroutine
7
7
  from homeassistant.core import HomeAssistant as HomeAssistant
@@ -14,16 +14,18 @@ async def async_get_backup_agents(hass: HomeAssistant, **kwargs: Any) -> list[Ba
14
14
  class CoreLocalBackupAgent(LocalBackupAgent):
15
15
  domain = DOMAIN
16
16
  name: str
17
+ unique_id: str
17
18
  _hass: Incomplete
18
19
  _backup_dir: Incomplete
19
- _backups: dict[str, AgentBackup]
20
+ _backups: dict[str, tuple[AgentBackup, Path]]
20
21
  _loaded_backups: bool
21
22
  def __init__(self, hass: HomeAssistant) -> None: ...
22
23
  async def _load_backups(self) -> None: ...
23
- def _read_backups(self) -> dict[str, AgentBackup]: ...
24
+ def _read_backups(self) -> dict[str, tuple[AgentBackup, Path]]: ...
24
25
  async def async_download_backup(self, backup_id: str, **kwargs: Any) -> AsyncIterator[bytes]: ...
25
26
  async def async_upload_backup(self, *, open_stream: Callable[[], Coroutine[Any, Any, AsyncIterator[bytes]]], backup: AgentBackup, **kwargs: Any) -> None: ...
26
27
  async def async_list_backups(self, **kwargs: Any) -> list[AgentBackup]: ...
27
28
  async def async_get_backup(self, backup_id: str, **kwargs: Any) -> AgentBackup | None: ...
28
29
  def get_backup_path(self, backup_id: str) -> Path: ...
30
+ def get_new_backup_path(self, backup: AgentBackup) -> Path: ...
29
31
  async def async_delete_backup(self, backup_id: str, **kwargs: Any) -> None: ...
@@ -1,8 +1,8 @@
1
+ import datetime as dt
1
2
  from .const import LOGGER as LOGGER
2
3
  from .manager import BackupManager as BackupManager, ManagerBackup as ManagerBackup
3
4
  from .models import BackupManagerError as BackupManagerError, Folder as Folder
4
5
  from _typeshed import Incomplete
5
- from collections.abc import Callable as Callable
6
6
  from cronsim import CronSim
7
7
  from dataclasses import dataclass, field
8
8
  from datetime import datetime
@@ -14,9 +14,11 @@ from typing import Self, TypedDict
14
14
 
15
15
  CRON_PATTERN_DAILY: str
16
16
  CRON_PATTERN_WEEKLY: str
17
+ DEFAULT_BACKUP_TIME: Incomplete
17
18
  BACKUP_START_TIME_JITTER: Incomplete
18
19
 
19
20
  class StoredBackupConfig(TypedDict):
21
+ agents: dict[str, StoredAgentConfig]
20
22
  create_backup: StoredCreateBackupConfig
21
23
  last_attempted_automatic_backup: str | None
22
24
  last_completed_automatic_backup: str | None
@@ -25,6 +27,7 @@ class StoredBackupConfig(TypedDict):
25
27
 
26
28
  @dataclass(kw_only=True)
27
29
  class BackupConfigData:
30
+ agents: dict[str, AgentConfig]
28
31
  create_backup: CreateBackupConfig
29
32
  last_attempted_automatic_backup: datetime | None = ...
30
33
  last_completed_automatic_backup: datetime | None = ...
@@ -39,7 +42,18 @@ class BackupConfig:
39
42
  _manager: Incomplete
40
43
  def __init__(self, hass: HomeAssistant, manager: BackupManager) -> None: ...
41
44
  def load(self, stored_config: StoredBackupConfig) -> None: ...
42
- async def update(self, *, create_backup: CreateBackupParametersDict | UndefinedType = ..., retention: RetentionParametersDict | UndefinedType = ..., schedule: ScheduleState | UndefinedType = ...) -> None: ...
45
+ async def update(self, *, agents: dict[str, AgentParametersDict] | UndefinedType = ..., create_backup: CreateBackupParametersDict | UndefinedType = ..., retention: RetentionParametersDict | UndefinedType = ..., schedule: ScheduleParametersDict | UndefinedType = ...) -> None: ...
46
+
47
+ @dataclass(kw_only=True)
48
+ class AgentConfig:
49
+ protected: bool
50
+ def to_dict(self) -> StoredAgentConfig: ...
51
+
52
+ class StoredAgentConfig(TypedDict):
53
+ protected: bool
54
+
55
+ class AgentParametersDict(TypedDict, total=False):
56
+ protected: bool
43
57
 
44
58
  @dataclass(kw_only=True)
45
59
  class RetentionConfig:
@@ -61,7 +75,30 @@ class RetentionParametersDict(TypedDict, total=False):
61
75
  days: int | None
62
76
 
63
77
  class StoredBackupSchedule(TypedDict):
78
+ days: list[Day]
79
+ recurrence: ScheduleRecurrence
64
80
  state: ScheduleState
81
+ time: str | None
82
+
83
+ class ScheduleParametersDict(TypedDict, total=False):
84
+ days: list[Day]
85
+ recurrence: ScheduleRecurrence
86
+ state: ScheduleState
87
+ time: dt.time | None
88
+
89
+ class Day(StrEnum):
90
+ MONDAY = 'mon'
91
+ TUESDAY = 'tue'
92
+ WEDNESDAY = 'wed'
93
+ THURSDAY = 'thu'
94
+ FRIDAY = 'fri'
95
+ SATURDAY = 'sat'
96
+ SUNDAY = 'sun'
97
+
98
+ class ScheduleRecurrence(StrEnum):
99
+ NEVER = 'never'
100
+ DAILY = 'daily'
101
+ CUSTOM_DAYS = 'custom_days'
65
102
 
66
103
  class ScheduleState(StrEnum):
67
104
  NEVER = 'never'
@@ -76,8 +113,13 @@ class ScheduleState(StrEnum):
76
113
 
77
114
  @dataclass(kw_only=True)
78
115
  class BackupSchedule:
116
+ days: list[Day] = field(default_factory=list)
117
+ recurrence: ScheduleRecurrence = ...
79
118
  state: ScheduleState = ...
119
+ time: dt.time | None = ...
80
120
  cron_event: CronSim | None = field(init=False, default=None)
121
+ next_automatic_backup: datetime | None = field(init=False, default=None)
122
+ next_automatic_backup_additional = ...
81
123
  @callback
82
124
  def apply(self, manager: BackupManager) -> None: ...
83
125
  @callback
@@ -115,5 +157,5 @@ class CreateBackupParametersDict(TypedDict, total=False):
115
157
  name: str | None
116
158
  password: str | None
117
159
 
118
- async def _delete_filtered_backups(manager: BackupManager, backup_filter: Callable[[dict[str, ManagerBackup]], dict[str, ManagerBackup]]) -> None: ...
160
+ def _automatic_backups_filter(backups: dict[str, ManagerBackup]) -> dict[str, ManagerBackup]: ...
119
161
  async def delete_backups_exceeding_configured_count(manager: BackupManager) -> None: ...
@@ -1,9 +1,14 @@
1
+ from . import util as util
2
+ from .agent import BackupAgent as BackupAgent
1
3
  from .const import DATA_MANAGER as DATA_MANAGER
4
+ from .manager import BackupManager as BackupManager
5
+ from .models import BackupNotFound as BackupNotFound
2
6
  from aiohttp.web import FileResponse, Request as Request, Response, StreamResponse
3
7
  from homeassistant.components.http import HomeAssistantView as HomeAssistantView, KEY_HASS as KEY_HASS, require_admin as require_admin
4
8
  from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
5
9
  from homeassistant.exceptions import HomeAssistantError as HomeAssistantError
6
10
  from homeassistant.util import slugify as slugify
11
+ from multidict import istr
7
12
 
8
13
  @callback
9
14
  def async_register_http_views(hass: HomeAssistant) -> None: ...
@@ -12,9 +17,12 @@ class DownloadBackupView(HomeAssistantView):
12
17
  url: str
13
18
  name: str
14
19
  async def get(self, request: Request, backup_id: str) -> StreamResponse | FileResponse | Response: ...
20
+ async def _send_backup_no_password(self, request: Request, headers: dict[istr, str], backup_id: str, agent_id: str, agent: BackupAgent, manager: BackupManager) -> StreamResponse | FileResponse | Response: ...
21
+ async def _send_backup_with_password(self, hass: HomeAssistant, request: Request, headers: dict[istr, str], backup_id: str, agent_id: str, password: str, agent: BackupAgent, manager: BackupManager) -> StreamResponse | FileResponse | Response: ...
15
22
 
16
23
  class UploadBackupView(HomeAssistantView):
17
24
  url: str
18
25
  name: str
19
26
  @require_admin
20
27
  async def post(self, request: Request) -> Response: ...
28
+ async def _post(self, request: Request) -> Response: ...
@@ -4,16 +4,15 @@ import asyncio
4
4
  from .agent import BackupAgent as BackupAgent, BackupAgentError as BackupAgentError, BackupAgentPlatformProtocol as BackupAgentPlatformProtocol, LocalBackupAgent as LocalBackupAgent
5
5
  from .config import BackupConfig as BackupConfig, delete_backups_exceeding_configured_count as delete_backups_exceeding_configured_count
6
6
  from .const import BUF_SIZE as BUF_SIZE, DATA_MANAGER as DATA_MANAGER, DOMAIN as DOMAIN, EXCLUDE_DATABASE_FROM_BACKUP as EXCLUDE_DATABASE_FROM_BACKUP, EXCLUDE_FROM_BACKUP as EXCLUDE_FROM_BACKUP, LOGGER as LOGGER
7
- from .models import AgentBackup as AgentBackup, BackupManagerError as BackupManagerError, Folder as Folder
7
+ from .models import AgentBackup as AgentBackup, BackupError as BackupError, BackupManagerError as BackupManagerError, BackupReaderWriterError as BackupReaderWriterError, BaseBackup as BaseBackup, Folder as Folder
8
8
  from .store import BackupStore as BackupStore
9
- from .util import make_backup_dir as make_backup_dir, read_backup as read_backup, validate_password as validate_password
9
+ from .util import AsyncIteratorReader as AsyncIteratorReader, DecryptedBackupStreamer as DecryptedBackupStreamer, EncryptedBackupStreamer as EncryptedBackupStreamer, make_backup_dir as make_backup_dir, read_backup as read_backup, validate_password as validate_password, validate_password_stream as validate_password_stream
10
10
  from _typeshed import Incomplete
11
11
  from collections.abc import AsyncIterator, Callable as Callable, Coroutine
12
12
  from dataclasses import dataclass
13
13
  from enum import StrEnum
14
- from homeassistant.backup_restore import RESTORE_BACKUP_FILE as RESTORE_BACKUP_FILE, password_to_key as password_to_key
14
+ from homeassistant.backup_restore import RESTORE_BACKUP_FILE as RESTORE_BACKUP_FILE, RESTORE_BACKUP_RESULT_FILE as RESTORE_BACKUP_RESULT_FILE, password_to_key as password_to_key
15
15
  from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
16
- from homeassistant.exceptions import HomeAssistantError as HomeAssistantError
17
16
  from homeassistant.helpers import instance_id as instance_id, integration_platform as integration_platform
18
17
  from homeassistant.helpers.json import json_bytes as json_bytes
19
18
  from pathlib import Path
@@ -24,8 +23,13 @@ class NewBackup:
24
23
  backup_job_id: str
25
24
 
26
25
  @dataclass(frozen=True, kw_only=True, slots=True)
27
- class ManagerBackup(AgentBackup):
28
- agent_ids: list[str]
26
+ class AgentBackupStatus:
27
+ protected: bool
28
+ size: int
29
+
30
+ @dataclass(frozen=True, kw_only=True, slots=True)
31
+ class ManagerBackup(BaseBackup):
32
+ agents: dict[str, AgentBackupStatus]
29
33
  failed_agent_ids: list[str]
30
34
  with_automatic_settings: bool | None
31
35
 
@@ -79,6 +83,7 @@ class RestoreBackupStage(StrEnum):
79
83
 
80
84
  class RestoreBackupState(StrEnum):
81
85
  COMPLETED = 'completed'
86
+ CORE_RESTART = 'core_restart'
82
87
  FAILED = 'failed'
83
88
  IN_PROGRESS = 'in_progress'
84
89
 
@@ -93,18 +98,21 @@ class IdleEvent(ManagerStateEvent):
93
98
  @dataclass(frozen=True, kw_only=True, slots=True)
94
99
  class CreateBackupEvent(ManagerStateEvent):
95
100
  manager_state: BackupManagerState = ...
101
+ reason: str | None
96
102
  stage: CreateBackupStage | None
97
103
  state: CreateBackupState
98
104
 
99
105
  @dataclass(frozen=True, kw_only=True, slots=True)
100
106
  class ReceiveBackupEvent(ManagerStateEvent):
101
107
  manager_state: BackupManagerState = ...
108
+ reason: str | None
102
109
  stage: ReceiveBackupStage | None
103
110
  state: ReceiveBackupState
104
111
 
105
112
  @dataclass(frozen=True, kw_only=True, slots=True)
106
113
  class RestoreBackupEvent(ManagerStateEvent):
107
114
  manager_state: BackupManagerState = ...
115
+ reason: str | None
108
116
  stage: RestoreBackupStage | None
109
117
  state: RestoreBackupState
110
118
 
@@ -114,14 +122,21 @@ class BackupPlatformProtocol(Protocol):
114
122
 
115
123
  class BackupReaderWriter(abc.ABC, metaclass=abc.ABCMeta):
116
124
  @abc.abstractmethod
117
- async def async_create_backup(self, *, agent_ids: list[str], backup_name: str, extra_metadata: dict[str, bool | str], include_addons: list[str] | None, include_all_addons: bool, include_database: bool, include_folders: list[Folder] | None, include_homeassistant: bool, on_progress: Callable[[ManagerStateEvent], None], password: str | None) -> tuple[NewBackup, asyncio.Task[WrittenBackup]]: ...
125
+ async def async_create_backup(self, *, agent_ids: list[str], backup_name: str, extra_metadata: dict[str, bool | str], include_addons: list[str] | None, include_all_addons: bool, include_database: bool, include_folders: list[Folder] | None, include_homeassistant: bool, on_progress: Callable[[CreateBackupEvent], None], password: str | None) -> tuple[NewBackup, asyncio.Task[WrittenBackup]]: ...
118
126
  @abc.abstractmethod
119
127
  async def async_receive_backup(self, *, agent_ids: list[str], stream: AsyncIterator[bytes], suggested_filename: str) -> WrittenBackup: ...
120
128
  @abc.abstractmethod
121
- async def async_restore_backup(self, backup_id: str, *, agent_id: str, open_stream: Callable[[], Coroutine[Any, Any, AsyncIterator[bytes]]], password: str | None, restore_addons: list[str] | None, restore_database: bool, restore_folders: list[Folder] | None, restore_homeassistant: bool) -> None: ...
129
+ async def async_restore_backup(self, backup_id: str, *, agent_id: str, on_progress: Callable[[RestoreBackupEvent], None], open_stream: Callable[[], Coroutine[Any, Any, AsyncIterator[bytes]]], password: str | None, restore_addons: list[str] | None, restore_database: bool, restore_folders: list[Folder] | None, restore_homeassistant: bool) -> None: ...
130
+ @abc.abstractmethod
131
+ async def async_resume_restore_progress_after_restart(self, *, on_progress: Callable[[RestoreBackupEvent | IdleEvent], None]) -> None: ...
132
+
133
+ class IncorrectPasswordError(BackupReaderWriterError):
134
+ error_code: str
135
+ _message: str
122
136
 
123
- class BackupReaderWriterError(HomeAssistantError): ...
124
- class IncorrectPasswordError(BackupReaderWriterError): ...
137
+ class DecryptOnDowloadNotSupported(BackupManagerError):
138
+ error_code: str
139
+ _message: str
125
140
 
126
141
  class BackupManager:
127
142
  hass: Incomplete
@@ -138,6 +153,7 @@ class BackupManager:
138
153
  remove_next_backup_event: Callable[[], None] | None
139
154
  remove_next_delete_event: Callable[[], None] | None
140
155
  last_event: ManagerStateEvent
156
+ last_non_idle_event: ManagerStateEvent | None
141
157
  _backup_event_subscriptions: list[Callable[[ManagerStateEvent], None]]
142
158
  def __init__(self, hass: HomeAssistant, reader_writer: BackupReaderWriter) -> None: ...
143
159
  async def async_setup(self) -> None: ...
@@ -152,18 +168,20 @@ class BackupManager:
152
168
  async def async_pre_backup_actions(self) -> None: ...
153
169
  async def async_post_backup_actions(self) -> None: ...
154
170
  async def load_platforms(self) -> None: ...
155
- async def _async_upload_backup(self, *, backup: AgentBackup, agent_ids: list[str], open_stream: Callable[[], Coroutine[Any, Any, AsyncIterator[bytes]]]) -> dict[str, Exception]: ...
171
+ async def _async_upload_backup(self, *, backup: AgentBackup, agent_ids: list[str], open_stream: Callable[[], Coroutine[Any, Any, AsyncIterator[bytes]]], password: str | None) -> dict[str, Exception]: ...
156
172
  async def async_get_backups(self) -> tuple[dict[str, ManagerBackup], dict[str, Exception]]: ...
157
173
  async def async_get_backup(self, backup_id: str) -> tuple[ManagerBackup | None, dict[str, Exception]]: ...
158
174
  @staticmethod
159
175
  def is_our_automatic_backup(backup: AgentBackup, our_instance_id: str) -> bool | None: ...
160
176
  async def async_delete_backup(self, backup_id: str) -> dict[str, Exception]: ...
161
- async def async_receive_backup(self, *, agent_ids: list[str], contents: aiohttp.BodyPartReader) -> None: ...
162
- async def _async_receive_backup(self, *, agent_ids: list[str], contents: aiohttp.BodyPartReader) -> None: ...
163
- async def async_create_backup(self, *, agent_ids: list[str], include_addons: list[str] | None, include_all_addons: bool, include_database: bool, include_folders: list[Folder] | None, include_homeassistant: bool, name: str | None, password: str | None, with_automatic_settings: bool = False) -> NewBackup: ...
164
- async def async_initiate_backup(self, *, agent_ids: list[str], include_addons: list[str] | None, include_all_addons: bool, include_database: bool, include_folders: list[Folder] | None, include_homeassistant: bool, name: str | None, password: str | None, raise_task_error: bool = False, with_automatic_settings: bool = False) -> NewBackup: ...
165
- async def _async_create_backup(self, *, agent_ids: list[str], include_addons: list[str] | None, include_all_addons: bool, include_database: bool, include_folders: list[Folder] | None, include_homeassistant: bool, name: str | None, password: str | None, raise_task_error: bool, with_automatic_settings: bool) -> NewBackup: ...
166
- async def _async_finish_backup(self, agent_ids: list[str], with_automatic_settings: bool) -> None: ...
177
+ async def async_delete_filtered_backups(self, *, include_filter: Callable[[dict[str, ManagerBackup]], dict[str, ManagerBackup]], delete_filter: Callable[[dict[str, ManagerBackup]], dict[str, ManagerBackup]]) -> None: ...
178
+ async def async_receive_backup(self, *, agent_ids: list[str], contents: aiohttp.BodyPartReader) -> str: ...
179
+ async def _async_receive_backup(self, *, agent_ids: list[str], contents: aiohttp.BodyPartReader) -> str: ...
180
+ async def async_create_backup(self, *, agent_ids: list[str], extra_metadata: dict[str, bool | str] | None = None, include_addons: list[str] | None, include_all_addons: bool, include_database: bool, include_folders: list[Folder] | None, include_homeassistant: bool, name: str | None, password: str | None, with_automatic_settings: bool = False) -> NewBackup: ...
181
+ async def async_create_automatic_backup(self) -> NewBackup: ...
182
+ async def async_initiate_backup(self, *, agent_ids: list[str], extra_metadata: dict[str, bool | str] | None = None, include_addons: list[str] | None, include_all_addons: bool, include_database: bool, include_folders: list[Folder] | None, include_homeassistant: bool, name: str | None, password: str | None, raise_task_error: bool = False, with_automatic_settings: bool = False) -> NewBackup: ...
183
+ async def _async_create_backup(self, *, agent_ids: list[str], extra_metadata: dict[str, bool | str] | None, include_addons: list[str] | None, include_all_addons: bool, include_database: bool, include_folders: list[Folder] | None, include_homeassistant: bool, name: str | None, password: str | None, raise_task_error: bool, with_automatic_settings: bool) -> NewBackup: ...
184
+ async def _async_finish_backup(self, available_agents: list[str], unavailable_agents: list[str], with_automatic_settings: bool, password: str | None) -> None: ...
167
185
  async def async_restore_backup(self, backup_id: str, *, agent_id: str, password: str | None, restore_addons: list[str] | None, restore_database: bool, restore_folders: list[Folder] | None, restore_homeassistant: bool) -> None: ...
168
186
  async def _async_restore_backup(self, backup_id: str, *, agent_id: str, password: str | None, restore_addons: list[str] | None, restore_database: bool, restore_folders: list[Folder] | None, restore_homeassistant: bool) -> None: ...
169
187
  @callback
@@ -171,7 +189,8 @@ class BackupManager:
171
189
  @callback
172
190
  def async_subscribe_events(self, on_event: Callable[[ManagerStateEvent], None]) -> Callable[[], None]: ...
173
191
  def _update_issue_backup_failed(self) -> None: ...
174
- def _update_issue_after_agent_upload(self, agent_errors: dict[str, Exception]) -> None: ...
192
+ def _update_issue_after_agent_upload(self, agent_errors: dict[str, Exception], unavailable_agents: list[str]) -> None: ...
193
+ async def async_can_decrypt_on_download(self, backup_id: str, *, agent_id: str, password: str | None) -> None: ...
175
194
 
176
195
  class KnownBackups:
177
196
  _backups: dict[str, KnownBackup]
@@ -179,7 +198,7 @@ class KnownBackups:
179
198
  def __init__(self, manager: BackupManager) -> None: ...
180
199
  def load(self, stored_backups: list[StoredKnownBackup]) -> None: ...
181
200
  def to_list(self) -> list[StoredKnownBackup]: ...
182
- def add(self, backup: AgentBackup, agent_errors: dict[str, Exception]) -> None: ...
201
+ def add(self, backup: AgentBackup, agent_errors: dict[str, Exception], unavailable_agents: list[str]) -> None: ...
183
202
  def get(self, backup_id: str) -> KnownBackup | None: ...
184
203
  def remove(self, backup_id: str) -> None: ...
185
204
 
@@ -198,10 +217,11 @@ class CoreBackupReaderWriter(BackupReaderWriter):
198
217
  _hass: Incomplete
199
218
  temp_backup_dir: Incomplete
200
219
  def __init__(self, hass: HomeAssistant) -> None: ...
201
- async def async_create_backup(self, *, agent_ids: list[str], backup_name: str, extra_metadata: dict[str, bool | str], include_addons: list[str] | None, include_all_addons: bool, include_database: bool, include_folders: list[Folder] | None, include_homeassistant: bool, on_progress: Callable[[ManagerStateEvent], None], password: str | None) -> tuple[NewBackup, asyncio.Task[WrittenBackup]]: ...
202
- async def _async_create_backup(self, *, agent_ids: list[str], backup_id: str, backup_name: str, date_str: str, extra_metadata: dict[str, bool | str], include_database: bool, on_progress: Callable[[ManagerStateEvent], None], password: str | None) -> WrittenBackup: ...
220
+ async def async_create_backup(self, *, agent_ids: list[str], backup_name: str, extra_metadata: dict[str, bool | str], include_addons: list[str] | None, include_all_addons: bool, include_database: bool, include_folders: list[Folder] | None, include_homeassistant: bool, on_progress: Callable[[CreateBackupEvent], None], password: str | None) -> tuple[NewBackup, asyncio.Task[WrittenBackup]]: ...
221
+ async def _async_create_backup(self, *, agent_ids: list[str], backup_id: str, backup_name: str, date_str: str, extra_metadata: dict[str, bool | str], include_database: bool, on_progress: Callable[[CreateBackupEvent], None], password: str | None) -> WrittenBackup: ...
203
222
  def _mkdir_and_generate_backup_contents(self, backup_data: dict[str, Any], database_included: bool, password: str | None, tar_file_path: Path | None) -> tuple[Path, int]: ...
204
223
  async def async_receive_backup(self, *, agent_ids: list[str], stream: AsyncIterator[bytes], suggested_filename: str) -> WrittenBackup: ...
205
- async def async_restore_backup(self, backup_id: str, open_stream: Callable[[], Coroutine[Any, Any, AsyncIterator[bytes]]], *, agent_id: str, password: str | None, restore_addons: list[str] | None, restore_database: bool, restore_folders: list[Folder] | None, restore_homeassistant: bool) -> None: ...
224
+ async def async_restore_backup(self, backup_id: str, open_stream: Callable[[], Coroutine[Any, Any, AsyncIterator[bytes]]], *, agent_id: str, on_progress: Callable[[RestoreBackupEvent], None], password: str | None, restore_addons: list[str] | None, restore_database: bool, restore_folders: list[Folder] | None, restore_homeassistant: bool) -> None: ...
225
+ async def async_resume_restore_progress_after_restart(self, *, on_progress: Callable[[RestoreBackupEvent | IdleEvent], None]) -> None: ...
206
226
 
207
227
  def _generate_backup_id(date: str, name: str) -> str: ...
@@ -16,7 +16,7 @@ class Folder(StrEnum):
16
16
  MEDIA = 'media'
17
17
 
18
18
  @dataclass(frozen=True, kw_only=True)
19
- class AgentBackup:
19
+ class BaseBackup:
20
20
  addons: list[AddonInfo]
21
21
  backup_id: str
22
22
  date: str
@@ -26,11 +26,26 @@ class AgentBackup:
26
26
  homeassistant_included: bool
27
27
  homeassistant_version: str | None
28
28
  name: str
29
+
30
+ @dataclass(frozen=True, kw_only=True)
31
+ class AgentBackup(BaseBackup):
29
32
  protected: bool
30
33
  size: int
31
34
  def as_dict(self) -> dict: ...
32
- def as_frontend_json(self) -> dict: ...
33
35
  @classmethod
34
36
  def from_dict(cls, data: dict[str, Any]) -> Self: ...
35
37
 
36
- class BackupManagerError(HomeAssistantError): ...
38
+ class BackupError(HomeAssistantError):
39
+ error_code: str
40
+
41
+ class BackupAgentError(BackupError):
42
+ error_code: str
43
+
44
+ class BackupManagerError(BackupError):
45
+ error_code: str
46
+
47
+ class BackupReaderWriterError(BackupError):
48
+ error_code: str
49
+
50
+ class BackupNotFound(BackupAgentError, BackupManagerError):
51
+ error_code: str
@@ -4,20 +4,25 @@ from .manager import BackupManager as BackupManager, StoredKnownBackup as Stored
4
4
  from _typeshed import Incomplete
5
5
  from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
6
6
  from homeassistant.helpers.storage import Store as Store
7
- from typing import TypedDict
7
+ from typing import Any, TypedDict
8
8
 
9
9
  STORE_DELAY_SAVE: int
10
10
  STORAGE_KEY = DOMAIN
11
11
  STORAGE_VERSION: int
12
+ STORAGE_VERSION_MINOR: int
12
13
 
13
14
  class StoredBackupData(TypedDict):
14
15
  backups: list[StoredKnownBackup]
15
16
  config: StoredBackupConfig
16
17
 
18
+ class _BackupStore(Store[StoredBackupData]):
19
+ def __init__(self, hass: HomeAssistant) -> None: ...
20
+ async def _async_migrate_func(self, old_major_version: int, old_minor_version: int, old_data: dict[str, Any]) -> dict[str, Any]: ...
21
+
17
22
  class BackupStore:
18
23
  _hass: Incomplete
19
24
  _manager: Incomplete
20
- _store: Store[StoredBackupData]
25
+ _store: Incomplete
21
26
  def __init__(self, hass: HomeAssistant, manager: BackupManager) -> None: ...
22
27
  async def load(self) -> StoredBackupData | None: ...
23
28
  @callback
@@ -1,12 +1,106 @@
1
1
  import aiohttp
2
+ import asyncio
3
+ import tarfile
4
+ import threading
2
5
  from .const import BUF_SIZE as BUF_SIZE, LOGGER as LOGGER
3
6
  from .models import AddonInfo as AddonInfo, AgentBackup as AgentBackup, Folder as Folder
7
+ from _typeshed import Incomplete
8
+ from collections.abc import AsyncIterator, Callable as Callable, Coroutine
9
+ from concurrent.futures import Future
10
+ from dataclasses import dataclass
4
11
  from homeassistant.backup_restore import password_to_key as password_to_key
5
12
  from homeassistant.core import HomeAssistant as HomeAssistant
13
+ from homeassistant.exceptions import HomeAssistantError as HomeAssistantError
6
14
  from homeassistant.util.json import JsonObjectType as JsonObjectType, json_loads_object as json_loads_object
7
15
  from pathlib import Path
16
+ from typing import Any, IO, Self
17
+
18
+ class DecryptError(HomeAssistantError):
19
+ _message: str
20
+
21
+ class EncryptError(HomeAssistantError):
22
+ _message: str
23
+
24
+ class UnsupportedSecureTarVersion(DecryptError):
25
+ _message: str
26
+
27
+ class IncorrectPassword(DecryptError):
28
+ _message: str
29
+
30
+ class BackupEmpty(DecryptError):
31
+ _message: str
32
+
33
+ class AbortCipher(HomeAssistantError):
34
+ _message: str
8
35
 
9
36
  def make_backup_dir(path: Path) -> None: ...
10
37
  def read_backup(backup_path: Path) -> AgentBackup: ...
38
+ def suggested_filename_from_name_date(name: str, date_str: str) -> str: ...
39
+ def suggested_filename(backup: AgentBackup) -> str: ...
11
40
  def validate_password(path: Path, password: str | None) -> bool: ...
41
+
42
+ class AsyncIteratorReader:
43
+ _aborted: bool
44
+ _hass: Incomplete
45
+ _stream: Incomplete
46
+ _buffer: bytes | None
47
+ _next_future: Future[bytes | None] | None
48
+ _pos: int
49
+ def __init__(self, hass: HomeAssistant, stream: AsyncIterator[bytes]) -> None: ...
50
+ async def _next(self) -> bytes | None: ...
51
+ def abort(self) -> None: ...
52
+ def read(self, n: int = -1, /) -> bytes: ...
53
+ def close(self) -> None: ...
54
+
55
+ class AsyncIteratorWriter:
56
+ _aborted: bool
57
+ _hass: Incomplete
58
+ _pos: int
59
+ _queue: asyncio.Queue[bytes | None]
60
+ _write_future: Future[bytes | None] | None
61
+ def __init__(self, hass: HomeAssistant) -> None: ...
62
+ def __aiter__(self) -> Self: ...
63
+ async def __anext__(self) -> bytes: ...
64
+ def abort(self) -> None: ...
65
+ def tell(self) -> int: ...
66
+ def write(self, s: bytes, /) -> int: ...
67
+
68
+ def validate_password_stream(input_stream: IO[bytes], password: str | None) -> None: ...
69
+ def decrypt_backup(input_stream: IO[bytes], output_stream: IO[bytes], password: str | None, on_done: Callable[[Exception | None], None], minimum_size: int, nonces: list[bytes]) -> None: ...
70
+ def _decrypt_backup(input_tar: tarfile.TarFile, output_tar: tarfile.TarFile, password: str | None) -> None: ...
71
+ def encrypt_backup(input_stream: IO[bytes], output_stream: IO[bytes], password: str | None, on_done: Callable[[Exception | None], None], minimum_size: int, nonces: list[bytes]) -> None: ...
72
+ def _encrypt_backup(input_tar: tarfile.TarFile, output_tar: tarfile.TarFile, password: str | None, nonces: list[bytes]) -> None: ...
73
+
74
+ @dataclass(kw_only=True)
75
+ class _CipherWorkerStatus:
76
+ done: asyncio.Event
77
+ error: Exception | None = ...
78
+ reader: AsyncIteratorReader
79
+ thread: threading.Thread
80
+ writer: AsyncIteratorWriter
81
+
82
+ class _CipherBackupStreamer:
83
+ _cipher_func: Callable[[IO[bytes], IO[bytes], str | None, Callable[[Exception | None], None], int, list[bytes]], None]
84
+ _workers: list[_CipherWorkerStatus]
85
+ _backup: Incomplete
86
+ _hass: Incomplete
87
+ _open_stream: Incomplete
88
+ _password: Incomplete
89
+ _nonces: list[bytes]
90
+ def __init__(self, hass: HomeAssistant, backup: AgentBackup, open_stream: Callable[[], Coroutine[Any, Any, AsyncIterator[bytes]]], password: str | None) -> None: ...
91
+ def size(self) -> int: ...
92
+ def _num_tar_files(self) -> int: ...
93
+ async def open_stream(self) -> AsyncIterator[bytes]: ...
94
+ async def wait(self) -> None: ...
95
+
96
+ class DecryptedBackupStreamer(_CipherBackupStreamer):
97
+ _cipher_func: Incomplete
98
+ def backup(self) -> AgentBackup: ...
99
+
100
+ class EncryptedBackupStreamer(_CipherBackupStreamer):
101
+ _nonces: Incomplete
102
+ def __init__(self, hass: HomeAssistant, backup: AgentBackup, open_stream: Callable[[], Coroutine[Any, Any, AsyncIterator[bytes]]], password: str | None) -> None: ...
103
+ _cipher_func: Incomplete
104
+ def backup(self) -> AgentBackup: ...
105
+
12
106
  async def receive_file(hass: HomeAssistant, contents: aiohttp.BodyPartReader, path: Path) -> None: ...
@@ -1,7 +1,7 @@
1
- from .config import ScheduleState as ScheduleState
1
+ from .config import Day as Day, ScheduleRecurrence as ScheduleRecurrence
2
2
  from .const import DATA_MANAGER as DATA_MANAGER, LOGGER as LOGGER
3
- from .manager import IncorrectPasswordError as IncorrectPasswordError, ManagerStateEvent as ManagerStateEvent
4
- from .models import Folder as Folder
3
+ from .manager import DecryptOnDowloadNotSupported as DecryptOnDowloadNotSupported, IncorrectPasswordError as IncorrectPasswordError, ManagerStateEvent as ManagerStateEvent
4
+ from .models import BackupNotFound as BackupNotFound, Folder as Folder
5
5
  from homeassistant.components import websocket_api as websocket_api
6
6
  from homeassistant.core import HomeAssistant as HomeAssistant, callback as callback
7
7
  from typing import Any
@@ -22,6 +22,9 @@ async def handle_delete(hass: HomeAssistant, connection: websocket_api.ActiveCon
22
22
  async def handle_restore(hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg: dict[str, Any]) -> None: ...
23
23
  @websocket_api.require_admin
24
24
  @websocket_api.async_response
25
+ async def handle_can_decrypt_on_download(hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg: dict[str, Any]) -> None: ...
26
+ @websocket_api.require_admin
27
+ @websocket_api.async_response
25
28
  async def handle_create(hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg: dict[str, Any]) -> None: ...
26
29
  @websocket_api.require_admin
27
30
  @websocket_api.async_response
@@ -2,9 +2,9 @@ from .const import DOMAIN as DOMAIN, RUN_TIMEOUT as RUN_TIMEOUT
2
2
  from .models import BAFDiscovery as BAFDiscovery
3
3
  from _typeshed import Incomplete
4
4
  from aiobafi6 import Device
5
- from homeassistant.components import zeroconf as zeroconf
6
5
  from homeassistant.config_entries import ConfigFlow as ConfigFlow, ConfigFlowResult as ConfigFlowResult
7
6
  from homeassistant.const import CONF_IP_ADDRESS as CONF_IP_ADDRESS
7
+ from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo as ZeroconfServiceInfo
8
8
  from typing import Any
9
9
 
10
10
  _LOGGER: Incomplete
@@ -15,7 +15,7 @@ class BAFFlowHandler(ConfigFlow, domain=DOMAIN):
15
15
  VERSION: int
16
16
  discovery: BAFDiscovery | None
17
17
  def __init__(self) -> None: ...
18
- async def async_step_zeroconf(self, discovery_info: zeroconf.ZeroconfServiceInfo) -> ConfigFlowResult: ...
18
+ async def async_step_zeroconf(self, discovery_info: ZeroconfServiceInfo) -> ConfigFlowResult: ...
19
19
  async def async_step_discovery_confirm(self, user_input: dict[str, Any] | None = None) -> ConfigFlowResult: ...
20
20
  async def async_step_user(self, user_input: dict[str, Any] | None = None) -> ConfigFlowResult: ...
21
21
 
@@ -1,10 +1,10 @@
1
1
  from .const import ATTR_FRIENDLY_NAME as ATTR_FRIENDLY_NAME, ATTR_ITEM_NUMBER as ATTR_ITEM_NUMBER, ATTR_SERIAL_NUMBER as ATTR_SERIAL_NUMBER, ATTR_TYPE_NUMBER as ATTR_TYPE_NUMBER, COMPATIBLE_MODELS as COMPATIBLE_MODELS, CONF_SERIAL_NUMBER as CONF_SERIAL_NUMBER, DEFAULT_MODEL as DEFAULT_MODEL, DOMAIN as DOMAIN
2
2
  from .util import get_serial_number_from_jid as get_serial_number_from_jid
3
3
  from _typeshed import Incomplete
4
- from homeassistant.components.zeroconf import ZeroconfServiceInfo as ZeroconfServiceInfo
5
4
  from homeassistant.config_entries import ConfigFlow as ConfigFlow, ConfigFlowResult as ConfigFlowResult
6
5
  from homeassistant.const import CONF_HOST as CONF_HOST, CONF_MODEL as CONF_MODEL
7
6
  from homeassistant.helpers.selector import SelectSelector as SelectSelector, SelectSelectorConfig as SelectSelectorConfig
7
+ from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo as ZeroconfServiceInfo
8
8
  from homeassistant.util.ssl import get_default_context as get_default_context
9
9
  from mozart_api.mozart_client import MozartClient
10
10
  from typing import Any, TypedDict
@@ -35,6 +35,7 @@ class BangOlufsenModel(StrEnum):
35
35
 
36
36
  class WebsocketNotification(StrEnum):
37
37
  ACTIVE_LISTENING_MODE = 'active_listening_mode'
38
+ BUTTON = 'button'
38
39
  PLAYBACK_ERROR = 'playback_error'
39
40
  PLAYBACK_METADATA = 'playback_metadata'
40
41
  PLAYBACK_PROGRESS = 'playback_progress'
@@ -64,7 +65,12 @@ ATTR_FRIENDLY_NAME: Final[str]
64
65
  BANG_OLUFSEN_ON: Final[str]
65
66
  VALID_MEDIA_TYPES: Final[tuple]
66
67
  FALLBACK_SOURCES: Final[SourceArray]
68
+ MODEL_SUPPORT_DEVICE_BUTTONS: Final[str]
69
+ MODEL_SUPPORT_MAP: Incomplete
67
70
  BANG_OLUFSEN_WEBSOCKET_EVENT: Final[str]
71
+ EVENT_TRANSLATION_MAP: dict[str, str]
68
72
  CONNECTION_STATUS: Final[str]
73
+ DEVICE_BUTTONS: Final[list[str]]
74
+ DEVICE_BUTTON_EVENTS: Final[list[str]]
69
75
  BEOLINK_JOIN_SOURCES_TO_UPPER: Incomplete
70
76
  BEOLINK_JOIN_SOURCES: Incomplete