homeassistant 2025.10.0b1__py3-none-any.whl → 2025.10.0b4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (214) hide show
  1. homeassistant/components/accuweather/manifest.json +1 -1
  2. homeassistant/components/accuweather/translations/ga.json +16 -1
  3. homeassistant/components/airos/__init__.py +37 -2
  4. homeassistant/components/airos/config_flow.py +24 -3
  5. homeassistant/components/airos/const.py +5 -0
  6. homeassistant/components/airos/entity.py +8 -3
  7. homeassistant/components/airos/strings.json +12 -0
  8. homeassistant/components/airos/translations/de.json +12 -0
  9. homeassistant/components/airos/translations/en-GB.json +12 -0
  10. homeassistant/components/airos/translations/en.json +12 -0
  11. homeassistant/components/airzone/translations/es.json +10 -0
  12. homeassistant/components/airzone/translations/et.json +10 -0
  13. homeassistant/components/airzone/translations/ga.json +10 -0
  14. homeassistant/components/airzone/translations/pt.json +10 -0
  15. homeassistant/components/alexa_devices/binary_sensor.py +36 -38
  16. homeassistant/components/alexa_devices/config_flow.py +2 -2
  17. homeassistant/components/alexa_devices/coordinator.py +1 -1
  18. homeassistant/components/alexa_devices/diagnostics.py +1 -3
  19. homeassistant/components/alexa_devices/icons.json +0 -40
  20. homeassistant/components/alexa_devices/manifest.json +1 -1
  21. homeassistant/components/alexa_devices/sensor.py +13 -0
  22. homeassistant/components/alexa_devices/strings.json +0 -20
  23. homeassistant/components/alexa_devices/switch.py +27 -7
  24. homeassistant/components/alexa_devices/translations/bg.json +0 -13
  25. homeassistant/components/alexa_devices/translations/cs.json +0 -20
  26. homeassistant/components/alexa_devices/translations/de.json +0 -20
  27. homeassistant/components/alexa_devices/translations/el.json +0 -20
  28. homeassistant/components/alexa_devices/translations/en-GB.json +0 -20
  29. homeassistant/components/alexa_devices/translations/en.json +0 -20
  30. homeassistant/components/alexa_devices/translations/es.json +0 -20
  31. homeassistant/components/alexa_devices/translations/et.json +0 -20
  32. homeassistant/components/alexa_devices/translations/ga.json +0 -20
  33. homeassistant/components/alexa_devices/translations/he.json +0 -7
  34. homeassistant/components/alexa_devices/translations/hu.json +0 -20
  35. homeassistant/components/alexa_devices/translations/it.json +0 -20
  36. homeassistant/components/alexa_devices/translations/ja.json +0 -19
  37. homeassistant/components/alexa_devices/translations/lt.json +0 -20
  38. homeassistant/components/alexa_devices/translations/mk.json +0 -14
  39. homeassistant/components/alexa_devices/translations/nl.json +0 -20
  40. homeassistant/components/alexa_devices/translations/pl.json +0 -5
  41. homeassistant/components/alexa_devices/translations/pt.json +0 -20
  42. homeassistant/components/alexa_devices/translations/ru.json +0 -5
  43. homeassistant/components/alexa_devices/translations/sk.json +0 -20
  44. homeassistant/components/alexa_devices/translations/sv.json +0 -20
  45. homeassistant/components/alexa_devices/translations/tr.json +0 -5
  46. homeassistant/components/alexa_devices/translations/zh-Hans.json +0 -20
  47. homeassistant/components/alexa_devices/translations/zh-Hant.json +0 -20
  48. homeassistant/components/alexa_devices/utils.py +24 -1
  49. homeassistant/components/assist_pipeline/pipeline.py +43 -18
  50. homeassistant/components/assist_pipeline/translations/nl.json +1 -0
  51. homeassistant/components/assist_pipeline/translations/sv.json +1 -0
  52. homeassistant/components/blue_current/translations/es.json +44 -0
  53. homeassistant/components/blue_current/translations/et.json +44 -0
  54. homeassistant/components/blue_current/translations/ga.json +44 -0
  55. homeassistant/components/blue_current/translations/pt.json +44 -0
  56. homeassistant/components/cloud/translations/sk.json +1 -1
  57. homeassistant/components/comelit/config_flow.py +8 -4
  58. homeassistant/components/cync/translations/es.json +32 -0
  59. homeassistant/components/cync/translations/et.json +32 -0
  60. homeassistant/components/cync/translations/ga.json +32 -0
  61. homeassistant/components/cync/translations/pt.json +32 -0
  62. homeassistant/components/cync/translations/ru.json +32 -0
  63. homeassistant/components/ecovacs/translations/es.json +7 -1
  64. homeassistant/components/ecovacs/translations/et.json +7 -1
  65. homeassistant/components/ecovacs/translations/ga.json +6 -1
  66. homeassistant/components/ecovacs/translations/pt.json +4 -0
  67. homeassistant/components/ecovacs/translations/ru.json +4 -0
  68. homeassistant/components/edl21/translations/de.json +1 -1
  69. homeassistant/components/ekeybionyx/translations/es.json +66 -0
  70. homeassistant/components/ekeybionyx/translations/et.json +66 -0
  71. homeassistant/components/ekeybionyx/translations/ga.json +66 -0
  72. homeassistant/components/ekeybionyx/translations/pt.json +66 -0
  73. homeassistant/components/elvia/translations/de.json +3 -3
  74. homeassistant/components/esphome/manager.py +1 -1
  75. homeassistant/components/esphome/manifest.json +1 -1
  76. homeassistant/components/esphome/translations/nl.json +1 -1
  77. homeassistant/components/esphome/translations/sv.json +1 -1
  78. homeassistant/components/ezviz/entity.py +12 -6
  79. homeassistant/components/file/translations/es.json +31 -0
  80. homeassistant/components/file/translations/et.json +31 -0
  81. homeassistant/components/file/translations/ga.json +31 -0
  82. homeassistant/components/file/translations/pt.json +31 -0
  83. homeassistant/components/file/translations/ru.json +31 -0
  84. homeassistant/components/frontend/manifest.json +1 -1
  85. homeassistant/components/geniushub/entity.py +4 -4
  86. homeassistant/components/google_generative_ai_conversation/translations/ga.json +6 -0
  87. homeassistant/components/habitica/translations/ga.json +24 -0
  88. homeassistant/components/hassio/translations/es.json +4 -0
  89. homeassistant/components/hassio/translations/et.json +4 -0
  90. homeassistant/components/hassio/translations/ga.json +4 -0
  91. homeassistant/components/hassio/translations/pt.json +4 -0
  92. homeassistant/components/hassio/translations/ru.json +4 -0
  93. homeassistant/components/here_travel_time/translations/es.json +6 -0
  94. homeassistant/components/here_travel_time/translations/et.json +6 -0
  95. homeassistant/components/here_travel_time/translations/ga.json +6 -0
  96. homeassistant/components/here_travel_time/translations/pt.json +6 -0
  97. homeassistant/components/irm_kmi/translations/ga.json +50 -0
  98. homeassistant/components/lamarzocco/__init__.py +1 -1
  99. homeassistant/components/lamarzocco/coordinator.py +10 -2
  100. homeassistant/components/lamarzocco/manifest.json +1 -1
  101. homeassistant/components/letpot/translations/es.json +10 -0
  102. homeassistant/components/letpot/translations/et.json +10 -0
  103. homeassistant/components/letpot/translations/ga.json +9 -0
  104. homeassistant/components/letpot/translations/pt.json +10 -0
  105. homeassistant/components/lg_thinq/translations/ga.json +9 -0
  106. homeassistant/components/logbook/translations/es.json +6 -1
  107. homeassistant/components/logbook/translations/et.json +6 -1
  108. homeassistant/components/logbook/translations/pl.json +3 -1
  109. homeassistant/components/logbook/translations/pt.json +6 -1
  110. homeassistant/components/logbook/translations/ru.json +6 -1
  111. homeassistant/components/mastodon/translations/ga.json +4 -0
  112. homeassistant/components/matter/translations/es.json +3 -0
  113. homeassistant/components/matter/translations/et.json +3 -0
  114. homeassistant/components/matter/translations/ga.json +3 -0
  115. homeassistant/components/matter/translations/pt.json +3 -0
  116. homeassistant/components/matter/translations/ru.json +3 -0
  117. homeassistant/components/miele/translations/ga.json +1 -0
  118. homeassistant/components/mqtt/translations/es.json +19 -0
  119. homeassistant/components/mqtt/translations/et.json +19 -0
  120. homeassistant/components/mqtt/translations/ga.json +26 -1
  121. homeassistant/components/mqtt/translations/pt.json +19 -0
  122. homeassistant/components/mqtt/translations/ru.json +19 -0
  123. homeassistant/components/mvglive/manifest.json +2 -4
  124. homeassistant/components/mvglive/sensor.py +116 -86
  125. homeassistant/components/nina/strings.json +2 -2
  126. homeassistant/components/nina/translations/ca.json +0 -2
  127. homeassistant/components/nina/translations/cs.json +0 -2
  128. homeassistant/components/nina/translations/de.json +3 -3
  129. homeassistant/components/nina/translations/el.json +0 -1
  130. homeassistant/components/nina/translations/en-GB.json +3 -3
  131. homeassistant/components/nina/translations/en.json +3 -3
  132. homeassistant/components/nina/translations/es.json +0 -2
  133. homeassistant/components/nina/translations/et.json +0 -2
  134. homeassistant/components/nina/translations/fi.json +0 -2
  135. homeassistant/components/nina/translations/ga.json +0 -2
  136. homeassistant/components/nina/translations/hu.json +0 -2
  137. homeassistant/components/nina/translations/id.json +0 -1
  138. homeassistant/components/nina/translations/it.json +0 -2
  139. homeassistant/components/nina/translations/ja.json +0 -2
  140. homeassistant/components/nina/translations/ko.json +0 -2
  141. homeassistant/components/nina/translations/lt.json +0 -2
  142. homeassistant/components/nina/translations/nl.json +0 -2
  143. homeassistant/components/nina/translations/pt-BR.json +0 -1
  144. homeassistant/components/nina/translations/pt.json +0 -2
  145. homeassistant/components/nina/translations/ro.json +0 -1
  146. homeassistant/components/nina/translations/ru.json +0 -2
  147. homeassistant/components/nina/translations/sk.json +0 -2
  148. homeassistant/components/nina/translations/sv.json +0 -2
  149. homeassistant/components/nina/translations/tr.json +0 -2
  150. homeassistant/components/nina/translations/uk.json +0 -1
  151. homeassistant/components/nina/translations/zh-Hans.json +0 -2
  152. homeassistant/components/nina/translations/zh-Hant.json +0 -2
  153. homeassistant/components/nordpool/translations/ga.json +6 -0
  154. homeassistant/components/pooldose/translations/ga.json +8 -1
  155. homeassistant/components/portainer/__init__.py +4 -3
  156. homeassistant/components/portainer/config_flow.py +3 -2
  157. homeassistant/components/portainer/strings.json +4 -2
  158. homeassistant/components/portainer/translations/de.json +4 -2
  159. homeassistant/components/portainer/translations/en-GB.json +4 -2
  160. homeassistant/components/portainer/translations/en.json +4 -2
  161. homeassistant/components/profiler/translations/es.json +4 -0
  162. homeassistant/components/profiler/translations/et.json +4 -0
  163. homeassistant/components/profiler/translations/ga.json +4 -0
  164. homeassistant/components/profiler/translations/pt.json +4 -0
  165. homeassistant/components/route_b_smart_meter/translations/es.json +42 -0
  166. homeassistant/components/route_b_smart_meter/translations/et.json +42 -0
  167. homeassistant/components/route_b_smart_meter/translations/ga.json +42 -0
  168. homeassistant/components/route_b_smart_meter/translations/pt.json +42 -0
  169. homeassistant/components/russound_rio/manifest.json +1 -1
  170. homeassistant/components/satel_integra/translations/et.json +1 -0
  171. homeassistant/components/shelly/translations/pl.json +4 -0
  172. homeassistant/components/smartthings/manifest.json +1 -1
  173. homeassistant/components/smartthings/translations/es.json +21 -0
  174. homeassistant/components/smartthings/translations/et.json +21 -0
  175. homeassistant/components/smartthings/translations/ga.json +15 -0
  176. homeassistant/components/smartthings/translations/pt.json +21 -0
  177. homeassistant/components/thread/config_flow.py +11 -3
  178. homeassistant/components/thread/manifest.json +1 -0
  179. homeassistant/components/tolo/translations/es.json +2 -1
  180. homeassistant/components/tolo/translations/ga.json +2 -1
  181. homeassistant/components/tuya/translations/es.json +9 -0
  182. homeassistant/components/tuya/translations/et.json +9 -0
  183. homeassistant/components/tuya/translations/ga.json +9 -0
  184. homeassistant/components/tuya/translations/pt.json +9 -0
  185. homeassistant/components/usage_prediction/translations/et.json +3 -0
  186. homeassistant/components/valve/translations/pl.json +2 -1
  187. homeassistant/components/vesync/fan.py +3 -1
  188. homeassistant/components/voip/translations/nl.json +1 -1
  189. homeassistant/components/voip/translations/sv.json +1 -1
  190. homeassistant/components/volvooncall/translations/ga.json +18 -1
  191. homeassistant/components/wyoming/translations/nl.json +1 -1
  192. homeassistant/components/wyoming/translations/sv.json +1 -1
  193. homeassistant/components/zha/config_flow.py +37 -21
  194. homeassistant/components/zha/manifest.json +1 -1
  195. homeassistant/components/zha/translations/es.json +81 -3
  196. homeassistant/components/zha/translations/et.json +78 -0
  197. homeassistant/components/zha/translations/ga.json +74 -0
  198. homeassistant/components/zha/translations/pt.json +80 -2
  199. homeassistant/components/zha/translations/ru.json +8 -2
  200. homeassistant/components/zwave_js/config_flow.py +30 -11
  201. homeassistant/components/zwave_js/translations/es.json +1 -0
  202. homeassistant/components/zwave_js/translations/et.json +1 -0
  203. homeassistant/components/zwave_js/translations/ga.json +1 -0
  204. homeassistant/components/zwave_js/translations/pt.json +1 -0
  205. homeassistant/const.py +1 -1
  206. homeassistant/generated/integrations.json +2 -1
  207. homeassistant/package_constraints.txt +1 -1
  208. {homeassistant-2025.10.0b1.dist-info → homeassistant-2025.10.0b4.dist-info}/METADATA +1 -1
  209. {homeassistant-2025.10.0b1.dist-info → homeassistant-2025.10.0b4.dist-info}/RECORD +214 -199
  210. {homeassistant-2025.10.0b1.dist-info → homeassistant-2025.10.0b4.dist-info}/WHEEL +0 -0
  211. {homeassistant-2025.10.0b1.dist-info → homeassistant-2025.10.0b4.dist-info}/entry_points.txt +0 -0
  212. {homeassistant-2025.10.0b1.dist-info → homeassistant-2025.10.0b4.dist-info}/licenses/LICENSE.md +0 -0
  213. {homeassistant-2025.10.0b1.dist-info → homeassistant-2025.10.0b4.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  214. {homeassistant-2025.10.0b1.dist-info → homeassistant-2025.10.0b4.dist-info}/top_level.txt +0 -0
@@ -78,6 +78,21 @@
78
78
  "name": "Peata"
79
79
  }
80
80
  },
81
+ "climate": {
82
+ "air_conditioner": {
83
+ "state_attributes": {
84
+ "preset_mode": {
85
+ "state": {
86
+ "long_wind": "Aeglane tuul",
87
+ "quiet": "Vaikne",
88
+ "smart": "Nutikas",
89
+ "wind_free": "WindFree",
90
+ "wind_free_sleep": "WindFree \u00f6\u00f6re\u017eiim"
91
+ }
92
+ }
93
+ }
94
+ }
95
+ },
81
96
  "event": {
82
97
  "button": {
83
98
  "state": {
@@ -153,6 +168,8 @@
153
168
  "name": "Lamp",
154
169
  "state": {
155
170
  "extra_high": "Eriti k\u00f5rge",
171
+ "high": "K\u00f5rge",
172
+ "low": "Madal",
156
173
  "mid": "Keskmine",
157
174
  "off": "V\u00e4ljas",
158
175
  "on": "Sees"
@@ -174,6 +191,7 @@
174
191
  "heavy": "Tugev",
175
192
  "light": "Kerge",
176
193
  "none": "Puudub",
194
+ "normal": "Tavaline",
177
195
  "up": "\u00dcles"
178
196
  }
179
197
  },
@@ -598,6 +616,9 @@
598
616
  }
599
617
  },
600
618
  "switch": {
619
+ "auto_cycle_link": {
620
+ "name": "Auto Cycle Link"
621
+ },
601
622
  "bubble_soak": {
602
623
  "name": "Mullidega leotamine"
603
624
  },
@@ -75,6 +75,21 @@
75
75
  "name": "Stad"
76
76
  }
77
77
  },
78
+ "climate": {
79
+ "air_conditioner": {
80
+ "state_attributes": {
81
+ "preset_mode": {
82
+ "state": {
83
+ "long_wind": "Gaoth fhada",
84
+ "quiet": "Ci\u00fain",
85
+ "smart": "Cliste",
86
+ "wind_free": "Gaoth Saor",
87
+ "wind_free_sleep": "Codladh saor \u00f3 ghaoth"
88
+ }
89
+ }
90
+ }
91
+ }
92
+ },
78
93
  "event": {
79
94
  "button": {
80
95
  "state": {
@@ -78,6 +78,21 @@
78
78
  "name": "Parar"
79
79
  }
80
80
  },
81
+ "climate": {
82
+ "air_conditioner": {
83
+ "state_attributes": {
84
+ "preset_mode": {
85
+ "state": {
86
+ "long_wind": "Vento longo",
87
+ "quiet": "Silencioso",
88
+ "smart": "Inteligente",
89
+ "wind_free": "WindFree",
90
+ "wind_free_sleep": "Sono WindFree"
91
+ }
92
+ }
93
+ }
94
+ }
95
+ },
81
96
  "event": {
82
97
  "button": {
83
98
  "state": {
@@ -153,6 +168,8 @@
153
168
  "name": "L\u00e2mpada",
154
169
  "state": {
155
170
  "extra_high": "Extra alto",
171
+ "high": "Alto",
172
+ "low": "Baixo",
156
173
  "mid": "M\u00e9dio",
157
174
  "off": "Desligado",
158
175
  "on": "Ligado"
@@ -174,6 +191,7 @@
174
191
  "heavy": "Pesado",
175
192
  "light": "Luz",
176
193
  "none": "Nenhum",
194
+ "normal": "Normal",
177
195
  "up": "Para cima"
178
196
  }
179
197
  },
@@ -598,6 +616,9 @@
598
616
  }
599
617
  },
600
618
  "switch": {
619
+ "auto_cycle_link": {
620
+ "name": "Liga\u00e7\u00e3o do ciclo autom\u00e1tico"
621
+ },
601
622
  "bubble_soak": {
602
623
  "name": "Banho de bolhas"
603
624
  },
@@ -5,7 +5,11 @@ from __future__ import annotations
5
5
  from typing import Any
6
6
 
7
7
  from homeassistant.components import onboarding
8
- from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
8
+ from homeassistant.config_entries import (
9
+ DEFAULT_DISCOVERY_UNIQUE_ID,
10
+ ConfigFlow,
11
+ ConfigFlowResult,
12
+ )
9
13
  from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
10
14
 
11
15
  from .const import DOMAIN
@@ -18,14 +22,18 @@ class ThreadConfigFlow(ConfigFlow, domain=DOMAIN):
18
22
 
19
23
  async def async_step_import(self, import_data: None) -> ConfigFlowResult:
20
24
  """Set up by import from async_setup."""
21
- await self._async_handle_discovery_without_unique_id()
25
+ await self.async_set_unique_id(
26
+ DEFAULT_DISCOVERY_UNIQUE_ID, raise_on_progress=False
27
+ )
22
28
  return self.async_create_entry(title="Thread", data={})
23
29
 
24
30
  async def async_step_user(
25
31
  self, user_input: dict[str, str] | None = None
26
32
  ) -> ConfigFlowResult:
27
33
  """Set up by import from async_setup."""
28
- await self._async_handle_discovery_without_unique_id()
34
+ await self.async_set_unique_id(
35
+ DEFAULT_DISCOVERY_UNIQUE_ID, raise_on_progress=False
36
+ )
29
37
  return self.async_create_entry(title="Thread", data={})
30
38
 
31
39
  async def async_step_zeroconf(
@@ -8,5 +8,6 @@
8
8
  "integration_type": "service",
9
9
  "iot_class": "local_polling",
10
10
  "requirements": ["python-otbr-api==2.7.0", "pyroute2==0.7.5"],
11
+ "single_config_entry": true,
11
12
  "zeroconf": ["_meshcop._udp.local."]
12
13
  }
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "config": {
3
3
  "abort": {
4
- "already_configured": "El dispositivo ya est\u00e1 configurado"
4
+ "already_configured": "El dispositivo ya est\u00e1 configurado",
5
+ "reconfigure_successful": "Se volvi\u00f3 a configurar correctamente"
5
6
  },
6
7
  "error": {
7
8
  "cannot_connect": "No se pudo conectar"
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "config": {
3
3
  "abort": {
4
- "already_configured": "T\u00e1 an gl\u00e9as cumraithe cheana f\u00e9in"
4
+ "already_configured": "T\u00e1 an gl\u00e9as cumraithe cheana f\u00e9in",
5
+ "reconfigure_successful": "D'\u00e9irigh leis an athchumr\u00fa"
5
6
  },
6
7
  "error": {
7
8
  "cannot_connect": "Theip ar an nascadh"
@@ -1025,6 +1025,9 @@
1025
1025
  "valve": {
1026
1026
  "indexed_valve": {
1027
1027
  "name": "V\u00e1lvula {index}"
1028
+ },
1029
+ "valve": {
1030
+ "name": "V\u00e1lvula"
1028
1031
  }
1029
1032
  }
1030
1033
  },
@@ -1032,5 +1035,11 @@
1032
1035
  "action_dpcode_not_found": {
1033
1036
  "message": "No se puede procesar la acci\u00f3n porque el dispositivo no proporciona un c\u00f3digo de funci\u00f3n correspondiente (se esperaba uno de {expected} en {available})."
1034
1037
  }
1038
+ },
1039
+ "issues": {
1040
+ "deprecated_entity_new_valve": {
1041
+ "description": "La entidad Tuya `{entity}` est\u00e1 obsoleta y fue reemplazada por una nueva entidad de v\u00e1lvula. \nPor favor, actualiza tus paneles, automatizaciones y scripts, desactiva `{entity}` y vuelve a cargar la integraci\u00f3n/reinicia Home Assistant para solucionar este problema.",
1042
+ "title": "{name} est\u00e1 obsoleto"
1043
+ }
1035
1044
  }
1036
1045
  }
@@ -1025,6 +1025,9 @@
1025
1025
  "valve": {
1026
1026
  "indexed_valve": {
1027
1027
  "name": "Klapp {index}"
1028
+ },
1029
+ "valve": {
1030
+ "name": "Klapp"
1028
1031
  }
1029
1032
  }
1030
1033
  },
@@ -1032,5 +1035,11 @@
1032
1035
  "action_dpcode_not_found": {
1033
1036
  "message": "Toimingut ei saa t\u00f6\u00f6delda kuna seade ei paku vastavat funktsioonikoodi (oodatav oli \u00fcks koodidest {expected} valikust {available} )."
1034
1037
  }
1038
+ },
1039
+ "issues": {
1040
+ "deprecated_entity_new_valve": {
1041
+ "description": "Tuya \u00fcksus \"{entity}' on kasutuselt k\u00f5rvaldatud ja asendatud uue klapi\u00fcksusega.\nV\u00e4rskenda oma vaateid, automatiseerimisi ja skripte, keela `{entity}` ja lae selle probleemi lahendamiseks sidumine uuesti / taask\u00e4ivita Home Assistant.",
1042
+ "title": "{name} on aegunud"
1043
+ }
1035
1044
  }
1036
1045
  }
@@ -1014,6 +1014,9 @@
1014
1014
  "valve": {
1015
1015
  "indexed_valve": {
1016
1016
  "name": "Comhla {index}"
1017
+ },
1018
+ "valve": {
1019
+ "name": "Comhla"
1017
1020
  }
1018
1021
  }
1019
1022
  },
@@ -1021,5 +1024,11 @@
1021
1024
  "action_dpcode_not_found": {
1022
1025
  "message": "N\u00ed f\u00e9idir an gn\u00edomh a phr\u00f3ise\u00e1il mar nach sol\u00e1thra\u00edonn an gl\u00e9as c\u00f3d feidhme comhfhreagrach (bh\u00edothas ag s\u00fail le ceann de {expected} i {available})."
1023
1026
  }
1027
+ },
1028
+ "issues": {
1029
+ "deprecated_entity_new_valve": {
1030
+ "description": "T\u00e1 an t-eintiteas Tuya `{entity}` imithe i l\u00e9ig, agus t\u00e1 eintiteas comhla nua ina \u00e1it.\nNuashonraigh do phain\u00e9il rialaithe, uathoibrithe agus scripteanna, d\u00edchumasaigh `{entity}` agus athl\u00f3d\u00e1il an comhth\u00e1th\u00fa/atosaigh Home Assistant chun an fhadhb seo a r\u00e9iteach.",
1031
+ "title": "T\u00e1 {name} imithe i l\u00e9ig"
1032
+ }
1024
1033
  }
1025
1034
  }
@@ -1025,6 +1025,9 @@
1025
1025
  "valve": {
1026
1026
  "indexed_valve": {
1027
1027
  "name": "V\u00e1lvula {index}"
1028
+ },
1029
+ "valve": {
1030
+ "name": "V\u00e1lvula"
1028
1031
  }
1029
1032
  }
1030
1033
  },
@@ -1032,5 +1035,11 @@
1032
1035
  "action_dpcode_not_found": {
1033
1036
  "message": "Imposs\u00edvel processar a a\u00e7\u00e3o porque o dispositivo n\u00e3o fornece um c\u00f3digo de fun\u00e7\u00e3o correspondente (esperava-se um de {expected} em {available})."
1034
1037
  }
1038
+ },
1039
+ "issues": {
1040
+ "deprecated_entity_new_valve": {
1041
+ "description": "A entidade Tuya `{entity}` foi descontinuada e substitu\u00edda por uma nova entidade de v\u00e1lvula. Por favor, atualize os seus pain\u00e9is, automatiza\u00e7\u00f5es e scripts, desative `{entity}` e recarregue a integra\u00e7\u00e3o/reinicie o Home Assistant para corrigir esse problema.",
1042
+ "title": "{name} est\u00e1 obsoleto"
1043
+ }
1035
1044
  }
1036
1045
  }
@@ -0,0 +1,3 @@
1
+ {
2
+ "title": "Kasutuse ennustus"
3
+ }
@@ -5,7 +5,8 @@
5
5
  "state": {
6
6
  "closed": "zamkni\u0119to",
7
7
  "closing": "zamykanie",
8
- "open": "otwarto"
8
+ "open": "otwarto",
9
+ "opening": "otwieranie"
9
10
  },
10
11
  "state_attributes": {
11
12
  "current_position": {
@@ -141,7 +141,9 @@ class VeSyncFanHA(VeSyncBaseEntity, FanEntity):
141
141
  attr["active_time"] = self.device.state.active_time
142
142
 
143
143
  if hasattr(self.device.state, "display_status"):
144
- attr["display_status"] = self.device.state.display_status.value
144
+ attr["display_status"] = getattr(
145
+ self.device.state.display_status, "value", None
146
+ )
145
147
 
146
148
  if hasattr(self.device.state, "child_lock"):
147
149
  attr["child_lock"] = self.device.state.child_lock
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "select": {
19
19
  "pipeline": {
20
- "name": "Assistent",
20
+ "name": "Assistent{index}",
21
21
  "state": {
22
22
  "preferred": "Voorkeur"
23
23
  }
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "select": {
19
19
  "pipeline": {
20
- "name": "Assistent",
20
+ "name": "Assistent{index}",
21
21
  "state": {
22
22
  "preferred": "F\u00f6redragen"
23
23
  }
@@ -1 +1,18 @@
1
- {}
1
+ {
2
+ "config": {
3
+ "abort": {
4
+ "deprecated": "T\u00e1 comhth\u00e1th\u00fa Volvo curtha in \u00e1it Volvo On Call. Bain \u00fas\u00e1id as comhth\u00e1th\u00fa Volvo ina ionad."
5
+ },
6
+ "step": {
7
+ "user": {
8
+ "description": "T\u00e1 Volvo on Call imithe i l\u00e9ig, bain \u00fas\u00e1id as comhth\u00e1th\u00fa Volvo."
9
+ }
10
+ }
11
+ },
12
+ "issues": {
13
+ "volvooncall_deprecated": {
14
+ "description": "T\u00e1 an comhth\u00e1th\u00fa Volvo On Call imithe i l\u00e9ig agus bainfear \u00e9 in 2026.3. Bain \u00fas\u00e1id as an gcomhth\u00e1th\u00fa Volvo ina ionad.\n\nC\u00e9imeanna:\n1. Bain an comhth\u00e1th\u00fa Volvo On Call seo.\n2. Cuir an comhth\u00e1th\u00fa Volvo leis tr\u00ed Socruithe > Gl\u00e9asanna & seirbh\u00eds\u00ed > Cuir comhth\u00e1th\u00fa leis > Volvo.\n3. Lean na treoracha socraithe chun f\u00edordheimhni\u00fa a dh\u00e9anamh le do chuntas Volvo.",
15
+ "title": "T\u00e1 Volvo On Call curtha in \u00e1it"
16
+ }
17
+ }
18
+ }
@@ -50,7 +50,7 @@
50
50
  }
51
51
  },
52
52
  "pipeline": {
53
- "name": "Assistent",
53
+ "name": "Assistent{index}",
54
54
  "state": {
55
55
  "preferred": "Voorkeur"
56
56
  }
@@ -50,7 +50,7 @@
50
50
  }
51
51
  },
52
52
  "pipeline": {
53
- "name": "Assistent",
53
+ "name": "Assistent{index}",
54
54
  "state": {
55
55
  "preferred": "F\u00f6redragen"
56
56
  }
@@ -23,6 +23,7 @@ from homeassistant.components.homeassistant_hardware import silabs_multiprotocol
23
23
  from homeassistant.components.homeassistant_yellow import hardware as yellow_hardware
24
24
  from homeassistant.config_entries import (
25
25
  SOURCE_IGNORE,
26
+ SOURCE_ZEROCONF,
26
27
  ConfigEntry,
27
28
  ConfigEntryBaseFlow,
28
29
  ConfigEntryState,
@@ -183,27 +184,17 @@ class BaseZhaFlow(ConfigEntryBaseFlow):
183
184
  self._hass = hass
184
185
  self._radio_mgr.hass = hass
185
186
 
186
- async def _get_config_entry_data(self) -> dict:
187
+ def _get_config_entry_data(self) -> dict[str, Any]:
187
188
  """Extract ZHA config entry data from the radio manager."""
188
189
  assert self._radio_mgr.radio_type is not None
189
190
  assert self._radio_mgr.device_path is not None
190
191
  assert self._radio_mgr.device_settings is not None
191
192
 
192
- try:
193
- device_path = await self.hass.async_add_executor_job(
194
- usb.get_serial_by_id, self._radio_mgr.device_path
195
- )
196
- except OSError as error:
197
- raise AbortFlow(
198
- reason="cannot_resolve_path",
199
- description_placeholders={"path": self._radio_mgr.device_path},
200
- ) from error
201
-
202
193
  return {
203
194
  CONF_DEVICE: DEVICE_SCHEMA(
204
195
  {
205
196
  **self._radio_mgr.device_settings,
206
- CONF_DEVICE_PATH: device_path,
197
+ CONF_DEVICE_PATH: self._radio_mgr.device_path,
207
198
  }
208
199
  ),
209
200
  CONF_RADIO_TYPE: self._radio_mgr.radio_type.name,
@@ -662,13 +653,8 @@ class ZhaConfigFlowHandler(BaseZhaFlow, ConfigFlow, domain=DOMAIN):
662
653
  """Set the flow's unique ID and update the device path in an ignored flow."""
663
654
  current_entry = await self.async_set_unique_id(unique_id)
664
655
 
665
- if not current_entry:
666
- return
667
-
668
- if current_entry.source != SOURCE_IGNORE:
669
- self._abort_if_unique_id_configured()
670
- else:
671
- # Only update the current entry if it is an ignored discovery
656
+ # Only update the current entry if it is an ignored discovery
657
+ if current_entry and current_entry.source == SOURCE_IGNORE:
672
658
  self._abort_if_unique_id_configured(
673
659
  updates={
674
660
  CONF_DEVICE: {
@@ -703,6 +689,36 @@ class ZhaConfigFlowHandler(BaseZhaFlow, ConfigFlow, domain=DOMAIN):
703
689
  DOMAIN, include_ignore=False
704
690
  )
705
691
 
692
+ if self._radio_mgr.device_path is not None:
693
+ # Ensure the radio manager device path is unique and will match ZHA's
694
+ try:
695
+ self._radio_mgr.device_path = await self.hass.async_add_executor_job(
696
+ usb.get_serial_by_id, self._radio_mgr.device_path
697
+ )
698
+ except OSError as error:
699
+ raise AbortFlow(
700
+ reason="cannot_resolve_path",
701
+ description_placeholders={"path": self._radio_mgr.device_path},
702
+ ) from error
703
+
704
+ # mDNS discovery can advertise the same adapter on multiple IPs or via a
705
+ # hostname, which should be considered a duplicate
706
+ current_device_paths = {self._radio_mgr.device_path}
707
+
708
+ if self.source == SOURCE_ZEROCONF:
709
+ discovery_info = self.init_data
710
+ current_device_paths |= {
711
+ f"socket://{ip}:{discovery_info.port}"
712
+ for ip in discovery_info.ip_addresses
713
+ }
714
+
715
+ for entry in zha_config_entries:
716
+ path = entry.data.get(CONF_DEVICE, {}).get(CONF_DEVICE_PATH)
717
+
718
+ # Abort discovery if the device path is already configured
719
+ if path is not None and path in current_device_paths:
720
+ return self.async_abort(reason="single_instance_allowed")
721
+
706
722
  # Without confirmation, discovery can automatically progress into parts of the
707
723
  # config flow logic that interacts with hardware.
708
724
  if user_input is not None or (
@@ -873,7 +889,7 @@ class ZhaConfigFlowHandler(BaseZhaFlow, ConfigFlow, domain=DOMAIN):
873
889
  zha_config_entries = self.hass.config_entries.async_entries(
874
890
  DOMAIN, include_ignore=False
875
891
  )
876
- data = await self._get_config_entry_data()
892
+ data = self._get_config_entry_data()
877
893
 
878
894
  if len(zha_config_entries) == 1:
879
895
  return self.async_update_reload_and_abort(
@@ -976,7 +992,7 @@ class ZhaOptionsFlowHandler(BaseZhaFlow, OptionsFlow):
976
992
  # Avoid creating both `.options` and `.data` by directly writing `data` here
977
993
  self.hass.config_entries.async_update_entry(
978
994
  entry=self.config_entry,
979
- data=await self._get_config_entry_data(),
995
+ data=self._get_config_entry_data(),
980
996
  options=self.config_entry.options,
981
997
  )
982
998
 
@@ -21,7 +21,7 @@
21
21
  "zha",
22
22
  "universal_silabs_flasher"
23
23
  ],
24
- "requirements": ["zha==0.0.72"],
24
+ "requirements": ["zha==0.0.73"],
25
25
  "usb": [
26
26
  {
27
27
  "vid": "10C4",