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
@@ -6,9 +6,12 @@ from typing import Any, Concatenate
6
6
 
7
7
  from aioamazondevices.exceptions import CannotConnect, CannotRetrieveData
8
8
 
9
+ from homeassistant.core import HomeAssistant
9
10
  from homeassistant.exceptions import HomeAssistantError
11
+ import homeassistant.helpers.entity_registry as er
10
12
 
11
- from .const import DOMAIN
13
+ from .const import _LOGGER, DOMAIN
14
+ from .coordinator import AmazonDevicesCoordinator
12
15
  from .entity import AmazonEntity
13
16
 
14
17
 
@@ -38,3 +41,23 @@ def alexa_api_call[_T: AmazonEntity, **_P](
38
41
  ) from err
39
42
 
40
43
  return cmd_wrapper
44
+
45
+
46
+ async def async_update_unique_id(
47
+ hass: HomeAssistant,
48
+ coordinator: AmazonDevicesCoordinator,
49
+ domain: str,
50
+ old_key: str,
51
+ new_key: str,
52
+ ) -> None:
53
+ """Update unique id for entities created with old format."""
54
+ entity_registry = er.async_get(hass)
55
+
56
+ for serial_num in coordinator.data:
57
+ unique_id = f"{serial_num}-{old_key}"
58
+ if entity_id := entity_registry.async_get_entity_id(domain, DOMAIN, unique_id):
59
+ _LOGGER.debug("Updating unique_id for %s", entity_id)
60
+ new_unique_id = unique_id.replace(old_key, new_key)
61
+
62
+ # Update the registry with the new unique_id
63
+ entity_registry.async_update_entity(entity_id, new_unique_id=new_unique_id)
@@ -1308,7 +1308,9 @@ class PipelineRun:
1308
1308
  # instead of a full response.
1309
1309
  all_targets_in_satellite_area = (
1310
1310
  self._get_all_targets_in_satellite_area(
1311
- conversation_result.response, self._device_id
1311
+ conversation_result.response,
1312
+ self._satellite_id,
1313
+ self._device_id,
1312
1314
  )
1313
1315
  )
1314
1316
 
@@ -1337,39 +1339,62 @@ class PipelineRun:
1337
1339
  return (speech, all_targets_in_satellite_area)
1338
1340
 
1339
1341
  def _get_all_targets_in_satellite_area(
1340
- self, intent_response: intent.IntentResponse, device_id: str | None
1342
+ self,
1343
+ intent_response: intent.IntentResponse,
1344
+ satellite_id: str | None,
1345
+ device_id: str | None,
1341
1346
  ) -> bool:
1342
1347
  """Return true if all targeted entities were in the same area as the device."""
1343
1348
  if (
1344
- (intent_response.response_type != intent.IntentResponseType.ACTION_DONE)
1345
- or (not intent_response.matched_states)
1346
- or (not device_id)
1349
+ intent_response.response_type != intent.IntentResponseType.ACTION_DONE
1350
+ or not intent_response.matched_states
1347
1351
  ):
1348
1352
  return False
1349
1353
 
1354
+ entity_registry = er.async_get(self.hass)
1350
1355
  device_registry = dr.async_get(self.hass)
1351
1356
 
1352
- if (not (device := device_registry.async_get(device_id))) or (
1353
- not device.area_id
1357
+ area_id: str | None = None
1358
+
1359
+ if (
1360
+ satellite_id is not None
1361
+ and (target_entity_entry := entity_registry.async_get(satellite_id))
1362
+ is not None
1354
1363
  ):
1355
- return False
1364
+ area_id = target_entity_entry.area_id
1365
+ device_id = target_entity_entry.device_id
1366
+
1367
+ if area_id is None:
1368
+ if device_id is None:
1369
+ return False
1370
+
1371
+ device_entry = device_registry.async_get(device_id)
1372
+ if device_entry is None:
1373
+ return False
1374
+
1375
+ area_id = device_entry.area_id
1376
+ if area_id is None:
1377
+ return False
1356
1378
 
1357
- entity_registry = er.async_get(self.hass)
1358
1379
  for state in intent_response.matched_states:
1359
- entity = entity_registry.async_get(state.entity_id)
1360
- if not entity:
1380
+ target_entity_entry = entity_registry.async_get(state.entity_id)
1381
+ if target_entity_entry is None:
1361
1382
  return False
1362
1383
 
1363
- if (entity_area_id := entity.area_id) is None:
1364
- if (entity.device_id is None) or (
1365
- (entity_device := device_registry.async_get(entity.device_id))
1366
- is None
1367
- ):
1384
+ target_area_id = target_entity_entry.area_id
1385
+ if target_area_id is None:
1386
+ if target_entity_entry.device_id is None:
1387
+ return False
1388
+
1389
+ target_device_entry = device_registry.async_get(
1390
+ target_entity_entry.device_id
1391
+ )
1392
+ if target_device_entry is None:
1368
1393
  return False
1369
1394
 
1370
- entity_area_id = entity_device.area_id
1395
+ target_area_id = target_device_entry.area_id
1371
1396
 
1372
- if entity_area_id != device.area_id:
1397
+ if target_area_id != area_id:
1373
1398
  return False
1374
1399
 
1375
1400
  return True
@@ -7,6 +7,7 @@
7
7
  },
8
8
  "select": {
9
9
  "pipeline": {
10
+ "name": "Assistent{index}",
10
11
  "state": {
11
12
  "preferred": "Voorkeur"
12
13
  }
@@ -7,6 +7,7 @@
7
7
  },
8
8
  "select": {
9
9
  "pipeline": {
10
+ "name": "Assistent{index}",
10
11
  "state": {
11
12
  "preferred": "F\u00f6redragen"
12
13
  }
@@ -136,5 +136,49 @@
136
136
  "name": "Enchufar y cargar"
137
137
  }
138
138
  }
139
+ },
140
+ "exceptions": {
141
+ "config_entry_not_loaded": {
142
+ "message": "Entrada de configuraci\u00f3n no cargada."
143
+ },
144
+ "invalid_device_id": {
145
+ "message": "Se ha proporcionado un ID de dispositivo no v\u00e1lido."
146
+ },
147
+ "no_config_entry": {
148
+ "message": "El dispositivo no tiene una entrada de configuraci\u00f3n blue_current v\u00e1lida."
149
+ }
150
+ },
151
+ "options": {
152
+ "step": {
153
+ "init": {
154
+ "data": {
155
+ "card": "Tarjeta"
156
+ },
157
+ "description": "Selecciona la tarjeta de carga predeterminada que quieres utilizar"
158
+ }
159
+ }
160
+ },
161
+ "selector": {
162
+ "select_charging_card": {
163
+ "options": {
164
+ "without_charging_card": "Sin tarjeta de carga"
165
+ }
166
+ }
167
+ },
168
+ "services": {
169
+ "start_charge_session": {
170
+ "description": "Inicia una nueva sesi\u00f3n de carga en un punto de carga especificado.",
171
+ "fields": {
172
+ "charging_card_id": {
173
+ "description": "ID de la tarjeta de carga opcional que se usar\u00e1 para iniciar una sesi\u00f3n de carga. Si no se proporciona, no se usar\u00e1 la tarjeta de carga.",
174
+ "name": "ID de la tarjeta de carga"
175
+ },
176
+ "device_id": {
177
+ "description": "El ID del punto de carga de Blue Current.",
178
+ "name": "ID del dispositivo"
179
+ }
180
+ },
181
+ "name": "Iniciar sesi\u00f3n de carga"
182
+ }
139
183
  }
140
184
  }
@@ -136,5 +136,49 @@
136
136
  "name": "\u00dchenda ja laadi"
137
137
  }
138
138
  }
139
+ },
140
+ "exceptions": {
141
+ "config_entry_not_loaded": {
142
+ "message": "Konfiguratsioonikirje pole laaditud."
143
+ },
144
+ "invalid_device_id": {
145
+ "message": "Esitatud on kehtetu seadme ID."
146
+ },
147
+ "no_config_entry": {
148
+ "message": "Seadmel puudub kehtiv blue_current konfiguratsioonikirje."
149
+ }
150
+ },
151
+ "options": {
152
+ "step": {
153
+ "init": {
154
+ "data": {
155
+ "card": "Kaart"
156
+ },
157
+ "description": "Vali vaikimisi kasutatav laadimiskaart"
158
+ }
159
+ }
160
+ },
161
+ "selector": {
162
+ "select_charging_card": {
163
+ "options": {
164
+ "without_charging_card": "Ilma laadimiskaardita"
165
+ }
166
+ }
167
+ },
168
+ "services": {
169
+ "start_charge_session": {
170
+ "description": "Alustab m\u00e4\u00e4ratud laadimispunktis uut laadimisseanssi.",
171
+ "fields": {
172
+ "charging_card_id": {
173
+ "description": "Valikuline laadimiskaardi ID mida kasutatakse laadimisseansi alustamiseks. Kui seda ei esitata siis laadimiskaarti ei kasutata.",
174
+ "name": "Laadimiskaardi ID"
175
+ },
176
+ "device_id": {
177
+ "description": "Blue Current laadimispunkti ID.",
178
+ "name": "Seadme ID"
179
+ }
180
+ },
181
+ "name": "Alusta laadimist"
182
+ }
139
183
  }
140
184
  }
@@ -136,5 +136,49 @@
136
136
  "name": "Breise\u00e1n & Muirear"
137
137
  }
138
138
  }
139
+ },
140
+ "exceptions": {
141
+ "config_entry_not_loaded": {
142
+ "message": "N\u00edor l\u00f3d\u00e1ileadh an iontr\u00e1il chumra\u00edochta."
143
+ },
144
+ "invalid_device_id": {
145
+ "message": "Tugadh aitheant\u00f3ir gl\u00e9is neamhbhail\u00ed."
146
+ },
147
+ "no_config_entry": {
148
+ "message": "N\u00edl iontr\u00e1il chumra\u00edochta blue_current bail\u00ed ag an ngl\u00e9as."
149
+ }
150
+ },
151
+ "options": {
152
+ "step": {
153
+ "init": {
154
+ "data": {
155
+ "card": "C\u00e1rta"
156
+ },
157
+ "description": "Roghnaigh an c\u00e1rta muirir r\u00e9amhshocraithe is mian leat a \u00fas\u00e1id"
158
+ }
159
+ }
160
+ },
161
+ "selector": {
162
+ "select_charging_card": {
163
+ "options": {
164
+ "without_charging_card": "Gan c\u00e1rta muirir"
165
+ }
166
+ }
167
+ },
168
+ "services": {
169
+ "start_charge_session": {
170
+ "description": "Tosa\u00edonn s\u00e9 seisi\u00fan luchtaithe nua ag pointe luchtaithe sonraithe.",
171
+ "fields": {
172
+ "charging_card_id": {
173
+ "description": "Aitheantas c\u00e1rta muirir roghnach a \u00fas\u00e1idfear chun seisi\u00fan muirir a thos\u00fa. Mura gcuirtear ar f\u00e1il \u00e9, n\u00ed \u00fas\u00e1idfear c\u00e1rta muirir.",
174
+ "name": "Aitheantas c\u00e1rta muirir"
175
+ },
176
+ "device_id": {
177
+ "description": "Aitheantas phointe luchtaithe Blue Current.",
178
+ "name": "Aitheantas Gl\u00e9as"
179
+ }
180
+ },
181
+ "name": "Tosaigh seisi\u00fan muirir"
182
+ }
139
183
  }
140
184
  }
@@ -136,5 +136,49 @@
136
136
  "name": "Ligar & Carregar"
137
137
  }
138
138
  }
139
+ },
140
+ "exceptions": {
141
+ "config_entry_not_loaded": {
142
+ "message": "Entrada de configura\u00e7\u00e3o n\u00e3o carregada."
143
+ },
144
+ "invalid_device_id": {
145
+ "message": "ID de dispositivo inv\u00e1lido fornecido."
146
+ },
147
+ "no_config_entry": {
148
+ "message": "O dispositivo n\u00e3o tem uma entrada de configura\u00e7\u00e3o blue_current v\u00e1lida."
149
+ }
150
+ },
151
+ "options": {
152
+ "step": {
153
+ "init": {
154
+ "data": {
155
+ "card": "Cart\u00e3o"
156
+ },
157
+ "description": "Selecionar o cart\u00e3o de carregamento predefinido que pretende utilizar"
158
+ }
159
+ }
160
+ },
161
+ "selector": {
162
+ "select_charging_card": {
163
+ "options": {
164
+ "without_charging_card": "Sem cart\u00e3o de carregamento"
165
+ }
166
+ }
167
+ },
168
+ "services": {
169
+ "start_charge_session": {
170
+ "description": "Inicia uma nova sess\u00e3o de carregamento num ponto de carregamento especificado.",
171
+ "fields": {
172
+ "charging_card_id": {
173
+ "description": "ID opcional do cart\u00e3o de carregamento que ser\u00e1 utilizado para iniciar uma sess\u00e3o de carregamento. Se n\u00e3o for fornecido, n\u00e3o ser\u00e1 utilizado qualquer cart\u00e3o de carregamento.",
174
+ "name": "ID do cart\u00e3o de carregamento"
175
+ },
176
+ "device_id": {
177
+ "description": "O ID do ponto de carregamento de Blue Current.",
178
+ "name": "ID do dispositivo"
179
+ }
180
+ },
181
+ "name": "Iniciar sess\u00e3o de carregamento"
182
+ }
139
183
  }
140
184
  }
@@ -78,7 +78,7 @@
78
78
  "system_health": {
79
79
  "info": {
80
80
  "alexa_enabled": "Alexa povolen\u00e1",
81
- "can_reach_cert_server": "Dosiahnu\u0165 certifika\u010dn\u00fd server",
81
+ "can_reach_cert_server": "Certifika\u010dn\u00fd server dosiahnut\u00fd",
82
82
  "can_reach_cloud": "Home Assistant Cloud dosiahnut\u00fd",
83
83
  "can_reach_cloud_auth": "Overovac\u00ed server dosiahnut\u00fd",
84
84
  "certificate_status": "Stav certifik\u00e1tu",
@@ -25,23 +25,27 @@ from .const import _LOGGER, DEFAULT_PORT, DEVICE_TYPE_LIST, DOMAIN
25
25
  from .utils import async_client_session
26
26
 
27
27
  DEFAULT_HOST = "192.168.1.252"
28
- DEFAULT_PIN = 111111
28
+ DEFAULT_PIN = "111111"
29
29
 
30
30
 
31
+ pin_regex = r"^[0-9]{4,10}$"
32
+
31
33
  USER_SCHEMA = vol.Schema(
32
34
  {
33
35
  vol.Required(CONF_HOST, default=DEFAULT_HOST): cv.string,
34
36
  vol.Required(CONF_PORT, default=DEFAULT_PORT): cv.port,
35
- vol.Optional(CONF_PIN, default=DEFAULT_PIN): cv.positive_int,
37
+ vol.Optional(CONF_PIN, default=DEFAULT_PIN): cv.matches_regex(pin_regex),
36
38
  vol.Required(CONF_TYPE, default=BRIDGE): vol.In(DEVICE_TYPE_LIST),
37
39
  }
38
40
  )
39
- STEP_REAUTH_DATA_SCHEMA = vol.Schema({vol.Required(CONF_PIN): cv.positive_int})
41
+ STEP_REAUTH_DATA_SCHEMA = vol.Schema(
42
+ {vol.Required(CONF_PIN): cv.matches_regex(pin_regex)}
43
+ )
40
44
  STEP_RECONFIGURE = vol.Schema(
41
45
  {
42
46
  vol.Required(CONF_HOST): cv.string,
43
47
  vol.Required(CONF_PORT): cv.port,
44
- vol.Optional(CONF_PIN, default=DEFAULT_PIN): cv.positive_int,
48
+ vol.Optional(CONF_PIN, default=DEFAULT_PIN): cv.matches_regex(pin_regex),
45
49
  }
46
50
  )
47
51
 
@@ -0,0 +1,32 @@
1
+ {
2
+ "config": {
3
+ "abort": {
4
+ "already_configured": "La cuenta ya est\u00e1 configurada"
5
+ },
6
+ "error": {
7
+ "cannot_connect": "No se pudo conectar",
8
+ "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida",
9
+ "unknown": "Error inesperado"
10
+ },
11
+ "step": {
12
+ "two_factor": {
13
+ "data": {
14
+ "two_factor_code": "C\u00f3digo de dos factores"
15
+ },
16
+ "data_description": {
17
+ "two_factor_code": "El c\u00f3digo del segundo factor enviado al correo electr\u00f3nico de tu cuenta Cync"
18
+ }
19
+ },
20
+ "user": {
21
+ "data": {
22
+ "email": "Correo electr\u00f3nico",
23
+ "password": "Contrase\u00f1a"
24
+ },
25
+ "data_description": {
26
+ "email": "La direcci\u00f3n de correo electr\u00f3nico de tu cuenta de Cync",
27
+ "password": "La contrase\u00f1a de tu cuenta de Cync"
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "config": {
3
+ "abort": {
4
+ "already_configured": "Kasutaja on juba seadistatud"
5
+ },
6
+ "error": {
7
+ "cannot_connect": "\u00dchendamine nurjus",
8
+ "invalid_auth": "Tuvastamine nurjus",
9
+ "unknown": "Ootamatu t\u00f5rge"
10
+ },
11
+ "step": {
12
+ "two_factor": {
13
+ "data": {
14
+ "two_factor_code": "Kaheastmelise tuvastuse kood"
15
+ },
16
+ "data_description": {
17
+ "two_factor_code": "Cync-konto e-posti aadressile saadetud kahefaktoriline kood"
18
+ }
19
+ },
20
+ "user": {
21
+ "data": {
22
+ "email": "E-posti aadress",
23
+ "password": "Salas\u00f5na"
24
+ },
25
+ "data_description": {
26
+ "email": "Cynci konto e-posti aadress",
27
+ "password": "Cynci konto salas\u00f5na"
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "config": {
3
+ "abort": {
4
+ "already_configured": "T\u00e1 an cuntas cumraithe cheana f\u00e9in"
5
+ },
6
+ "error": {
7
+ "cannot_connect": "Theip ar an nascadh",
8
+ "invalid_auth": "F\u00edordheimhni\u00fa neamhbhail\u00ed",
9
+ "unknown": "Earr\u00e1id gan choinne"
10
+ },
11
+ "step": {
12
+ "two_factor": {
13
+ "data": {
14
+ "two_factor_code": "C\u00f3d dh\u00e1 fhacht\u00f3ir"
15
+ },
16
+ "data_description": {
17
+ "two_factor_code": "An c\u00f3d dh\u00e1 fhacht\u00f3ir a seoladh chuig r\u00edomhphost do chuntais Cync"
18
+ }
19
+ },
20
+ "user": {
21
+ "data": {
22
+ "email": "R\u00edomhphost",
23
+ "password": "Pasfhocal"
24
+ },
25
+ "data_description": {
26
+ "email": "Seoladh r\u00edomhphoist do chuntais Cync",
27
+ "password": "Pasfhocal do chuntais Cync"
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "config": {
3
+ "abort": {
4
+ "already_configured": "Conta j\u00e1 configurada"
5
+ },
6
+ "error": {
7
+ "cannot_connect": "A liga\u00e7\u00e3o falhou",
8
+ "invalid_auth": "Autentica\u00e7\u00e3o inv\u00e1lida",
9
+ "unknown": "Erro inesperado"
10
+ },
11
+ "step": {
12
+ "two_factor": {
13
+ "data": {
14
+ "two_factor_code": "C\u00f3digo de dois fatores"
15
+ },
16
+ "data_description": {
17
+ "two_factor_code": "O c\u00f3digo de dois fatores enviado para o e-mail da sua conta Cync"
18
+ }
19
+ },
20
+ "user": {
21
+ "data": {
22
+ "email": "Email",
23
+ "password": "Palavra-passe"
24
+ },
25
+ "data_description": {
26
+ "email": "O endere\u00e7o de correio eletr\u00f3nico da sua conta Cync",
27
+ "password": "A palavra-passe da sua conta Cync"
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "config": {
3
+ "abort": {
4
+ "already_configured": "\u042d\u0442\u0430 \u0443\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 Home Assistant"
5
+ },
6
+ "error": {
7
+ "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f",
8
+ "invalid_auth": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438",
9
+ "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430"
10
+ },
11
+ "step": {
12
+ "two_factor": {
13
+ "data": {
14
+ "two_factor_code": "\u041a\u043e\u0434 \u0434\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438"
15
+ },
16
+ "data_description": {
17
+ "two_factor_code": "\u0414\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u043a\u043e\u0434, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443 \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Cync"
18
+ }
19
+ },
20
+ "user": {
21
+ "data": {
22
+ "email": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b",
23
+ "password": "\u041f\u0430\u0440\u043e\u043b\u044c"
24
+ },
25
+ "data_description": {
26
+ "email": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Cync",
27
+ "password": "\u041f\u0430\u0440\u043e\u043b\u044c \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Cync"
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
@@ -102,10 +102,14 @@
102
102
  },
103
103
  "volume": {
104
104
  "name": "Volumen"
105
+ },
106
+ "water_amount": {
107
+ "name": "Nivel del caudal de agua"
105
108
  }
106
109
  },
107
110
  "select": {
108
111
  "water_amount": {
112
+ "name": "Nivel del caudal de agua",
109
113
  "state": {
110
114
  "high": "Alto",
111
115
  "low": "Bajo",
@@ -171,8 +175,10 @@
171
175
  "station_state": {
172
176
  "name": "Estado de la estaci\u00f3n",
173
177
  "state": {
178
+ "drying_mop": "Secando la mopa",
174
179
  "emptying_dustbin": "Vaciando el dep\u00f3sito de suciedad",
175
- "idle": "Inactivo"
180
+ "idle": "Inactivo",
181
+ "washing_mop": "Lavando la mopa"
176
182
  }
177
183
  },
178
184
  "stats_area": {
@@ -102,10 +102,14 @@
102
102
  },
103
103
  "volume": {
104
104
  "name": "Maht"
105
+ },
106
+ "water_amount": {
107
+ "name": "Vee voolutugevus"
105
108
  }
106
109
  },
107
110
  "select": {
108
111
  "water_amount": {
112
+ "name": "Vee voolutugevus",
109
113
  "state": {
110
114
  "high": "K\u00f5rge",
111
115
  "low": "Madal",
@@ -171,8 +175,10 @@
171
175
  "station_state": {
172
176
  "name": "Jaama olek",
173
177
  "state": {
178
+ "drying_mop": "Kuivatusmopp",
174
179
  "emptying_dustbin": "Pr\u00fcgikasti t\u00fchjendamine",
175
- "idle": "Ootel"
180
+ "idle": "Ootel",
181
+ "washing_mop": "Pesumopp"
176
182
  }
177
183
  },
178
184
  "stats_area": {
@@ -102,6 +102,9 @@
102
102
  },
103
103
  "volume": {
104
104
  "name": "Toirt"
105
+ },
106
+ "water_amount": {
107
+ "name": "Leibh\u00e9al sreafa uisce"
105
108
  }
106
109
  },
107
110
  "select": {
@@ -171,8 +174,10 @@
171
174
  "station_state": {
172
175
  "name": "St\u00e1t an st\u00e1isi\u00fain",
173
176
  "state": {
177
+ "drying_mop": "Mop triom\u00fach\u00e1in",
174
178
  "emptying_dustbin": "Bosca bruscair a fholmh\u00fa",
175
- "idle": "D\u00edomhaoin"
179
+ "idle": "D\u00edomhaoin",
180
+ "washing_mop": "Mop n\u00edoch\u00e1in"
176
181
  }
177
182
  },
178
183
  "stats_area": {
@@ -102,10 +102,14 @@
102
102
  },
103
103
  "volume": {
104
104
  "name": "Volume"
105
+ },
106
+ "water_amount": {
107
+ "name": "N\u00edvel do caudal de \u00e1gua"
105
108
  }
106
109
  },
107
110
  "select": {
108
111
  "water_amount": {
112
+ "name": "N\u00edvel do caudal de \u00e1gua",
109
113
  "state": {
110
114
  "high": "Alto",
111
115
  "low": "Baixo",