homeassistant 2025.8.0b1__py3-none-any.whl → 2025.8.0b3__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 (782) hide show
  1. homeassistant/components/adguard/translations/ga.json +11 -0
  2. homeassistant/components/airgradient/translations/ga.json +27 -0
  3. homeassistant/components/airos/config_flow.py +9 -9
  4. homeassistant/components/airos/coordinator.py +11 -7
  5. homeassistant/components/airos/diagnostics.py +33 -0
  6. homeassistant/components/airos/manifest.json +1 -1
  7. homeassistant/components/airos/quality_scale.yaml +1 -1
  8. homeassistant/components/airos/sensor.py +0 -7
  9. homeassistant/components/airos/strings.json +0 -7
  10. homeassistant/components/airos/translations/bg.json +0 -7
  11. homeassistant/components/airos/translations/cs.json +0 -7
  12. homeassistant/components/airos/translations/de.json +0 -7
  13. homeassistant/components/airos/translations/en-GB.json +80 -0
  14. homeassistant/components/airos/translations/en.json +0 -7
  15. homeassistant/components/airos/translations/es.json +0 -7
  16. homeassistant/components/airos/translations/et.json +0 -7
  17. homeassistant/components/airos/translations/ga.json +0 -7
  18. homeassistant/components/airos/translations/he.json +29 -0
  19. homeassistant/components/airos/translations/nl.json +10 -0
  20. homeassistant/components/airos/translations/sk.json +51 -0
  21. homeassistant/components/airos/translations/sv.json +29 -0
  22. homeassistant/components/airos/translations/zh-Hans.json +0 -7
  23. homeassistant/components/airos/translations/zh-Hant.json +0 -7
  24. homeassistant/components/airq/translations/ga.json +2 -1
  25. homeassistant/components/airthings/__init__.py +2 -5
  26. homeassistant/components/airthings/coordinator.py +10 -1
  27. homeassistant/components/airtouch4/translations/ga.json +11 -0
  28. homeassistant/components/airtouch5/translations/ga.json +16 -0
  29. homeassistant/components/airvisual_pro/translations/ga.json +11 -0
  30. homeassistant/components/airzone/translations/ga.json +6 -0
  31. homeassistant/components/airzone_cloud/translations/ga.json +4 -0
  32. homeassistant/components/alarmdecoder/translations/ga.json +10 -0
  33. homeassistant/components/alert/translations/he.json +1 -1
  34. homeassistant/components/alexa_devices/translations/de.json +34 -34
  35. homeassistant/components/alexa_devices/translations/en-GB.json +522 -1
  36. homeassistant/components/alexa_devices/translations/es.json +192 -1
  37. homeassistant/components/alexa_devices/translations/et.json +522 -1
  38. homeassistant/components/alexa_devices/translations/ga.json +81 -1
  39. homeassistant/components/alexa_devices/translations/nl.json +9 -0
  40. homeassistant/components/alexa_devices/translations/sk.json +134 -1
  41. homeassistant/components/alexa_devices/translations/sv.json +27 -1
  42. homeassistant/components/alexa_devices/translations/zh-Hans.json +179 -5
  43. homeassistant/components/ambient_network/translations/ga.json +84 -0
  44. homeassistant/components/ambient_station/translations/ga.json +12 -0
  45. homeassistant/components/analytics/analytics.py +0 -1
  46. homeassistant/components/analytics_insights/translations/ga.json +10 -4
  47. homeassistant/components/androidtv_remote/translations/ga.json +1 -0
  48. homeassistant/components/androidtv_remote/translations/sl.json +2 -1
  49. homeassistant/components/anova/translations/ga.json +5 -1
  50. homeassistant/components/anova/translations/he.json +1 -1
  51. homeassistant/components/anthropic/translations/ga.json +2 -1
  52. homeassistant/components/aosmith/translations/ga.json +19 -0
  53. homeassistant/components/apcupsd/translations/ga.json +205 -0
  54. homeassistant/components/apple_tv/translations/ga.json +10 -0
  55. homeassistant/components/aprilaire/translations/ga.json +17 -0
  56. homeassistant/components/aprilaire/translations/he.json +4 -4
  57. homeassistant/components/aranet/translations/ga.json +5 -0
  58. homeassistant/components/arve/translations/ga.json +20 -0
  59. homeassistant/components/assist_satellite/translations/he.json +1 -1
  60. homeassistant/components/asuswrt/router.py +12 -3
  61. homeassistant/components/august/manifest.json +1 -1
  62. homeassistant/components/aurora_abb_powerone/translations/ga.json +24 -0
  63. homeassistant/components/axis/translations/ga.json +4 -0
  64. homeassistant/components/azure_devops/translations/ga.json +3 -0
  65. homeassistant/components/azure_storage/translations/ga.json +3 -0
  66. homeassistant/components/backup/translations/he.json +1 -1
  67. homeassistant/components/balboa/translations/ga.json +28 -0
  68. homeassistant/components/binary_sensor/translations/ga.json +8 -0
  69. homeassistant/components/blink/translations/ga.json +24 -0
  70. homeassistant/components/blue_current/translations/ga.json +23 -0
  71. homeassistant/components/bluemaestro/translations/ga.json +9 -0
  72. homeassistant/components/bluetooth/manifest.json +1 -1
  73. homeassistant/components/bmw_connected_drive/translations/ga.json +7 -0
  74. homeassistant/components/bond/translations/ga.json +11 -0
  75. homeassistant/components/bosch_alarm/translations/ga.json +2 -1
  76. homeassistant/components/bosch_shc/translations/ga.json +11 -0
  77. homeassistant/components/bring/translations/ga.json +52 -0
  78. homeassistant/components/broadlink/updater.py +1 -0
  79. homeassistant/components/brother/translations/ga.json +3 -0
  80. homeassistant/components/bryant_evolution/translations/ga.json +3 -0
  81. homeassistant/components/bsblan/translations/ga.json +6 -0
  82. homeassistant/components/bthome/translations/ga.json +3 -1
  83. homeassistant/components/caldav/manifest.json +1 -1
  84. homeassistant/components/calendar/translations/ga.json +27 -0
  85. homeassistant/components/cambridge_audio/translations/ga.json +1 -0
  86. homeassistant/components/camera/translations/he.json +1 -1
  87. homeassistant/components/climate/translations/ga.json +12 -0
  88. homeassistant/components/climate/translations/he.json +1 -1
  89. homeassistant/components/cloud/manifest.json +1 -1
  90. homeassistant/components/cloud/translations/ga.json +34 -0
  91. homeassistant/components/co2signal/translations/ga.json +32 -0
  92. homeassistant/components/comelit/translations/ga.json +20 -0
  93. homeassistant/components/conversation/translations/ga.json +7 -0
  94. homeassistant/components/cookidoo/translations/ga.json +4 -0
  95. homeassistant/components/datadog/translations/sv.json +28 -0
  96. homeassistant/components/deconz/translations/ga.json +11 -0
  97. homeassistant/components/deluge/translations/ga.json +9 -0
  98. homeassistant/components/deluge/translations/he.json +1 -1
  99. homeassistant/components/demo/translations/ga.json +12 -0
  100. homeassistant/components/denonavr/manifest.json +1 -1
  101. homeassistant/components/devialet/translations/ga.json +16 -0
  102. homeassistant/components/devolo_home_network/translations/ga.json +18 -0
  103. homeassistant/components/dexcom/translations/ga.json +17 -0
  104. homeassistant/components/dhcp/manifest.json +1 -1
  105. homeassistant/components/directv/translations/ga.json +11 -0
  106. homeassistant/components/dlink/translations/ga.json +11 -0
  107. homeassistant/components/doorbird/translations/ga.json +5 -0
  108. homeassistant/components/downloader/translations/ga.json +12 -0
  109. homeassistant/components/drop_connect/translations/ga.json +83 -0
  110. homeassistant/components/dsmr/translations/ga.json +3 -0
  111. homeassistant/components/duotecno/translations/ga.json +18 -0
  112. homeassistant/components/dwd_weather_warnings/translations/ga.json +17 -0
  113. homeassistant/components/easyenergy/translations/ga.json +16 -0
  114. homeassistant/components/ecobee/translations/ga.json +11 -0
  115. homeassistant/components/ecoforest/translations/ga.json +24 -0
  116. homeassistant/components/ecovacs/manifest.json +1 -1
  117. homeassistant/components/ecovacs/translations/ga.json +140 -1
  118. homeassistant/components/ecovacs/translations/he.json +1 -1
  119. homeassistant/components/eheimdigital/translations/ga.json +1 -0
  120. homeassistant/components/electric_kiwi/translations/ga.json +19 -0
  121. homeassistant/components/elevenlabs/translations/sv.json +2 -1
  122. homeassistant/components/elmax/translations/ga.json +39 -0
  123. homeassistant/components/elvia/translations/ga.json +18 -0
  124. homeassistant/components/emoncms/translations/cs.json +0 -8
  125. homeassistant/components/emoncms/translations/el.json +0 -8
  126. homeassistant/components/emoncms/translations/en-GB.json +2 -2
  127. homeassistant/components/emoncms/translations/en.json +2 -2
  128. homeassistant/components/emoncms/translations/es.json +1 -1
  129. homeassistant/components/emoncms/translations/ga.json +1 -8
  130. homeassistant/components/emoncms/translations/it.json +0 -8
  131. homeassistant/components/emoncms/translations/ja.json +0 -8
  132. homeassistant/components/emoncms/translations/lt.json +0 -8
  133. homeassistant/components/emoncms/translations/nl.json +0 -8
  134. homeassistant/components/emoncms/translations/pt.json +0 -8
  135. homeassistant/components/emoncms/translations/sk.json +0 -8
  136. homeassistant/components/emoncms/translations/sv.json +2 -9
  137. homeassistant/components/emoncms/translations/zh-Hans.json +0 -8
  138. homeassistant/components/emoncms/translations/zh-Hant.json +2 -2
  139. homeassistant/components/energenie_power_sockets/translations/ga.json +23 -0
  140. homeassistant/components/energy/translations/sl.json +4 -0
  141. homeassistant/components/energyzero/translations/ga.json +42 -0
  142. homeassistant/components/enigma2/translations/ga.json +8 -0
  143. homeassistant/components/enphase_envoy/diagnostics.py +2 -0
  144. homeassistant/components/enphase_envoy/translations/ga.json +108 -0
  145. homeassistant/components/enphase_envoy/translations/he.json +1 -1
  146. homeassistant/components/epic_games_store/translations/ga.json +22 -1
  147. homeassistant/components/epson/translations/ga.json +3 -0
  148. homeassistant/components/eq3btsmart/translations/ga.json +12 -0
  149. homeassistant/components/esphome/manifest.json +1 -1
  150. homeassistant/components/esphome/translations/ga.json +1 -0
  151. homeassistant/components/evil_genius_labs/translations/ga.json +11 -0
  152. homeassistant/components/faa_delays/translations/ga.json +73 -0
  153. homeassistant/components/fan/translations/ga.json +7 -0
  154. homeassistant/components/fastdotcom/translations/ga.json +9 -0
  155. homeassistant/components/feedreader/translations/ga.json +3 -0
  156. homeassistant/components/file/translations/ga.json +56 -0
  157. homeassistant/components/filesize/translations/ga.json +5 -0
  158. homeassistant/components/fitbit/translations/ga.json +11 -0
  159. homeassistant/components/fjaraskupan/translations/da.json +7 -0
  160. homeassistant/components/flexit_bacnet/translations/ga.json +52 -0
  161. homeassistant/components/folder_watcher/translations/ga.json +41 -0
  162. homeassistant/components/freebox/translations/ga.json +11 -0
  163. homeassistant/components/fritz/translations/ga.json +20 -0
  164. homeassistant/components/fritzbox/translations/ga.json +8 -0
  165. homeassistant/components/fritzbox_callmonitor/translations/ga.json +49 -0
  166. homeassistant/components/fritzbox_callmonitor/translations/he.json +1 -1
  167. homeassistant/components/fronius/__init__.py +6 -0
  168. homeassistant/components/fronius/translations/ga.json +1 -0
  169. homeassistant/components/fronius/translations/he.json +1 -1
  170. homeassistant/components/fyta/translations/ga.json +55 -7
  171. homeassistant/components/generic/translations/ga.json +8 -0
  172. homeassistant/components/generic_hygrostat/translations/it.json +47 -2
  173. homeassistant/components/generic_thermostat/translations/it.json +39 -6
  174. homeassistant/components/geocaching/translations/ga.json +4 -0
  175. homeassistant/components/glances/translations/ga.json +33 -0
  176. homeassistant/components/goalzero/translations/ga.json +53 -0
  177. homeassistant/components/google/translations/ga.json +3 -1
  178. homeassistant/components/google_assistant_sdk/translations/ga.json +4 -0
  179. homeassistant/components/google_drive/translations/ga.json +2 -0
  180. homeassistant/components/google_generative_ai_conversation/translations/ga.json +8 -4
  181. homeassistant/components/google_generative_ai_conversation/translations/sv.json +1 -0
  182. homeassistant/components/google_mail/translations/ga.json +4 -0
  183. homeassistant/components/google_photos/translations/ga.json +2 -0
  184. homeassistant/components/google_sheets/translations/ga.json +4 -0
  185. homeassistant/components/google_tasks/translations/ga.json +5 -0
  186. homeassistant/components/google_travel_time/translations/ga.json +65 -0
  187. homeassistant/components/gpsd/translations/ga.json +19 -0
  188. homeassistant/components/gree/translations/ga.json +15 -0
  189. homeassistant/components/group/translations/en-GB.json +18 -0
  190. homeassistant/components/group/translations/et.json +18 -0
  191. homeassistant/components/group/translations/ga.json +7 -0
  192. homeassistant/components/group/translations/he.json +18 -0
  193. homeassistant/components/guardian/translations/ga.json +23 -0
  194. homeassistant/components/habitica/translations/ga.json +35 -0
  195. homeassistant/components/harmony/translations/ga.json +18 -0
  196. homeassistant/components/hassio/strings.json +4 -0
  197. homeassistant/components/hassio/translations/de.json +5 -1
  198. homeassistant/components/hassio/translations/el.json +4 -0
  199. homeassistant/components/hassio/translations/en.json +4 -0
  200. homeassistant/components/hassio/translations/es.json +4 -0
  201. homeassistant/components/hassio/translations/et.json +4 -0
  202. homeassistant/components/hassio/translations/ga.json +38 -0
  203. homeassistant/components/hassio/translations/he.json +4 -0
  204. homeassistant/components/hassio/translations/lt.json +4 -0
  205. homeassistant/components/hassio/translations/zh-Hant.json +4 -0
  206. homeassistant/components/heos/translations/ga.json +11 -0
  207. homeassistant/components/here_travel_time/translations/ga.json +5 -0
  208. homeassistant/components/hko/translations/ga.json +9 -0
  209. homeassistant/components/holiday/translations/ga.json +5 -0
  210. homeassistant/components/home_connect/translations/da.json +6 -0
  211. homeassistant/components/home_connect/translations/ga.json +2 -0
  212. homeassistant/components/homeassistant/translations/ga.json +32 -0
  213. homeassistant/components/homeassistant_sky_connect/translations/ga.json +1 -0
  214. homeassistant/components/homee/translations/ga.json +3 -0
  215. homeassistant/components/homee/translations/sv.json +6 -0
  216. homeassistant/components/homekit_controller/translations/ga.json +15 -0
  217. homeassistant/components/homekit_controller/translations/he.json +1 -1
  218. homeassistant/components/homewizard/translations/ga.json +40 -0
  219. homeassistant/components/homeworks/translations/ga.json +147 -1
  220. homeassistant/components/honeywell/translations/ga.json +55 -0
  221. homeassistant/components/huawei_lte/translations/ga.json +94 -0
  222. homeassistant/components/hue/translations/ga.json +8 -0
  223. homeassistant/components/hue/v1/light.py +2 -0
  224. homeassistant/components/hue/v1/sensor_base.py +1 -0
  225. homeassistant/components/humidifier/translations/he.json +1 -1
  226. homeassistant/components/hunterdouglas_powerview/translations/ga.json +17 -0
  227. homeassistant/components/husqvarna_automower/manifest.json +1 -1
  228. homeassistant/components/husqvarna_automower/sensor.py +3 -4
  229. homeassistant/components/husqvarna_automower/translations/en-GB.json +12 -0
  230. homeassistant/components/husqvarna_automower/translations/ga.json +196 -3
  231. homeassistant/components/husqvarna_automower/translations/he.json +5 -0
  232. homeassistant/components/husqvarna_automower/translations/nl.json +1 -0
  233. homeassistant/components/husqvarna_automower/translations/sv.json +12 -0
  234. homeassistant/components/huum/translations/ga.json +10 -0
  235. homeassistant/components/huum/translations/sv.json +7 -0
  236. homeassistant/components/hydrawise/translations/ga.json +26 -1
  237. homeassistant/components/hyperion/translations/ga.json +5 -0
  238. homeassistant/components/idasen_desk/translations/ga.json +18 -0
  239. homeassistant/components/imap/translations/ga.json +100 -0
  240. homeassistant/components/imgw_pib/manifest.json +1 -1
  241. homeassistant/components/imgw_pib/translations/ga.json +9 -0
  242. homeassistant/components/imgw_pib/translations/sv.json +3 -0
  243. homeassistant/components/immich/translations/sv.json +9 -0
  244. homeassistant/components/incomfort/translations/ga.json +3 -0
  245. homeassistant/components/input_button/translations/ga.json +7 -0
  246. homeassistant/components/iotawatt/translations/ga.json +11 -0
  247. homeassistant/components/ipp/translations/he.json +1 -1
  248. homeassistant/components/iron_os/translations/he.json +1 -1
  249. homeassistant/components/ista_ecotrend/translations/ga.json +1 -0
  250. homeassistant/components/ituran/translations/he.json +3 -0
  251. homeassistant/components/jewish_calendar/translations/ga.json +7 -1
  252. homeassistant/components/jvc_projector/translations/ga.json +13 -1
  253. homeassistant/components/keenetic_ndms2/translations/ga.json +12 -0
  254. homeassistant/components/kitchen_sink/translations/ga.json +12 -0
  255. homeassistant/components/knx/manifest.json +1 -1
  256. homeassistant/components/knx/translations/ga.json +12 -0
  257. homeassistant/components/knx/translations/zh-Hant.json +1 -1
  258. homeassistant/components/kostal_plenticore/translations/ga.json +3 -0
  259. homeassistant/components/kraken/__init__.py +1 -0
  260. homeassistant/components/lamarzocco/translations/ga.json +67 -0
  261. homeassistant/components/lametric/translations/ga.json +4 -0
  262. homeassistant/components/lcn/translations/ga.json +3 -0
  263. homeassistant/components/lg_netcast/translations/ga.json +21 -0
  264. homeassistant/components/lg_thinq/translations/he.json +2 -1
  265. homeassistant/components/lg_thinq/translations/sv.json +45 -0
  266. homeassistant/components/life360/translations/ga.json +8 -0
  267. homeassistant/components/linkplay/translations/sv.json +8 -0
  268. homeassistant/components/litterrobot/manifest.json +1 -1
  269. homeassistant/components/litterrobot/translations/sv.json +3 -0
  270. homeassistant/components/lock/translations/ga.json +4 -0
  271. homeassistant/components/lupusec/translations/ga.json +9 -0
  272. homeassistant/components/lutron/translations/ga.json +26 -0
  273. homeassistant/components/lyric/translations/ga.json +14 -0
  274. homeassistant/components/madvr/translations/ga.json +1 -0
  275. homeassistant/components/matter/number.py +3 -1
  276. homeassistant/components/matter/translations/ga.json +5 -0
  277. homeassistant/components/matter/translations/he.json +6 -0
  278. homeassistant/components/mazda/translations/ga.json +8 -0
  279. homeassistant/components/mealie/manifest.json +1 -1
  280. homeassistant/components/mealie/todo.py +3 -2
  281. homeassistant/components/mealie/translations/en-GB.json +21 -0
  282. homeassistant/components/mealie/translations/et.json +21 -0
  283. homeassistant/components/mealie/translations/ga.json +3 -1
  284. homeassistant/components/mealie/translations/sv.json +8 -0
  285. homeassistant/components/mealie/translations/zh-Hans.json +14 -1
  286. homeassistant/components/mealie/translations/zh-Hant.json +5 -0
  287. homeassistant/components/media_extractor/manifest.json +1 -1
  288. homeassistant/components/media_extractor/translations/ga.json +18 -0
  289. homeassistant/components/media_player/translations/he.json +1 -1
  290. homeassistant/components/melcloud/translations/ga.json +6 -0
  291. homeassistant/components/meteo_france/__init__.py +3 -0
  292. homeassistant/components/microbees/translations/ga.json +5 -0
  293. homeassistant/components/miele/strings.json +21 -21
  294. homeassistant/components/miele/translations/bg.json +0 -23
  295. homeassistant/components/miele/translations/cs.json +1 -24
  296. homeassistant/components/miele/translations/da.json +3 -0
  297. homeassistant/components/miele/translations/de.json +21 -21
  298. homeassistant/components/miele/translations/el.json +0 -25
  299. homeassistant/components/miele/translations/en-GB.json +46 -21
  300. homeassistant/components/miele/translations/en.json +20 -20
  301. homeassistant/components/miele/translations/es.json +43 -21
  302. homeassistant/components/miele/translations/et.json +55 -21
  303. homeassistant/components/miele/translations/ga.json +48 -22
  304. homeassistant/components/miele/translations/he.json +28 -20
  305. homeassistant/components/miele/translations/hu.json +1 -24
  306. homeassistant/components/miele/translations/it.json +83 -21
  307. homeassistant/components/miele/translations/ja.json +0 -20
  308. homeassistant/components/miele/translations/lt.json +10 -21
  309. homeassistant/components/miele/translations/nl.json +10 -24
  310. homeassistant/components/miele/translations/pt.json +1 -24
  311. homeassistant/components/miele/translations/sk.json +19 -21
  312. homeassistant/components/miele/translations/sv.json +32 -21
  313. homeassistant/components/miele/translations/zh-Hans.json +21 -21
  314. homeassistant/components/miele/translations/zh-Hant.json +30 -21
  315. homeassistant/components/mill/__init__.py +1 -0
  316. homeassistant/components/mill/coordinator.py +2 -0
  317. homeassistant/components/minecraft_server/translations/ga.json +13 -0
  318. homeassistant/components/modbus/translations/ga.json +28 -0
  319. homeassistant/components/monzo/translations/ga.json +20 -0
  320. homeassistant/components/motion_blinds/manifest.json +1 -1
  321. homeassistant/components/motionblinds_ble/translations/ga.json +41 -0
  322. homeassistant/components/motionmount/translations/ga.json +5 -0
  323. homeassistant/components/mqtt/strings.json +1 -0
  324. homeassistant/components/mqtt/translations/de.json +6 -5
  325. homeassistant/components/mqtt/translations/el.json +1 -0
  326. homeassistant/components/mqtt/translations/en-GB.json +232 -0
  327. homeassistant/components/mqtt/translations/en.json +1 -0
  328. homeassistant/components/mqtt/translations/es.json +39 -5
  329. homeassistant/components/mqtt/translations/et.json +232 -0
  330. homeassistant/components/mqtt/translations/fr.json +1 -0
  331. homeassistant/components/mqtt/translations/ga.json +87 -3
  332. homeassistant/components/mqtt/translations/he.json +67 -0
  333. homeassistant/components/mqtt/translations/lt.json +1 -0
  334. homeassistant/components/mqtt/translations/nl.json +17 -1
  335. homeassistant/components/mqtt/translations/ru.json +1 -0
  336. homeassistant/components/mqtt/translations/sk.json +1 -0
  337. homeassistant/components/mqtt/translations/sl.json +5 -0
  338. homeassistant/components/mqtt/translations/sv.json +40 -0
  339. homeassistant/components/mqtt/translations/zh-Hans.json +171 -2
  340. homeassistant/components/mqtt/translations/zh-Hant.json +98 -39
  341. homeassistant/components/music_assistant/translations/ga.json +2 -1
  342. homeassistant/components/myq/translations/ga.json +8 -0
  343. homeassistant/components/mystrom/translations/ga.json +9 -0
  344. homeassistant/components/myuplink/translations/ga.json +7 -1
  345. homeassistant/components/nam/translations/ga.json +2 -1
  346. homeassistant/components/neato/translations/ga.json +4 -0
  347. homeassistant/components/nest/translations/ga.json +2 -0
  348. homeassistant/components/netatmo/translations/ga.json +107 -0
  349. homeassistant/components/netgear/translations/ga.json +24 -0
  350. homeassistant/components/netgear_lte/translations/ga.json +30 -0
  351. homeassistant/components/nextbus/translations/ga.json +30 -0
  352. homeassistant/components/nfandroidtv/translations/ga.json +10 -0
  353. homeassistant/components/nobo_hub/translations/ga.json +12 -0
  354. homeassistant/components/nordpool/translations/ga.json +3 -0
  355. homeassistant/components/notify/translations/ga.json +16 -0
  356. homeassistant/components/ntfy/translations/ga.json +3 -0
  357. homeassistant/components/nuki/translations/ga.json +23 -0
  358. homeassistant/components/number/translations/ga.json +8 -0
  359. homeassistant/components/nut/translations/ga.json +4 -1
  360. homeassistant/components/octoprint/translations/ga.json +31 -0
  361. homeassistant/components/ohme/translations/ga.json +3 -0
  362. homeassistant/components/ollama/translations/ga.json +4 -2
  363. homeassistant/components/onboarding/translations/ga.json +7 -0
  364. homeassistant/components/onedrive/translations/ga.json +3 -0
  365. homeassistant/components/onewire/translations/ga.json +37 -0
  366. homeassistant/components/onkyo/translations/ga.json +1 -0
  367. homeassistant/components/onvif/translations/ga.json +15 -0
  368. homeassistant/components/open_router/manifest.json +1 -1
  369. homeassistant/components/open_router/translations/en-GB.json +21 -0
  370. homeassistant/components/open_router/translations/et.json +21 -0
  371. homeassistant/components/open_router/translations/he.json +10 -0
  372. homeassistant/components/open_router/translations/sv.json +20 -1
  373. homeassistant/components/open_router/translations/zh-Hans.json +4 -0
  374. homeassistant/components/open_router/translations/zh-Hant.json +4 -0
  375. homeassistant/components/openai_conversation/translations/ga.json +16 -2
  376. homeassistant/components/openai_conversation/translations/sv.json +7 -0
  377. homeassistant/components/openweathermap/translations/fr.json +2 -1
  378. homeassistant/components/openweathermap/translations/he.json +2 -1
  379. homeassistant/components/oralb/translations/ga.json +21 -0
  380. homeassistant/components/osoenergy/translations/en-GB.json +10 -0
  381. homeassistant/components/osoenergy/translations/ga.json +34 -1
  382. homeassistant/components/osoenergy/translations/zh-Hant.json +1 -0
  383. homeassistant/components/overkiz/translations/ga.json +19 -3
  384. homeassistant/components/overseerr/translations/ga.json +3 -0
  385. homeassistant/components/paperless_ngx/translations/ga.json +3 -0
  386. homeassistant/components/peblar/translations/ga.json +2 -1
  387. homeassistant/components/peco/translations/ga.json +12 -0
  388. homeassistant/components/permobil/translations/ga.json +14 -0
  389. homeassistant/components/ping/translations/ga.json +39 -0
  390. homeassistant/components/playstation_network/translations/en-GB.json +41 -0
  391. homeassistant/components/playstation_network/translations/es.json +27 -0
  392. homeassistant/components/playstation_network/translations/et.json +41 -0
  393. homeassistant/components/playstation_network/translations/ga.json +1 -0
  394. homeassistant/components/playstation_network/translations/he.json +8 -0
  395. homeassistant/components/playstation_network/translations/nl.json +8 -0
  396. homeassistant/components/playstation_network/translations/sv.json +9 -0
  397. homeassistant/components/playstation_network/translations/zh-Hans.json +17 -1
  398. homeassistant/components/plugwise/translations/ga.json +11 -2
  399. homeassistant/components/point/translations/ga.json +2 -0
  400. homeassistant/components/powerfox/translations/ga.json +3 -0
  401. homeassistant/components/powerwall/translations/ga.json +20 -0
  402. homeassistant/components/profiler/translations/ga.json +18 -0
  403. homeassistant/components/progettihwsw/translations/ga.json +11 -0
  404. homeassistant/components/proximity/translations/ga.json +55 -0
  405. homeassistant/components/prusalink/translations/ga.json +19 -0
  406. homeassistant/components/prusalink/translations/he.json +1 -1
  407. homeassistant/components/pvpc_hourly_pricing/translations/ga.json +34 -0
  408. homeassistant/components/pyload/translations/ga.json +3 -0
  409. homeassistant/components/qbittorrent/translations/ga.json +34 -0
  410. homeassistant/components/qbittorrent/translations/he.json +1 -1
  411. homeassistant/components/qnap/translations/ga.json +42 -0
  412. homeassistant/components/rachio/translations/ga.json +12 -0
  413. homeassistant/components/rainforest_raven/translations/ga.json +26 -0
  414. homeassistant/components/random/strings.json +1 -0
  415. homeassistant/components/random/translations/bg.json +0 -1
  416. homeassistant/components/random/translations/ca.json +0 -1
  417. homeassistant/components/random/translations/cs.json +0 -1
  418. homeassistant/components/random/translations/de.json +1 -0
  419. homeassistant/components/random/translations/el.json +2 -1
  420. homeassistant/components/random/translations/en-GB.json +2 -1
  421. homeassistant/components/random/translations/en.json +2 -1
  422. homeassistant/components/random/translations/es.json +2 -1
  423. homeassistant/components/random/translations/et.json +2 -1
  424. homeassistant/components/random/translations/fi.json +1 -0
  425. homeassistant/components/random/translations/fr.json +2 -1
  426. homeassistant/components/random/translations/ga.json +26 -0
  427. homeassistant/components/random/translations/he.json +2 -1
  428. homeassistant/components/random/translations/hu.json +0 -1
  429. homeassistant/components/random/translations/id.json +0 -1
  430. homeassistant/components/random/translations/it.json +0 -1
  431. homeassistant/components/random/translations/ja.json +0 -1
  432. homeassistant/components/random/translations/ko.json +0 -1
  433. homeassistant/components/random/translations/lt.json +1 -1
  434. homeassistant/components/random/translations/nl.json +1 -1
  435. homeassistant/components/random/translations/pl.json +0 -1
  436. homeassistant/components/random/translations/pt.json +0 -1
  437. homeassistant/components/random/translations/ru.json +2 -1
  438. homeassistant/components/random/translations/sk.json +1 -1
  439. homeassistant/components/random/translations/sl.json +0 -1
  440. homeassistant/components/random/translations/sv.json +1 -1
  441. homeassistant/components/random/translations/tr.json +0 -1
  442. homeassistant/components/random/translations/vi.json +0 -1
  443. homeassistant/components/random/translations/zh-Hans.json +1 -1
  444. homeassistant/components/random/translations/zh-Hant.json +2 -1
  445. homeassistant/components/recorder/translations/ga.json +14 -0
  446. homeassistant/components/remote_calendar/coordinator.py +1 -0
  447. homeassistant/components/renault/translations/ga.json +10 -0
  448. homeassistant/components/renson/translations/ga.json +80 -0
  449. homeassistant/components/reolink/translations/ga.json +71 -1
  450. homeassistant/components/rest_command/translations/ga.json +13 -0
  451. homeassistant/components/rfxtrx/translations/ga.json +70 -1
  452. homeassistant/components/ring/translations/ga.json +21 -1
  453. homeassistant/components/risco/translations/ga.json +39 -0
  454. homeassistant/components/roborock/translations/ga.json +36 -0
  455. homeassistant/components/roborock/translations/he.json +1 -1
  456. homeassistant/components/roku/translations/ga.json +8 -0
  457. homeassistant/components/romy/translations/ga.json +50 -1
  458. homeassistant/components/roomba/translations/ga.json +15 -0
  459. homeassistant/components/rova/translations/ga.json +43 -0
  460. homeassistant/components/russound_rio/translations/ga.json +1 -0
  461. homeassistant/components/ruuvitag_ble/translations/ga.json +8 -0
  462. homeassistant/components/rympro/translations/ga.json +3 -0
  463. homeassistant/components/sabnzbd/translations/ga.json +3 -0
  464. homeassistant/components/samsungtv/translations/ga.json +1 -0
  465. homeassistant/components/sanix/translations/ga.json +28 -0
  466. homeassistant/components/scene/translations/ga.json +16 -0
  467. homeassistant/components/schlage/translations/ga.json +10 -0
  468. homeassistant/components/scrape/translations/bg.json +0 -1
  469. homeassistant/components/scrape/translations/ca.json +0 -1
  470. homeassistant/components/scrape/translations/cs.json +0 -1
  471. homeassistant/components/scrape/translations/el.json +1 -1
  472. homeassistant/components/scrape/translations/en-GB.json +1 -1
  473. homeassistant/components/scrape/translations/en.json +1 -1
  474. homeassistant/components/scrape/translations/es.json +1 -1
  475. homeassistant/components/scrape/translations/fi.json +0 -1
  476. homeassistant/components/scrape/translations/fr.json +1 -1
  477. homeassistant/components/scrape/translations/ga.json +34 -1
  478. homeassistant/components/scrape/translations/he.json +1 -1
  479. homeassistant/components/scrape/translations/hu.json +0 -1
  480. homeassistant/components/scrape/translations/id.json +0 -1
  481. homeassistant/components/scrape/translations/it.json +0 -1
  482. homeassistant/components/scrape/translations/ja.json +0 -1
  483. homeassistant/components/scrape/translations/ko.json +0 -1
  484. homeassistant/components/scrape/translations/lt.json +0 -1
  485. homeassistant/components/scrape/translations/nb.json +0 -1
  486. homeassistant/components/scrape/translations/nl.json +0 -1
  487. homeassistant/components/scrape/translations/pl.json +0 -1
  488. homeassistant/components/scrape/translations/pt.json +0 -1
  489. homeassistant/components/scrape/translations/ru.json +0 -1
  490. homeassistant/components/scrape/translations/sk.json +0 -1
  491. homeassistant/components/scrape/translations/sl.json +0 -1
  492. homeassistant/components/scrape/translations/sv.json +0 -1
  493. homeassistant/components/scrape/translations/tr.json +0 -1
  494. homeassistant/components/scrape/translations/uk.json +0 -1
  495. homeassistant/components/scrape/translations/vi.json +0 -1
  496. homeassistant/components/scrape/translations/zh-Hans.json +0 -1
  497. homeassistant/components/scrape/translations/zh-Hant.json +1 -1
  498. homeassistant/components/screenlogic/translations/ga.json +34 -0
  499. homeassistant/components/sensibo/translations/ga.json +14 -0
  500. homeassistant/components/sensor/translations/ga.json +5 -0
  501. homeassistant/components/sensor/translations/sv.json +1 -0
  502. homeassistant/components/seventeentrack/translations/ga.json +55 -2
  503. homeassistant/components/sfr_box/translations/ga.json +9 -0
  504. homeassistant/components/sfr_box/translations/he.json +1 -1
  505. homeassistant/components/sharkiq/translations/ga.json +17 -0
  506. homeassistant/components/shell_command/translations/ga.json +10 -0
  507. homeassistant/components/shelly/translations/ga.json +33 -1
  508. homeassistant/components/simplisafe/__init__.py +1 -0
  509. homeassistant/components/simplisafe/translations/de.json +7 -7
  510. homeassistant/components/sleepiq/translations/sv.json +5 -0
  511. homeassistant/components/slide_local/translations/ga.json +1 -0
  512. homeassistant/components/sma/translations/ga.json +5 -0
  513. homeassistant/components/smappee/translations/ga.json +3 -0
  514. homeassistant/components/smartthings/translations/fi.json +12 -1
  515. homeassistant/components/smartthings/translations/ga.json +2 -0
  516. homeassistant/components/smartthings/translations/he.json +1 -1
  517. homeassistant/components/smarttub/controller.py +1 -0
  518. homeassistant/components/smhi/translations/ga.json +3 -0
  519. homeassistant/components/sms/__init__.py +2 -2
  520. homeassistant/components/sms/coordinator.py +4 -2
  521. homeassistant/components/smtp/translations/ga.json +7 -0
  522. homeassistant/components/snapcast/translations/ga.json +11 -0
  523. homeassistant/components/snoo/__init__.py +1 -1
  524. homeassistant/components/snoo/coordinator.py +8 -1
  525. homeassistant/components/solaredge/translations/ga.json +27 -0
  526. homeassistant/components/solarlog/translations/ga.json +3 -0
  527. homeassistant/components/soma/translations/ga.json +11 -0
  528. homeassistant/components/somfy_mylink/translations/ga.json +11 -0
  529. homeassistant/components/sonos/translations/ga.json +8 -0
  530. homeassistant/components/soundtouch/translations/ga.json +11 -0
  531. homeassistant/components/speedtestdotnet/translations/ga.json +51 -0
  532. homeassistant/components/spotify/translations/ga.json +5 -0
  533. homeassistant/components/sql/translations/bg.json +0 -1
  534. homeassistant/components/sql/translations/ca.json +0 -1
  535. homeassistant/components/sql/translations/cs.json +0 -1
  536. homeassistant/components/sql/translations/el.json +1 -1
  537. homeassistant/components/sql/translations/en-GB.json +1 -1
  538. homeassistant/components/sql/translations/en.json +1 -1
  539. homeassistant/components/sql/translations/es.json +1 -1
  540. homeassistant/components/sql/translations/fi.json +0 -1
  541. homeassistant/components/sql/translations/fr.json +1 -1
  542. homeassistant/components/sql/translations/ga.json +2 -1
  543. homeassistant/components/sql/translations/he.json +1 -1
  544. homeassistant/components/sql/translations/hu.json +0 -1
  545. homeassistant/components/sql/translations/id.json +0 -1
  546. homeassistant/components/sql/translations/it.json +0 -1
  547. homeassistant/components/sql/translations/ja.json +0 -1
  548. homeassistant/components/sql/translations/ko.json +0 -1
  549. homeassistant/components/sql/translations/lt.json +0 -1
  550. homeassistant/components/sql/translations/nb.json +0 -1
  551. homeassistant/components/sql/translations/nl.json +0 -1
  552. homeassistant/components/sql/translations/pl.json +0 -1
  553. homeassistant/components/sql/translations/pt.json +0 -1
  554. homeassistant/components/sql/translations/ru.json +1 -1
  555. homeassistant/components/sql/translations/sk.json +0 -1
  556. homeassistant/components/sql/translations/sl.json +0 -1
  557. homeassistant/components/sql/translations/sv.json +0 -1
  558. homeassistant/components/sql/translations/tr.json +0 -1
  559. homeassistant/components/sql/translations/uk.json +0 -1
  560. homeassistant/components/sql/translations/vi.json +0 -1
  561. homeassistant/components/sql/translations/zh-Hans.json +0 -1
  562. homeassistant/components/sql/translations/zh-Hant.json +1 -1
  563. homeassistant/components/squeezebox/browse_media.py +40 -14
  564. homeassistant/components/squeezebox/media_player.py +5 -0
  565. homeassistant/components/starline/translations/ga.json +3 -0
  566. homeassistant/components/starlink/translations/ga.json +13 -0
  567. homeassistant/components/steamist/translations/ga.json +17 -0
  568. homeassistant/components/suez_water/translations/ga.json +6 -0
  569. homeassistant/components/sun/translations/cs.json +3 -3
  570. homeassistant/components/sun/translations/ga.json +5 -0
  571. homeassistant/components/surepetcare/translations/ga.json +9 -0
  572. homeassistant/components/swiss_public_transport/translations/ga.json +32 -2
  573. homeassistant/components/switch_as_x/translations/ga.json +9 -0
  574. homeassistant/components/switcher_kis/translations/sk.json +1 -1
  575. homeassistant/components/system_bridge/translations/ga.json +64 -1
  576. homeassistant/components/systemmonitor/translations/ga.json +36 -0
  577. homeassistant/components/tado/translations/ga.json +18 -1
  578. homeassistant/components/tailwind/translations/ga.json +26 -0
  579. homeassistant/components/tami4/translations/ga.json +8 -0
  580. homeassistant/components/tankerkoenig/translations/en-GB.json +11 -0
  581. homeassistant/components/tankerkoenig/translations/ga.json +17 -0
  582. homeassistant/components/tankerkoenig/translations/sv.json +22 -0
  583. homeassistant/components/technove/translations/ga.json +52 -1
  584. homeassistant/components/tedee/translations/ga.json +29 -0
  585. homeassistant/components/telegram_bot/translations/ga.json +3 -0
  586. homeassistant/components/tellduslive/translations/ga.json +11 -0
  587. homeassistant/components/template/cover.py +1 -0
  588. homeassistant/components/template/entity.py +9 -3
  589. homeassistant/components/template/strings.json +11 -4
  590. homeassistant/components/template/translations/bg.json +0 -1
  591. homeassistant/components/template/translations/ca.json +0 -1
  592. homeassistant/components/template/translations/cs.json +1 -5
  593. homeassistant/components/template/translations/da.json +0 -1
  594. homeassistant/components/template/translations/de.json +29 -22
  595. homeassistant/components/template/translations/el.json +2 -1
  596. homeassistant/components/template/translations/en-GB.json +490 -16
  597. homeassistant/components/template/translations/en.json +14 -7
  598. homeassistant/components/template/translations/es.json +115 -18
  599. homeassistant/components/template/translations/et.json +495 -15
  600. homeassistant/components/template/translations/fi.json +0 -1
  601. homeassistant/components/template/translations/fr.json +215 -28
  602. homeassistant/components/template/translations/ga.json +203 -16
  603. homeassistant/components/template/translations/he.json +681 -19
  604. homeassistant/components/template/translations/hu.json +0 -1
  605. homeassistant/components/template/translations/id.json +0 -1
  606. homeassistant/components/template/translations/it.json +0 -1
  607. homeassistant/components/template/translations/ja.json +0 -1
  608. homeassistant/components/template/translations/ko.json +0 -1
  609. homeassistant/components/template/translations/lt.json +24 -1
  610. homeassistant/components/template/translations/nb.json +0 -1
  611. homeassistant/components/template/translations/nl.json +32 -2
  612. homeassistant/components/template/translations/pl.json +0 -1
  613. homeassistant/components/template/translations/pt-BR.json +0 -1
  614. homeassistant/components/template/translations/pt.json +0 -1
  615. homeassistant/components/template/translations/ru.json +679 -19
  616. homeassistant/components/template/translations/sk.json +1 -1
  617. homeassistant/components/template/translations/sl.json +478 -13
  618. homeassistant/components/template/translations/sv.json +488 -2
  619. homeassistant/components/template/translations/tr.json +0 -1
  620. homeassistant/components/template/translations/uk.json +0 -1
  621. homeassistant/components/template/translations/vi.json +0 -1
  622. homeassistant/components/template/translations/zh-Hans.json +124 -25
  623. homeassistant/components/template/translations/zh-Hant.json +214 -19
  624. homeassistant/components/template/vacuum.py +46 -1
  625. homeassistant/components/tesla_fleet/translations/ga.json +2 -0
  626. homeassistant/components/tesla_wall_connector/translations/ga.json +24 -1
  627. homeassistant/components/teslemetry/models.py +1 -1
  628. homeassistant/components/teslemetry/sensor.py +8 -7
  629. homeassistant/components/teslemetry/translations/ga.json +153 -0
  630. homeassistant/components/teslemetry/translations/he.json +1 -1
  631. homeassistant/components/tessie/translations/ga.json +107 -0
  632. homeassistant/components/tibber/translations/ga.json +85 -0
  633. homeassistant/components/time_date/translations/ga.json +64 -0
  634. homeassistant/components/timer/translations/ga.json +5 -0
  635. homeassistant/components/timer/translations/he.json +1 -1
  636. homeassistant/components/todo/translations/ga.json +83 -0
  637. homeassistant/components/tolo/translations/ga.json +21 -0
  638. homeassistant/components/tomorrowio/translations/ga.json +53 -0
  639. homeassistant/components/toon/translations/ga.json +4 -0
  640. homeassistant/components/totalconnect/translations/ga.json +16 -0
  641. homeassistant/components/tplink/translations/ga.json +30 -2
  642. homeassistant/components/tplink_omada/translations/ga.json +34 -0
  643. homeassistant/components/traccar_server/translations/ga.json +45 -1
  644. homeassistant/components/tractive/translations/ga.json +7 -0
  645. homeassistant/components/tradfri/translations/ga.json +7 -0
  646. homeassistant/components/trafikverket_camera/translations/ga.json +25 -0
  647. homeassistant/components/trafikverket_ferry/translations/pl.json +1 -1
  648. homeassistant/components/trafikverket_train/translations/ga.json +13 -0
  649. homeassistant/components/trafikverket_weatherstation/translations/ga.json +35 -0
  650. homeassistant/components/transmission/translations/ga.json +9 -0
  651. homeassistant/components/transmission/translations/he.json +1 -1
  652. homeassistant/components/trend/translations/ga.json +39 -0
  653. homeassistant/components/tuya/fan.py +3 -1
  654. homeassistant/components/tuya/light.py +21 -13
  655. homeassistant/components/tuya/translations/en-GB.json +12 -0
  656. homeassistant/components/tuya/translations/es.json +12 -0
  657. homeassistant/components/tuya/translations/et.json +12 -0
  658. homeassistant/components/tuya/translations/ga.json +30 -0
  659. homeassistant/components/tuya/translations/he.json +3 -0
  660. homeassistant/components/tuya/translations/sk.json +3 -0
  661. homeassistant/components/tuya/translations/sv.json +7 -0
  662. homeassistant/components/twinkly/translations/ga.json +8 -1
  663. homeassistant/components/twitch/translations/ga.json +12 -0
  664. homeassistant/components/unifi/hub/entity_loader.py +5 -3
  665. homeassistant/components/unifi/hub/hub.py +1 -1
  666. homeassistant/components/unifi/translations/ga.json +16 -0
  667. homeassistant/components/unifiprotect/translations/ga.json +65 -1
  668. homeassistant/components/unifiprotect/translations/sv.json +3 -0
  669. homeassistant/components/update/translations/ga.json +26 -0
  670. homeassistant/components/uptime_kuma/sensor.py +5 -1
  671. homeassistant/components/uptime_kuma/translations/en-GB.json +10 -0
  672. homeassistant/components/uptime_kuma/translations/es.json +10 -0
  673. homeassistant/components/uptime_kuma/translations/et.json +10 -0
  674. homeassistant/components/uptime_kuma/translations/ga.json +3 -0
  675. homeassistant/components/uptime_kuma/translations/he.json +5 -0
  676. homeassistant/components/uptime_kuma/translations/sv.json +12 -0
  677. homeassistant/components/uptime_kuma/translations/zh-Hans.json +3 -1
  678. homeassistant/components/utility_meter/translations/ga.json +22 -0
  679. homeassistant/components/v2c/translations/ga.json +23 -0
  680. homeassistant/components/vacuum/translations/ga.json +5 -0
  681. homeassistant/components/vacuum/translations/he.json +1 -1
  682. homeassistant/components/vallox/translations/ga.json +22 -0
  683. homeassistant/components/valve/translations/ga.json +45 -0
  684. homeassistant/components/venstar/translations/ga.json +20 -0
  685. homeassistant/components/venstar/translations/he.json +1 -1
  686. homeassistant/components/vicare/translations/ga.json +232 -0
  687. homeassistant/components/vilfo/translations/ga.json +11 -0
  688. homeassistant/components/vizio/translations/ga.json +11 -0
  689. homeassistant/components/vlc_telnet/translations/ga.json +11 -0
  690. homeassistant/components/vodafone_station/translations/ga.json +8 -0
  691. homeassistant/components/voip/manifest.json +1 -1
  692. homeassistant/components/volumio/translations/ga.json +11 -0
  693. homeassistant/components/volvo/config_flow.py +8 -0
  694. homeassistant/components/volvo/icons.json +9 -5
  695. homeassistant/components/volvo/translations/en-GB.json +178 -0
  696. homeassistant/components/volvo/translations/ga.json +5 -0
  697. homeassistant/components/volvo/translations/he.json +59 -0
  698. homeassistant/components/volvo/translations/nl.json +5 -0
  699. homeassistant/components/volvo/translations/sv.json +53 -0
  700. homeassistant/components/wallbox/translations/ga.json +47 -0
  701. homeassistant/components/waqi/translations/ga.json +15 -0
  702. homeassistant/components/water_heater/translations/ga.json +8 -0
  703. homeassistant/components/waze_travel_time/translations/ga.json +5 -0
  704. homeassistant/components/waze_travel_time/translations/he.json +10 -0
  705. homeassistant/components/weather/translations/ga.json +27 -0
  706. homeassistant/components/weatherflow/translations/ga.json +71 -0
  707. homeassistant/components/weatherflow_cloud/translations/en-GB.json +27 -0
  708. homeassistant/components/weatherflow_cloud/translations/et.json +27 -0
  709. homeassistant/components/weatherflow_cloud/translations/ga.json +9 -0
  710. homeassistant/components/weatherflow_cloud/translations/zh-Hans.json +27 -0
  711. homeassistant/components/weatherkit/translations/ga.json +14 -0
  712. homeassistant/components/webmin/translations/ga.json +29 -0
  713. homeassistant/components/webostv/translations/de.json +4 -4
  714. homeassistant/components/webostv/translations/ga.json +15 -0
  715. homeassistant/components/websocket_api/translations/ga.json +7 -0
  716. homeassistant/components/weheat/translations/ga.json +2 -0
  717. homeassistant/components/whirlpool/translations/ga.json +12 -1
  718. homeassistant/components/withings/translations/ga.json +67 -0
  719. homeassistant/components/wled/translations/ga.json +53 -0
  720. homeassistant/components/workday/translations/ga.json +47 -1
  721. homeassistant/components/wyoming/manifest.json +1 -1
  722. homeassistant/components/wyoming/translations/ga.json +14 -0
  723. homeassistant/components/xbox/translations/ga.json +4 -0
  724. homeassistant/components/xiaomi_ble/translations/ga.json +158 -1
  725. homeassistant/components/yale/manifest.json +1 -1
  726. homeassistant/components/yale/translations/ga.json +2 -0
  727. homeassistant/components/yale_smart_alarm/translations/ga.json +8 -0
  728. homeassistant/components/yalexs_ble/manifest.json +1 -1
  729. homeassistant/components/yamaha_musiccast/translations/ga.json +11 -0
  730. homeassistant/components/yardian/translations/ga.json +11 -0
  731. homeassistant/components/yeelight/translations/ga.json +11 -0
  732. homeassistant/components/yolink/translations/ga.json +58 -0
  733. homeassistant/components/youless/translations/ga.json +9 -0
  734. homeassistant/components/youtube/translations/ga.json +2 -0
  735. homeassistant/components/zeversolar/translations/ga.json +11 -0
  736. homeassistant/components/zha/manifest.json +1 -1
  737. homeassistant/components/zha/translations/de.json +1 -1
  738. homeassistant/components/zha/translations/en-GB.json +30 -0
  739. homeassistant/components/zha/translations/et.json +30 -0
  740. homeassistant/components/zha/translations/fi.json +9 -0
  741. homeassistant/components/zha/translations/ga.json +244 -0
  742. homeassistant/components/zha/translations/he.json +21 -1
  743. homeassistant/components/zha/translations/sl.json +1 -0
  744. homeassistant/components/zha/translations/sv.json +24 -0
  745. homeassistant/components/zha/translations/zh-Hans.json +18 -0
  746. homeassistant/components/zha/translations/zh-Hant.json +3 -0
  747. homeassistant/components/zha/update.py +6 -2
  748. homeassistant/components/zwave_js/__init__.py +58 -31
  749. homeassistant/components/zwave_js/api.py +11 -28
  750. homeassistant/components/zwave_js/config_flow.py +28 -16
  751. homeassistant/components/zwave_js/const.py +0 -4
  752. homeassistant/components/zwave_js/helpers.py +54 -1
  753. homeassistant/components/zwave_js/manifest.json +1 -1
  754. homeassistant/components/zwave_js/strings.json +1 -1
  755. homeassistant/components/zwave_js/translations/cs.json +0 -1
  756. homeassistant/components/zwave_js/translations/de.json +1 -1
  757. homeassistant/components/zwave_js/translations/el.json +0 -1
  758. homeassistant/components/zwave_js/translations/en-GB.json +0 -1
  759. homeassistant/components/zwave_js/translations/en.json +1 -1
  760. homeassistant/components/zwave_js/translations/es.json +1 -1
  761. homeassistant/components/zwave_js/translations/et.json +1 -1
  762. homeassistant/components/zwave_js/translations/ga.json +107 -1
  763. homeassistant/components/zwave_js/translations/hu.json +0 -1
  764. homeassistant/components/zwave_js/translations/lt.json +0 -1
  765. homeassistant/components/zwave_js/translations/nl.json +0 -1
  766. homeassistant/components/zwave_js/translations/pt.json +0 -1
  767. homeassistant/components/zwave_js/translations/ru.json +0 -1
  768. homeassistant/components/zwave_js/translations/sk.json +0 -1
  769. homeassistant/components/zwave_js/translations/sv.json +0 -1
  770. homeassistant/components/zwave_js/translations/zh-Hans.json +0 -1
  771. homeassistant/components/zwave_js/translations/zh-Hant.json +1 -1
  772. homeassistant/const.py +1 -1
  773. homeassistant/data_entry_flow.py +4 -3
  774. homeassistant/helpers/device_registry.py +47 -17
  775. homeassistant/package_constraints.txt +3 -3
  776. {homeassistant-2025.8.0b1.dist-info → homeassistant-2025.8.0b3.dist-info}/METADATA +2 -2
  777. {homeassistant-2025.8.0b1.dist-info → homeassistant-2025.8.0b3.dist-info}/RECORD +782 -661
  778. {homeassistant-2025.8.0b1.dist-info → homeassistant-2025.8.0b3.dist-info}/WHEEL +0 -0
  779. {homeassistant-2025.8.0b1.dist-info → homeassistant-2025.8.0b3.dist-info}/entry_points.txt +0 -0
  780. {homeassistant-2025.8.0b1.dist-info → homeassistant-2025.8.0b3.dist-info}/licenses/LICENSE.md +0 -0
  781. {homeassistant-2025.8.0b1.dist-info → homeassistant-2025.8.0b3.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  782. {homeassistant-2025.8.0b1.dist-info → homeassistant-2025.8.0b3.dist-info}/top_level.txt +0 -0
@@ -264,6 +264,9 @@
264
264
  "frost_lock_reset": {
265
265
  "name": "\u971c\u51bb\u9501\u91cd\u7f6e"
266
266
  },
267
+ "reset_alarm": {
268
+ "name": "\u91cd\u7f6e\u8b66\u62a5"
269
+ },
267
270
  "reset_frost_lock": {
268
271
  "name": "\u9632\u971c\u51bb\u9501\u590d\u4f4d"
269
272
  },
@@ -1398,6 +1401,9 @@
1398
1401
  "todays_max_light_intensity": {
1399
1402
  "name": "\u4eca\u65e5\u6700\u5927\u5149\u7167\u5f3a\u5ea6"
1400
1403
  },
1404
+ "total_active_power": {
1405
+ "name": "\u603b\u529f\u7387"
1406
+ },
1401
1407
  "total_power_factor": {
1402
1408
  "name": "\u603b\u529f\u7387\u56e0\u6570"
1403
1409
  },
@@ -1472,6 +1478,9 @@
1472
1478
  "display_enabled": {
1473
1479
  "name": "\u663e\u793a\u5df2\u542f\u7528"
1474
1480
  },
1481
+ "distance_tracking": {
1482
+ "name": "\u8ddd\u79bb\u8ffd\u8e2a"
1483
+ },
1475
1484
  "double_tap_down_enabled": {
1476
1485
  "name": "\u5df2\u542f\u7528\u53cc\u51fb\u4e0b\u964d"
1477
1486
  },
@@ -1502,6 +1511,12 @@
1502
1511
  "firmware_progress_led": {
1503
1512
  "name": "\u56fa\u4ef6\u8fdb\u5ea6 LED"
1504
1513
  },
1514
+ "frient_com_1": {
1515
+ "name": "COM 1"
1516
+ },
1517
+ "frient_com_2": {
1518
+ "name": "COM 2"
1519
+ },
1505
1520
  "frost_lock": {
1506
1521
  "name": "\u971c\u51bb\u9501"
1507
1522
  },
@@ -1640,6 +1655,9 @@
1640
1655
  "valve_on_off_2": {
1641
1656
  "name": "\u9600\u95e8 2"
1642
1657
  },
1658
+ "water_shortage_auto_close": {
1659
+ "name": "\u7f3a\u6c34\u81ea\u52a8\u5173\u95ed"
1660
+ },
1643
1661
  "window_detection": {
1644
1662
  "name": "\u7a97\u53e3\u68c0\u6d4b"
1645
1663
  },
@@ -1655,6 +1655,9 @@
1655
1655
  "valve_on_off_2": {
1656
1656
  "name": "\u95a5\u9580 2"
1657
1657
  },
1658
+ "water_shortage_auto_close": {
1659
+ "name": "\u7f3a\u6c34\u81ea\u52d5\u95dc\u9589"
1660
+ },
1658
1661
  "window_detection": {
1659
1662
  "name": "\u7a97\u6236\u5075\u6e2c"
1660
1663
  },
@@ -58,7 +58,7 @@ async def async_setup_entry(
58
58
  zha_data = get_zha_data(hass)
59
59
  if zha_data.update_coordinator is None:
60
60
  zha_data.update_coordinator = ZHAFirmwareUpdateCoordinator(
61
- hass, get_zha_gateway(hass).application_controller
61
+ hass, config_entry, get_zha_gateway(hass).application_controller
62
62
  )
63
63
  entities_to_create = zha_data.platforms[Platform.UPDATE]
64
64
 
@@ -79,12 +79,16 @@ class ZHAFirmwareUpdateCoordinator(DataUpdateCoordinator[None]): # pylint: disa
79
79
  """Firmware update coordinator that broadcasts updates network-wide."""
80
80
 
81
81
  def __init__(
82
- self, hass: HomeAssistant, controller_application: ControllerApplication
82
+ self,
83
+ hass: HomeAssistant,
84
+ config_entry: ConfigEntry,
85
+ controller_application: ControllerApplication,
83
86
  ) -> None:
84
87
  """Initialize the coordinator."""
85
88
  super().__init__(
86
89
  hass,
87
90
  _LOGGER,
91
+ config_entry=config_entry,
88
92
  name="ZHA firmware update coordinator",
89
93
  update_method=self.async_update_data,
90
94
  )
@@ -105,7 +105,6 @@ from .const import (
105
105
  CONF_USB_PATH,
106
106
  CONF_USE_ADDON,
107
107
  DOMAIN,
108
- DRIVER_READY_TIMEOUT,
109
108
  EVENT_DEVICE_ADDED_TO_REGISTRY,
110
109
  EVENT_VALUE_UPDATED,
111
110
  LIB_LOGGER,
@@ -136,6 +135,7 @@ from .models import ZwaveJSConfigEntry, ZwaveJSData
136
135
  from .services import async_setup_services
137
136
 
138
137
  CONNECT_TIMEOUT = 10
138
+ DRIVER_READY_TIMEOUT = 60
139
139
 
140
140
  CONFIG_SCHEMA = vol.Schema(
141
141
  {
@@ -368,6 +368,16 @@ class DriverEvents:
368
368
  )
369
369
  )
370
370
 
371
+ # listen for driver ready event to reload the config entry
372
+ self.config_entry.async_on_unload(
373
+ driver.on(
374
+ "driver ready",
375
+ lambda _: self.hass.config_entries.async_schedule_reload(
376
+ self.config_entry.entry_id
377
+ ),
378
+ )
379
+ )
380
+
371
381
  # listen for new nodes being added to the mesh
372
382
  self.config_entry.async_on_unload(
373
383
  controller.on(
@@ -499,7 +509,7 @@ class ControllerEvents:
499
509
  )
500
510
  )
501
511
 
502
- await self.async_check_preprovisioned_device(node)
512
+ await self.async_check_pre_provisioned_device(node)
503
513
 
504
514
  if node.is_controller_node:
505
515
  # Create a controller status sensor for each device
@@ -627,8 +637,8 @@ class ControllerEvents:
627
637
  f"{DOMAIN}.identify_controller.{dev_id[1]}",
628
638
  )
629
639
 
630
- async def async_check_preprovisioned_device(self, node: ZwaveNode) -> None:
631
- """Check if the node was preprovisioned and update the device registry."""
640
+ async def async_check_pre_provisioned_device(self, node: ZwaveNode) -> None:
641
+ """Check if the node was pre-provisioned and update the device registry."""
632
642
  provisioning_entry = (
633
643
  await self.driver_events.driver.controller.async_get_provisioning_entry(
634
644
  node.node_id
@@ -638,29 +648,37 @@ class ControllerEvents:
638
648
  provisioning_entry
639
649
  and provisioning_entry.additional_properties
640
650
  and "device_id" in provisioning_entry.additional_properties
641
- ):
642
- preprovisioned_device = self.dev_reg.async_get(
643
- provisioning_entry.additional_properties["device_id"]
651
+ and (
652
+ pre_provisioned_device := self.dev_reg.async_get(
653
+ provisioning_entry.additional_properties["device_id"]
654
+ )
644
655
  )
645
-
646
- if preprovisioned_device:
647
- dsk = provisioning_entry.dsk
648
- dsk_identifier = (DOMAIN, f"provision_{dsk}")
649
-
650
- # If the pre-provisioned device has the DSK identifier, remove it
651
- if dsk_identifier in preprovisioned_device.identifiers:
652
- driver = self.driver_events.driver
653
- device_id = get_device_id(driver, node)
654
- device_id_ext = get_device_id_ext(driver, node)
655
- new_identifiers = preprovisioned_device.identifiers.copy()
656
- new_identifiers.remove(dsk_identifier)
657
- new_identifiers.add(device_id)
658
- if device_id_ext:
659
- new_identifiers.add(device_id_ext)
660
- self.dev_reg.async_update_device(
661
- preprovisioned_device.id,
662
- new_identifiers=new_identifiers,
663
- )
656
+ and (dsk_identifier := (DOMAIN, f"provision_{provisioning_entry.dsk}"))
657
+ in pre_provisioned_device.identifiers
658
+ ):
659
+ driver = self.driver_events.driver
660
+ device_id = get_device_id(driver, node)
661
+ device_id_ext = get_device_id_ext(driver, node)
662
+ new_identifiers = pre_provisioned_device.identifiers.copy()
663
+ new_identifiers.remove(dsk_identifier)
664
+ new_identifiers.add(device_id)
665
+ if device_id_ext:
666
+ new_identifiers.add(device_id_ext)
667
+
668
+ if self.dev_reg.async_get_device(identifiers=new_identifiers):
669
+ # If a device entry is registered with the node ID based identifiers,
670
+ # just remove the device entry with the DSK identifier.
671
+ self.dev_reg.async_update_device(
672
+ pre_provisioned_device.id,
673
+ remove_config_entry_id=self.config_entry.entry_id,
674
+ )
675
+ else:
676
+ # Add the node ID based identifiers to the device entry
677
+ # with the DSK identifier and remove the DSK identifier.
678
+ self.dev_reg.async_update_device(
679
+ pre_provisioned_device.id,
680
+ new_identifiers=new_identifiers,
681
+ )
664
682
 
665
683
  async def async_register_node_in_dev_reg(self, node: ZwaveNode) -> dr.DeviceEntry:
666
684
  """Register node in dev reg."""
@@ -1074,23 +1092,32 @@ async def client_listen(
1074
1092
  try:
1075
1093
  await client.listen(driver_ready)
1076
1094
  except BaseZwaveJSServerError as err:
1077
- if entry.state is not ConfigEntryState.LOADED:
1095
+ if entry.state is ConfigEntryState.SETUP_IN_PROGRESS:
1078
1096
  raise
1079
1097
  LOGGER.error("Client listen failed: %s", err)
1080
1098
  except Exception as err:
1081
1099
  # We need to guard against unknown exceptions to not crash this task.
1082
1100
  LOGGER.exception("Unexpected exception: %s", err)
1083
- if entry.state is not ConfigEntryState.LOADED:
1101
+ if entry.state is ConfigEntryState.SETUP_IN_PROGRESS:
1084
1102
  raise
1085
1103
 
1104
+ if hass.is_stopping or entry.state is ConfigEntryState.UNLOAD_IN_PROGRESS:
1105
+ return
1106
+
1107
+ if entry.state is ConfigEntryState.SETUP_IN_PROGRESS:
1108
+ raise HomeAssistantError("Listen task ended unexpectedly")
1109
+
1086
1110
  # The entry needs to be reloaded since a new driver state
1087
1111
  # will be acquired on reconnect.
1088
1112
  # All model instances will be replaced when the new state is acquired.
1089
- if not hass.is_stopping:
1090
- if entry.state is not ConfigEntryState.LOADED:
1091
- raise HomeAssistantError("Listen task ended unexpectedly")
1113
+ if entry.state.recoverable:
1092
1114
  LOGGER.debug("Disconnected from server. Reloading integration")
1093
1115
  hass.config_entries.async_schedule_reload(entry.entry_id)
1116
+ else:
1117
+ LOGGER.error(
1118
+ "Disconnected from server. Cannot recover entry %s",
1119
+ entry.title,
1120
+ )
1094
1121
 
1095
1122
 
1096
1123
  async def async_unload_entry(hass: HomeAssistant, entry: ZwaveJSConfigEntry) -> bool:
@@ -2,7 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import asyncio
6
5
  from collections.abc import Callable, Coroutine
7
6
  from contextlib import suppress
8
7
  import dataclasses
@@ -87,7 +86,6 @@ from .const import (
87
86
  CONF_DATA_COLLECTION_OPTED_IN,
88
87
  CONF_INSTALLER_MODE,
89
88
  DOMAIN,
90
- DRIVER_READY_TIMEOUT,
91
89
  EVENT_DEVICE_ADDED_TO_REGISTRY,
92
90
  LOGGER,
93
91
  USER_AGENT,
@@ -98,6 +96,7 @@ from .helpers import (
98
96
  async_get_node_from_device_id,
99
97
  async_get_provisioning_entry_from_device_id,
100
98
  async_get_version_info,
99
+ async_wait_for_driver_ready_event,
101
100
  get_device_id,
102
101
  )
103
102
 
@@ -2854,26 +2853,18 @@ async def websocket_hard_reset_controller(
2854
2853
  connection.send_result(msg[ID], device.id)
2855
2854
  async_cleanup()
2856
2855
 
2857
- @callback
2858
- def set_driver_ready(event: dict) -> None:
2859
- "Set the driver ready event."
2860
- wait_driver_ready.set()
2861
-
2862
- wait_driver_ready = asyncio.Event()
2863
-
2864
2856
  msg[DATA_UNSUBSCRIBE] = unsubs = [
2865
2857
  async_dispatcher_connect(
2866
2858
  hass, EVENT_DEVICE_ADDED_TO_REGISTRY, _handle_device_added
2867
2859
  ),
2868
- driver.once("driver ready", set_driver_ready),
2869
2860
  ]
2870
2861
 
2862
+ wait_for_driver_ready = async_wait_for_driver_ready_event(entry, driver)
2863
+
2871
2864
  await driver.async_hard_reset()
2872
2865
 
2873
2866
  with suppress(TimeoutError):
2874
- async with asyncio.timeout(DRIVER_READY_TIMEOUT):
2875
- await wait_driver_ready.wait()
2876
-
2867
+ await wait_for_driver_ready()
2877
2868
  # When resetting the controller, the controller home id is also changed.
2878
2869
  # The controller state in the client is stale after resetting the controller,
2879
2870
  # so get the new home id with a new client using the helper function.
@@ -2886,14 +2877,14 @@ async def websocket_hard_reset_controller(
2886
2877
  # The stale unique id needs to be handled by a repair flow,
2887
2878
  # after the config entry has been reloaded.
2888
2879
  LOGGER.error(
2889
- "Failed to get server version, cannot update config entry"
2880
+ "Failed to get server version, cannot update config entry "
2890
2881
  "unique id with new home id, after controller reset"
2891
2882
  )
2892
2883
  else:
2893
2884
  hass.config_entries.async_update_entry(
2894
2885
  entry, unique_id=str(version_info.home_id)
2895
2886
  )
2896
- await hass.config_entries.async_reload(entry.entry_id)
2887
+ hass.config_entries.async_schedule_reload(entry.entry_id)
2897
2888
 
2898
2889
 
2899
2890
  @websocket_api.websocket_command(
@@ -3100,27 +3091,19 @@ async def websocket_restore_nvm(
3100
3091
  )
3101
3092
  )
3102
3093
 
3103
- @callback
3104
- def set_driver_ready(event: dict) -> None:
3105
- "Set the driver ready event."
3106
- wait_driver_ready.set()
3107
-
3108
- wait_driver_ready = asyncio.Event()
3109
-
3110
3094
  # Set up subscription for progress events
3111
3095
  connection.subscriptions[msg["id"]] = async_cleanup
3112
3096
  msg[DATA_UNSUBSCRIBE] = unsubs = [
3113
3097
  controller.on("nvm convert progress", forward_progress),
3114
3098
  controller.on("nvm restore progress", forward_progress),
3115
- driver.once("driver ready", set_driver_ready),
3116
3099
  ]
3117
3100
 
3101
+ wait_for_driver_ready = async_wait_for_driver_ready_event(entry, driver)
3102
+
3118
3103
  await controller.async_restore_nvm_base64(msg["data"], {"preserveRoutes": False})
3119
3104
 
3120
3105
  with suppress(TimeoutError):
3121
- async with asyncio.timeout(DRIVER_READY_TIMEOUT):
3122
- await wait_driver_ready.wait()
3123
-
3106
+ await wait_for_driver_ready()
3124
3107
  # When restoring the NVM to the controller, the controller home id is also changed.
3125
3108
  # The controller state in the client is stale after restoring the NVM,
3126
3109
  # so get the new home id with a new client using the helper function.
@@ -3133,14 +3116,13 @@ async def websocket_restore_nvm(
3133
3116
  # The stale unique id needs to be handled by a repair flow,
3134
3117
  # after the config entry has been reloaded.
3135
3118
  LOGGER.error(
3136
- "Failed to get server version, cannot update config entry"
3119
+ "Failed to get server version, cannot update config entry "
3137
3120
  "unique id with new home id, after controller NVM restore"
3138
3121
  )
3139
3122
  else:
3140
3123
  hass.config_entries.async_update_entry(
3141
3124
  entry, unique_id=str(version_info.home_id)
3142
3125
  )
3143
-
3144
3126
  await hass.config_entries.async_reload(entry.entry_id)
3145
3127
 
3146
3128
  connection.send_message(
@@ -3152,3 +3134,4 @@ async def websocket_restore_nvm(
3152
3134
  )
3153
3135
  )
3154
3136
  connection.send_result(msg[ID])
3137
+ async_cleanup()
@@ -62,9 +62,12 @@ from .const import (
62
62
  CONF_USB_PATH,
63
63
  CONF_USE_ADDON,
64
64
  DOMAIN,
65
- DRIVER_READY_TIMEOUT,
66
65
  )
67
- from .helpers import CannotConnect, async_get_version_info
66
+ from .helpers import (
67
+ CannotConnect,
68
+ async_get_version_info,
69
+ async_wait_for_driver_ready_event,
70
+ )
68
71
  from .models import ZwaveJSConfigEntry
69
72
 
70
73
  _LOGGER = logging.getLogger(__name__)
@@ -90,6 +93,10 @@ MIN_MIGRATION_SDK_VERSION = AwesomeVersion("6.61")
90
93
 
91
94
  NETWORK_TYPE_NEW = "new"
92
95
  NETWORK_TYPE_EXISTING = "existing"
96
+ ZWAVE_JS_UI_MIGRATION_INSTRUCTIONS = (
97
+ "https://www.home-assistant.io/integrations/zwave_js/"
98
+ "#how-to-migrate-from-one-adapter-to-a-new-adapter-using-z-wave-js-ui"
99
+ )
93
100
 
94
101
 
95
102
  def get_manual_schema(user_input: dict[str, Any]) -> vol.Schema:
@@ -443,7 +450,12 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
443
450
  None,
444
451
  )
445
452
  if not self._reconfigure_config_entry:
446
- return self.async_abort(reason="addon_required")
453
+ return self.async_abort(
454
+ reason="addon_required",
455
+ description_placeholders={
456
+ "zwave_js_ui_migration": ZWAVE_JS_UI_MIGRATION_INSTRUCTIONS,
457
+ },
458
+ )
447
459
 
448
460
  vid = discovery_info.vid
449
461
  pid = discovery_info.pid
@@ -887,7 +899,12 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
887
899
  config_entry = self._reconfigure_config_entry
888
900
  assert config_entry is not None
889
901
  if not self._usb_discovery and not config_entry.data.get(CONF_USE_ADDON):
890
- return self.async_abort(reason="addon_required")
902
+ return self.async_abort(
903
+ reason="addon_required",
904
+ description_placeholders={
905
+ "zwave_js_ui_migration": ZWAVE_JS_UI_MIGRATION_INSTRUCTIONS,
906
+ },
907
+ )
891
908
 
892
909
  try:
893
910
  driver = self._get_driver()
@@ -1396,19 +1413,15 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
1396
1413
  event["bytesWritten"] / event["total"] * 0.5 + 0.5
1397
1414
  )
1398
1415
 
1399
- @callback
1400
- def set_driver_ready(event: dict) -> None:
1401
- "Set the driver ready event."
1402
- wait_driver_ready.set()
1403
-
1404
1416
  driver = self._get_driver()
1405
1417
  controller = driver.controller
1406
- wait_driver_ready = asyncio.Event()
1407
1418
  unsubs = [
1408
1419
  controller.on("nvm convert progress", forward_progress),
1409
1420
  controller.on("nvm restore progress", forward_progress),
1410
- driver.once("driver ready", set_driver_ready),
1411
1421
  ]
1422
+
1423
+ wait_for_driver_ready = async_wait_for_driver_ready_event(config_entry, driver)
1424
+
1412
1425
  try:
1413
1426
  await controller.async_restore_nvm(
1414
1427
  self.backup_data, {"preserveRoutes": False}
@@ -1417,8 +1430,7 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
1417
1430
  raise AbortFlow(f"Failed to restore network: {err}") from err
1418
1431
  else:
1419
1432
  with suppress(TimeoutError):
1420
- async with asyncio.timeout(DRIVER_READY_TIMEOUT):
1421
- await wait_driver_ready.wait()
1433
+ await wait_for_driver_ready()
1422
1434
  try:
1423
1435
  version_info = await async_get_version_info(
1424
1436
  self.hass, config_entry.data[CONF_URL]
@@ -1435,10 +1447,10 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
1435
1447
  self.hass.config_entries.async_update_entry(
1436
1448
  config_entry, unique_id=str(version_info.home_id)
1437
1449
  )
1438
- await self.hass.config_entries.async_reload(config_entry.entry_id)
1439
1450
 
1440
- # Reload the config entry two times to clean up
1441
- # the stale device entry.
1451
+ # The config entry will be also be reloaded when the driver is ready,
1452
+ # by the listener in the package module,
1453
+ # and two reloads are needed to clean up the stale controller device entry.
1442
1454
  # Since both the old and the new controller have the same node id,
1443
1455
  # but different hardware identifiers, the integration
1444
1456
  # will create a new device for the new controller, on the first reload,
@@ -201,7 +201,3 @@ COVER_TILT_PROPERTY_KEYS: set[str | int | None] = {
201
201
  WindowCoveringPropertyKey.VERTICAL_SLATS_ANGLE,
202
202
  WindowCoveringPropertyKey.VERTICAL_SLATS_ANGLE_NO_POSITION,
203
203
  }
204
-
205
- # Other constants
206
-
207
- DRIVER_READY_TIMEOUT = 60
@@ -3,7 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import asyncio
6
- from collections.abc import Callable
6
+ from collections.abc import Callable, Coroutine
7
7
  from dataclasses import astuple, dataclass
8
8
  import logging
9
9
  from typing import Any, cast
@@ -56,6 +56,7 @@ from .const import (
56
56
  )
57
57
  from .models import ZwaveJSConfigEntry
58
58
 
59
+ DRIVER_READY_EVENT_TIMEOUT = 60
59
60
  SERVER_VERSION_TIMEOUT = 10
60
61
 
61
62
 
@@ -588,5 +589,57 @@ async def async_get_version_info(hass: HomeAssistant, ws_address: str) -> Versio
588
589
  return version_info
589
590
 
590
591
 
592
+ @callback
593
+ def async_wait_for_driver_ready_event(
594
+ config_entry: ZwaveJSConfigEntry,
595
+ driver: Driver,
596
+ ) -> Callable[[], Coroutine[Any, Any, None]]:
597
+ """Wait for the driver ready event and the config entry reload.
598
+
599
+ When the driver ready event is received
600
+ the config entry will be reloaded by the integration.
601
+ This function helps wait for that to happen
602
+ before proceeding with further actions.
603
+
604
+ If the config entry is reloaded for another reason,
605
+ this function will not wait for it to be reloaded again.
606
+
607
+ Raises TimeoutError if the driver ready event and reload
608
+ is not received within the specified timeout.
609
+ """
610
+ driver_ready_event_received = asyncio.Event()
611
+ config_entry_reloaded = asyncio.Event()
612
+ unsubscribers: list[Callable[[], None]] = []
613
+
614
+ @callback
615
+ def driver_ready_received(event: dict) -> None:
616
+ """Receive the driver ready event."""
617
+ driver_ready_event_received.set()
618
+
619
+ unsubscribers.append(driver.once("driver ready", driver_ready_received))
620
+
621
+ @callback
622
+ def on_config_entry_state_change() -> None:
623
+ """Check config entry was loaded after driver ready event."""
624
+ if config_entry.state is ConfigEntryState.LOADED:
625
+ config_entry_reloaded.set()
626
+
627
+ unsubscribers.append(
628
+ config_entry.async_on_state_change(on_config_entry_state_change)
629
+ )
630
+
631
+ async def wait_for_events() -> None:
632
+ try:
633
+ async with asyncio.timeout(DRIVER_READY_EVENT_TIMEOUT):
634
+ await asyncio.gather(
635
+ driver_ready_event_received.wait(), config_entry_reloaded.wait()
636
+ )
637
+ finally:
638
+ for unsubscribe in unsubscribers:
639
+ unsubscribe()
640
+
641
+ return wait_for_events
642
+
643
+
591
644
  class CannotConnect(HomeAssistantError):
592
645
  """Indicate connection error."""
@@ -9,7 +9,7 @@
9
9
  "integration_type": "hub",
10
10
  "iot_class": "local_push",
11
11
  "loggers": ["zwave_js_server"],
12
- "requirements": ["pyserial==3.5", "zwave-js-server-python==0.67.0"],
12
+ "requirements": ["pyserial==3.5", "zwave-js-server-python==0.67.1"],
13
13
  "usb": [
14
14
  {
15
15
  "vid": "0658",
@@ -4,7 +4,7 @@
4
4
  "addon_get_discovery_info_failed": "Failed to get Z-Wave add-on discovery info.",
5
5
  "addon_info_failed": "Failed to get Z-Wave add-on info.",
6
6
  "addon_install_failed": "Failed to install the Z-Wave add-on.",
7
- "addon_required": "The Z-Wave migration flow requires the integration to be configured using the Z-Wave Supervisor add-on. You can still use the Backup and Restore buttons to migrate your network manually.",
7
+ "addon_required": "The Z-Wave migration flow requires the integration to be configured using the Z-Wave Supervisor add-on. If you are using Z-Wave JS UI, please follow our [migration instructions]({zwave_js_ui_migration}).",
8
8
  "addon_set_config_failed": "Failed to set Z-Wave configuration.",
9
9
  "addon_start_failed": "Failed to start the Z-Wave add-on.",
10
10
  "addon_stop_failed": "Failed to stop the Z-Wave add-on.",
@@ -4,7 +4,6 @@
4
4
  "addon_get_discovery_info_failed": "Nepoda\u0159ilo se z\u00edskat informace o zji\u0161\u0165ov\u00e1n\u00ed dopl\u0148ku Z-Wave.",
5
5
  "addon_info_failed": "Nepoda\u0159ilo se z\u00edskat informace o dopl\u0148ku Z-Wave.",
6
6
  "addon_install_failed": "Nepoda\u0159ilo se nainstalovat dopln\u011bk Z-Wave.",
7
- "addon_required": "Migra\u010dn\u00ed tok Z-Wave vy\u017eaduje nastaven\u00ed integrace pomoc\u00ed dopl\u0148ku Z-Wave Supervisor. K ru\u010dn\u00ed migraci s\u00edt\u011b m\u016f\u017eete st\u00e1le pou\u017e\u00edvat tla\u010d\u00edtka Z\u00e1lohovat a Obnovit.",
8
7
  "addon_set_config_failed": "Nepoda\u0159ilo se nastavit Z-Wave.",
9
8
  "addon_start_failed": "Nepoda\u0159ilo se spustit dopln\u011bk Z-Wave.",
10
9
  "addon_stop_failed": "Nepoda\u0159ilo se zastavit dopln\u011bk Z-Wave.",
@@ -4,7 +4,7 @@
4
4
  "addon_get_discovery_info_failed": "Discovery-Informationen des Z-Wave-Add-ons konnten nicht abgerufen werden.",
5
5
  "addon_info_failed": "Abruf von Daten des Z-Wave-Add-ons fehlgeschlagen.",
6
6
  "addon_install_failed": "Installation des Z-Wave-Add-ons fehlgeschlagen.",
7
- "addon_required": "F\u00fcr die Z-Wave-Migration muss die Integration mit dem Z-Wave Supervisor-Add-on konfiguriert werden. Du kannst dein Netzwerk weiterhin manuell \u00fcber die Schaltfl\u00e4chen \u201eSichern\u201c und \u201eWiederherstellen\u201c migrieren.",
7
+ "addon_required": "Der Z-Wave-Migrationsablauf erfordert die Konfiguration der Integration mit dem Z-Wave Supervisor Add-on. Wenn du Z-Wave JS UI verwendest, folge bitte unserer [Migrationsanleitung]({zwave_js_ui_migration}).",
8
8
  "addon_set_config_failed": "Einstellen der Z-Wave-Konfiguration fehlgeschlagen",
9
9
  "addon_start_failed": "Starten des Z-Wave-Add-ons fehlgeschlagen.",
10
10
  "addon_stop_failed": "Das Z-Wave-Add-on konnte nicht gestoppt werden.",
@@ -4,7 +4,6 @@
4
4
  "addon_get_discovery_info_failed": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03bb\u03ae\u03c8\u03b7\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03b9\u03ce\u03bd \u03b1\u03bd\u03b1\u03ba\u03ac\u03bb\u03c5\u03c8\u03b7\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf\u03c5 Z-Wave.",
5
5
  "addon_info_failed": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03bb\u03ae\u03c8\u03b7\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03b9\u03ce\u03bd \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf\u03c5 Z-Wave.",
6
6
  "addon_install_failed": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf\u03c5 Z-Wave.",
7
- "addon_required": "\u0397 \u03c1\u03bf\u03ae \u03bc\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7\u03c2 Z-Wave \u03b1\u03c0\u03b1\u03b9\u03c4\u03b5\u03af \u03c4\u03b7 \u03b4\u03b9\u03b1\u03bc\u03cc\u03c1\u03c6\u03c9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7\u03c2 \u03bc\u03b5 \u03c4\u03b7 \u03c7\u03c1\u03ae\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf\u03c5 Z-Wave Supervisor. \u039c\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03b1\u03ba\u03cc\u03bc\u03b1 \u03bd\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b1 \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2 \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c6\u03c9\u03bd \u03b1\u03c3\u03c6\u03b1\u03bb\u03b5\u03af\u03b1\u03c2 \u03ba\u03b1\u03b9 \u03b5\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac\u03c2 \u03b3\u03b9\u03b1 \u03bc\u03b5\u03c4\u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03b4\u03af\u03ba\u03c4\u03cd\u03bf\u03c5 \u03c3\u03b1\u03c2 \u03c7\u03b5\u03b9\u03c1\u03bf\u03ba\u03af\u03bd\u03b7\u03c4\u03b1.",
8
7
  "addon_set_config_failed": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03b4\u03b9\u03b1\u03bc\u03cc\u03c1\u03c6\u03c9\u03c3\u03b7\u03c2 Z-Wave.",
9
8
  "addon_start_failed": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf\u03c5 Z-Wave.",
10
9
  "addon_stop_failed": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03b4\u03b9\u03b1\u03ba\u03bf\u03c0\u03ae\u03c2 \u03c4\u03bf\u03c5 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf\u03c5 Z-Wave.",
@@ -4,7 +4,6 @@
4
4
  "addon_get_discovery_info_failed": "Failed to get Z-Wave add-on discovery info.",
5
5
  "addon_info_failed": "Failed to get Z-Wave add-on info.",
6
6
  "addon_install_failed": "Failed to install the Z-Wave add-on.",
7
- "addon_required": "The Z-Wave migration flow requires the integration to be configured using the Z-Wave Supervisor add-on. You can still use the Backup and Restore buttons to migrate your network manually.",
8
7
  "addon_set_config_failed": "Failed to set Z-Wave configuration.",
9
8
  "addon_start_failed": "Failed to start the Z-Wave add-on.",
10
9
  "addon_stop_failed": "Failed to stop the Z-Wave add-on.",
@@ -4,7 +4,7 @@
4
4
  "addon_get_discovery_info_failed": "Failed to get Z-Wave add-on discovery info.",
5
5
  "addon_info_failed": "Failed to get Z-Wave add-on info.",
6
6
  "addon_install_failed": "Failed to install the Z-Wave add-on.",
7
- "addon_required": "The Z-Wave migration flow requires the integration to be configured using the Z-Wave Supervisor add-on. You can still use the Backup and Restore buttons to migrate your network manually.",
7
+ "addon_required": "The Z-Wave migration flow requires the integration to be configured using the Z-Wave Supervisor add-on. If you are using Z-Wave JS UI, please follow our [migration instructions]({zwave_js_ui_migration}).",
8
8
  "addon_set_config_failed": "Failed to set Z-Wave configuration.",
9
9
  "addon_start_failed": "Failed to start the Z-Wave add-on.",
10
10
  "addon_stop_failed": "Failed to stop the Z-Wave add-on.",
@@ -4,7 +4,7 @@
4
4
  "addon_get_discovery_info_failed": "No se pudo obtener la informaci\u00f3n de descubrimiento del complemento Z-Wave.",
5
5
  "addon_info_failed": "No se pudo obtener la informaci\u00f3n del complemento Z-Wave.",
6
6
  "addon_install_failed": "No se pudo instalar el complemento Z-Wave.",
7
- "addon_required": "El flujo de migraci\u00f3n de Z-Wave requiere que la integraci\u00f3n se configure mediante el complemento Z-Wave Supervisor. Puedes usar los botones \"Copia de seguridad\" y \"Restaurar\" para migrar tu red manualmente.",
7
+ "addon_required": "El flujo de migraci\u00f3n de Z-Wave requiere que la integraci\u00f3n se configure mediante el complemento Z-Wave Supervisor. Si utilizas la IU de Z-Wave JS, por favor, sigue nuestras [instrucciones de migraci\u00f3n]({zwave_js_ui_migration}).",
8
8
  "addon_set_config_failed": "No se pudo establecer la configuraci\u00f3n Z-Wave.",
9
9
  "addon_start_failed": "No se pudo iniciar el complemento Z-Wave.",
10
10
  "addon_stop_failed": "No se pudo detener el complemento Z-Wave.",
@@ -4,7 +4,7 @@
4
4
  "addon_get_discovery_info_failed": "Z-Wave lisandmooduli tuvastusteabe hankimine nurjus.",
5
5
  "addon_info_failed": "Z-Wave lisandmooduli teabe hankimine nurjus.",
6
6
  "addon_install_failed": "Z-Wave lisandmooduli paigaldamine nurjus.",
7
- "addon_required": "Z-Wave'i migratsioonivoog n\u00f5uab sidumise konfigureerimist Z-Wave Supervisori lisaseadme abil. V\u00f5rgustiku k\u00e4sitsi migreerimiseks saad endiselt kasutada nuppe Backup ja Restore (varundamine ja taastamine).",
7
+ "addon_required": "Z-Wave'i migratsioonivoog n\u00f5uab sidumise seadistamist Z-Wave Supervisori lisaseadme abil. Kui kasutad Z-Wave JS UI-d, j\u00e4rgi meie [migratsiooni juhiseid]({zwave_js_ui_migration}).",
8
8
  "addon_set_config_failed": "Z-Wave konfiguratsiooni m\u00e4\u00e4ramine nurjus.",
9
9
  "addon_start_failed": "Z-Wave lisandmooduli k\u00e4ivitamine nurjus.",
10
10
  "addon_stop_failed": "Z-Wave'i lisandmooduli peatamine nurjus.",