homeassistant 2025.9.0b0__py3-none-any.whl → 2025.9.0b1__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 (214) hide show
  1. homeassistant/components/ai_task/translations/cs.json +25 -3
  2. homeassistant/components/ai_task/translations/fr.json +22 -0
  3. homeassistant/components/ai_task/translations/lt.json +22 -0
  4. homeassistant/components/ai_task/translations/pt.json +22 -0
  5. homeassistant/components/ai_task/translations/sk.json +1 -1
  6. homeassistant/components/airgradient/translations/pt.json +1 -0
  7. homeassistant/components/airos/manifest.json +1 -1
  8. homeassistant/components/airos/translations/lt.json +18 -1
  9. homeassistant/components/aladdin_connect/translations/cs.json +30 -1
  10. homeassistant/components/aladdin_connect/translations/et.json +30 -1
  11. homeassistant/components/aladdin_connect/translations/fr.json +10 -0
  12. homeassistant/components/aladdin_connect/translations/ga.json +30 -1
  13. homeassistant/components/aladdin_connect/translations/lt.json +30 -1
  14. homeassistant/components/aladdin_connect/translations/nl.json +28 -0
  15. homeassistant/components/aladdin_connect/translations/pt.json +30 -1
  16. homeassistant/components/aladdin_connect/translations/sk.json +30 -1
  17. homeassistant/components/aladdin_connect/translations/zh-Hans.json +30 -1
  18. homeassistant/components/aladdin_connect/translations/zh-Hant.json +30 -1
  19. homeassistant/components/alarm_control_panel/translations/cs.json +3 -3
  20. homeassistant/components/alexa_devices/__init__.py +1 -1
  21. homeassistant/components/alexa_devices/const.py +9 -9
  22. homeassistant/components/alexa_devices/sensor.py +3 -0
  23. homeassistant/components/alexa_devices/translations/lt.json +7 -0
  24. homeassistant/components/alexa_devices/translations/pt.json +11 -0
  25. homeassistant/components/alexa_devices/translations/sk.json +20 -20
  26. homeassistant/components/asuswrt/manifest.json +1 -1
  27. homeassistant/components/august/translations/lt.json +23 -1
  28. homeassistant/components/august/translations/pt.json +26 -1
  29. homeassistant/components/backup/translations/de.json +1 -1
  30. homeassistant/components/bayesian/strings.json +1 -1
  31. homeassistant/components/bayesian/translations/cs.json +1 -1
  32. homeassistant/components/bayesian/translations/de.json +17 -17
  33. homeassistant/components/bayesian/translations/en-GB.json +1 -1
  34. homeassistant/components/bayesian/translations/en.json +3 -3
  35. homeassistant/components/bayesian/translations/et.json +1 -1
  36. homeassistant/components/bayesian/translations/fr.json +41 -0
  37. homeassistant/components/bayesian/translations/ga.json +8 -3
  38. homeassistant/components/bayesian/translations/lt.json +200 -0
  39. homeassistant/components/bayesian/translations/pl.json +7 -0
  40. homeassistant/components/bayesian/translations/pt.json +257 -0
  41. homeassistant/components/bayesian/translations/sk.json +5 -5
  42. homeassistant/components/bayesian/translations/zh-Hans.json +1 -1
  43. homeassistant/components/bayesian/translations/zh-Hant.json +1 -1
  44. homeassistant/components/bluetooth/manifest.json +2 -2
  45. homeassistant/components/bring/translations/sk.json +1 -1
  46. homeassistant/components/button/translations/ru.json +1 -1
  47. homeassistant/components/cover/translations/mk.json +13 -5
  48. homeassistant/components/cover/translations/pl.json +1 -1
  49. homeassistant/components/deconz/translations/ga.json +14 -0
  50. homeassistant/components/downloader/translations/sk.json +1 -1
  51. homeassistant/components/dsmr/translations/ga.json +8 -0
  52. homeassistant/components/dwd_weather_warnings/translations/sk.json +1 -1
  53. homeassistant/components/ecovacs/manifest.json +1 -1
  54. homeassistant/components/enphase_envoy/translations/lt.json +6 -0
  55. homeassistant/components/eq3btsmart/manifest.json +1 -1
  56. homeassistant/components/esphome/manifest.json +2 -2
  57. homeassistant/components/esphome/translations/sk.json +1 -1
  58. homeassistant/components/flux_led/translations/sk.json +1 -1
  59. homeassistant/components/frontend/manifest.json +1 -1
  60. homeassistant/components/fully_kiosk/translations/fr.json +5 -0
  61. homeassistant/components/fully_kiosk/translations/lt.json +3 -0
  62. homeassistant/components/fully_kiosk/translations/pt.json +3 -0
  63. homeassistant/components/fyta/translations/fr.json +3 -0
  64. homeassistant/components/fyta/translations/lt.json +64 -2
  65. homeassistant/components/fyta/translations/pt.json +64 -2
  66. homeassistant/components/google_assistant_sdk/translations/sk.json +1 -1
  67. homeassistant/components/google_generative_ai_conversation/translations/cs.json +3 -3
  68. homeassistant/components/google_generative_ai_conversation/translations/sk.json +1 -1
  69. homeassistant/components/google_mail/translations/sk.json +1 -1
  70. homeassistant/components/google_photos/translations/sk.json +1 -1
  71. homeassistant/components/google_sheets/translations/sk.json +1 -1
  72. homeassistant/components/google_tasks/translations/sk.json +1 -1
  73. homeassistant/components/govee_light_local/__init__.py +16 -3
  74. homeassistant/components/govee_light_local/config_flow.py +28 -10
  75. homeassistant/components/govee_light_local/coordinator.py +39 -24
  76. homeassistant/components/habitica/translations/cs.json +3 -3
  77. homeassistant/components/hassio/translations/sk.json +1 -1
  78. homeassistant/components/history_stats/translations/sk.json +3 -3
  79. homeassistant/components/home_connect/translations/sk.json +1 -1
  80. homeassistant/components/husqvarna_automower_ble/translations/cs.json +35 -1
  81. homeassistant/components/husqvarna_automower_ble/translations/lt.json +35 -1
  82. homeassistant/components/husqvarna_automower_ble/translations/pt.json +35 -1
  83. homeassistant/components/hyperion/translations/sk.json +1 -1
  84. homeassistant/components/iaqualink/__init__.py +10 -0
  85. homeassistant/components/iaqualink/entity.py +1 -0
  86. homeassistant/components/imeon_inverter/translations/lt.json +54 -0
  87. homeassistant/components/imeon_inverter/translations/pt.json +79 -0
  88. homeassistant/components/knx/translations/lt.json +245 -0
  89. homeassistant/components/knx/translations/pt.json +270 -0
  90. homeassistant/components/lg_thinq/translations/lt.json +3 -0
  91. homeassistant/components/lg_thinq/translations/pt.json +4 -0
  92. homeassistant/components/lock/translations/pl.json +1 -0
  93. homeassistant/components/logbook/translations/ko.json +2 -1
  94. homeassistant/components/lyric/translations/sk.json +1 -1
  95. homeassistant/components/mastodon/__init__.py +13 -2
  96. homeassistant/components/mastodon/config_flow.py +7 -2
  97. homeassistant/components/mastodon/diagnostics.py +8 -3
  98. homeassistant/components/matter/translations/lt.json +36 -0
  99. homeassistant/components/matter/translations/pt.json +27 -0
  100. homeassistant/components/media_player/translations/cs.json +5 -0
  101. homeassistant/components/media_player/translations/fr.json +3 -0
  102. homeassistant/components/media_player/translations/lt.json +4 -0
  103. homeassistant/components/media_player/translations/pt.json +5 -0
  104. homeassistant/components/media_player/translations/sk.json +1 -0
  105. homeassistant/components/media_player/translations/zh-Hans.json +1 -0
  106. homeassistant/components/media_player/translations/zh-Hant.json +1 -0
  107. homeassistant/components/meteo_france/const.py +1 -1
  108. homeassistant/components/metoffice/translations/sk.json +1 -1
  109. homeassistant/components/miele/translations/lt.json +12 -0
  110. homeassistant/components/miele/translations/pt.json +12 -0
  111. homeassistant/components/miele/translations/sk.json +8 -8
  112. homeassistant/components/modbus/translations/sk.json +1 -1
  113. homeassistant/components/mqtt/translations/cs.json +52 -0
  114. homeassistant/components/mqtt/translations/fr.json +11 -0
  115. homeassistant/components/mqtt/translations/lt.json +47 -0
  116. homeassistant/components/mqtt/translations/nl.json +68 -0
  117. homeassistant/components/mqtt/translations/pt.json +81 -0
  118. homeassistant/components/mqtt/translations/sk.json +8 -8
  119. homeassistant/components/mqtt/translations/zh-Hans.json +1 -0
  120. homeassistant/components/nest/translations/sk.json +2 -2
  121. homeassistant/components/nexia/manifest.json +1 -1
  122. homeassistant/components/nextdns/translations/lt.json +3 -0
  123. homeassistant/components/niko_home_control/translations/lt.json +10 -1
  124. homeassistant/components/niko_home_control/translations/pt.json +10 -1
  125. homeassistant/components/ollama/translations/cs.json +3 -3
  126. homeassistant/components/onewire/translations/lt.json +3 -0
  127. homeassistant/components/onvif/binary_sensor.py +1 -1
  128. homeassistant/components/onvif/sensor.py +1 -1
  129. homeassistant/components/open_router/translations/cs.json +2 -2
  130. homeassistant/components/openai_conversation/translations/cs.json +3 -3
  131. homeassistant/components/opower/translations/sk.json +1 -1
  132. homeassistant/components/playstation_network/__init__.py +4 -1
  133. homeassistant/components/playstation_network/config_flow.py +4 -13
  134. homeassistant/components/playstation_network/coordinator.py +55 -8
  135. homeassistant/components/playstation_network/helpers.py +4 -1
  136. homeassistant/components/playstation_network/notify.py +52 -27
  137. homeassistant/components/playstation_network/strings.json +11 -5
  138. homeassistant/components/playstation_network/translations/bg.json +0 -5
  139. homeassistant/components/playstation_network/translations/cs.json +5 -5
  140. homeassistant/components/playstation_network/translations/de.json +5 -5
  141. homeassistant/components/playstation_network/translations/en-GB.json +5 -5
  142. homeassistant/components/playstation_network/translations/en.json +5 -5
  143. homeassistant/components/playstation_network/translations/es.json +1 -13
  144. homeassistant/components/playstation_network/translations/et.json +0 -17
  145. homeassistant/components/playstation_network/translations/fr.json +1 -1
  146. homeassistant/components/playstation_network/translations/ga.json +0 -17
  147. homeassistant/components/playstation_network/translations/it.json +1 -1
  148. homeassistant/components/playstation_network/translations/lt.json +0 -17
  149. homeassistant/components/playstation_network/translations/pt.json +5 -5
  150. homeassistant/components/playstation_network/translations/sk.json +0 -17
  151. homeassistant/components/playstation_network/translations/zh-Hans.json +0 -17
  152. homeassistant/components/playstation_network/translations/zh-Hant.json +5 -5
  153. homeassistant/components/pooldose/translations/lt.json +102 -0
  154. homeassistant/components/pooldose/translations/nl.json +7 -2
  155. homeassistant/components/pooldose/translations/pt.json +102 -0
  156. homeassistant/components/profiler/translations/cs.json +2 -2
  157. homeassistant/components/qbus/translations/lt.json +8 -0
  158. homeassistant/components/recorder/translations/cs.json +2 -2
  159. homeassistant/components/remember_the_milk/translations/cs.json +7 -7
  160. homeassistant/components/reolink/manifest.json +1 -1
  161. homeassistant/components/reolink/number.py +3 -4
  162. homeassistant/components/reolink/select.py +0 -1
  163. homeassistant/components/reolink/translations/fr.json +3 -0
  164. homeassistant/components/reolink/translations/pt.json +9 -0
  165. homeassistant/components/roborock/translations/sk.json +9 -9
  166. homeassistant/components/sensor/translations/sk.json +1 -1
  167. homeassistant/components/sleep_as_android/translations/de.json +1 -1
  168. homeassistant/components/snapcast/translations/sk.json +2 -2
  169. homeassistant/components/sonos/translations/lt.json +12 -0
  170. homeassistant/components/sonos/translations/pt.json +15 -0
  171. homeassistant/components/sun/translations/sk.json +1 -1
  172. homeassistant/components/switchbot_cloud/translations/lt.json +16 -0
  173. homeassistant/components/switchbot_cloud/translations/pt.json +16 -0
  174. homeassistant/components/tautulli/translations/sk.json +1 -1
  175. homeassistant/components/template/translations/lt.json +102 -0
  176. homeassistant/components/template/translations/pl.json +140 -7
  177. homeassistant/components/template/translations/pt.json +149 -0
  178. homeassistant/components/template/translations/sk.json +6 -6
  179. homeassistant/components/togrill/translations/fr.json +4 -0
  180. homeassistant/components/togrill/translations/lt.json +30 -0
  181. homeassistant/components/togrill/translations/pt.json +49 -0
  182. homeassistant/components/tts/translations/cs.json +1 -1
  183. homeassistant/components/tuya/translations/pl.json +1 -1
  184. homeassistant/components/velux/translations/cs.json +7 -0
  185. homeassistant/components/velux/translations/lt.json +7 -0
  186. homeassistant/components/velux/translations/nl.json +7 -0
  187. homeassistant/components/velux/translations/pt.json +7 -0
  188. homeassistant/components/volvo/translations/lt.json +128 -0
  189. homeassistant/components/volvo/translations/pt.json +137 -0
  190. homeassistant/components/volvo/translations/sk.json +1 -1
  191. homeassistant/components/wallbox/translations/sk.json +1 -1
  192. homeassistant/components/withings/translations/sk.json +1 -1
  193. homeassistant/components/yolink/translations/pt.json +13 -0
  194. homeassistant/components/zha/translations/fr.json +48 -0
  195. homeassistant/components/zha/translations/lt.json +63 -0
  196. homeassistant/components/zha/translations/pl.json +3 -0
  197. homeassistant/components/zha/translations/pt.json +69 -0
  198. homeassistant/components/zha/translations/sk.json +3 -3
  199. homeassistant/components/zwave_js/binary_sensor.py +14 -6
  200. homeassistant/components/zwave_js/translations/lt.json +10 -0
  201. homeassistant/components/zwave_js/translations/pt.json +10 -0
  202. homeassistant/components/zwave_js/translations/sk.json +2 -2
  203. homeassistant/components/zwave_me/translations/sk.json +1 -1
  204. homeassistant/const.py +1 -1
  205. homeassistant/helpers/device_registry.py +37 -14
  206. homeassistant/helpers/entity_registry.py +68 -29
  207. homeassistant/package_constraints.txt +7 -3
  208. {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b1.dist-info}/METADATA +1 -1
  209. {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b1.dist-info}/RECORD +214 -210
  210. {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b1.dist-info}/WHEEL +0 -0
  211. {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b1.dist-info}/entry_points.txt +0 -0
  212. {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b1.dist-info}/licenses/LICENSE.md +0 -0
  213. {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b1.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  214. {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b1.dist-info}/top_level.txt +0 -0
@@ -23,7 +23,7 @@
23
23
  },
24
24
  "services": {
25
25
  "press": {
26
- "description": "\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043d\u043e\u043f\u043a\u0438.",
26
+ "description": "\u0418\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443.",
27
27
  "name": "\u041d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443"
28
28
  }
29
29
  },
@@ -39,7 +39,8 @@
39
39
  },
40
40
  "services": {
41
41
  "close_cover": {
42
- "description": "\u0417\u0430\u0442\u0432\u043e\u0440\u0430 \u0440\u043e\u043b\u0435\u0442\u043d\u0430."
42
+ "description": "\u0417\u0430\u0442\u0432\u043e\u0440\u0430 \u0440\u043e\u043b\u0435\u0442\u043d\u0430.",
43
+ "name": "\u0417\u0430\u0442\u0432\u043e\u0440\u0438"
43
44
  },
44
45
  "close_cover_tilt": {
45
46
  "description": "\u041d\u0430\u0432\u0435\u0434\u043d\u0443\u0432\u0430 \u043a\u0430\u043f\u0430\u043a \u0437\u0430 \u0434\u0430 \u0441\u0435 \u0437\u0430\u0442\u0432\u043e\u0440\u0438.",
@@ -47,7 +48,7 @@
47
48
  },
48
49
  "open_cover": {
49
50
  "description": "\u041e\u0442\u0432\u043e\u0440\u0430 \u0440\u043e\u043b\u0435\u0442\u043d\u0430.",
50
- "name": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u043e"
51
+ "name": "\u041e\u0442\u0432\u043e\u0440\u0438"
51
52
  },
52
53
  "set_cover_position": {
53
54
  "description": "\u0408\u0430 \u043f\u043e\u043c\u0435\u0441\u0442\u0443\u0432\u0430 \u0440\u043e\u043b\u0435\u0442\u043d\u0430\u0442\u0430 \u0432\u043e \u043e\u0434\u0440\u0435\u0434\u0435\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0458\u0430.",
@@ -70,13 +71,20 @@
70
71
  "name": "\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0458\u0430 \u043d\u0430 \u043d\u0430\u0432\u0430\u043b\u0443\u0432\u0430\u045a\u0435"
71
72
  },
72
73
  "stop_cover": {
73
- "description": "\u0413\u043e \u0437\u0430\u043f\u0438\u0440\u0430 \u0434\u0432\u0438\u0436\u0435\u045a\u0435\u0442\u043e \u043d\u0430 \u0440\u043e\u043b\u0435\u0442\u043d\u0430\u0442\u0430."
74
+ "description": "\u0413\u043e \u0437\u0430\u043f\u0438\u0440\u0430 \u0434\u0432\u0438\u0436\u0435\u045a\u0435\u0442\u043e \u043d\u0430 \u0440\u043e\u043b\u0435\u0442\u043d\u0430\u0442\u0430.",
75
+ "name": "\u0421\u0442\u043e\u043f"
76
+ },
77
+ "stop_cover_tilt": {
78
+ "description": "\u0413\u043e \u0437\u0430\u043f\u0438\u0440\u0430 \u0434\u0432\u0438\u0436\u0435\u045a\u0435\u0442\u043e \u043d\u0430 \u043a\u0430\u043f\u0430\u043a\u043e\u0442 \u043f\u0440\u0438 \u043d\u0430\u0432\u0430\u043b\u0443\u0432\u0430\u045a\u0435.",
79
+ "name": "\u0421\u0442\u043e\u043f \u043d\u0430 \u043d\u0430\u0432\u0430\u043b\u0443\u0432\u0430\u045a\u0435\u0442\u043e"
74
80
  },
75
81
  "toggle": {
76
- "description": "\u0412\u043a\u043b\u0443\u0447\u0443\u0432\u0430 \u043a\u0430\u043f\u0430\u043a \u043e\u0442\u0432\u043e\u0440\u0435\u043d/\u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d."
82
+ "description": "\u0412\u043a\u043b\u0443\u0447\u0443\u0432\u0430 \u043a\u0430\u043f\u0430\u043a \u043e\u0442\u0432\u043e\u0440\u0435\u043d/\u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d.",
83
+ "name": "\u041f\u0440\u0435\u043a\u0438\u043d\u0443\u0432\u0430\u0447"
77
84
  },
78
85
  "toggle_cover_tilt": {
79
- "description": "\u0412\u043a\u043b\u0443\u0447\u0443\u0432\u0430 \u043d\u0430\u043a\u043b\u043e\u043d \u043d\u0430 \u043a\u0430\u043f\u0430\u043a\u043e\u0442 \u043e\u0442\u0432\u043e\u0440\u0435\u043d/\u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d."
86
+ "description": "\u0412\u043a\u043b\u0443\u0447\u0443\u0432\u0430 \u043d\u0430\u043a\u043b\u043e\u043d \u043d\u0430 \u043a\u0430\u043f\u0430\u043a\u043e\u0442 \u043e\u0442\u0432\u043e\u0440\u0435\u043d/\u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d.",
87
+ "name": "\u0412\u043a\u043b\u0443\u0447\u0438/\u0438\u0441\u043a\u043b\u0443\u0447\u0438 \u043d\u0430\u0432\u0430\u043b\u0443\u0432\u0430\u045a\u0435"
80
88
  }
81
89
  }
82
90
  }
@@ -51,7 +51,7 @@
51
51
  "name": "Markiza"
52
52
  },
53
53
  "blind": {
54
- "name": "\u017baluzje"
54
+ "name": "\u017baluzja"
55
55
  },
56
56
  "curtain": {
57
57
  "name": "Zas\u0142ona"
@@ -131,7 +131,21 @@
131
131
  }
132
132
  }
133
133
  },
134
+ "device_refresh": {
135
+ "fields": {
136
+ "bridgeid": {
137
+ "description": "Teaghr\u00e1n uath\u00fail do gach crua-earra\u00ed deCONZ. Is f\u00e9idir \u00e9 a fh\u00e1il mar chuid d'ainm an chomhth\u00e1thaithe. \u00das\u00e1ideach m\u00e1 ritheann t\u00fa il-chomhth\u00e1th\u00fach\u00e1in deCONZ.",
138
+ "name": "Aitheant\u00f3ir droichid"
139
+ }
140
+ }
141
+ },
134
142
  "remove_orphaned_entries": {
143
+ "fields": {
144
+ "bridgeid": {
145
+ "description": "Teaghr\u00e1n uath\u00fail do gach crua-earra\u00ed deCONZ. Is f\u00e9idir \u00e9 a fh\u00e1il mar chuid d'ainm an chomhth\u00e1thaithe. \u00das\u00e1ideach m\u00e1 ritheann t\u00fa il-chomhth\u00e1th\u00fach\u00e1in deCONZ.",
146
+ "name": "Aitheant\u00f3ir droichid"
147
+ }
148
+ },
135
149
  "name": "Bain iontr\u00e1lacha d\u00edlleachta"
136
150
  }
137
151
  }
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "exceptions": {
16
16
  "subdir_invalid": {
17
- "message": "Neplatn\u00fd podadres\u00e1r, dostal: {subdir}"
17
+ "message": "Neplatn\u00fd pod adres\u00e1r, dostal: {subdir}"
18
18
  },
19
19
  "subdir_not_relative": {
20
20
  "message": "Podadres\u00e1r mus\u00ed by\u0165 relat\u00edvny, m\u00e1m: {subdir}"
@@ -1,5 +1,13 @@
1
1
  {
2
2
  "config": {
3
+ "abort": {
4
+ "already_configured": "T\u00e1 an gl\u00e9as cumraithe cheana f\u00e9in",
5
+ "cannot_connect": "Theip ar an nascadh"
6
+ },
7
+ "error": {
8
+ "already_configured": "T\u00e1 an gl\u00e9as cumraithe cheana f\u00e9in",
9
+ "cannot_connect": "Theip ar an nascadh"
10
+ },
3
11
  "step": {
4
12
  "setup_network": {
5
13
  "data": {
@@ -17,7 +17,7 @@
17
17
  "region_device_tracker": "Entita sledovania zariadenia",
18
18
  "region_identifier": "Warncell ID alebo n\u00e1zov"
19
19
  },
20
- "description": "Na identifik\u00e1ciu po\u017eadovanej oblasti je potrebn\u00e9 bu\u010f ID/n\u00e1zov bojovej bunky, alebo sledovacie zariadenie. Poskytnut\u00fd sledova\u010d zariadenia mus\u00ed obsahova\u0165 atrib\u00faty \"Latitude\" (zemepisn\u00e1 \u0161\u00edrka) a \"Longitude\" (zemepisn\u00e1 d\u013a\u017eka)."
20
+ "description": "Na identifik\u00e1ciu po\u017eadovanej oblasti je potrebn\u00e9 bu\u010f ID/n\u00e1zov bojovej bunky, alebo sledovacie zariadenie. Poskytnut\u00fd sledova\u010d zariadenia mus\u00ed obsahova\u0165 atrib\u00faty 'zemepisn\u00e1 \u0161\u00edrka' a 'zemepisn\u00e1 d\u013a\u017eka'."
21
21
  }
22
22
  }
23
23
  },
@@ -6,5 +6,5 @@
6
6
  "documentation": "https://www.home-assistant.io/integrations/ecovacs",
7
7
  "iot_class": "cloud_push",
8
8
  "loggers": ["sleekxmppfs", "sucks", "deebot_client"],
9
- "requirements": ["py-sucks==0.9.11", "deebot-client==13.6.0"]
9
+ "requirements": ["py-sucks==0.9.11", "deebot-client==13.7.0"]
10
10
  }
@@ -204,6 +204,9 @@
204
204
  "energy_today": {
205
205
  "name": "Energijos gamyba \u0161iandien"
206
206
  },
207
+ "grid_status": {
208
+ "name": "Tinklo b\u016bsena"
209
+ },
207
210
  "last_report_duration": {
208
211
  "name": "Paskutin\u0117s ataskaitos trukm\u0117"
209
212
  },
@@ -261,6 +264,9 @@
261
264
  "max_reported": {
262
265
  "name": "Did\u017eiausia galia per vis\u0105 eksploatavimo laikotarp\u012f"
263
266
  },
267
+ "mid_state": {
268
+ "name": "MID b\u016bsena"
269
+ },
264
270
  "net_consumption": {
265
271
  "name": "Dabartinis grynosios energijos suvartojimas"
266
272
  },
@@ -22,5 +22,5 @@
22
22
  "integration_type": "device",
23
23
  "iot_class": "local_polling",
24
24
  "loggers": ["eq3btsmart"],
25
- "requirements": ["eq3btsmart==2.1.0", "bleak-esphome==3.1.0"]
25
+ "requirements": ["eq3btsmart==2.1.0", "bleak-esphome==3.2.0"]
26
26
  }
@@ -17,9 +17,9 @@
17
17
  "mqtt": ["esphome/discover/#"],
18
18
  "quality_scale": "platinum",
19
19
  "requirements": [
20
- "aioesphomeapi==39.0.0",
20
+ "aioesphomeapi==39.0.1",
21
21
  "esphome-dashboard-api==1.3.0",
22
- "bleak-esphome==3.1.0"
22
+ "bleak-esphome==3.2.0"
23
23
  ],
24
24
  "zeroconf": ["_esphomelib._tcp.local."]
25
25
  }
@@ -14,7 +14,7 @@
14
14
  "reauth_successful": "Op\u00e4tovn\u00e9 overenie bolo \u00faspe\u0161n\u00e9",
15
15
  "reauth_unique_id_changed": "**Overenie `{name}` bolo preru\u0161en\u00e9**, preto\u017ee adresa `{host}` ukazuje na in\u00e9 zariadenie: `{unexpected_device_name}` (MAC: `{unexpected_mac}`) namiesto o\u010dak\u00e1van\u00e9ho (MAC: `{expected_mac}`).",
16
16
  "reconfigure_already_configured": "Zariadenie `{name}` s adresou MAC `{mac}` je u\u017e nakonfigurovan\u00e9 ako `{title}`. Rekonfigur\u00e1cia bola preru\u0161en\u00e1, preto\u017ee sa zd\u00e1, \u017ee nov\u00e1 konfigur\u00e1cia sa vz\u0165ahuje na in\u00e9 zariadenie.",
17
- "reconfigure_name_conflict": "**Prekonfigur\u00e1cia `{name}` bola preru\u0161en\u00e1**, preto\u017ee adresa `{host}` ukazuje na zariadenie s n\u00e1zvom `{name}` (MAC: `{expected_mac}`), ktor\u00e9 sa u\u017e pou\u017e\u00edva v inej konfigura\u010dnej polo\u017eke: `{existing_title}`.",
17
+ "reconfigure_name_conflict": "**Rekonfigur\u00e1cia `{name}` bola preru\u0161en\u00e1**, preto\u017ee adresa `{host}` ukazuje na zariadenie s n\u00e1zvom `{name}` (MAC: `{expected_mac}`), ktor\u00e9 sa u\u017e pou\u017e\u00edva v inej konfigura\u010dnej polo\u017eke: `{existing_title}`.",
18
18
  "reconfigure_successful": "Rekonfigur\u00e1cia bola \u00faspe\u0161n\u00e1",
19
19
  "reconfigure_unique_id_changed": "**Nastavenie `{name}` bolo preru\u0161en\u00e9**, preto\u017ee adresa `{host}` ukazuje na in\u00e9 zariadenie: `{unexpected_device_name}` (MAC: `{unexpected_mac}`) namiesto o\u010dak\u00e1van\u00e9ho (MAC: `{expected_mac}`).",
20
20
  "service_received": "Akcia prijat\u00e1"
@@ -143,7 +143,7 @@
143
143
  "description": "Nastav\u00ed p\u00e1sov\u00e9 z\u00f3ny pre adresovate\u013en\u00e9 ovl\u00e1da\u010de v3 (0xA3).",
144
144
  "fields": {
145
145
  "colors": {
146
- "description": "Zoznam farieb pre ka\u017ed\u00fa z\u00f3nu (RGB). D\u013a\u017eka ka\u017edej z\u00f3ny je po\u010det pixelov na segment vydelen\u00fd po\u010dtom farieb. (Max. 2048 farieb).",
146
+ "description": "Zoznam farieb pre ka\u017ed\u00fa z\u00f3nu (RGB). D\u013a\u017eka ka\u017edej z\u00f3ny je po\u010det pixlov na segment vydelen\u00fd po\u010dtom farieb. (Max. 2048 farieb).",
147
147
  "name": "Farby"
148
148
  },
149
149
  "effect": {
@@ -20,5 +20,5 @@
20
20
  "documentation": "https://www.home-assistant.io/integrations/frontend",
21
21
  "integration_type": "system",
22
22
  "quality_scale": "internal",
23
- "requirements": ["home-assistant-frontend==20250827.0"]
23
+ "requirements": ["home-assistant-frontend==20250828.0"]
24
24
  }
@@ -39,6 +39,11 @@
39
39
  }
40
40
  },
41
41
  "entity": {
42
+ "button": {
43
+ "clear_cache": {
44
+ "name": "Vider le cache du navigateur"
45
+ }
46
+ },
42
47
  "image": {
43
48
  "screenshot": {
44
49
  "name": "Capture d'\u00e9cran"
@@ -55,6 +55,9 @@
55
55
  }
56
56
  },
57
57
  "button": {
58
+ "clear_cache": {
59
+ "name": "I\u0161valyti nar\u0161ykl\u0117s talpykl\u0105"
60
+ },
58
61
  "load_start_url": {
59
62
  "name": "\u012ekelti prad\u017eios URL"
60
63
  },
@@ -55,6 +55,9 @@
55
55
  }
56
56
  },
57
57
  "button": {
58
+ "clear_cache": {
59
+ "name": "Limpar a cache do browser"
60
+ },
58
61
  "load_start_url": {
59
62
  "name": "Carregar URL inicial"
60
63
  },
@@ -94,6 +94,9 @@
94
94
  "temperature": {
95
95
  "name": "Temp\u00e9rature",
96
96
  "state_attributes": {
97
+ "max_acceptable": {
98
+ "name": "Maximum acceptable"
99
+ },
97
100
  "min_acceptable": {
98
101
  "name": "Minimum acceptable"
99
102
  }
@@ -74,7 +74,21 @@
74
74
  "name": "Paskutinis tr\u0119\u0161imas"
75
75
  },
76
76
  "light": {
77
- "name": "\u0160viesa"
77
+ "name": "\u0160viesa",
78
+ "state_attributes": {
79
+ "max_acceptable": {
80
+ "name": "Did\u017eiausias priimtinas"
81
+ },
82
+ "max_good": {
83
+ "name": "Maksimalus g\u0117ris"
84
+ },
85
+ "min_acceptable": {
86
+ "name": "Ma\u017eiausias priimtinas"
87
+ },
88
+ "min_good": {
89
+ "name": "Minimalus geras"
90
+ }
91
+ }
78
92
  },
79
93
  "light_status": {
80
94
  "name": "\u0160viesos b\u016bsena",
@@ -87,6 +101,23 @@
87
101
  "too_low": "Per \u017eemai"
88
102
  }
89
103
  },
104
+ "moisture": {
105
+ "name": "Dr\u0117gm\u0117",
106
+ "state_attributes": {
107
+ "max_acceptable": {
108
+ "name": "Did\u017eiausias priimtinas"
109
+ },
110
+ "max_good": {
111
+ "name": "Maksimalus g\u0117ris"
112
+ },
113
+ "min_acceptable": {
114
+ "name": "Ma\u017eiausias priimtinas"
115
+ },
116
+ "min_good": {
117
+ "name": "Minimalus geras"
118
+ }
119
+ }
120
+ },
90
121
  "moisture_status": {
91
122
  "name": "Dr\u0117gm\u0117s b\u016bsena",
92
123
  "state": {
@@ -122,7 +153,21 @@
122
153
  }
123
154
  },
124
155
  "salinity": {
125
- "name": "Druskingumas"
156
+ "name": "Druskingumas",
157
+ "state_attributes": {
158
+ "max_acceptable": {
159
+ "name": "Did\u017eiausias priimtinas"
160
+ },
161
+ "max_good": {
162
+ "name": "Maksimalus g\u0117ris"
163
+ },
164
+ "min_acceptable": {
165
+ "name": "Ma\u017eiausias priimtinas"
166
+ },
167
+ "min_good": {
168
+ "name": "Minimalus geras"
169
+ }
170
+ }
126
171
  },
127
172
  "salinity_status": {
128
173
  "name": "Druskingumo b\u016bsena",
@@ -138,6 +183,23 @@
138
183
  "scientific_name": {
139
184
  "name": "Mokslinis vardas"
140
185
  },
186
+ "temperature": {
187
+ "name": "Temperat\u016bra",
188
+ "state_attributes": {
189
+ "max_acceptable": {
190
+ "name": "Did\u017eiausias priimtinas"
191
+ },
192
+ "max_good": {
193
+ "name": "Maksimalus g\u0117ris"
194
+ },
195
+ "min_acceptable": {
196
+ "name": "Ma\u017eiausias priimtinas"
197
+ },
198
+ "min_good": {
199
+ "name": "Minimalus geras"
200
+ }
201
+ }
202
+ },
141
203
  "temperature_status": {
142
204
  "name": "Temperat\u016bros b\u016bsena",
143
205
  "state": {
@@ -74,7 +74,21 @@
74
74
  "name": "\u00daltima fertiliza\u00e7\u00e3o"
75
75
  },
76
76
  "light": {
77
- "name": "Luz"
77
+ "name": "Luz",
78
+ "state_attributes": {
79
+ "max_acceptable": {
80
+ "name": "M\u00e1ximo aceit\u00e1vel"
81
+ },
82
+ "max_good": {
83
+ "name": "M\u00e1ximo bom"
84
+ },
85
+ "min_acceptable": {
86
+ "name": "M\u00ednimo aceit\u00e1vel"
87
+ },
88
+ "min_good": {
89
+ "name": "M\u00ednimo bom"
90
+ }
91
+ }
78
92
  },
79
93
  "light_status": {
80
94
  "name": "Estado da luz",
@@ -87,6 +101,23 @@
87
101
  "too_low": "Demasiado baixa"
88
102
  }
89
103
  },
104
+ "moisture": {
105
+ "name": "Humidade",
106
+ "state_attributes": {
107
+ "max_acceptable": {
108
+ "name": "M\u00e1ximo aceit\u00e1vel"
109
+ },
110
+ "max_good": {
111
+ "name": "M\u00e1ximo bom"
112
+ },
113
+ "min_acceptable": {
114
+ "name": "M\u00ednimo aceit\u00e1vel"
115
+ },
116
+ "min_good": {
117
+ "name": "M\u00ednimo bom"
118
+ }
119
+ }
120
+ },
90
121
  "moisture_status": {
91
122
  "name": "Estado da humidade",
92
123
  "state": {
@@ -122,7 +153,21 @@
122
153
  }
123
154
  },
124
155
  "salinity": {
125
- "name": "Salinidade"
156
+ "name": "Salinidade",
157
+ "state_attributes": {
158
+ "max_acceptable": {
159
+ "name": "M\u00e1ximo aceit\u00e1vel"
160
+ },
161
+ "max_good": {
162
+ "name": "M\u00e1ximo bom"
163
+ },
164
+ "min_acceptable": {
165
+ "name": "M\u00ednimo aceit\u00e1vel"
166
+ },
167
+ "min_good": {
168
+ "name": "M\u00ednimo bom"
169
+ }
170
+ }
126
171
  },
127
172
  "salinity_status": {
128
173
  "name": "Estado de salinidade",
@@ -138,6 +183,23 @@
138
183
  "scientific_name": {
139
184
  "name": "Nome cient\u00edfico"
140
185
  },
186
+ "temperature": {
187
+ "name": "Temperatura",
188
+ "state_attributes": {
189
+ "max_acceptable": {
190
+ "name": "M\u00e1ximo aceit\u00e1vel"
191
+ },
192
+ "max_good": {
193
+ "name": "M\u00e1ximo bom"
194
+ },
195
+ "min_acceptable": {
196
+ "name": "M\u00ednimo aceit\u00e1vel"
197
+ },
198
+ "min_good": {
199
+ "name": "M\u00ednimo bom"
200
+ }
201
+ }
202
+ },
141
203
  "temperature_status": {
142
204
  "name": "Estado da temperatura",
143
205
  "state": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "application_credentials": {
3
- "description": "Postupujte pod\u013ea [pokynov]({more_info_url}) pre [obrazovku s\u00fahlasu OAuth]({oauth_consent_url}), aby ste poskytli asistentovi Home Assistant pr\u00edstup k v\u00e1\u0161mu Google Assistant SDK. Mus\u00edte tie\u017e vytvori\u0165 aplika\u010dn\u00e9 poverenia prepojen\u00e9 s va\u0161\u00edm \u00fa\u010dtom: 1. Prejdite na str\u00e1nku [Credentials]({oauth_creds_url}) a vyberte mo\u017enos\u0165 **Create Credentials** (Vytvori\u0165 poverenia**). 1. Kliknite na polo\u017eku [Credentials]( ) a vyberte mo\u017enos\u0165 **Create Credentials** (Vytvori\u0165 poverenia). V rozba\u013eovacom zozname vyberte polo\u017eku **OAuth client ID**. 1. Pre typ aplik\u00e1cie vyberte **Webov\u00e1 aplik\u00e1cia**. 1. Pridajte `{redirect_url}` v \u010dasti *Opr\u00e1vnen\u00e9 presmerovanie URI*."
3
+ "description": "Postupujte pod\u013ea [pokynov]({more_info_url}) pre [obrazovku s\u00fahlasu OAuth]({oauth_consent_url}), aby ste poskytli asistentovi Home Assistant pr\u00edstup k v\u00e1\u0161mu Google Assistant SDK. Mus\u00edte tie\u017e vytvori\u0165 aplika\u010dn\u00e9 poverenia prepojen\u00e9 s va\u0161\u00edm \u00fa\u010dtom: \n1. Prejdite na str\u00e1nku [Credentials]({oauth_creds_url}) a vyberte mo\u017enos\u0165 **Vytvori\u0165 poverenia**. \n1. Kliknite na polo\u017eku [Credentials]( ) a vyberte mo\u017enos\u0165 **Vytvori\u0165 poverenia**. V rozba\u013eovacom zozname vyberte polo\u017eku **OAuth client ID**. \n1. Pre typ aplik\u00e1cie vyberte **Webov\u00e1 aplik\u00e1cia**.\n1. Pridajte `{redirect_url}` v \u010dasti *Opr\u00e1vnen\u00e9 presmerovanie URI*."
4
4
  },
5
5
  "config": {
6
6
  "abort": {
@@ -28,10 +28,10 @@
28
28
  "entry_not_loaded": "Nelze p\u0159id\u00e1vat polo\u017eky, pokud je nastaven\u00ed zak\u00e1z\u00e1no.",
29
29
  "reconfigure_successful": "P\u0159enastaven\u00ed bylo \u00fasp\u011b\u0161n\u00e9"
30
30
  },
31
- "entry_type": "\u00daloha AI",
31
+ "entry_type": "\u00dakol AI",
32
32
  "initiate_flow": {
33
- "reconfigure": "P\u0159enastavit \u00falohu AI",
34
- "user": "P\u0159idat \u00falohu AI"
33
+ "reconfigure": "P\u0159enastavit \u00fakol AI",
34
+ "user": "P\u0159idat \u00fakol AI"
35
35
  },
36
36
  "step": {
37
37
  "set_options": {
@@ -116,7 +116,7 @@
116
116
  "top_p": "Top P"
117
117
  },
118
118
  "data_description": {
119
- "prompt": "In\u0161trujte, ako m\u00e1 LLM prep\u00edsa\u0165 zvuk."
119
+ "prompt": "In\u0161truujte, ako m\u00e1 LLM prep\u00edsa\u0165 zvuk."
120
120
  }
121
121
  }
122
122
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "application_credentials": {
3
- "description": "Postupujte pod\u013ea [pokynov]({more_info_url}) pre [obrazovku s\u00fahlasu OAuth]({oauth_consent_url}), aby ste poskytli asistentovi Home Assistant pr\u00edstup k va\u0161ej po\u0161te Google. Mus\u00edte tie\u017e vytvori\u0165 aplika\u010dn\u00e9 poverenia prepojen\u00e9 s va\u0161\u00edm \u00fa\u010dtom:\n1. Prejdite na str\u00e1nku [Poverenia]({oauth_creds_url}) a vyberte mo\u017enos\u0165 **Vytvori\u0165 poverenia**.\n2. Z rozba\u013eovacieho zoznamu vyberte polo\u017eku **OAuth client ID**.\n3. Pre typ aplik\u00e1cie vyberte **Webov\u00e1 aplik\u00e1cia**."
3
+ "description": "Postupujte pod\u013ea [pokynov]({more_info_url}) pre [obrazovku s\u00fahlasu OAuth]({oauth_consent_url}), aby ste poskytli asistentovi Home Assistant pr\u00edstup k va\u0161ej po\u0161te Google. Mus\u00edte tie\u017e vytvori\u0165 aplika\u010dn\u00e9 poverenia prepojen\u00e9 s va\u0161\u00edm \u00fa\u010dtom:\n1. Prejdite na str\u00e1nku [Poverenia]({oauth_creds_url}) a vyberte mo\u017enos\u0165 **Vytvori\u0165 poverenia**.\n1. Z rozba\u013eovacieho zoznamu vyberte polo\u017eku **OAuth client ID**.\n1. Pre typ aplik\u00e1cie vyberte **Webov\u00e1 aplik\u00e1cia**."
4
4
  },
5
5
  "config": {
6
6
  "abort": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "application_credentials": {
3
- "description": "Postupujte pod\u013ea [pokynov]({more_info_url}) pre [obrazovku s\u00fahlasu OAuth]({oauth_consent_url}), aby ste poskytli asistentovi Home Assistant pr\u00edstup k va\u0161im fotografi\u00e1m Google. Mus\u00edte tie\u017e vytvori\u0165 aplika\u010dn\u00e9 poverenia prepojen\u00e9 s va\u0161\u00edm \u00fa\u010dtom:\n1. Prejdite na str\u00e1nku [Poverenia]({oauth_creds_url}) a vyberte mo\u017enos\u0165 **Vytvori\u0165 poverenia**.\n2. Z rozba\u013eovacieho zoznamu vyberte polo\u017eku **OAuth client ID**.\n3. Pre typ aplik\u00e1cie vyberte **Webov\u00e1 aplik\u00e1cia**."
3
+ "description": "Postupujte pod\u013ea [pokynov]({more_info_url}) pre [obrazovku s\u00fahlasu OAuth]({oauth_consent_url}), aby ste poskytli asistentovi Home Assistant pr\u00edstup k va\u0161im fotografi\u00e1m Google. Mus\u00edte tie\u017e vytvori\u0165 aplika\u010dn\u00e9 poverenia prepojen\u00e9 s va\u0161\u00edm \u00fa\u010dtom:\n1. Prejdite na str\u00e1nku [Poverenia]({oauth_creds_url}) a vyberte mo\u017enos\u0165 **Vytvori\u0165 poverenia**.\n1. Z rozba\u013eovacieho zoznamu vyberte polo\u017eku **OAuth client ID**.\n1. Pre typ aplik\u00e1cie vyberte **Webov\u00e1 aplik\u00e1cia**."
4
4
  },
5
5
  "config": {
6
6
  "abort": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "application_credentials": {
3
- "description": "Postupujte pod\u013ea [pokynov]({more_info_url}) pre [obrazovku s\u00fahlasu OAuth]({oauth_consent_url}), aby ste poskytli asistentovi Home Assistant pr\u00edstup k va\u0161im h\u00e1rkom Google. Mus\u00edte tie\u017e vytvori\u0165 aplika\u010dn\u00e9 poverenia prepojen\u00e9 s va\u0161\u00edm \u00fa\u010dtom:\n1. Prejdite na str\u00e1nku [Poverenia]({oauth_creds_url}) a vyberte mo\u017enos\u0165 **Vytvori\u0165 poverenia**.\n2. Z rozba\u013eovacieho zoznamu vyberte polo\u017eku **OAuth client ID**.\n3. Pre typ aplik\u00e1cie vyberte **Webov\u00e1 aplik\u00e1cia**."
3
+ "description": "Postupujte pod\u013ea [pokynov]({more_info_url}) pre [obrazovku s\u00fahlasu OAuth]({oauth_consent_url}), aby ste poskytli asistentovi Home Assistant pr\u00edstup k va\u0161im h\u00e1rkom Google. Mus\u00edte tie\u017e vytvori\u0165 aplika\u010dn\u00e9 poverenia prepojen\u00e9 s va\u0161\u00edm \u00fa\u010dtom:\n1. Prejdite na str\u00e1nku [Poverenia]({oauth_creds_url}) a vyberte mo\u017enos\u0165 **Vytvori\u0165 poverenia**.\n1. Z rozba\u013eovacieho zoznamu vyberte polo\u017eku **OAuth client ID**.\n1. Pre typ aplik\u00e1cie vyberte **Webov\u00e1 aplik\u00e1cia**."
4
4
  },
5
5
  "config": {
6
6
  "abort": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "application_credentials": {
3
- "description": "Postupujte pod\u013ea [pokynov]({more_info_url}) pre [obrazovku s\u00fahlasu OAuth]({oauth_consent_url}), aby ste poskytli asistentovi Home Assistant pr\u00edstup k va\u0161im \u00faloh\u00e1m Google. Mus\u00edte tie\u017e vytvori\u0165 aplika\u010dn\u00e9 poverenia prepojen\u00e9 s va\u0161\u00edm \u00fa\u010dtom:\n1. Prejdite na str\u00e1nku [Poverenia]({oauth_creds_url}) a vyberte mo\u017enos\u0165 **Vytvori\u0165 poverenia**.\n2. Z rozba\u013eovacieho zoznamu vyberte polo\u017eku **OAuth client ID**.\n3. Pre typ aplik\u00e1cie vyberte **Webov\u00e1 aplik\u00e1cia**."
3
+ "description": "Postupujte pod\u013ea [pokynov]({more_info_url}) pre [obrazovku s\u00fahlasu OAuth]({oauth_consent_url}), aby ste poskytli asistentovi Home Assistant pr\u00edstup k va\u0161im \u00faloh\u00e1m Google. Mus\u00edte tie\u017e vytvori\u0165 aplika\u010dn\u00e9 poverenia prepojen\u00e9 s va\u0161\u00edm \u00fa\u010dtom:\n1. Prejdite na str\u00e1nku [Poverenia]({oauth_creds_url}) a vyberte mo\u017enos\u0165 **Vytvori\u0165 poverenia**.\n1. Z rozba\u013eovacieho zoznamu vyberte polo\u017eku **OAuth client ID**.\n1. Pre typ aplik\u00e1cie vyberte **Webov\u00e1 aplik\u00e1cia**."
4
4
  },
5
5
  "config": {
6
6
  "abort": {
@@ -9,6 +9,7 @@ import logging
9
9
 
10
10
  from govee_local_api.controller import LISTENING_PORT
11
11
 
12
+ from homeassistant.components import network
12
13
  from homeassistant.const import Platform
13
14
  from homeassistant.core import HomeAssistant
14
15
  from homeassistant.exceptions import ConfigEntryNotReady
@@ -23,12 +24,24 @@ _LOGGER = logging.getLogger(__name__)
23
24
 
24
25
  async def async_setup_entry(hass: HomeAssistant, entry: GoveeLocalConfigEntry) -> bool:
25
26
  """Set up Govee light local from a config entry."""
26
- coordinator = GoveeLocalApiCoordinator(hass, entry)
27
+
28
+ # Get source IPs for all enabled adapters
29
+ source_ips = await network.async_get_enabled_source_ips(hass)
30
+ _LOGGER.debug("Enabled source IPs: %s", source_ips)
31
+
32
+ coordinator: GoveeLocalApiCoordinator = GoveeLocalApiCoordinator(
33
+ hass=hass, config_entry=entry, source_ips=source_ips
34
+ )
27
35
 
28
36
  async def await_cleanup():
29
- cleanup_complete: asyncio.Event = coordinator.cleanup()
37
+ cleanup_complete_events: [asyncio.Event] = coordinator.cleanup()
30
38
  with suppress(TimeoutError):
31
- await asyncio.wait_for(cleanup_complete.wait(), 1)
39
+ await asyncio.gather(
40
+ *[
41
+ asyncio.wait_for(cleanup_complete_event.wait(), 1)
42
+ for cleanup_complete_event in cleanup_complete_events
43
+ ]
44
+ )
32
45
 
33
46
  entry.async_on_unload(await_cleanup)
34
47
 
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import asyncio
6
6
  from contextlib import suppress
7
+ from ipaddress import IPv4Address, IPv6Address
7
8
  import logging
8
9
 
9
10
  from govee_local_api import GoveeController
@@ -23,15 +24,13 @@ from .const import (
23
24
  _LOGGER = logging.getLogger(__name__)
24
25
 
25
26
 
26
- async def _async_has_devices(hass: HomeAssistant) -> bool:
27
- """Return if there are devices that can be discovered."""
28
-
29
- adapter = await network.async_get_source_ip(hass, network.PUBLIC_TARGET_IP)
30
-
27
+ async def _async_discover(
28
+ hass: HomeAssistant, adapter_ip: IPv4Address | IPv6Address
29
+ ) -> bool:
31
30
  controller: GoveeController = GoveeController(
32
31
  loop=hass.loop,
33
32
  logger=_LOGGER,
34
- listening_address=adapter,
33
+ listening_address=str(adapter_ip),
35
34
  broadcast_address=CONF_MULTICAST_ADDRESS_DEFAULT,
36
35
  broadcast_port=CONF_TARGET_PORT_DEFAULT,
37
36
  listening_port=CONF_LISTENING_PORT_DEFAULT,
@@ -41,9 +40,10 @@ async def _async_has_devices(hass: HomeAssistant) -> bool:
41
40
  )
42
41
 
43
42
  try:
43
+ _LOGGER.debug("Starting discovery with IP %s", adapter_ip)
44
44
  await controller.start()
45
45
  except OSError as ex:
46
- _LOGGER.error("Start failed, errno: %d", ex.errno)
46
+ _LOGGER.error("Start failed on IP %s, errno: %d", adapter_ip, ex.errno)
47
47
  return False
48
48
 
49
49
  try:
@@ -51,16 +51,34 @@ async def _async_has_devices(hass: HomeAssistant) -> bool:
51
51
  while not controller.devices:
52
52
  await asyncio.sleep(delay=1)
53
53
  except TimeoutError:
54
- _LOGGER.debug("No devices found")
54
+ _LOGGER.debug("No devices found with IP %s", adapter_ip)
55
55
 
56
56
  devices_count = len(controller.devices)
57
- cleanup_complete: asyncio.Event = controller.cleanup()
57
+ cleanup_complete_events: list[asyncio.Event] = []
58
58
  with suppress(TimeoutError):
59
- await asyncio.wait_for(cleanup_complete.wait(), 1)
59
+ await asyncio.gather(
60
+ *[
61
+ asyncio.wait_for(cleanup_complete_event.wait(), 1)
62
+ for cleanup_complete_event in cleanup_complete_events
63
+ ]
64
+ )
60
65
 
61
66
  return devices_count > 0
62
67
 
63
68
 
69
+ async def _async_has_devices(hass: HomeAssistant) -> bool:
70
+ """Return if there are devices that can be discovered."""
71
+
72
+ # Get source IPs for all enabled adapters
73
+ source_ips = await network.async_get_enabled_source_ips(hass)
74
+ _LOGGER.debug("Enabled source IPs: %s", source_ips)
75
+
76
+ # Run discovery on every IPv4 address and gather results
77
+ results = await asyncio.gather(*[_async_discover(hass, ip) for ip in source_ips])
78
+
79
+ return any(results)
80
+
81
+
64
82
  config_entry_flow.register_discovery_flow(
65
83
  DOMAIN, "Govee light local", _async_has_devices
66
84
  )