homeassistant 2025.11.0b2__py3-none-any.whl → 2025.11.2__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 (1173) hide show
  1. homeassistant/auth/mfa_modules/notify.py +7 -7
  2. homeassistant/auth/providers/homeassistant.py +8 -2
  3. homeassistant/components/abode/translations/mk.json +11 -0
  4. homeassistant/components/abode/translations/uk.json +4 -1
  5. homeassistant/components/accuweather/translations/mk.json +1 -0
  6. homeassistant/components/actron_air/translations/sr-Latn.json +3 -0
  7. homeassistant/components/adax/translations/sv.json +1 -1
  8. homeassistant/components/ads/translations/mk.json +11 -0
  9. homeassistant/components/aemet/translations/sv.json +2 -1
  10. homeassistant/components/aftership/translations/mk.json +11 -0
  11. homeassistant/components/ai_task/translations/mk.json +42 -1
  12. homeassistant/components/ai_task/translations/sv.json +3 -0
  13. homeassistant/components/airgradient/translations/bg.json +11 -0
  14. homeassistant/components/airgradient/translations/sr-Latn.json +3 -3
  15. homeassistant/components/airgradient/translations/sv.json +2 -0
  16. homeassistant/components/airly/translations/sv.json +2 -1
  17. homeassistant/components/airnow/translations/sv.json +2 -1
  18. homeassistant/components/airq/translations/sv.json +1 -0
  19. homeassistant/components/airthings/translations/mk.json +9 -1
  20. homeassistant/components/airthings_ble/config_flow.py +10 -7
  21. homeassistant/components/airthings_ble/const.py +5 -0
  22. homeassistant/components/airthings_ble/coordinator.py +32 -3
  23. homeassistant/components/airzone/translations/bg.json +2 -1
  24. homeassistant/components/airzone/translations/sr-Latn.json +1 -1
  25. homeassistant/components/airzone/translations/vi.json +9 -0
  26. homeassistant/components/airzone_cloud/translations/bg.json +5 -0
  27. homeassistant/components/airzone_cloud/translations/sr-Latn.json +2 -2
  28. homeassistant/components/airzone_cloud/translations/vi.json +9 -0
  29. homeassistant/components/aladdin_connect/translations/sr-Latn.json +7 -0
  30. homeassistant/components/aladdin_connect/translations/sv.json +1 -1
  31. homeassistant/components/alarm_control_panel/translations/mk.json +12 -0
  32. homeassistant/components/alarm_control_panel/translations/vi.json +16 -11
  33. homeassistant/components/alexa_devices/binary_sensor.py +2 -2
  34. homeassistant/components/alexa_devices/coordinator.py +6 -1
  35. homeassistant/components/alexa_devices/diagnostics.py +1 -1
  36. homeassistant/components/alexa_devices/entity.py +2 -2
  37. homeassistant/components/alexa_devices/manifest.json +1 -1
  38. homeassistant/components/alexa_devices/notify.py +3 -2
  39. homeassistant/components/alexa_devices/sensor.py +2 -2
  40. homeassistant/components/alexa_devices/services.py +1 -1
  41. homeassistant/components/alexa_devices/switch.py +1 -1
  42. homeassistant/components/alexa_devices/translations/bg.json +13 -0
  43. homeassistant/components/alexa_devices/translations/it.json +3 -3
  44. homeassistant/components/alexa_devices/translations/mk.json +7 -0
  45. homeassistant/components/alexa_devices/translations/pt.json +11 -0
  46. homeassistant/components/alexa_devices/translations/sv.json +16 -0
  47. homeassistant/components/alexa_devices/utils.py +1 -1
  48. homeassistant/components/ambient_network/sensor.py +5 -5
  49. homeassistant/components/anthropic/translations/en-GB.json +1 -1
  50. homeassistant/components/anthropic/translations/lt.json +1 -1
  51. homeassistant/components/aosmith/translations/bg.json +2 -1
  52. homeassistant/components/aosmith/translations/sr-Latn.json +1 -1
  53. homeassistant/components/apcupsd/translations/mk.json +3 -0
  54. homeassistant/components/apcupsd/translations/pl.json +13 -0
  55. homeassistant/components/aprilaire/translations/bg.json +30 -5
  56. homeassistant/components/aprilaire/translations/sr-Latn.json +14 -14
  57. homeassistant/components/assist_pipeline/translations/sv.json +1 -1
  58. homeassistant/components/assist_satellite/translations/mk.json +59 -0
  59. homeassistant/components/assist_satellite/translations/vi.json +38 -0
  60. homeassistant/components/august/translations/sr-Latn.json +7 -1
  61. homeassistant/components/august/translations/sv.json +4 -0
  62. homeassistant/components/automation/translations/bg.json +3 -0
  63. homeassistant/components/automation/translations/sv.json +1 -1
  64. homeassistant/components/awair/translations/sv.json +1 -1
  65. homeassistant/components/backup/manifest.json +1 -1
  66. homeassistant/components/backup/translations/de.json +1 -1
  67. homeassistant/components/backup/translations/sr-Latn.json +11 -0
  68. homeassistant/components/bang_olufsen/translations/mk.json +21 -0
  69. homeassistant/components/bayesian/translations/de.json +1 -1
  70. homeassistant/components/bayesian/translations/sr-Latn.json +1 -0
  71. homeassistant/components/bayesian/translations/sv.json +108 -11
  72. homeassistant/components/bayesian/translations/vi.json +8 -0
  73. homeassistant/components/binary_sensor/translations/bg.json +9 -2
  74. homeassistant/components/binary_sensor/translations/mk.json +4 -0
  75. homeassistant/components/binary_sensor/translations/sr-Latn.json +3 -3
  76. homeassistant/components/blackbird/translations/mk.json +11 -0
  77. homeassistant/components/blink/translations/bg.json +8 -1
  78. homeassistant/components/blink/translations/ca.json +8 -1
  79. homeassistant/components/blink/translations/mk.json +3 -0
  80. homeassistant/components/blink/translations/pt.json +17 -1
  81. homeassistant/components/blink/translations/sv.json +15 -1
  82. homeassistant/components/bluesound/translations/mk.json +8 -0
  83. homeassistant/components/bond/translations/sr-Latn.json +3 -0
  84. homeassistant/components/bosch_alarm/translations/sr-Latn.json +3 -0
  85. homeassistant/components/bring/translations/mk.json +5 -0
  86. homeassistant/components/bring/translations/sr-Latn.json +3 -0
  87. homeassistant/components/brother/translations/bg.json +0 -6
  88. homeassistant/components/brother/translations/ca.json +1 -5
  89. homeassistant/components/brother/translations/cs.json +2 -2
  90. homeassistant/components/brother/translations/da.json +1 -5
  91. homeassistant/components/brother/translations/de.json +4 -4
  92. homeassistant/components/brother/translations/el.json +1 -5
  93. homeassistant/components/brother/translations/en-GB.json +4 -4
  94. homeassistant/components/brother/translations/en.json +4 -4
  95. homeassistant/components/brother/translations/es-419.json +0 -5
  96. homeassistant/components/brother/translations/es.json +2 -2
  97. homeassistant/components/brother/translations/et.json +2 -2
  98. homeassistant/components/brother/translations/fi.json +1 -5
  99. homeassistant/components/brother/translations/fr.json +1 -5
  100. homeassistant/components/brother/translations/ga.json +2 -10
  101. homeassistant/components/brother/translations/hu.json +1 -5
  102. homeassistant/components/brother/translations/id.json +1 -5
  103. homeassistant/components/brother/translations/it.json +1 -5
  104. homeassistant/components/brother/translations/ja.json +1 -5
  105. homeassistant/components/brother/translations/ko.json +1 -5
  106. homeassistant/components/brother/translations/lb.json +1 -2
  107. homeassistant/components/brother/translations/lt.json +2 -2
  108. homeassistant/components/brother/translations/mk.json +9 -0
  109. homeassistant/components/brother/translations/nb.json +1 -5
  110. homeassistant/components/brother/translations/nl.json +1 -5
  111. homeassistant/components/brother/translations/pl.json +3 -7
  112. homeassistant/components/brother/translations/pt-BR.json +1 -5
  113. homeassistant/components/brother/translations/pt.json +2 -2
  114. homeassistant/components/brother/translations/ro.json +1 -2
  115. homeassistant/components/brother/translations/sk.json +2 -2
  116. homeassistant/components/brother/translations/sl.json +2 -10
  117. homeassistant/components/brother/translations/sv.json +4 -4
  118. homeassistant/components/brother/translations/tr.json +1 -5
  119. homeassistant/components/brother/translations/uk.json +1 -5
  120. homeassistant/components/brother/translations/vi.json +1 -5
  121. homeassistant/components/brother/translations/zh-Hans.json +2 -2
  122. homeassistant/components/brother/translations/zh-Hant.json +4 -4
  123. homeassistant/components/bryant_evolution/translations/lt.json +3 -0
  124. homeassistant/components/bryant_evolution/translations/pt.json +3 -0
  125. homeassistant/components/bryant_evolution/translations/ru.json +3 -0
  126. homeassistant/components/bryant_evolution/translations/vi.json +19 -0
  127. homeassistant/components/bsblan/climate.py +5 -2
  128. homeassistant/components/bsblan/manifest.json +1 -1
  129. homeassistant/components/bsblan/translations/vi.json +5 -0
  130. homeassistant/components/bthome/translations/mk.json +20 -0
  131. homeassistant/components/button/translations/mk.json +8 -1
  132. homeassistant/components/button/translations/vi.json +1 -0
  133. homeassistant/components/calendar/translations/bg.json +3 -0
  134. homeassistant/components/calendar/translations/mk.json +72 -0
  135. homeassistant/components/calendar/translations/sr-Latn.json +2 -2
  136. homeassistant/components/calendar/translations/sv.json +1 -1
  137. homeassistant/components/calendar/translations/vi.json +1 -0
  138. homeassistant/components/cambridge_audio/translations/bg.json +1 -0
  139. homeassistant/components/cambridge_audio/translations/sr-Latn.json +2 -2
  140. homeassistant/components/camera/translations/mk.json +60 -0
  141. homeassistant/components/camera/translations/sv.json +1 -1
  142. homeassistant/components/cert_expiry/translations/it.json +1 -0
  143. homeassistant/components/channels/translations/mk.json +11 -0
  144. homeassistant/components/climate/reproduce_state.py +3 -3
  145. homeassistant/components/climate/translations/bg.json +10 -4
  146. homeassistant/components/climate/translations/mk.json +101 -1
  147. homeassistant/components/climate/translations/pl.json +13 -13
  148. homeassistant/components/climate/translations/sr-Latn.json +4 -4
  149. homeassistant/components/climate/translations/vi.json +66 -10
  150. homeassistant/components/comelit/config_flow.py +42 -30
  151. homeassistant/components/control4/translations/es.json +2 -1
  152. homeassistant/components/conversation/manifest.json +1 -1
  153. homeassistant/components/conversation/translations/mk.json +37 -0
  154. homeassistant/components/conversation/translations/vi.json +38 -0
  155. homeassistant/components/counter/translations/mk.json +27 -0
  156. homeassistant/components/cover/translations/es.json +7 -7
  157. homeassistant/components/cover/translations/mk.json +6 -1
  158. homeassistant/components/daikin/translations/es.json +1 -0
  159. homeassistant/components/daikin/translations/mk.json +3 -0
  160. homeassistant/components/daikin/translations/pl.json +7 -0
  161. homeassistant/components/deluge/translations/sv.json +3 -0
  162. homeassistant/components/demo/translations/bg.json +3 -1
  163. homeassistant/components/demo/translations/mk.json +11 -0
  164. homeassistant/components/demo/translations/sr-Latn.json +3 -3
  165. homeassistant/components/demo/translations/vi.json +11 -0
  166. homeassistant/components/denonavr/translations/sr-Latn.json +3 -0
  167. homeassistant/components/derivative/translations/mk.json +9 -0
  168. homeassistant/components/device_tracker/translations/mk.json +22 -1
  169. homeassistant/components/devolo_home_control/translations/cs.json +1 -1
  170. homeassistant/components/devolo_home_control/translations/de.json +1 -1
  171. homeassistant/components/devolo_home_control/translations/el.json +0 -3
  172. homeassistant/components/devolo_home_control/translations/en-GB.json +1 -1
  173. homeassistant/components/devolo_home_control/translations/en.json +1 -1
  174. homeassistant/components/devolo_home_control/translations/es.json +1 -1
  175. homeassistant/components/devolo_home_control/translations/et.json +1 -1
  176. homeassistant/components/devolo_home_control/translations/ga.json +0 -3
  177. homeassistant/components/devolo_home_control/translations/hu.json +0 -3
  178. homeassistant/components/devolo_home_control/translations/ja.json +0 -3
  179. homeassistant/components/devolo_home_control/translations/lt.json +1 -1
  180. homeassistant/components/devolo_home_control/translations/pt.json +1 -1
  181. homeassistant/components/devolo_home_control/translations/sk.json +1 -1
  182. homeassistant/components/devolo_home_control/translations/tr.json +0 -3
  183. homeassistant/components/devolo_home_control/translations/zh-Hans.json +1 -1
  184. homeassistant/components/devolo_home_control/translations/zh-Hant.json +1 -1
  185. homeassistant/components/dlna_dmr/translations/sv.json +1 -1
  186. homeassistant/components/downloader/translations/mk.json +11 -0
  187. homeassistant/components/drop_connect/translations/mk.json +1 -0
  188. homeassistant/components/ecobee/translations/mk.json +21 -0
  189. homeassistant/components/ecobee/translations/sv.json +3 -0
  190. homeassistant/components/ecoforest/translations/bg.json +1 -0
  191. homeassistant/components/ecoforest/translations/mk.json +9 -0
  192. homeassistant/components/ecoforest/translations/sr-Latn.json +2 -2
  193. homeassistant/components/econet/translations/sv.json +1 -1
  194. homeassistant/components/ecovacs/translations/es.json +27 -0
  195. homeassistant/components/ecovacs/translations/mk.json +9 -0
  196. homeassistant/components/ecovacs/translations/sr-Latn.json +18 -0
  197. homeassistant/components/eheimdigital/translations/sr-Latn.json +5 -0
  198. homeassistant/components/ekeybionyx/translations/sr-Latn.json +10 -0
  199. homeassistant/components/electric_kiwi/translations/sv.json +3 -0
  200. homeassistant/components/elkm1/translations/mk.json +7 -0
  201. homeassistant/components/esphome/__init__.py +5 -3
  202. homeassistant/components/esphome/translations/he.json +2 -2
  203. homeassistant/components/esphome/translations/sv.json +1 -1
  204. homeassistant/components/event/translations/mk.json +7 -0
  205. homeassistant/components/evohome/translations/mk.json +18 -0
  206. homeassistant/components/ezviz/translations/mk.json +9 -0
  207. homeassistant/components/faa_delays/translations/mk.json +13 -0
  208. homeassistant/components/fan/translations/bg.json +3 -0
  209. homeassistant/components/fan/translations/mk.json +35 -0
  210. homeassistant/components/filter/translations/mk.json +9 -0
  211. homeassistant/components/fing/translations/bg.json +20 -0
  212. homeassistant/components/fing/translations/ca.json +23 -0
  213. homeassistant/components/fing/translations/es.json +31 -0
  214. homeassistant/components/fing/translations/sv.json +17 -0
  215. homeassistant/components/firefly_iii/translations/bg.json +3 -0
  216. homeassistant/components/fitbit/translations/sv.json +3 -0
  217. homeassistant/components/fivem/translations/mk.json +9 -0
  218. homeassistant/components/flexit_bacnet/translations/vi.json +7 -0
  219. homeassistant/components/foscam/camera.py +4 -1
  220. homeassistant/components/foscam/coordinator.py +37 -19
  221. homeassistant/components/foscam/manifest.json +1 -1
  222. homeassistant/components/foscam/switch.py +1 -0
  223. homeassistant/components/foscam/translations/mk.json +9 -0
  224. homeassistant/components/freebox/translations/sv.json +1 -1
  225. homeassistant/components/fritzbox/translations/vi.json +13 -0
  226. homeassistant/components/fritzbox_callmonitor/translations/mk.json +3 -0
  227. homeassistant/components/fronius/translations/pl.json +3 -3
  228. homeassistant/components/frontend/__init__.py +1 -1
  229. homeassistant/components/frontend/manifest.json +1 -1
  230. homeassistant/components/frontend/translations/mk.json +9 -0
  231. homeassistant/components/frontend/translations/pl.json +18 -1
  232. homeassistant/components/fully_kiosk/translations/mk.json +11 -0
  233. homeassistant/components/fyta/translations/sr-Latn.json +3 -0
  234. homeassistant/components/generic_thermostat/translations/mk.json +2 -0
  235. homeassistant/components/generic_thermostat/translations/pl.json +2 -0
  236. homeassistant/components/geniushub/translations/mk.json +18 -0
  237. homeassistant/components/geo_location/translations/mk.json +11 -0
  238. homeassistant/components/geocaching/translations/sv.json +3 -0
  239. homeassistant/components/glances/translations/sl.json +7 -0
  240. homeassistant/components/goalzero/translations/sv.json +3 -0
  241. homeassistant/components/google/translations/mk.json +53 -0
  242. homeassistant/components/google/translations/sv.json +3 -0
  243. homeassistant/components/google_assistant_sdk/translations/sv.json +3 -0
  244. homeassistant/components/google_cloud/translations/sv.json +1 -0
  245. homeassistant/components/google_drive/translations/sr-Latn.json +7 -0
  246. homeassistant/components/google_drive/translations/sv.json +3 -0
  247. homeassistant/components/google_generative_ai_conversation/translations/lt.json +1 -1
  248. homeassistant/components/google_generative_ai_conversation/translations/mk.json +3 -0
  249. homeassistant/components/google_generative_ai_conversation/translations/sv.json +3 -1
  250. homeassistant/components/google_mail/translations/mk.json +12 -0
  251. homeassistant/components/google_mail/translations/sv.json +3 -0
  252. homeassistant/components/google_mail/translations/vi.json +7 -0
  253. homeassistant/components/google_photos/translations/mk.json +9 -0
  254. homeassistant/components/google_photos/translations/sv.json +3 -0
  255. homeassistant/components/google_sheets/translations/bg.json +10 -0
  256. homeassistant/components/google_sheets/translations/ca.json +11 -0
  257. homeassistant/components/google_sheets/translations/es.json +9 -0
  258. homeassistant/components/google_sheets/translations/mk.json +9 -0
  259. homeassistant/components/google_sheets/translations/sr-Latn.json +14 -0
  260. homeassistant/components/google_sheets/translations/sv.json +14 -0
  261. homeassistant/components/google_tasks/translations/sv.json +3 -0
  262. homeassistant/components/google_travel_time/translations/ru.json +4 -2
  263. homeassistant/components/google_travel_time/translations/sv.json +4 -2
  264. homeassistant/components/govee_ble/translations/mk.json +15 -0
  265. homeassistant/components/group/translations/bg.json +1 -0
  266. homeassistant/components/group/translations/ca.json +15 -0
  267. homeassistant/components/group/translations/mk.json +6 -0
  268. homeassistant/components/growatt_server/__init__.py +15 -0
  269. homeassistant/components/growatt_server/translations/it.json +14 -0
  270. homeassistant/components/growatt_server/translations/ru.json +6 -0
  271. homeassistant/components/growatt_server/translations/sv.json +4 -2
  272. homeassistant/components/guardian/translations/mk.json +11 -0
  273. homeassistant/components/habitica/translations/ca.json +7 -0
  274. homeassistant/components/habitica/translations/es.json +26 -0
  275. homeassistant/components/habitica/translations/mk.json +16 -1
  276. homeassistant/components/habitica/translations/sv.json +19 -1
  277. homeassistant/components/hassio/issues.py +0 -2
  278. homeassistant/components/hassio/translations/es.json +13 -0
  279. homeassistant/components/hassio/translations/it.json +13 -0
  280. homeassistant/components/hassio/translations/sv.json +7 -2
  281. homeassistant/components/hdmi_cec/translations/mk.json +7 -0
  282. homeassistant/components/heos/translations/mk.json +1 -1
  283. homeassistant/components/heos/translations/sr-Latn.json +3 -0
  284. homeassistant/components/here_travel_time/translations/mk.json +7 -0
  285. homeassistant/components/history_stats/translations/mk.json +11 -0
  286. homeassistant/components/hive/translations/bg.json +2 -0
  287. homeassistant/components/hive/translations/mk.json +16 -0
  288. homeassistant/components/hive/translations/sr-Latn.json +3 -3
  289. homeassistant/components/holiday/manifest.json +1 -1
  290. homeassistant/components/home_connect/translations/bg.json +160 -32
  291. homeassistant/components/home_connect/translations/mk.json +10 -0
  292. homeassistant/components/home_connect/translations/pt.json +3 -0
  293. homeassistant/components/home_connect/translations/sr-Latn.json +44 -44
  294. homeassistant/components/home_connect/translations/sv.json +7 -1
  295. homeassistant/components/homeassistant/translations/sv.json +5 -1
  296. homeassistant/components/homeassistant_connect_zbt2/config_flow.py +18 -1
  297. homeassistant/components/homeassistant_connect_zbt2/const.py +58 -0
  298. homeassistant/components/homeassistant_connect_zbt2/manifest.json +6 -0
  299. homeassistant/components/homeassistant_connect_zbt2/translations/pt.json +7 -0
  300. homeassistant/components/homeassistant_connect_zbt2/translations/sv.json +35 -3
  301. homeassistant/components/homeassistant_hardware/firmware_config_flow.py +101 -65
  302. homeassistant/components/homeassistant_hardware/translations/sv.json +5 -2
  303. homeassistant/components/homeassistant_hardware/translations/vi.json +1 -0
  304. homeassistant/components/homeassistant_sky_connect/manifest.json +6 -0
  305. homeassistant/components/homeassistant_sky_connect/translations/pt.json +7 -0
  306. homeassistant/components/homeassistant_sky_connect/translations/sv.json +20 -5
  307. homeassistant/components/homeassistant_sky_connect/translations/vi.json +1 -0
  308. homeassistant/components/homeassistant_yellow/manifest.json +6 -0
  309. homeassistant/components/homeassistant_yellow/translations/pt.json +5 -0
  310. homeassistant/components/homeassistant_yellow/translations/sv.json +13 -3
  311. homeassistant/components/homeassistant_yellow/translations/vi.json +1 -0
  312. homeassistant/components/homee/translations/bg.json +2 -1
  313. homeassistant/components/homee/translations/mk.json +16 -0
  314. homeassistant/components/homee/translations/sr-Latn.json +4 -2
  315. homeassistant/components/homekit/translations/sv.json +6 -0
  316. homeassistant/components/homekit_controller/translations/mk.json +1 -0
  317. homeassistant/components/homematic/translations/mk.json +18 -0
  318. homeassistant/components/homematicip_cloud/translations/mk.json +7 -0
  319. homeassistant/components/homematicip_cloud/translations/sv.json +1 -1
  320. homeassistant/components/homewizard/translations/es.json +4 -2
  321. homeassistant/components/homewizard/translations/pl.json +1 -1
  322. homeassistant/components/homewizard/translations/ru.json +4 -2
  323. homeassistant/components/homewizard/translations/sv.json +1 -1
  324. homeassistant/components/homeworks/translations/mk.json +11 -0
  325. homeassistant/components/honeywell/translations/mk.json +15 -0
  326. homeassistant/components/honeywell/translations/vi.json +11 -0
  327. homeassistant/components/html5/translations/mk.json +9 -1
  328. homeassistant/components/http/__init__.py +13 -2
  329. homeassistant/components/http/strings.json +4 -0
  330. homeassistant/components/http/translations/cs.json +4 -0
  331. homeassistant/components/http/translations/de.json +4 -0
  332. homeassistant/components/http/translations/en-GB.json +4 -0
  333. homeassistant/components/http/translations/en.json +4 -0
  334. homeassistant/components/http/translations/es.json +4 -0
  335. homeassistant/components/http/translations/et.json +4 -0
  336. homeassistant/components/http/translations/ga.json +4 -0
  337. homeassistant/components/http/translations/he.json +4 -0
  338. homeassistant/components/http/translations/it.json +4 -0
  339. homeassistant/components/http/translations/lt.json +4 -0
  340. homeassistant/components/http/translations/pt.json +4 -0
  341. homeassistant/components/http/translations/ru.json +3 -0
  342. homeassistant/components/http/translations/sk.json +4 -0
  343. homeassistant/components/http/translations/sr-Latn.json +7 -0
  344. homeassistant/components/http/translations/sv.json +4 -0
  345. homeassistant/components/http/translations/zh-Hans.json +4 -0
  346. homeassistant/components/http/translations/zh-Hant.json +4 -0
  347. homeassistant/components/huawei_lte/translations/bg.json +0 -6
  348. homeassistant/components/huawei_lte/translations/ca.json +0 -6
  349. homeassistant/components/huawei_lte/translations/cs.json +2 -2
  350. homeassistant/components/huawei_lte/translations/de.json +2 -2
  351. homeassistant/components/huawei_lte/translations/el.json +2 -2
  352. homeassistant/components/huawei_lte/translations/en-GB.json +2 -2
  353. homeassistant/components/huawei_lte/translations/en.json +2 -2
  354. homeassistant/components/huawei_lte/translations/es.json +2 -2
  355. homeassistant/components/huawei_lte/translations/et.json +2 -2
  356. homeassistant/components/huawei_lte/translations/fi.json +0 -6
  357. homeassistant/components/huawei_lte/translations/ga.json +0 -6
  358. homeassistant/components/huawei_lte/translations/hu.json +0 -6
  359. homeassistant/components/huawei_lte/translations/it.json +0 -6
  360. homeassistant/components/huawei_lte/translations/ja.json +0 -6
  361. homeassistant/components/huawei_lte/translations/ko.json +0 -6
  362. homeassistant/components/huawei_lte/translations/lt.json +2 -2
  363. homeassistant/components/huawei_lte/translations/nl.json +0 -6
  364. homeassistant/components/huawei_lte/translations/pt.json +2 -2
  365. homeassistant/components/huawei_lte/translations/ru.json +2 -2
  366. homeassistant/components/huawei_lte/translations/sk.json +2 -2
  367. homeassistant/components/huawei_lte/translations/tr.json +0 -6
  368. homeassistant/components/huawei_lte/translations/zh-Hans.json +2 -2
  369. homeassistant/components/huawei_lte/translations/zh-Hant.json +2 -2
  370. homeassistant/components/hue/translations/sv.json +1 -0
  371. homeassistant/components/humidifier/translations/bg.json +5 -1
  372. homeassistant/components/humidifier/translations/mk.json +18 -0
  373. homeassistant/components/humidifier/translations/pl.json +11 -4
  374. homeassistant/components/humidifier/translations/sr-Latn.json +3 -3
  375. homeassistant/components/husqvarna_automower/entity.py +7 -4
  376. homeassistant/components/husqvarna_automower/translations/bg.json +2 -0
  377. homeassistant/components/husqvarna_automower/translations/mk.json +14 -0
  378. homeassistant/components/husqvarna_automower/translations/sr-Latn.json +2 -2
  379. homeassistant/components/husqvarna_automower/translations/sv.json +3 -0
  380. homeassistant/components/husqvarna_automower_ble/translations/sv.json +22 -1
  381. homeassistant/components/huum/translations/vi.json +9 -0
  382. homeassistant/components/hydrawise/translations/mk.json +11 -0
  383. homeassistant/components/hyperion/camera.py +3 -1
  384. homeassistant/components/hyperion/translations/sv.json +1 -1
  385. homeassistant/components/icloud/translations/mk.json +17 -0
  386. homeassistant/components/icloud/translations/sv.json +2 -0
  387. homeassistant/components/ifttt/translations/mk.json +9 -0
  388. homeassistant/components/ihc/translations/mk.json +25 -0
  389. homeassistant/components/image/translations/mk.json +12 -0
  390. homeassistant/components/imeon_inverter/translations/sv.json +8 -0
  391. homeassistant/components/incomfort/translations/bg.json +1 -0
  392. homeassistant/components/incomfort/translations/sr-Latn.json +1 -1
  393. homeassistant/components/inels/translations/bg.json +1 -0
  394. homeassistant/components/inels/translations/ca.json +7 -0
  395. homeassistant/components/inels/translations/es.json +30 -0
  396. homeassistant/components/inels/translations/sr-Latn.json +1 -0
  397. homeassistant/components/inels/translations/sv.json +12 -0
  398. homeassistant/components/input_boolean/translations/bg.json +1 -0
  399. homeassistant/components/input_boolean/translations/cs.json +2 -2
  400. homeassistant/components/input_boolean/translations/mk.json +17 -0
  401. homeassistant/components/input_boolean/translations/pl.json +4 -0
  402. homeassistant/components/input_boolean/translations/sr-Latn.json +2 -2
  403. homeassistant/components/input_button/translations/mk.json +12 -0
  404. homeassistant/components/input_datetime/translations/mk.json +10 -0
  405. homeassistant/components/input_number/translations/mk.json +21 -0
  406. homeassistant/components/input_select/translations/mk.json +38 -0
  407. homeassistant/components/input_select/translations/vi.json +2 -0
  408. homeassistant/components/input_text/translations/mk.json +15 -0
  409. homeassistant/components/integration/translations/mk.json +9 -0
  410. homeassistant/components/iometer/translations/sr-Latn.json +7 -0
  411. homeassistant/components/iotawatt/translations/sv.json +1 -1
  412. homeassistant/components/iotty/translations/sv.json +3 -0
  413. homeassistant/components/iron_os/translations/bg.json +9 -1
  414. homeassistant/components/iron_os/translations/sr-Latn.json +5 -5
  415. homeassistant/components/iskra/translations/sv.json +2 -1
  416. homeassistant/components/isy994/translations/mk.json +14 -0
  417. homeassistant/components/isy994/translations/sv.json +2 -0
  418. homeassistant/components/ituran/binary_sensor.py +1 -2
  419. homeassistant/components/ituran/device_tracker.py +2 -4
  420. homeassistant/components/ituran/sensor.py +1 -2
  421. homeassistant/components/jewish_calendar/translations/es.json +6 -0
  422. homeassistant/components/jvc_projector/translations/sr-Latn.json +1 -1
  423. homeassistant/components/keba/translations/sv.json +1 -0
  424. homeassistant/components/keymitt_ble/translations/mk.json +11 -0
  425. homeassistant/components/kitchen_sink/translations/sv.json +3 -3
  426. homeassistant/components/knx/manifest.json +1 -1
  427. homeassistant/components/knx/storage/entity_store_schema.py +1 -1
  428. homeassistant/components/knx/translations/bg.json +94 -0
  429. homeassistant/components/knx/translations/ca.json +15 -0
  430. homeassistant/components/knx/translations/es.json +39 -8
  431. homeassistant/components/knx/translations/it.json +119 -2
  432. homeassistant/components/knx/translations/mk.json +13 -0
  433. homeassistant/components/knx/translations/pl.json +16 -0
  434. homeassistant/components/knx/translations/sr-Latn.json +44 -1
  435. homeassistant/components/knx/translations/sv.json +56 -5
  436. homeassistant/components/knx/translations/vi.json +29 -0
  437. homeassistant/components/kodi/translations/mk.json +11 -0
  438. homeassistant/components/lamarzocco/update.py +1 -1
  439. homeassistant/components/lametric/translations/es.json +1 -0
  440. homeassistant/components/lametric/translations/mk.json +16 -0
  441. homeassistant/components/lametric/translations/sv.json +4 -0
  442. homeassistant/components/laundrify/translations/mk.json +9 -0
  443. homeassistant/components/lawn_mower/translations/mk.json +7 -0
  444. homeassistant/components/lawn_mower/translations/sr-Latn.json +1 -1
  445. homeassistant/components/lcn/translations/mk.json +23 -1
  446. homeassistant/components/lg_thinq/sensor.py +1 -0
  447. homeassistant/components/lg_thinq/translations/bg.json +25 -3
  448. homeassistant/components/lg_thinq/translations/mk.json +13 -0
  449. homeassistant/components/lg_thinq/translations/pl.json +5 -0
  450. homeassistant/components/lg_thinq/translations/sr-Latn.json +16 -16
  451. homeassistant/components/lg_thinq/translations/sv.json +1 -0
  452. homeassistant/components/libre_hardware_monitor/translations/sv.json +4 -0
  453. homeassistant/components/lifx/translations/mk.json +7 -0
  454. homeassistant/components/light/translations/bg.json +7 -1
  455. homeassistant/components/light/translations/mk.json +3 -1
  456. homeassistant/components/light/translations/sr-Latn.json +3 -3
  457. homeassistant/components/light/translations/vi.json +25 -2
  458. homeassistant/components/litterrobot/manifest.json +1 -1
  459. homeassistant/components/litterrobot/translations/bg.json +3 -1
  460. homeassistant/components/litterrobot/translations/mk.json +12 -0
  461. homeassistant/components/litterrobot/translations/sr-Latn.json +2 -2
  462. homeassistant/components/lock/translations/he.json +1 -1
  463. homeassistant/components/lock/translations/vi.json +5 -1
  464. homeassistant/components/logbook/translations/mk.json +14 -0
  465. homeassistant/components/logger/translations/de.json +1 -1
  466. homeassistant/components/logger/translations/mk.json +11 -0
  467. homeassistant/components/london_underground/translations/he.json +1 -0
  468. homeassistant/components/lutron/translations/mk.json +13 -0
  469. homeassistant/components/lutron_caseta/translations/bg.json +2 -1
  470. homeassistant/components/lutron_caseta/translations/sr-Latn.json +2 -2
  471. homeassistant/components/lyric/translations/sv.json +4 -1
  472. homeassistant/components/mastodon/translations/mk.json +17 -0
  473. homeassistant/components/matrix/translations/bg.json +2 -1
  474. homeassistant/components/matrix/translations/mk.json +17 -0
  475. homeassistant/components/matrix/translations/sv.json +31 -0
  476. homeassistant/components/matter/translations/bg.json +12 -2
  477. homeassistant/components/matter/translations/cs.json +1 -1
  478. homeassistant/components/matter/translations/de.json +0 -3
  479. homeassistant/components/matter/translations/el.json +0 -3
  480. homeassistant/components/matter/translations/en-GB.json +0 -3
  481. homeassistant/components/matter/translations/en.json +1 -1
  482. homeassistant/components/matter/translations/es.json +26 -6
  483. homeassistant/components/matter/translations/et.json +0 -3
  484. homeassistant/components/matter/translations/he.json +0 -3
  485. homeassistant/components/matter/translations/it.json +40 -0
  486. homeassistant/components/matter/translations/lt.json +0 -3
  487. homeassistant/components/matter/translations/mk.json +19 -3
  488. homeassistant/components/matter/translations/pl.json +5 -0
  489. homeassistant/components/matter/translations/pt.json +0 -3
  490. homeassistant/components/matter/translations/ru.json +0 -3
  491. homeassistant/components/matter/translations/sk.json +0 -3
  492. homeassistant/components/matter/translations/sr-Latn.json +5 -5
  493. homeassistant/components/matter/translations/sv.json +10 -0
  494. homeassistant/components/matter/translations/zh-Hans.json +0 -3
  495. homeassistant/components/matter/translations/zh-Hant.json +0 -3
  496. homeassistant/components/mcp/translations/es.json +4 -0
  497. homeassistant/components/mcp/translations/sv.json +3 -0
  498. homeassistant/components/mcp_server/translations/lt.json +1 -1
  499. homeassistant/components/mealie/translations/mk.json +14 -0
  500. homeassistant/components/mealie/translations/sr-Latn.json +2 -1
  501. homeassistant/components/media_extractor/translations/mk.json +7 -0
  502. homeassistant/components/media_player/translations/bg.json +3 -0
  503. homeassistant/components/media_player/translations/mk.json +200 -2
  504. homeassistant/components/media_player/translations/sr-Latn.json +6 -6
  505. homeassistant/components/media_player/translations/vi.json +54 -1
  506. homeassistant/components/media_source/translations/mk.json +5 -0
  507. homeassistant/components/meteo_lt/weather.py +2 -2
  508. homeassistant/components/metoffice/translations/sr-Latn.json +3 -1
  509. homeassistant/components/microbees/translations/sv.json +3 -0
  510. homeassistant/components/miele/button.py +4 -3
  511. homeassistant/components/miele/climate.py +3 -2
  512. homeassistant/components/miele/coordinator.py +1 -1
  513. homeassistant/components/miele/fan.py +5 -2
  514. homeassistant/components/miele/light.py +3 -2
  515. homeassistant/components/miele/sensor.py +8 -2
  516. homeassistant/components/miele/services.py +4 -4
  517. homeassistant/components/miele/switch.py +5 -3
  518. homeassistant/components/miele/translations/bg.json +1 -0
  519. homeassistant/components/miele/translations/cs.json +1 -1
  520. homeassistant/components/miele/translations/de.json +1 -1
  521. homeassistant/components/miele/translations/en-GB.json +1 -1
  522. homeassistant/components/miele/translations/en.json +1 -1
  523. homeassistant/components/miele/translations/es.json +1 -1
  524. homeassistant/components/miele/translations/et.json +1 -1
  525. homeassistant/components/miele/translations/ga.json +1 -2
  526. homeassistant/components/miele/translations/hu.json +1 -2
  527. homeassistant/components/miele/translations/it.json +1 -2
  528. homeassistant/components/miele/translations/lt.json +1 -1
  529. homeassistant/components/miele/translations/mk.json +11 -0
  530. homeassistant/components/miele/translations/pt.json +1 -1
  531. homeassistant/components/miele/translations/sk.json +1 -1
  532. homeassistant/components/miele/translations/sr-Latn.json +3 -2
  533. homeassistant/components/miele/translations/sv.json +21 -2
  534. homeassistant/components/miele/translations/tr.json +1 -2
  535. homeassistant/components/miele/translations/vi.json +9 -0
  536. homeassistant/components/miele/translations/zh-Hans.json +1 -1
  537. homeassistant/components/miele/translations/zh-Hant.json +1 -1
  538. homeassistant/components/miele/vacuum.py +3 -2
  539. homeassistant/components/mill/manifest.json +1 -1
  540. homeassistant/components/minecraft_server/translations/mk.json +9 -0
  541. homeassistant/components/mjpeg/translations/sv.json +2 -0
  542. homeassistant/components/mobile_app/binary_sensor.py +6 -4
  543. homeassistant/components/mobile_app/sensor.py +6 -4
  544. homeassistant/components/mobile_app/translations/mk.json +11 -0
  545. homeassistant/components/modbus/translations/mk.json +11 -0
  546. homeassistant/components/modbus/translations/sv.json +2 -0
  547. homeassistant/components/monarch_money/translations/mk.json +9 -0
  548. homeassistant/components/monzo/translations/sv.json +3 -0
  549. homeassistant/components/motion_blinds/cover.py +1 -0
  550. homeassistant/components/motion_blinds/translations/sv.json +2 -1
  551. homeassistant/components/motionmount/translations/sr-Latn.json +4 -0
  552. homeassistant/components/motionmount/translations/sv.json +4 -1
  553. homeassistant/components/mqtt/translations/bg.json +4 -2
  554. homeassistant/components/mqtt/translations/es.json +4 -4
  555. homeassistant/components/mqtt/translations/he.json +2 -2
  556. homeassistant/components/mqtt/translations/mk.json +13 -1
  557. homeassistant/components/mqtt/translations/sr-Latn.json +2 -2
  558. homeassistant/components/mqtt/translations/sv.json +50 -10
  559. homeassistant/components/mqtt/translations/vi.json +83 -7
  560. homeassistant/components/music_assistant/translations/mk.json +10 -0
  561. homeassistant/components/mutesync/translations/mk.json +9 -0
  562. homeassistant/components/myuplink/translations/mk.json +7 -0
  563. homeassistant/components/myuplink/translations/sv.json +3 -0
  564. homeassistant/components/nanoleaf/translations/sv.json +1 -1
  565. homeassistant/components/neato/translations/sv.json +3 -0
  566. homeassistant/components/nederlandse_spoorwegen/translations/bg.json +2 -1
  567. homeassistant/components/nederlandse_spoorwegen/translations/ca.json +7 -1
  568. homeassistant/components/nederlandse_spoorwegen/translations/pt.json +12 -1
  569. homeassistant/components/nederlandse_spoorwegen/translations/sv.json +3 -0
  570. homeassistant/components/nest/translations/sr-Latn.json +1 -0
  571. homeassistant/components/nest/translations/sv.json +3 -0
  572. homeassistant/components/netatmo/translations/mk.json +14 -0
  573. homeassistant/components/netatmo/translations/sv.json +3 -0
  574. homeassistant/components/nexia/translations/mk.json +14 -0
  575. homeassistant/components/nexia/translations/vi.json +12 -0
  576. homeassistant/components/nextdns/translations/bg.json +2 -1
  577. homeassistant/components/nextdns/translations/ca.json +7 -1
  578. homeassistant/components/nextdns/translations/it.json +1 -0
  579. homeassistant/components/nextdns/translations/sv.json +10 -1
  580. homeassistant/components/nina/translations/bg.json +0 -6
  581. homeassistant/components/nina/translations/es.json +40 -1
  582. homeassistant/components/nina/translations/sr-Latn.json +28 -0
  583. homeassistant/components/nina/translations/sv.json +14 -0
  584. homeassistant/components/nintendo_parental_controls/translations/bg.json +19 -0
  585. homeassistant/components/nintendo_parental_controls/translations/pt.json +27 -0
  586. homeassistant/components/nintendo_parental_controls/translations/sv.json +23 -0
  587. homeassistant/components/nobo_hub/translations/mk.json +11 -0
  588. homeassistant/components/nobo_hub/translations/vi.json +11 -0
  589. homeassistant/components/nordpool/translations/mk.json +14 -0
  590. homeassistant/components/notify/translations/mk.json +58 -0
  591. homeassistant/components/notify/translations/sv.json +1 -1
  592. homeassistant/components/ntfy/translations/mk.json +14 -0
  593. homeassistant/components/ntfy/translations/sv.json +1 -1
  594. homeassistant/components/nuki/translations/es.json +4 -0
  595. homeassistant/components/nuki/translations/ru.json +4 -0
  596. homeassistant/components/number/translations/mk.json +14 -1
  597. homeassistant/components/nut/translations/bg.json +1 -0
  598. homeassistant/components/nut/translations/mk.json +8 -0
  599. homeassistant/components/nut/translations/pl.json +6 -0
  600. homeassistant/components/nut/translations/sr-Latn.json +1 -1
  601. homeassistant/components/nws/translations/mk.json +10 -0
  602. homeassistant/components/octoprint/translations/es.json +16 -0
  603. homeassistant/components/ohme/translations/mk.json +5 -0
  604. homeassistant/components/ollama/translations/lt.json +1 -1
  605. homeassistant/components/ollama/translations/sr-Latn.json +6 -0
  606. homeassistant/components/ondilo_ico/translations/sv.json +3 -0
  607. homeassistant/components/onedrive/manifest.json +1 -1
  608. homeassistant/components/onedrive/translations/mk.json +9 -0
  609. homeassistant/components/onedrive/translations/sr-Latn.json +5 -0
  610. homeassistant/components/onedrive/translations/sv.json +3 -0
  611. homeassistant/components/onewire/manifest.json +1 -1
  612. homeassistant/components/onewire/translations/el.json +1 -1
  613. homeassistant/components/onewire/translations/en-GB.json +1 -1
  614. homeassistant/components/onewire/translations/en.json +1 -1
  615. homeassistant/components/onewire/translations/es.json +1 -1
  616. homeassistant/components/onewire/translations/et.json +1 -1
  617. homeassistant/components/onewire/translations/ga.json +0 -1
  618. homeassistant/components/onewire/translations/sv.json +0 -1
  619. homeassistant/components/onvif/translations/sv.json +1 -1
  620. homeassistant/components/open_router/manifest.json +1 -1
  621. homeassistant/components/open_router/translations/lt.json +1 -1
  622. homeassistant/components/open_router/translations/mk.json +3 -0
  623. homeassistant/components/openai_conversation/translations/lt.json +1 -1
  624. homeassistant/components/openrgb/translations/cs.json +1 -1
  625. homeassistant/components/openrgb/translations/de.json +1 -1
  626. homeassistant/components/openrgb/translations/es.json +1 -1
  627. homeassistant/components/openrgb/translations/pt.json +1 -1
  628. homeassistant/components/opentherm_gw/translations/mk.json +10 -0
  629. homeassistant/components/opentherm_gw/translations/vi.json +5 -0
  630. homeassistant/components/openweathermap/translations/sv.json +1 -1
  631. homeassistant/components/oralb/translations/bg.json +2 -0
  632. homeassistant/components/oralb/translations/es.json +1 -0
  633. homeassistant/components/oralb/translations/fr.json +41 -4
  634. homeassistant/components/osoenergy/translations/bg.json +6 -0
  635. homeassistant/components/osoenergy/translations/sr-Latn.json +2 -2
  636. homeassistant/components/overkiz/translations/lt.json +2 -1
  637. homeassistant/components/overkiz/translations/mk.json +11 -0
  638. homeassistant/components/overkiz/translations/pt.json +2 -1
  639. homeassistant/components/overkiz/translations/ru.json +2 -1
  640. homeassistant/components/overkiz/translations/vi.json +6 -0
  641. homeassistant/components/palazzetti/manifest.json +1 -1
  642. homeassistant/components/palazzetti/translations/mk.json +1 -0
  643. homeassistant/components/palazzetti/translations/sr-Latn.json +1 -1
  644. homeassistant/components/persistent_notification/translations/mk.json +15 -0
  645. homeassistant/components/person/translations/mk.json +7 -1
  646. homeassistant/components/pi_hole/translations/mk.json +14 -0
  647. homeassistant/components/playstation_network/translations/sr-Latn.json +3 -0
  648. homeassistant/components/plugwise/climate.py +86 -26
  649. homeassistant/components/plugwise/manifest.json +1 -1
  650. homeassistant/components/plugwise/strings.json +3 -0
  651. homeassistant/components/plugwise/translations/bg.json +9 -2
  652. homeassistant/components/plugwise/translations/cs.json +3 -0
  653. homeassistant/components/plugwise/translations/de.json +3 -0
  654. homeassistant/components/plugwise/translations/en-GB.json +3 -0
  655. homeassistant/components/plugwise/translations/en.json +3 -0
  656. homeassistant/components/plugwise/translations/es.json +3 -0
  657. homeassistant/components/plugwise/translations/et.json +3 -0
  658. homeassistant/components/plugwise/translations/ga.json +3 -0
  659. homeassistant/components/plugwise/translations/it.json +3 -0
  660. homeassistant/components/plugwise/translations/lt.json +3 -0
  661. homeassistant/components/plugwise/translations/mk.json +8 -0
  662. homeassistant/components/plugwise/translations/pt.json +3 -0
  663. homeassistant/components/plugwise/translations/sk.json +3 -0
  664. homeassistant/components/plugwise/translations/sr-Latn.json +3 -3
  665. homeassistant/components/plugwise/translations/sv.json +3 -0
  666. homeassistant/components/plugwise/translations/vi.json +6 -1
  667. homeassistant/components/plugwise/translations/zh-Hans.json +3 -0
  668. homeassistant/components/plugwise/translations/zh-Hant.json +3 -0
  669. homeassistant/components/point/translations/sv.json +3 -0
  670. homeassistant/components/pooldose/translations/bg.json +4 -0
  671. homeassistant/components/pooldose/translations/it.json +1 -0
  672. homeassistant/components/pooldose/translations/sr-Latn.json +4 -4
  673. homeassistant/components/pooldose/translations/sv.json +14 -1
  674. homeassistant/components/portainer/manifest.json +1 -1
  675. homeassistant/components/portainer/translations/bg.json +8 -1
  676. homeassistant/components/portainer/translations/ca.json +9 -1
  677. homeassistant/components/portainer/translations/mk.json +9 -0
  678. homeassistant/components/portainer/translations/pt.json +16 -1
  679. homeassistant/components/portainer/translations/sr-Latn.json +3 -1
  680. homeassistant/components/portainer/translations/sv.json +16 -3
  681. homeassistant/components/powerwall/translations/mk.json +9 -0
  682. homeassistant/components/probe_plus/translations/es.json +5 -0
  683. homeassistant/components/profiler/translations/mk.json +18 -0
  684. homeassistant/components/prusalink/translations/mk.json +9 -0
  685. homeassistant/components/ps4/translations/es.json +9 -1
  686. homeassistant/components/ps4/translations/sv.json +2 -2
  687. homeassistant/components/pterodactyl/translations/mk.json +7 -0
  688. homeassistant/components/pushbullet/translations/mk.json +9 -0
  689. homeassistant/components/qbittorrent/translations/mk.json +3 -0
  690. homeassistant/components/qbittorrent/translations/ru.json +4 -0
  691. homeassistant/components/qbus/translations/sr-Latn.json +5 -0
  692. homeassistant/components/qbus/translations/sv.json +7 -0
  693. homeassistant/components/qnap/translations/mk.json +7 -0
  694. homeassistant/components/rachio/translations/mk.json +23 -0
  695. homeassistant/components/rainbird/translations/mk.json +18 -0
  696. homeassistant/components/rainmachine/translations/mk.json +21 -0
  697. homeassistant/components/rainmachine/translations/pt.json +1 -0
  698. homeassistant/components/random/translations/sr-Latn.json +2 -1
  699. homeassistant/components/recorder/auto_repairs/statistics/schema.py +3 -0
  700. homeassistant/components/recorder/const.py +1 -1
  701. homeassistant/components/recorder/db_schema.py +1 -1
  702. homeassistant/components/recorder/migration.py +73 -4
  703. homeassistant/components/recorder/translations/mk.json +6 -0
  704. homeassistant/components/renault/translations/sr-Latn.json +1 -0
  705. homeassistant/components/renault/translations/vi.json +11 -0
  706. homeassistant/components/renson/translations/bg.json +2 -1
  707. homeassistant/components/renson/translations/mk.json +11 -0
  708. homeassistant/components/renson/translations/sr-Latn.json +4 -4
  709. homeassistant/components/reolink/manifest.json +1 -1
  710. homeassistant/components/reolink/translations/bg.json +34 -1
  711. homeassistant/components/reolink/translations/cs.json +1 -0
  712. homeassistant/components/reolink/translations/en-GB.json +1 -0
  713. homeassistant/components/reolink/translations/es.json +1 -0
  714. homeassistant/components/reolink/translations/et.json +1 -0
  715. homeassistant/components/reolink/translations/ga.json +1 -0
  716. homeassistant/components/reolink/translations/it.json +5 -0
  717. homeassistant/components/reolink/translations/lt.json +1 -0
  718. homeassistant/components/reolink/translations/mk.json +4 -0
  719. homeassistant/components/reolink/translations/pl.json +8 -7
  720. homeassistant/components/reolink/translations/pt.json +1 -0
  721. homeassistant/components/reolink/translations/sk.json +1 -0
  722. homeassistant/components/reolink/translations/sr-Latn.json +12 -12
  723. homeassistant/components/reolink/translations/sv.json +1 -1
  724. homeassistant/components/rfxtrx/translations/bg.json +1 -0
  725. homeassistant/components/rfxtrx/translations/sr-Latn.json +2 -2
  726. homeassistant/components/risco/translations/vi.json +8 -0
  727. homeassistant/components/roborock/translations/bg.json +3 -1
  728. homeassistant/components/roborock/translations/mk.json +3 -0
  729. homeassistant/components/roborock/translations/sr-Latn.json +2 -2
  730. homeassistant/components/roomba/translations/sv.json +1 -1
  731. homeassistant/components/roon/translations/sv.json +1 -1
  732. homeassistant/components/ruuvitag_ble/manifest.json +1 -1
  733. homeassistant/components/sabnzbd/translations/mk.json +9 -0
  734. homeassistant/components/satel_integra/translations/it.json +1 -0
  735. homeassistant/components/satel_integra/translations/pl.json +3 -3
  736. homeassistant/components/satel_integra/translations/sr-Latn.json +2 -1
  737. homeassistant/components/satel_integra/translations/sv.json +9 -2
  738. homeassistant/components/satel_integra/translations/vi.json +10 -0
  739. homeassistant/components/schedule/translations/vi.json +8 -1
  740. homeassistant/components/scrape/translations/mk.json +2 -1
  741. homeassistant/components/select/translations/mk.json +48 -0
  742. homeassistant/components/sensibo/translations/bg.json +72 -7
  743. homeassistant/components/sensibo/translations/mk.json +21 -0
  744. homeassistant/components/sensibo/translations/pl.json +2 -2
  745. homeassistant/components/sensibo/translations/sr-Latn.json +27 -27
  746. homeassistant/components/sensibo/translations/vi.json +26 -0
  747. homeassistant/components/sensor/translations/mk.json +6 -0
  748. homeassistant/components/sensor/translations/pl.json +2 -2
  749. homeassistant/components/senz/translations/sv.json +3 -0
  750. homeassistant/components/sfr_box/__init__.py +4 -0
  751. homeassistant/components/sfr_box/translations/pt.json +4 -0
  752. homeassistant/components/sftp_storage/translations/sv.json +1 -0
  753. homeassistant/components/shelly/translations/bg.json +2 -1
  754. homeassistant/components/shelly/translations/ca.json +4 -0
  755. homeassistant/components/shelly/translations/es.json +10 -3
  756. homeassistant/components/shelly/translations/mk.json +11 -0
  757. homeassistant/components/shelly/translations/pl.json +1 -1
  758. homeassistant/components/shelly/translations/pt.json +2 -1
  759. homeassistant/components/shelly/translations/sv.json +10 -3
  760. homeassistant/components/shopping_list/translations/mk.json +8 -0
  761. homeassistant/components/sia/translations/sv.json +6 -3
  762. homeassistant/components/simplisafe/translations/mk.json +11 -0
  763. homeassistant/components/siren/translations/mk.json +19 -0
  764. homeassistant/components/siren/translations/sr-Latn.json +1 -1
  765. homeassistant/components/skybell/translations/mk.json +9 -0
  766. homeassistant/components/slack/translations/sv.json +2 -0
  767. homeassistant/components/sleep_as_android/translations/sv.json +24 -0
  768. homeassistant/components/sleepiq/translations/bg.json +14 -0
  769. homeassistant/components/sleepiq/translations/sr-Latn.json +2 -2
  770. homeassistant/components/slide_local/translations/es.json +1 -1
  771. homeassistant/components/smappee/translations/sv.json +3 -0
  772. homeassistant/components/smarla/translations/sv.json +5 -0
  773. homeassistant/components/smartthings/manifest.json +1 -1
  774. homeassistant/components/smartthings/translations/bg.json +25 -2
  775. homeassistant/components/smartthings/translations/mk.json +15 -0
  776. homeassistant/components/smartthings/translations/sr-Latn.json +9 -9
  777. homeassistant/components/smartthings/translations/sv.json +6 -0
  778. homeassistant/components/smarttub/manifest.json +1 -1
  779. homeassistant/components/smarttub/translations/mk.json +9 -0
  780. homeassistant/components/sms/translations/sr-Latn.json +3 -0
  781. homeassistant/components/snapcast/translations/mk.json +10 -0
  782. homeassistant/components/snapcast/translations/sv.json +10 -0
  783. homeassistant/components/snips/translations/mk.json +18 -0
  784. homeassistant/components/snooz/translations/sv.json +1 -1
  785. homeassistant/components/solaredge/__init__.py +3 -0
  786. homeassistant/components/solaredge/config_flow.py +5 -2
  787. homeassistant/components/solaredge/translations/ca.json +22 -1
  788. homeassistant/components/solaredge/translations/ru.json +4 -2
  789. homeassistant/components/somfy_mylink/translations/es.json +3 -3
  790. homeassistant/components/somfy_mylink/translations/ru.json +2 -1
  791. homeassistant/components/songpal/translations/mk.json +11 -0
  792. homeassistant/components/sonos/translations/bg.json +7 -0
  793. homeassistant/components/sonos/translations/sr-Latn.json +1 -1
  794. homeassistant/components/soundtouch/__init__.py +10 -1
  795. homeassistant/components/spotify/translations/sv.json +3 -0
  796. homeassistant/components/sql/translations/bg.json +1 -2
  797. homeassistant/components/sql/translations/ca.json +2 -4
  798. homeassistant/components/sql/translations/cs.json +2 -2
  799. homeassistant/components/sql/translations/de.json +2 -2
  800. homeassistant/components/sql/translations/el.json +2 -4
  801. homeassistant/components/sql/translations/en-GB.json +2 -2
  802. homeassistant/components/sql/translations/en.json +2 -2
  803. homeassistant/components/sql/translations/es.json +29 -2
  804. homeassistant/components/sql/translations/et.json +2 -2
  805. homeassistant/components/sql/translations/fi.json +2 -4
  806. homeassistant/components/sql/translations/fr.json +2 -4
  807. homeassistant/components/sql/translations/ga.json +2 -4
  808. homeassistant/components/sql/translations/he.json +2 -4
  809. homeassistant/components/sql/translations/hu.json +2 -4
  810. homeassistant/components/sql/translations/id.json +2 -4
  811. homeassistant/components/sql/translations/ja.json +2 -4
  812. homeassistant/components/sql/translations/lt.json +2 -2
  813. homeassistant/components/sql/translations/mk.json +11 -0
  814. homeassistant/components/sql/translations/pl.json +2 -4
  815. homeassistant/components/sql/translations/pt-BR.json +2 -4
  816. homeassistant/components/sql/translations/pt.json +2 -2
  817. homeassistant/components/sql/translations/ru.json +2 -4
  818. homeassistant/components/sql/translations/sk.json +2 -2
  819. homeassistant/components/sql/translations/sl.json +2 -4
  820. homeassistant/components/sql/translations/sr-Latn.json +12 -0
  821. homeassistant/components/sql/translations/sv.json +16 -5
  822. homeassistant/components/sql/translations/tr.json +2 -4
  823. homeassistant/components/sql/translations/zh-Hans.json +2 -2
  824. homeassistant/components/sql/translations/zh-Hant.json +2 -2
  825. homeassistant/components/squeezebox/translations/es.json +63 -0
  826. homeassistant/components/squeezebox/translations/sr-Latn.json +8 -0
  827. homeassistant/components/squeezebox/translations/uk.json +5 -0
  828. homeassistant/components/starline/translations/mk.json +9 -0
  829. homeassistant/components/statistics/translations/sl.json +7 -0
  830. homeassistant/components/subaru/translations/sv.json +2 -0
  831. homeassistant/components/{sunricher_dali_center → sunricher_dali}/__init__.py +2 -2
  832. homeassistant/components/{sunricher_dali_center → sunricher_dali}/config_flow.py +2 -2
  833. homeassistant/components/sunricher_dali/const.py +5 -0
  834. homeassistant/components/{sunricher_dali_center → sunricher_dali}/light.py +2 -2
  835. homeassistant/components/{sunricher_dali_center → sunricher_dali}/manifest.json +3 -3
  836. homeassistant/components/{sunricher_dali_center → sunricher_dali}/strings.json +4 -6
  837. homeassistant/components/sunricher_dali/translations/bg.json +18 -0
  838. homeassistant/components/sunricher_dali/translations/ca.json +11 -0
  839. homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/cs.json +4 -6
  840. homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/de.json +5 -7
  841. homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/en-GB.json +4 -6
  842. homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/en.json +4 -6
  843. homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/es.json +4 -6
  844. homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/et.json +4 -6
  845. homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/ga.json +4 -6
  846. homeassistant/components/sunricher_dali/translations/it.json +27 -0
  847. homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/lt.json +5 -7
  848. homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/pt.json +4 -6
  849. homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/sk.json +4 -6
  850. homeassistant/components/sunricher_dali/translations/sr-Latn.json +25 -0
  851. homeassistant/components/sunricher_dali/translations/sv.json +27 -0
  852. homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/zh-Hans.json +4 -6
  853. homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/zh-Hant.json +4 -6
  854. homeassistant/components/{sunricher_dali_center → sunricher_dali}/types.py +2 -2
  855. homeassistant/components/swiss_public_transport/translations/mk.json +1 -0
  856. homeassistant/components/switch/translations/bg.json +10 -0
  857. homeassistant/components/switch/translations/mk.json +10 -0
  858. homeassistant/components/switch_as_x/translations/cs.json +1 -1
  859. homeassistant/components/switch_as_x/translations/es.json +4 -4
  860. homeassistant/components/switchbot_cloud/translations/mk.json +15 -0
  861. homeassistant/components/switchbot_cloud/translations/sv.json +2 -1
  862. homeassistant/components/synology_dsm/translations/mk.json +13 -0
  863. homeassistant/components/system_bridge/translations/es.json +1 -0
  864. homeassistant/components/system_bridge/translations/mk.json +12 -0
  865. homeassistant/components/system_bridge/translations/ru.json +1 -0
  866. homeassistant/components/system_log/translations/mk.json +14 -0
  867. homeassistant/components/systemmonitor/translations/sv.json +1 -1
  868. homeassistant/components/tado/translations/sv.json +2 -2
  869. homeassistant/components/tankerkoenig/translations/mk.json +9 -0
  870. homeassistant/components/tautulli/translations/sv.json +2 -1
  871. homeassistant/components/technove/translations/mk.json +1 -0
  872. homeassistant/components/telegram/translations/pt.json +6 -0
  873. homeassistant/components/telegram/translations/ru.json +6 -0
  874. homeassistant/components/telegram_bot/translations/bg.json +11 -0
  875. homeassistant/components/telegram_bot/translations/es.json +42 -7
  876. homeassistant/components/telegram_bot/translations/mk.json +95 -0
  877. homeassistant/components/telegram_bot/translations/ru.json +69 -0
  878. homeassistant/components/telegram_bot/translations/sv.json +19 -0
  879. homeassistant/components/telegram_bot/translations/vi.json +7 -0
  880. homeassistant/components/template/translations/es.json +11 -3
  881. homeassistant/components/template/translations/it.json +5 -0
  882. homeassistant/components/template/translations/mk.json +9 -0
  883. homeassistant/components/template/translations/sr-Latn.json +8 -0
  884. homeassistant/components/template/translations/sv.json +140 -40
  885. homeassistant/components/template/translations/vi.json +301 -10
  886. homeassistant/components/tesla_fleet/manifest.json +1 -1
  887. homeassistant/components/tesla_fleet/translations/bg.json +40 -0
  888. homeassistant/components/tesla_fleet/translations/mk.json +10 -0
  889. homeassistant/components/tesla_fleet/translations/sr-Latn.json +13 -8
  890. homeassistant/components/tesla_fleet/translations/sv.json +3 -0
  891. homeassistant/components/tesla_fleet/translations/vi.json +5 -0
  892. homeassistant/components/tesla_wall_connector/translations/mk.json +3 -0
  893. homeassistant/components/teslemetry/manifest.json +1 -1
  894. homeassistant/components/teslemetry/translations/bg.json +68 -3
  895. homeassistant/components/teslemetry/translations/mk.json +32 -1
  896. homeassistant/components/teslemetry/translations/sr-Latn.json +16 -16
  897. homeassistant/components/teslemetry/translations/sv.json +133 -2
  898. homeassistant/components/teslemetry/translations/vi.json +22 -0
  899. homeassistant/components/teslemetry/update.py +1 -1
  900. homeassistant/components/tessie/manifest.json +1 -1
  901. homeassistant/components/tessie/translations/bg.json +45 -0
  902. homeassistant/components/tessie/translations/es.json +3 -0
  903. homeassistant/components/tessie/translations/mk.json +10 -0
  904. homeassistant/components/tessie/translations/sr-Latn.json +9 -9
  905. homeassistant/components/tessie/translations/vi.json +5 -0
  906. homeassistant/components/text/translations/mk.json +23 -0
  907. homeassistant/components/thethingsnetwork/translations/sv.json +1 -0
  908. homeassistant/components/timer/translations/mk.json +27 -0
  909. homeassistant/components/timer/translations/sk.json +1 -1
  910. homeassistant/components/timer/translations/vi.json +29 -1
  911. homeassistant/components/todo/translations/mk.json +61 -0
  912. homeassistant/components/todo/translations/vi.json +102 -1
  913. homeassistant/components/todoist/translations/mk.json +11 -0
  914. homeassistant/components/todoist/translations/vi.json +76 -1
  915. homeassistant/components/togrill/translations/pl.json +5 -0
  916. homeassistant/components/togrill/translations/sr-Latn.json +3 -0
  917. homeassistant/components/tomorrowio/translations/sv.json +2 -1
  918. homeassistant/components/toon/translations/sv.json +3 -0
  919. homeassistant/components/tplink/climate.py +8 -9
  920. homeassistant/components/tplink/translations/mk.json +6 -0
  921. homeassistant/components/tplink/translations/sr-Latn.json +3 -0
  922. homeassistant/components/traccar_server/translations/ca.json +6 -0
  923. homeassistant/components/traccar_server/translations/mk.json +7 -0
  924. homeassistant/components/traccar_server/translations/pt.json +10 -0
  925. homeassistant/components/trafikverket_camera/translations/mk.json +21 -0
  926. homeassistant/components/transmission/translations/bg.json +10 -0
  927. homeassistant/components/transmission/translations/mk.json +9 -0
  928. homeassistant/components/transmission/translations/pt.json +25 -0
  929. homeassistant/components/transmission/translations/ru.json +1 -0
  930. homeassistant/components/transmission/translations/sv.json +24 -0
  931. homeassistant/components/tts/translations/mk.json +11 -0
  932. homeassistant/components/tuya/manifest.json +1 -1
  933. homeassistant/components/tuya/translations/bg.json +10 -2
  934. homeassistant/components/tuya/translations/mk.json +27 -1
  935. homeassistant/components/tuya/translations/pl.json +3 -0
  936. homeassistant/components/tuya/translations/pt.json +12 -0
  937. homeassistant/components/tuya/translations/sr-Latn.json +5 -5
  938. homeassistant/components/tuya/translations/sv.json +3 -0
  939. homeassistant/components/twinkly/translations/bg.json +9 -0
  940. homeassistant/components/twinkly/translations/sr-Latn.json +1 -1
  941. homeassistant/components/twitch/translations/mk.json +13 -0
  942. homeassistant/components/ukraine_alarm/__init__.py +63 -0
  943. homeassistant/components/ukraine_alarm/config_flow.py +2 -2
  944. homeassistant/components/ukraine_alarm/strings.json +9 -3
  945. homeassistant/components/ukraine_alarm/translations/bg.json +9 -6
  946. homeassistant/components/ukraine_alarm/translations/ca.json +3 -6
  947. homeassistant/components/ukraine_alarm/translations/cs.json +9 -3
  948. homeassistant/components/ukraine_alarm/translations/de.json +9 -3
  949. homeassistant/components/ukraine_alarm/translations/el.json +3 -6
  950. homeassistant/components/ukraine_alarm/translations/en-GB.json +9 -3
  951. homeassistant/components/ukraine_alarm/translations/en.json +9 -3
  952. homeassistant/components/ukraine_alarm/translations/es.json +9 -3
  953. homeassistant/components/ukraine_alarm/translations/et.json +6 -0
  954. homeassistant/components/ukraine_alarm/translations/fi.json +3 -6
  955. homeassistant/components/ukraine_alarm/translations/fr.json +3 -6
  956. homeassistant/components/ukraine_alarm/translations/ga.json +3 -6
  957. homeassistant/components/ukraine_alarm/translations/hu.json +3 -6
  958. homeassistant/components/ukraine_alarm/translations/id.json +3 -6
  959. homeassistant/components/ukraine_alarm/translations/it.json +1 -8
  960. homeassistant/components/ukraine_alarm/translations/ja.json +3 -6
  961. homeassistant/components/ukraine_alarm/translations/ko.json +3 -6
  962. homeassistant/components/ukraine_alarm/translations/lt.json +9 -3
  963. homeassistant/components/ukraine_alarm/translations/nb.json +3 -6
  964. homeassistant/components/ukraine_alarm/translations/nl.json +3 -6
  965. homeassistant/components/ukraine_alarm/translations/pl.json +3 -6
  966. homeassistant/components/ukraine_alarm/translations/pt-BR.json +3 -6
  967. homeassistant/components/ukraine_alarm/translations/pt.json +9 -3
  968. homeassistant/components/ukraine_alarm/translations/ro.json +3 -6
  969. homeassistant/components/ukraine_alarm/translations/ru.json +3 -6
  970. homeassistant/components/ukraine_alarm/translations/sk.json +9 -3
  971. homeassistant/components/ukraine_alarm/translations/sv.json +3 -6
  972. homeassistant/components/ukraine_alarm/translations/tr.json +3 -6
  973. homeassistant/components/ukraine_alarm/translations/uk.json +3 -6
  974. homeassistant/components/ukraine_alarm/translations/zh-Hans.json +9 -3
  975. homeassistant/components/ukraine_alarm/translations/zh-Hant.json +9 -3
  976. homeassistant/components/unifiprotect/translations/vi.json +7 -0
  977. homeassistant/components/update/translations/mk.json +3 -0
  978. homeassistant/components/update/translations/sr-Latn.json +1 -0
  979. homeassistant/components/usb/utils.py +22 -23
  980. homeassistant/components/utility_meter/manifest.json +1 -1
  981. homeassistant/components/utility_meter/translations/mk.json +20 -0
  982. homeassistant/components/vacuum/translations/sr-Latn.json +1 -1
  983. homeassistant/components/vallox/translations/mk.json +13 -0
  984. homeassistant/components/vegehub/translations/sr-Latn.json +7 -0
  985. homeassistant/components/velux/translations/cs.json +1 -1
  986. homeassistant/components/velux/translations/de.json +1 -1
  987. homeassistant/components/velux/translations/el.json +0 -1
  988. homeassistant/components/velux/translations/en-GB.json +1 -1
  989. homeassistant/components/velux/translations/en.json +1 -1
  990. homeassistant/components/velux/translations/es.json +1 -1
  991. homeassistant/components/velux/translations/et.json +1 -1
  992. homeassistant/components/velux/translations/fi.json +0 -1
  993. homeassistant/components/velux/translations/fr.json +0 -1
  994. homeassistant/components/velux/translations/ga.json +0 -1
  995. homeassistant/components/velux/translations/gl.json +0 -1
  996. homeassistant/components/velux/translations/hu.json +0 -1
  997. homeassistant/components/velux/translations/it.json +0 -1
  998. homeassistant/components/velux/translations/ja.json +0 -1
  999. homeassistant/components/velux/translations/ko.json +0 -1
  1000. homeassistant/components/velux/translations/lt.json +1 -1
  1001. homeassistant/components/velux/translations/nl.json +0 -1
  1002. homeassistant/components/velux/translations/pt.json +1 -1
  1003. homeassistant/components/velux/translations/ru.json +0 -1
  1004. homeassistant/components/velux/translations/sk.json +1 -1
  1005. homeassistant/components/velux/translations/sv.json +7 -1
  1006. homeassistant/components/velux/translations/tr.json +0 -1
  1007. homeassistant/components/velux/translations/uk.json +0 -1
  1008. homeassistant/components/velux/translations/vi.json +0 -1
  1009. homeassistant/components/velux/translations/zh-Hans.json +1 -1
  1010. homeassistant/components/velux/translations/zh-Hant.json +1 -1
  1011. homeassistant/components/vesync/humidifier.py +3 -1
  1012. homeassistant/components/vesync/manifest.json +1 -1
  1013. homeassistant/components/vesync/strings.json +11 -0
  1014. homeassistant/components/vesync/translations/bg.json +18 -0
  1015. homeassistant/components/vesync/translations/cs.json +11 -0
  1016. homeassistant/components/vesync/translations/de.json +11 -0
  1017. homeassistant/components/vesync/translations/en-GB.json +11 -0
  1018. homeassistant/components/vesync/translations/en.json +11 -0
  1019. homeassistant/components/vesync/translations/es.json +11 -0
  1020. homeassistant/components/vesync/translations/et.json +11 -0
  1021. homeassistant/components/vesync/translations/ga.json +11 -0
  1022. homeassistant/components/vesync/translations/he.json +11 -0
  1023. homeassistant/components/vesync/translations/it.json +11 -0
  1024. homeassistant/components/vesync/translations/lt.json +11 -0
  1025. homeassistant/components/vesync/translations/mk.json +11 -0
  1026. homeassistant/components/vesync/translations/pt.json +11 -0
  1027. homeassistant/components/vesync/translations/sk.json +11 -0
  1028. homeassistant/components/vesync/translations/sr-Latn.json +2 -2
  1029. homeassistant/components/vesync/translations/sv.json +11 -0
  1030. homeassistant/components/vesync/translations/zh-Hans.json +11 -0
  1031. homeassistant/components/vesync/translations/zh-Hant.json +11 -0
  1032. homeassistant/components/voip/translations/sv.json +1 -1
  1033. homeassistant/components/volvo/translations/bg.json +5 -0
  1034. homeassistant/components/volvo/translations/cs.json +5 -0
  1035. homeassistant/components/volvo/translations/en-GB.json +5 -0
  1036. homeassistant/components/volvo/translations/es.json +11 -0
  1037. homeassistant/components/volvo/translations/ga.json +5 -0
  1038. homeassistant/components/volvo/translations/it.json +5 -0
  1039. homeassistant/components/volvo/translations/lt.json +5 -0
  1040. homeassistant/components/volvo/translations/mk.json +9 -0
  1041. homeassistant/components/volvo/translations/pt.json +5 -0
  1042. homeassistant/components/volvo/translations/sk.json +5 -0
  1043. homeassistant/components/volvo/translations/sr-Latn.json +8 -0
  1044. homeassistant/components/volvo/translations/sv.json +37 -1
  1045. homeassistant/components/volvo/translations/vi.json +1 -0
  1046. homeassistant/components/wallbox/translations/bg.json +2 -1
  1047. homeassistant/components/wallbox/translations/sr-Latn.json +1 -1
  1048. homeassistant/components/water_heater/translations/bg.json +5 -0
  1049. homeassistant/components/water_heater/translations/sr-Latn.json +3 -3
  1050. homeassistant/components/watergate/translations/mk.json +15 -0
  1051. homeassistant/components/weather/translations/mk.json +11 -1
  1052. homeassistant/components/weather/translations/sv.json +1 -1
  1053. homeassistant/components/weatherflow/translations/sv.json +1 -1
  1054. homeassistant/components/webostv/translations/mk.json +12 -0
  1055. homeassistant/components/webostv/translations/sv.json +3 -3
  1056. homeassistant/components/weheat/translations/pl.json +1 -0
  1057. homeassistant/components/weheat/translations/sv.json +3 -0
  1058. homeassistant/components/wemo/translations/mk.json +11 -0
  1059. homeassistant/components/wemo/translations/pl.json +10 -0
  1060. homeassistant/components/whirlpool/translations/bg.json +22 -0
  1061. homeassistant/components/whirlpool/translations/ca.json +30 -0
  1062. homeassistant/components/whirlpool/translations/es.json +81 -0
  1063. homeassistant/components/whirlpool/translations/mk.json +3 -0
  1064. homeassistant/components/whirlpool/translations/pl.json +3 -0
  1065. homeassistant/components/whirlpool/translations/sv.json +66 -0
  1066. homeassistant/components/wilight/translations/mk.json +25 -0
  1067. homeassistant/components/withings/translations/sv.json +4 -1
  1068. homeassistant/components/wolflink/translations/bg.json +1 -0
  1069. homeassistant/components/wolflink/translations/sr-Latn.json +2 -2
  1070. homeassistant/components/workday/manifest.json +1 -1
  1071. homeassistant/components/workday/translations/vi.json +5 -0
  1072. homeassistant/components/wyoming/translations/bg.json +2 -1
  1073. homeassistant/components/wyoming/translations/sr-Latn.json +1 -1
  1074. homeassistant/components/xbox/coordinator.py +18 -2
  1075. homeassistant/components/xbox/translations/bg.json +36 -0
  1076. homeassistant/components/xbox/translations/es.json +22 -1
  1077. homeassistant/components/xbox/translations/mk.json +7 -0
  1078. homeassistant/components/xbox/translations/pt.json +11 -0
  1079. homeassistant/components/xbox/translations/sr-Latn.json +1 -0
  1080. homeassistant/components/xbox/translations/sv.json +47 -2
  1081. homeassistant/components/xiaomi_aqara/translations/sr-Latn.json +3 -0
  1082. homeassistant/components/xiaomi_ble/translations/mk.json +19 -0
  1083. homeassistant/components/xiaomi_miio/translations/bg.json +5 -0
  1084. homeassistant/components/xiaomi_miio/translations/mk.json +114 -0
  1085. homeassistant/components/xiaomi_miio/translations/pt.json +4 -2
  1086. homeassistant/components/xiaomi_miio/translations/ru.json +4 -2
  1087. homeassistant/components/xiaomi_miio/translations/sr-Latn.json +1 -1
  1088. homeassistant/components/xiaomi_miio/translations/sv.json +2 -1
  1089. homeassistant/components/yale/translations/sv.json +3 -0
  1090. homeassistant/components/yale_smart_alarm/translations/bg.json +4 -1
  1091. homeassistant/components/yale_smart_alarm/translations/sr-Latn.json +1 -1
  1092. homeassistant/components/yamaha_musiccast/translations/bg.json +5 -0
  1093. homeassistant/components/yamaha_musiccast/translations/sr-Latn.json +1 -1
  1094. homeassistant/components/yardian/translations/bg.json +7 -0
  1095. homeassistant/components/yardian/translations/es.json +16 -0
  1096. homeassistant/components/yardian/translations/mk.json +11 -0
  1097. homeassistant/components/yeelight/translations/bg.json +5 -0
  1098. homeassistant/components/yeelight/translations/mk.json +1 -0
  1099. homeassistant/components/yeelight/translations/sr-Latn.json +1 -1
  1100. homeassistant/components/yolink/translations/bg.json +4 -2
  1101. homeassistant/components/yolink/translations/mk.json +5 -0
  1102. homeassistant/components/yolink/translations/sr-Latn.json +2 -2
  1103. homeassistant/components/yolink/translations/sv.json +16 -0
  1104. homeassistant/components/zha/__init__.py +16 -1
  1105. homeassistant/components/zha/config_flow.py +237 -63
  1106. homeassistant/components/zha/manifest.json +1 -1
  1107. homeassistant/components/zha/radio_manager.py +3 -2
  1108. homeassistant/components/zha/strings.json +68 -15
  1109. homeassistant/components/zha/translations/bg.json +52 -3
  1110. homeassistant/components/zha/translations/ca.json +0 -3
  1111. homeassistant/components/zha/translations/cs.json +68 -15
  1112. homeassistant/components/zha/translations/da.json +0 -3
  1113. homeassistant/components/zha/translations/de.json +68 -15
  1114. homeassistant/components/zha/translations/el.json +0 -3
  1115. homeassistant/components/zha/translations/en-GB.json +68 -15
  1116. homeassistant/components/zha/translations/en.json +68 -15
  1117. homeassistant/components/zha/translations/es.json +119 -18
  1118. homeassistant/components/zha/translations/et.json +68 -15
  1119. homeassistant/components/zha/translations/fi.json +0 -3
  1120. homeassistant/components/zha/translations/fr.json +0 -18
  1121. homeassistant/components/zha/translations/ga.json +67 -2
  1122. homeassistant/components/zha/translations/gsw.json +0 -3
  1123. homeassistant/components/zha/translations/hu.json +0 -3
  1124. homeassistant/components/zha/translations/id.json +0 -3
  1125. homeassistant/components/zha/translations/it.json +67 -2
  1126. homeassistant/components/zha/translations/ja.json +0 -3
  1127. homeassistant/components/zha/translations/ko.json +0 -9
  1128. homeassistant/components/zha/translations/lt.json +68 -15
  1129. homeassistant/components/zha/translations/mk.json +39 -0
  1130. homeassistant/components/zha/translations/nb.json +0 -3
  1131. homeassistant/components/zha/translations/nl.json +0 -3
  1132. homeassistant/components/zha/translations/pl.json +25 -5
  1133. homeassistant/components/zha/translations/pt-BR.json +0 -3
  1134. homeassistant/components/zha/translations/pt.json +115 -16
  1135. homeassistant/components/zha/translations/ro.json +0 -3
  1136. homeassistant/components/zha/translations/ru.json +38 -16
  1137. homeassistant/components/zha/translations/sk.json +68 -15
  1138. homeassistant/components/zha/translations/sl.json +0 -9
  1139. homeassistant/components/zha/translations/sr-Latn.json +58 -10
  1140. homeassistant/components/zha/translations/sv.json +55 -3
  1141. homeassistant/components/zha/translations/tr.json +0 -3
  1142. homeassistant/components/zha/translations/uk.json +3 -3
  1143. homeassistant/components/zha/translations/vi.json +10 -0
  1144. homeassistant/components/zha/translations/zh-Hans.json +68 -15
  1145. homeassistant/components/zha/translations/zh-Hant.json +68 -15
  1146. homeassistant/components/zwave_js/translations/es.json +3 -0
  1147. homeassistant/components/zwave_js/translations/mk.json +20 -0
  1148. homeassistant/components/zwave_js/translations/pl.json +93 -0
  1149. homeassistant/components/zwave_js/translations/sr-Latn.json +6 -0
  1150. homeassistant/components/zwave_js/translations/sv.json +18 -2
  1151. homeassistant/config_entries.py +9 -7
  1152. homeassistant/const.py +1 -1
  1153. homeassistant/data_entry_flow.py +49 -35
  1154. homeassistant/generated/config_flows.py +1 -1
  1155. homeassistant/generated/integrations.json +2 -7
  1156. homeassistant/package_constraints.txt +3 -3
  1157. homeassistant/util/language.py +17 -7
  1158. {homeassistant-2025.11.0b2.dist-info → homeassistant-2025.11.2.dist-info}/METADATA +2 -2
  1159. {homeassistant-2025.11.0b2.dist-info → homeassistant-2025.11.2.dist-info}/RECORD +1168 -1048
  1160. homeassistant/components/enmax/__init__.py +0 -1
  1161. homeassistant/components/enmax/manifest.json +0 -6
  1162. homeassistant/components/sunricher_dali_center/const.py +0 -5
  1163. homeassistant/components/sunricher_dali_center/translations/it.json +0 -11
  1164. homeassistant/components/sunricher_dali_center/translations/sr-Latn.json +0 -11
  1165. /homeassistant/components/{sunricher_dali_center → sunricher_dali}/quality_scale.yaml +0 -0
  1166. /homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/el.json +0 -0
  1167. /homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/he.json +0 -0
  1168. /homeassistant/components/{sunricher_dali_center → sunricher_dali}/translations/nl.json +0 -0
  1169. {homeassistant-2025.11.0b2.dist-info → homeassistant-2025.11.2.dist-info}/WHEEL +0 -0
  1170. {homeassistant-2025.11.0b2.dist-info → homeassistant-2025.11.2.dist-info}/entry_points.txt +0 -0
  1171. {homeassistant-2025.11.0b2.dist-info → homeassistant-2025.11.2.dist-info}/licenses/LICENSE.md +0 -0
  1172. {homeassistant-2025.11.0b2.dist-info → homeassistant-2025.11.2.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  1173. {homeassistant-2025.11.0b2.dist-info → homeassistant-2025.11.2.dist-info}/top_level.txt +0 -0
@@ -3,18 +3,19 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from abc import abstractmethod
6
+ import asyncio
6
7
  import collections
7
8
  from contextlib import suppress
8
9
  from enum import StrEnum
9
10
  import json
11
+ import logging
12
+ import os
10
13
  from typing import Any
11
14
 
12
- import serial.tools.list_ports
13
- from serial.tools.list_ports_common import ListPortInfo
14
15
  import voluptuous as vol
15
16
  from zha.application.const import RadioType
16
17
  import zigpy.backups
17
- from zigpy.config import CONF_DEVICE, CONF_DEVICE_PATH
18
+ from zigpy.config import CONF_DEVICE, CONF_DEVICE_PATH, CONF_NWK_TX_POWER
18
19
  from zigpy.exceptions import CannotWriteNetworkSettings, DestructiveWriteNetworkSettings
19
20
 
20
21
  from homeassistant.components import onboarding, usb
@@ -25,6 +26,7 @@ from homeassistant.components.homeassistant_hardware.firmware_config_flow import
25
26
  ZigbeeFlowStrategy,
26
27
  )
27
28
  from homeassistant.components.homeassistant_yellow import hardware as yellow_hardware
29
+ from homeassistant.components.usb import USBDevice, scan_serial_ports
28
30
  from homeassistant.config_entries import (
29
31
  SOURCE_IGNORE,
30
32
  SOURCE_ZEROCONF,
@@ -56,6 +58,8 @@ from .radio_manager import (
56
58
  ZhaRadioManager,
57
59
  )
58
60
 
61
+ _LOGGER = logging.getLogger(__name__)
62
+
59
63
  CONF_MANUAL_PATH = "Enter Manually"
60
64
  DECONZ_DOMAIN = "deconz"
61
65
 
@@ -124,10 +128,10 @@ def _format_backup_choice(
124
128
  return f"{dt_util.as_local(backup.backup_time).strftime('%c')} ({identifier})"
125
129
 
126
130
 
127
- async def list_serial_ports(hass: HomeAssistant) -> list[ListPortInfo]:
131
+ async def list_serial_ports(hass: HomeAssistant) -> list[USBDevice]:
128
132
  """List all serial ports, including the Yellow radio and the multi-PAN addon."""
129
- ports: list[ListPortInfo] = []
130
- ports.extend(await hass.async_add_executor_job(serial.tools.list_ports.comports))
133
+ ports: list[USBDevice] = []
134
+ ports.extend(await hass.async_add_executor_job(scan_serial_ports))
131
135
 
132
136
  # Add useful info to the Yellow's serial port selection screen
133
137
  try:
@@ -137,9 +141,14 @@ async def list_serial_ports(hass: HomeAssistant) -> list[ListPortInfo]:
137
141
  else:
138
142
  # PySerial does not properly handle the Yellow's serial port with the CM5
139
143
  # so we manually include it
140
- port = ListPortInfo(device="/dev/ttyAMA1", skip_link_detection=True)
141
- port.description = "Yellow Zigbee module"
142
- port.manufacturer = "Nabu Casa"
144
+ port = USBDevice(
145
+ device="/dev/ttyAMA1",
146
+ vid="ffff", # This is technically not a USB device
147
+ pid="ffff",
148
+ serial_number=None,
149
+ manufacturer="Nabu Casa",
150
+ description="Yellow Zigbee module",
151
+ )
143
152
 
144
153
  ports = [p for p in ports if not p.device.startswith("/dev/ttyAMA")]
145
154
  ports.insert(0, port)
@@ -156,13 +165,15 @@ async def list_serial_ports(hass: HomeAssistant) -> list[ListPortInfo]:
156
165
  addon_info = None
157
166
 
158
167
  if addon_info is not None and addon_info.state != AddonState.NOT_INSTALLED:
159
- addon_port = ListPortInfo(
168
+ addon_port = USBDevice(
160
169
  device=silabs_multiprotocol_addon.get_zigbee_socket(),
161
- skip_link_detection=True,
170
+ vid="ffff", # This is technically not a USB device
171
+ pid="ffff",
172
+ serial_number=None,
173
+ manufacturer="Nabu Casa",
174
+ description="Silicon Labs Multiprotocol add-on",
162
175
  )
163
176
 
164
- addon_port.description = "Multiprotocol add-on"
165
- addon_port.manufacturer = "Nabu Casa"
166
177
  ports.append(addon_port)
167
178
 
168
179
  return ports
@@ -172,6 +183,7 @@ class BaseZhaFlow(ConfigEntryBaseFlow):
172
183
  """Mixin for common ZHA flow steps and forms."""
173
184
 
174
185
  _flow_strategy: ZigbeeFlowStrategy | None = None
186
+ _overwrite_ieee_during_restore: bool = False
175
187
  _hass: HomeAssistant
176
188
  _title: str
177
189
 
@@ -181,6 +193,14 @@ class BaseZhaFlow(ConfigEntryBaseFlow):
181
193
 
182
194
  self._hass = None # type: ignore[assignment]
183
195
  self._radio_mgr = ZhaRadioManager()
196
+ self._restore_backup_task: asyncio.Task[None] | None = None
197
+ self._reset_old_radio_task: asyncio.Task[None] | None = None
198
+ self._form_network_task: asyncio.Task[None] | None = None
199
+ self._extra_network_config: dict[str, Any] = {}
200
+
201
+ # Progress flow steps cannot abort so we need to store the abort reason and then
202
+ # re-raise it in a dedicated step
203
+ self._progress_error: AbortFlow | None = None
184
204
 
185
205
  @property
186
206
  def hass(self) -> HomeAssistant:
@@ -213,13 +233,27 @@ class BaseZhaFlow(ConfigEntryBaseFlow):
213
233
  async def _async_create_radio_entry(self) -> ConfigFlowResult:
214
234
  """Create a config entry with the current flow state."""
215
235
 
236
+ async def async_step_progress_failed(
237
+ self, user_input: dict[str, Any] | None = None
238
+ ) -> ConfigFlowResult:
239
+ """Abort when progress step failed."""
240
+ assert self._progress_error is not None
241
+ raise self._progress_error
242
+
216
243
  async def async_step_choose_serial_port(
217
244
  self, user_input: dict[str, Any] | None = None
218
245
  ) -> ConfigFlowResult:
219
246
  """Choose a serial port."""
220
247
  ports = await list_serial_ports(self.hass)
248
+
249
+ # The full `/dev/serial/by-id/` path is too verbose to show
250
+ resolved_paths = {
251
+ p.device: await self.hass.async_add_executor_job(os.path.realpath, p.device)
252
+ for p in ports
253
+ }
254
+
221
255
  list_of_ports = [
222
- f"{p}{', s/n: ' + p.serial_number if p.serial_number else ''}"
256
+ f"{resolved_paths[p.device]} - {p.description}{', s/n: ' + p.serial_number if p.serial_number else ''}"
223
257
  + (f" - {p.manufacturer}" if p.manufacturer else "")
224
258
  for p in ports
225
259
  ]
@@ -446,6 +480,22 @@ class BaseZhaFlow(ConfigEntryBaseFlow):
446
480
  self._radio_mgr.chosen_backup = self._radio_mgr.backups[0]
447
481
  return await self.async_step_maybe_reset_old_radio()
448
482
 
483
+ async def _async_reset_old_radio(self, config_entry: ConfigEntry) -> None:
484
+ """Do the work of resetting the old radio."""
485
+
486
+ # Unload ZHA before connecting to the old adapter
487
+ with suppress(OperationNotAllowed):
488
+ await self.hass.config_entries.async_unload(config_entry.entry_id)
489
+
490
+ # Create a radio manager to connect to the old stick to reset it
491
+ temp_radio_mgr = ZhaRadioManager()
492
+ temp_radio_mgr.hass = self.hass
493
+ temp_radio_mgr.device_path = config_entry.data[CONF_DEVICE][CONF_DEVICE_PATH]
494
+ temp_radio_mgr.device_settings = config_entry.data[CONF_DEVICE]
495
+ temp_radio_mgr.radio_type = RadioType[config_entry.data[CONF_RADIO_TYPE]]
496
+
497
+ await temp_radio_mgr.async_reset_adapter()
498
+
449
499
  async def async_step_maybe_reset_old_radio(
450
500
  self, user_input: dict[str, Any] | None = None
451
501
  ) -> ConfigFlowResult:
@@ -456,26 +506,93 @@ class BaseZhaFlow(ConfigEntryBaseFlow):
456
506
  DOMAIN, include_ignore=False
457
507
  )
458
508
 
459
- if config_entries:
509
+ if not config_entries:
510
+ return await self.async_step_restore_backup()
511
+
512
+ if self._reset_old_radio_task is None:
513
+ # This will only ever be called during migration, so there must be an
514
+ # existing config entry
460
515
  assert len(config_entries) == 1
461
516
  config_entry = config_entries[0]
462
517
 
463
- # Unload ZHA before connecting to the old adapter
464
- with suppress(OperationNotAllowed):
465
- await self.hass.config_entries.async_unload(config_entry.entry_id)
518
+ self._reset_old_radio_task = self.hass.async_create_task(
519
+ self._async_reset_old_radio(config_entry),
520
+ "Reset old radio",
521
+ )
466
522
 
467
- # Create a radio manager to connect to the old stick to reset it
468
- temp_radio_mgr = ZhaRadioManager()
469
- temp_radio_mgr.hass = self.hass
470
- temp_radio_mgr.device_path = config_entry.data[CONF_DEVICE][
471
- CONF_DEVICE_PATH
472
- ]
473
- temp_radio_mgr.device_settings = config_entry.data[CONF_DEVICE]
474
- temp_radio_mgr.radio_type = RadioType[config_entry.data[CONF_RADIO_TYPE]]
523
+ if not self._reset_old_radio_task.done():
524
+ return self.async_show_progress(
525
+ step_id="maybe_reset_old_radio",
526
+ progress_action="maybe_reset_old_radio",
527
+ progress_task=self._reset_old_radio_task,
528
+ )
529
+
530
+ try:
531
+ await self._reset_old_radio_task
532
+ except HomeAssistantError:
533
+ _LOGGER.exception("Failed to reset old radio during migration")
534
+ # Old adapter not found or cannot connect, show prompt to plug back in
535
+ return self.async_show_progress_done(next_step_id="plug_in_old_radio")
536
+ finally:
537
+ self._reset_old_radio_task = None
538
+
539
+ return self.async_show_progress_done(next_step_id="restore_backup")
540
+
541
+ async def async_step_plug_in_old_radio(
542
+ self, user_input: dict[str, Any] | None = None
543
+ ) -> ConfigFlowResult:
544
+ """Prompt user to plug in the old radio if connection fails."""
545
+ config_entries = self.hass.config_entries.async_entries(
546
+ DOMAIN, include_ignore=False
547
+ )
548
+
549
+ # Unless the user removes the config entry whilst we try to reset the old radio
550
+ # for a few seconds and then also unplugs it, we will basically never hit this
551
+ if not config_entries:
552
+ return await self.async_step_restore_backup()
553
+
554
+ config_entry = config_entries[0]
555
+ old_device_path = config_entry.data[CONF_DEVICE][CONF_DEVICE_PATH]
556
+
557
+ return self.async_show_menu(
558
+ step_id="plug_in_old_radio",
559
+ menu_options=["retry_old_radio", "skip_reset_old_radio"],
560
+ description_placeholders={"device_path": old_device_path},
561
+ )
562
+
563
+ async def async_step_retry_old_radio(
564
+ self, user_input: dict[str, Any] | None = None
565
+ ) -> ConfigFlowResult:
566
+ """Retry connecting to the old radio."""
567
+ return await self.async_step_maybe_reset_old_radio()
568
+
569
+ async def async_step_skip_reset_old_radio(
570
+ self, user_input: dict[str, Any] | None = None
571
+ ) -> ConfigFlowResult:
572
+ """Skip resetting the old radio and continue with migration."""
573
+ return await self.async_step_restore_backup()
574
+
575
+ async def async_step_pre_plug_in_new_radio(
576
+ self, user_input: dict[str, Any] | None = None
577
+ ) -> ConfigFlowResult:
578
+ """Strip user_input before showing "plug in new radio" form."""
579
+ # This step is necessary to prevent `user_input` from being passed through
580
+ return await self.async_step_plug_in_new_radio()
581
+
582
+ async def async_step_plug_in_new_radio(
583
+ self, user_input: dict[str, Any] | None = None
584
+ ) -> ConfigFlowResult:
585
+ """Prompt user to plug in the new radio if connection fails."""
586
+ if user_input is not None:
587
+ # User confirmed, retry now
588
+ return await self.async_step_restore_backup()
475
589
 
476
- await temp_radio_mgr.async_reset_adapter()
590
+ assert self._radio_mgr.device_path is not None
477
591
 
478
- return await self.async_step_maybe_confirm_ezsp_restore()
592
+ return self.async_show_form(
593
+ step_id="plug_in_new_radio",
594
+ description_placeholders={"device_path": self._radio_mgr.device_path},
595
+ )
479
596
 
480
597
  async def async_step_migration_strategy_advanced(
481
598
  self, user_input: dict[str, Any] | None = None
@@ -539,14 +656,35 @@ class BaseZhaFlow(ConfigEntryBaseFlow):
539
656
  # This step exists only for translations, it does nothing new
540
657
  return await self.async_step_form_new_network(user_input)
541
658
 
659
+ async def _async_form_new_network(self) -> None:
660
+ """Do the work of forming a new network."""
661
+ await self._radio_mgr.async_form_network(config=self._extra_network_config)
662
+ # Load the newly formed network settings to get the network info
663
+ await self._radio_mgr.async_load_network_settings()
664
+
542
665
  async def async_step_form_new_network(
543
666
  self, user_input: dict[str, Any] | None = None
544
667
  ) -> ConfigFlowResult:
545
668
  """Form a brand-new network."""
546
- await self._radio_mgr.async_form_network()
547
- # Load the newly formed network settings to get the network info
548
- await self._radio_mgr.async_load_network_settings()
549
- return await self._async_create_radio_entry()
669
+ if self._form_network_task is None:
670
+ self._form_network_task = self.hass.async_create_task(
671
+ self._async_form_new_network(),
672
+ "Form new network",
673
+ )
674
+
675
+ if not self._form_network_task.done():
676
+ return self.async_show_progress(
677
+ step_id="form_new_network",
678
+ progress_action="form_new_network",
679
+ progress_task=self._form_network_task,
680
+ )
681
+
682
+ try:
683
+ await self._form_network_task
684
+ finally:
685
+ self._form_network_task = None
686
+
687
+ return self.async_show_progress_done(next_step_id="create_entry")
550
688
 
551
689
  def _parse_uploaded_backup(
552
690
  self, uploaded_file_id: str
@@ -624,47 +762,80 @@ class BaseZhaFlow(ConfigEntryBaseFlow):
624
762
  ),
625
763
  )
626
764
 
627
- async def async_step_maybe_confirm_ezsp_restore(
765
+ async def async_step_restore_backup(
628
766
  self, user_input: dict[str, Any] | None = None
629
767
  ) -> ConfigFlowResult:
630
- """Confirm restore for EZSP radios that require permanent IEEE writes."""
631
- if user_input is not None:
632
- if user_input[OVERWRITE_COORDINATOR_IEEE]:
633
- # On confirmation, overwrite destructively
634
- try:
635
- await self._radio_mgr.restore_backup(overwrite_ieee=True)
636
- except CannotWriteNetworkSettings as exc:
637
- return self.async_abort(
638
- reason="cannot_restore_backup",
639
- description_placeholders={"error": str(exc)},
640
- )
641
-
642
- return await self._async_create_radio_entry()
768
+ """Restore network backup to new radio."""
769
+ if self._restore_backup_task is None:
770
+ self._restore_backup_task = self.hass.async_create_task(
771
+ self._radio_mgr.restore_backup(
772
+ overwrite_ieee=self._overwrite_ieee_during_restore
773
+ ),
774
+ "Restore backup",
775
+ )
643
776
 
644
- # On rejection, explain why we can't restore
645
- return self.async_abort(reason="cannot_restore_backup_no_ieee_confirm")
777
+ if not self._restore_backup_task.done():
778
+ return self.async_show_progress(
779
+ step_id="restore_backup",
780
+ progress_action="restore_backup",
781
+ progress_task=self._restore_backup_task,
782
+ )
646
783
 
647
- # On first attempt, just try to restore nondestructively
648
784
  try:
649
- await self._radio_mgr.restore_backup()
785
+ await self._restore_backup_task
650
786
  except DestructiveWriteNetworkSettings:
651
- # Restore cannot happen automatically, we need to ask for permission
652
- pass
787
+ # If we cannot restore without overwriting the IEEE, ask for confirmation
788
+ return self.async_show_progress_done(
789
+ next_step_id="pre_confirm_ezsp_ieee_overwrite"
790
+ )
791
+ except HomeAssistantError:
792
+ _LOGGER.exception("Failed to restore network backup to new radio")
793
+ # User unplugged the new adapter, allow retry
794
+ return self.async_show_progress_done(next_step_id="pre_plug_in_new_radio")
653
795
  except CannotWriteNetworkSettings as exc:
654
- return self.async_abort(
796
+ self._progress_error = AbortFlow(
655
797
  reason="cannot_restore_backup",
656
798
  description_placeholders={"error": str(exc)},
657
799
  )
658
- else:
659
- return await self._async_create_radio_entry()
800
+ return self.async_show_progress_done(next_step_id="progress_failed")
801
+ finally:
802
+ self._restore_backup_task = None
660
803
 
661
- # If it fails, show the form
662
- return self.async_show_form(
663
- step_id="maybe_confirm_ezsp_restore",
664
- data_schema=vol.Schema(
665
- {vol.Required(OVERWRITE_COORDINATOR_IEEE, default=True): bool}
666
- ),
667
- )
804
+ # Otherwise, proceed to entry creation
805
+ return self.async_show_progress_done(next_step_id="create_entry")
806
+
807
+ async def async_step_pre_confirm_ezsp_ieee_overwrite(
808
+ self, user_input: dict[str, Any] | None = None
809
+ ) -> ConfigFlowResult:
810
+ """Strip user_input before showing confirmation form."""
811
+ # This step is necessary to prevent `user_input` from being passed through
812
+ return await self.async_step_confirm_ezsp_ieee_overwrite()
813
+
814
+ async def async_step_confirm_ezsp_ieee_overwrite(
815
+ self, user_input: dict[str, Any] | None = None
816
+ ) -> ConfigFlowResult:
817
+ """Show confirmation form for EZSP IEEE address overwrite."""
818
+ if user_input is None:
819
+ return self.async_show_form(
820
+ step_id="confirm_ezsp_ieee_overwrite",
821
+ data_schema=vol.Schema(
822
+ {vol.Required(OVERWRITE_COORDINATOR_IEEE, default=True): bool}
823
+ ),
824
+ )
825
+
826
+ if not user_input[OVERWRITE_COORDINATOR_IEEE]:
827
+ return self.async_abort(reason="cannot_restore_backup_no_ieee_confirm")
828
+
829
+ self._overwrite_ieee_during_restore = True
830
+ return await self.async_step_restore_backup()
831
+
832
+ async def async_step_create_entry(
833
+ self, user_input: dict[str, Any] | None = None
834
+ ) -> ConfigFlowResult:
835
+ """Create the config entry after successful setup/migration."""
836
+
837
+ # This step only exists so that we can create entries from other steps
838
+ return await self._async_create_radio_entry()
668
839
 
669
840
 
670
841
  class ZhaConfigFlowHandler(BaseZhaFlow, ConfigFlow, domain=DOMAIN):
@@ -897,6 +1068,9 @@ class ZhaConfigFlowHandler(BaseZhaFlow, ConfigFlow, domain=DOMAIN):
897
1068
  device_path = device_settings[CONF_DEVICE_PATH]
898
1069
  self._flow_strategy = discovery_data.get("flow_strategy")
899
1070
 
1071
+ if "tx_power" in discovery_data:
1072
+ self._extra_network_config[CONF_NWK_TX_POWER] = discovery_data["tx_power"]
1073
+
900
1074
  await self._set_unique_id_and_update_ignored_flow(
901
1075
  unique_id=f"{name}_{radio_type.name}_{device_path}",
902
1076
  device_path=device_path,
@@ -1018,7 +1192,7 @@ class ZhaOptionsFlowHandler(BaseZhaFlow, OptionsFlow):
1018
1192
 
1019
1193
  # If we are reconfiguring, the old radio will not be available
1020
1194
  if self._migration_intent is OptionsMigrationIntent.RECONFIGURE:
1021
- return await self.async_step_maybe_confirm_ezsp_restore()
1195
+ return await self.async_step_restore_backup()
1022
1196
 
1023
1197
  return await super().async_step_maybe_reset_old_radio(user_input)
1024
1198
 
@@ -21,7 +21,7 @@
21
21
  "zha",
22
22
  "universal_silabs_flasher"
23
23
  ],
24
- "requirements": ["zha==0.0.75"],
24
+ "requirements": ["zha==0.0.79"],
25
25
  "usb": [
26
26
  {
27
27
  "description": "*2652*",
@@ -78,6 +78,7 @@ HARDWARE_DISCOVERY_SCHEMA = vol.Schema(
78
78
  vol.Required("port"): DEVICE_SCHEMA,
79
79
  vol.Required("radio_type"): str,
80
80
  vol.Optional("flow_strategy"): vol.All(str, vol.Coerce(ZigbeeFlowStrategy)),
81
+ vol.Optional("tx_power"): vol.All(vol.Coerce(int), vol.Range(min=0, max=10)),
81
82
  }
82
83
  )
83
84
 
@@ -322,7 +323,7 @@ class ZhaRadioManager:
322
323
 
323
324
  return backup
324
325
 
325
- async def async_form_network(self) -> None:
326
+ async def async_form_network(self, config: dict[str, Any] | None) -> None:
326
327
  """Form a brand-new network."""
327
328
 
328
329
  # When forming a new network, we delete the ZHA database to prevent old devices
@@ -331,7 +332,7 @@ class ZhaRadioManager:
331
332
  await self.hass.async_add_executor_job(os.remove, self.zigpy_database_path)
332
333
 
333
334
  async with self.create_zigpy_app() as app:
334
- await app.form_network()
335
+ await app.form_network(config=config)
335
336
 
336
337
  async def async_reset_adapter(self) -> None:
337
338
  """Reset the current adapter."""
@@ -16,6 +16,11 @@
16
16
  "invalid_backup_json": "Invalid backup JSON"
17
17
  },
18
18
  "flow_title": "{name}",
19
+ "progress": {
20
+ "form_new_network": "Forming a new Zigbee network.\n\nWe scan for a clear network channel as part of this process, this can take a minute.",
21
+ "maybe_reset_old_radio": "Resetting old adapter.\n\nYour old adapter has been backed up and is being factory reset.",
22
+ "restore_backup": "Restoring network settings to new adapter.\n\nThis will take a minute."
23
+ },
19
24
  "step": {
20
25
  "choose_automatic_backup": {
21
26
  "data": {
@@ -76,8 +81,15 @@
76
81
  "confirm": {
77
82
  "description": "Do you want to set up {name}?"
78
83
  },
79
- "confirm_hardware": {
80
- "description": "Do you want to set up {name}?"
84
+ "confirm_ezsp_ieee_overwrite": {
85
+ "data": {
86
+ "overwrite_coordinator_ieee": "Permanently replace the adapter IEEE address"
87
+ },
88
+ "description": "Your backup has a different IEEE address than your adapter. For your network to function properly, the IEEE address of your adapter should also be changed.\n\nThis is a permanent operation.",
89
+ "title": "Overwrite adapter IEEE address"
90
+ },
91
+ "form_new_network": {
92
+ "title": "Forming new network"
81
93
  },
82
94
  "manual_pick_radio_type": {
83
95
  "data": {
@@ -100,17 +112,28 @@
100
112
  "description": "ZHA was not able to automatically detect serial port settings for your adapter. This usually is an issue with the firmware or permissions.\n\nIf you are using firmware with nonstandard settings, enter the serial port settings",
101
113
  "title": "Serial port settings"
102
114
  },
103
- "maybe_confirm_ezsp_restore": {
104
- "data": {
105
- "overwrite_coordinator_ieee": "Permanently replace the adapter IEEE address"
106
- },
107
- "description": "Your backup has a different IEEE address than your adapter. For your network to function properly, the IEEE address of your adapter should also be changed.\n\nThis is a permanent operation.",
108
- "title": "Overwrite adapter IEEE address"
109
- },
110
115
  "maybe_reset_old_radio": {
111
- "description": "A backup was created earlier and your old adapter is being reset as part of the migration.",
112
116
  "title": "Resetting old adapter"
113
117
  },
118
+ "plug_in_new_radio": {
119
+ "description": "Your new adapter at `{device_path}` was not found.\nPlease plug it in and click Submit to continue.",
120
+ "title": "New adapter not found"
121
+ },
122
+ "plug_in_old_radio": {
123
+ "description": "Your old adapter at `{device_path}` was not found. You can retry after plugging it back in, or skip resetting the old adapter.\n\n**Warning:** If you skip resetting the old adapter, ensure it remains permanently disconnected. Plugging it back in later will cause network issues.",
124
+ "menu_option_descriptions": {
125
+ "retry_old_radio": "Retry connecting to the old adapter to reset it as part of the migration.",
126
+ "skip_reset_old_radio": "Skip resetting the old adapter and continue with the migration."
127
+ },
128
+ "menu_options": {
129
+ "retry_old_radio": "Retry",
130
+ "skip_reset_old_radio": "Skip reset"
131
+ },
132
+ "title": "Old adapter not found"
133
+ },
134
+ "restore_backup": {
135
+ "title": "Restoring network to new adapter"
136
+ },
114
137
  "upload_manual_backup": {
115
138
  "data": {
116
139
  "uploaded_backup_file": "Upload a file"
@@ -1869,6 +1892,11 @@
1869
1892
  "invalid_backup_json": "[%key:component::zha::config::error::invalid_backup_json%]"
1870
1893
  },
1871
1894
  "flow_title": "[%key:component::zha::config::flow_title%]",
1895
+ "progress": {
1896
+ "form_new_network": "[%key:component::zha::config::progress::form_new_network%]",
1897
+ "maybe_reset_old_radio": "[%key:component::zha::config::progress::maybe_reset_old_radio%]",
1898
+ "restore_backup": "[%key:component::zha::config::progress::restore_backup%]"
1899
+ },
1872
1900
  "step": {
1873
1901
  "choose_automatic_backup": {
1874
1902
  "data": {
@@ -1914,6 +1942,16 @@
1914
1942
  "description": "[%key:component::zha::config::step::choose_serial_port::description%]",
1915
1943
  "title": "[%key:component::zha::config::step::choose_serial_port::title%]"
1916
1944
  },
1945
+ "confirm_ezsp_ieee_overwrite": {
1946
+ "data": {
1947
+ "overwrite_coordinator_ieee": "[%key:component::zha::config::step::confirm_ezsp_ieee_overwrite::data::overwrite_coordinator_ieee%]"
1948
+ },
1949
+ "description": "[%key:component::zha::config::step::confirm_ezsp_ieee_overwrite::description%]",
1950
+ "title": "[%key:component::zha::config::step::confirm_ezsp_ieee_overwrite::title%]"
1951
+ },
1952
+ "form_new_network": {
1953
+ "title": "[%key:component::zha::config::step::form_new_network::title%]"
1954
+ },
1917
1955
  "init": {
1918
1956
  "description": "A backup will be performed and ZHA will be stopped. Do you wish to continue?",
1919
1957
  "title": "Reconfigure ZHA"
@@ -1938,12 +1976,24 @@
1938
1976
  "description": "[%key:component::zha::config::step::manual_port_config::description%]",
1939
1977
  "title": "[%key:component::zha::config::step::manual_port_config::title%]"
1940
1978
  },
1941
- "maybe_confirm_ezsp_restore": {
1942
- "data": {
1943
- "overwrite_coordinator_ieee": "[%key:component::zha::config::step::maybe_confirm_ezsp_restore::data::overwrite_coordinator_ieee%]"
1979
+ "maybe_reset_old_radio": {
1980
+ "title": "[%key:component::zha::config::step::maybe_reset_old_radio::title%]"
1981
+ },
1982
+ "plug_in_new_radio": {
1983
+ "description": "[%key:component::zha::config::step::plug_in_new_radio::description%]",
1984
+ "title": "[%key:component::zha::config::step::plug_in_new_radio::title%]"
1985
+ },
1986
+ "plug_in_old_radio": {
1987
+ "description": "[%key:component::zha::config::step::plug_in_old_radio::description%]",
1988
+ "menu_option_descriptions": {
1989
+ "retry_old_radio": "[%key:component::zha::config::step::plug_in_old_radio::menu_option_descriptions::retry_old_radio%]",
1990
+ "skip_reset_old_radio": "[%key:component::zha::config::step::plug_in_old_radio::menu_option_descriptions::skip_reset_old_radio%]"
1991
+ },
1992
+ "menu_options": {
1993
+ "retry_old_radio": "[%key:component::zha::config::step::plug_in_old_radio::menu_options::retry_old_radio%]",
1994
+ "skip_reset_old_radio": "[%key:component::zha::config::step::plug_in_old_radio::menu_options::skip_reset_old_radio%]"
1944
1995
  },
1945
- "description": "[%key:component::zha::config::step::maybe_confirm_ezsp_restore::description%]",
1946
- "title": "[%key:component::zha::config::step::maybe_confirm_ezsp_restore::title%]"
1996
+ "title": "[%key:component::zha::config::step::plug_in_old_radio::title%]"
1947
1997
  },
1948
1998
  "prompt_migrate_or_reconfigure": {
1949
1999
  "description": "Are you migrating to a new adapter or re-configuring the current adapter?",
@@ -1957,6 +2007,9 @@
1957
2007
  },
1958
2008
  "title": "Migrate or re-configure"
1959
2009
  },
2010
+ "restore_backup": {
2011
+ "title": "[%key:component::zha::config::step::restore_backup::title%]"
2012
+ },
1960
2013
  "upload_manual_backup": {
1961
2014
  "data": {
1962
2015
  "uploaded_backup_file": "[%key:component::zha::config::step::upload_manual_backup::data::uploaded_backup_file%]"