homeassistant 2025.9.0b4__py3-none-any.whl → 2025.9.0b6__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 (164) hide show
  1. homeassistant/components/ai_task/translations/es.json +23 -1
  2. homeassistant/components/airgradient/translations/es.json +2 -1
  3. homeassistant/components/airos/translations/es.json +32 -1
  4. homeassistant/components/airq/translations/es.json +5 -0
  5. homeassistant/components/aladdin_connect/translations/es.json +30 -1
  6. homeassistant/components/alarm_control_panel/translations/es.json +1 -1
  7. homeassistant/components/alexa_devices/translations/es.json +52 -1
  8. homeassistant/components/apcupsd/translations/es.json +3 -3
  9. homeassistant/components/bayesian/translations/es.json +257 -0
  10. homeassistant/components/bmw_connected_drive/translations/cs.json +1 -1
  11. homeassistant/components/cloud/manifest.json +1 -1
  12. homeassistant/components/conversation/manifest.json +1 -1
  13. homeassistant/components/deconz/entity.py +1 -1
  14. homeassistant/components/deconz/hub/hub.py +1 -12
  15. homeassistant/components/deconz/light.py +1 -1
  16. homeassistant/components/deconz/services.py +2 -11
  17. homeassistant/components/dsmr_reader/translations/es.json +3 -3
  18. homeassistant/components/ecowitt/manifest.json +1 -1
  19. homeassistant/components/elgato/translations/es.json +1 -1
  20. homeassistant/components/enphase_envoy/translations/es.json +8 -2
  21. homeassistant/components/foscam/translations/es.json +34 -0
  22. homeassistant/components/fritzbox/translations/es.json +3 -1
  23. homeassistant/components/fritzbox_callmonitor/translations/es.json +2 -1
  24. homeassistant/components/fronius/translations/es.json +9 -9
  25. homeassistant/components/frontend/manifest.json +1 -1
  26. homeassistant/components/fyta/translations/es.json +64 -2
  27. homeassistant/components/growatt_server/strings.json +2 -2
  28. homeassistant/components/growatt_server/translations/ca.json +0 -6
  29. homeassistant/components/growatt_server/translations/cs.json +2 -2
  30. homeassistant/components/growatt_server/translations/de.json +2 -2
  31. homeassistant/components/growatt_server/translations/el.json +0 -6
  32. homeassistant/components/growatt_server/translations/en-GB.json +2 -2
  33. homeassistant/components/growatt_server/translations/en.json +2 -2
  34. homeassistant/components/growatt_server/translations/es.json +11 -11
  35. homeassistant/components/growatt_server/translations/et.json +0 -3
  36. homeassistant/components/growatt_server/translations/fi.json +0 -6
  37. homeassistant/components/growatt_server/translations/fr.json +0 -3
  38. homeassistant/components/growatt_server/translations/ga.json +0 -3
  39. homeassistant/components/growatt_server/translations/gl.json +0 -3
  40. homeassistant/components/growatt_server/translations/hu.json +0 -6
  41. homeassistant/components/growatt_server/translations/id.json +0 -6
  42. homeassistant/components/growatt_server/translations/it.json +0 -6
  43. homeassistant/components/growatt_server/translations/ja.json +0 -6
  44. homeassistant/components/growatt_server/translations/ko.json +0 -6
  45. homeassistant/components/growatt_server/translations/lt.json +0 -6
  46. homeassistant/components/growatt_server/translations/nl.json +0 -6
  47. homeassistant/components/growatt_server/translations/pt-BR.json +0 -6
  48. homeassistant/components/growatt_server/translations/pt.json +0 -6
  49. homeassistant/components/growatt_server/translations/ro.json +0 -6
  50. homeassistant/components/growatt_server/translations/ru.json +0 -6
  51. homeassistant/components/growatt_server/translations/sk.json +0 -6
  52. homeassistant/components/growatt_server/translations/sv.json +0 -6
  53. homeassistant/components/growatt_server/translations/tr.json +0 -6
  54. homeassistant/components/growatt_server/translations/zh-Hans.json +0 -6
  55. homeassistant/components/growatt_server/translations/zh-Hant.json +0 -6
  56. homeassistant/components/habitica/translations/es.json +17 -0
  57. homeassistant/components/hassio/translations/es.json +4 -0
  58. homeassistant/components/homekit/translations/es.json +7 -0
  59. homeassistant/components/hue/translations/es.json +1 -0
  60. homeassistant/components/husqvarna_automower/translations/es.json +79 -1
  61. homeassistant/components/husqvarna_automower_ble/translations/es.json +35 -1
  62. homeassistant/components/hydrawise/translations/es.json +5 -1
  63. homeassistant/components/imeon_inverter/translations/es.json +80 -0
  64. homeassistant/components/knx/translations/es.json +104 -1
  65. homeassistant/components/lock/translations/cs.json +2 -2
  66. homeassistant/components/matter/translations/cs.json +1 -1
  67. homeassistant/components/matter/translations/es.json +33 -0
  68. homeassistant/components/media_player/translations/es.json +6 -1
  69. homeassistant/components/miele/translations/es.json +13 -0
  70. homeassistant/components/modbus/binary_sensor.py +4 -1
  71. homeassistant/components/modbus/climate.py +4 -4
  72. homeassistant/components/modbus/cover.py +2 -2
  73. homeassistant/components/modbus/entity.py +24 -55
  74. homeassistant/components/modbus/modbus.py +8 -9
  75. homeassistant/components/modbus/sensor.py +6 -2
  76. homeassistant/components/mqtt/translations/cs.json +1 -1
  77. homeassistant/components/mqtt/translations/es.json +55 -3
  78. homeassistant/components/nextdns/translations/es.json +3 -0
  79. homeassistant/components/number/translations/es.json +1 -1
  80. homeassistant/components/nut/translations/es.json +3 -3
  81. homeassistant/components/onewire/translations/es.json +3 -0
  82. homeassistant/components/osoenergy/translations/es.json +1 -1
  83. homeassistant/components/playstation_network/translations/es.json +18 -0
  84. homeassistant/components/plugwise/translations/cs.json +1 -1
  85. homeassistant/components/pooldose/translations/es.json +102 -0
  86. homeassistant/components/qbus/translations/es.json +8 -0
  87. homeassistant/components/random/translations/es.json +2 -2
  88. homeassistant/components/refoss/translations/es.json +1 -1
  89. homeassistant/components/reolink/translations/es.json +9 -0
  90. homeassistant/components/ruuvitag_ble/translations/es.json +25 -0
  91. homeassistant/components/scrape/translations/es.json +2 -2
  92. homeassistant/components/sensibo/translations/es.json +25 -0
  93. homeassistant/components/sensor/translations/es.json +6 -3
  94. homeassistant/components/sleep_as_android/translations/es.json +124 -0
  95. homeassistant/components/snapcast/translations/es.json +10 -0
  96. homeassistant/components/solarlog/translations/es.json +2 -2
  97. homeassistant/components/somfy_mylink/translations/es.json +4 -2
  98. homeassistant/components/sonos/translations/es.json +15 -0
  99. homeassistant/components/sql/translations/es.json +2 -2
  100. homeassistant/components/switch_as_x/translations/cs.json +1 -1
  101. homeassistant/components/switchbot_cloud/translations/es.json +16 -0
  102. homeassistant/components/system_bridge/translations/es.json +1 -1
  103. homeassistant/components/template/translations/ca.json +0 -10
  104. homeassistant/components/template/translations/cs.json +16 -16
  105. homeassistant/components/template/translations/da.json +0 -5
  106. homeassistant/components/template/translations/de.json +16 -16
  107. homeassistant/components/template/translations/el.json +0 -11
  108. homeassistant/components/template/translations/en-GB.json +16 -16
  109. homeassistant/components/template/translations/en.json +16 -16
  110. homeassistant/components/template/translations/es.json +22 -19
  111. homeassistant/components/template/translations/et.json +16 -16
  112. homeassistant/components/template/translations/fi.json +0 -7
  113. homeassistant/components/template/translations/fr.json +0 -18
  114. homeassistant/components/template/translations/ga.json +0 -16
  115. homeassistant/components/template/translations/gl.json +0 -4
  116. homeassistant/components/template/translations/he.json +0 -18
  117. homeassistant/components/template/translations/hu.json +0 -11
  118. homeassistant/components/template/translations/id.json +0 -11
  119. homeassistant/components/template/translations/it.json +0 -9
  120. homeassistant/components/template/translations/ja.json +0 -11
  121. homeassistant/components/template/translations/ko.json +0 -8
  122. homeassistant/components/template/translations/lb.json +0 -5
  123. homeassistant/components/template/translations/lt.json +0 -18
  124. homeassistant/components/template/translations/lv.json +0 -5
  125. homeassistant/components/template/translations/nb.json +0 -4
  126. homeassistant/components/template/translations/nl.json +0 -13
  127. homeassistant/components/template/translations/pl.json +0 -11
  128. homeassistant/components/template/translations/pt.json +0 -18
  129. homeassistant/components/template/translations/ro.json +0 -4
  130. homeassistant/components/template/translations/ru.json +0 -17
  131. homeassistant/components/template/translations/sk.json +0 -18
  132. homeassistant/components/template/translations/sl.json +0 -11
  133. homeassistant/components/template/translations/sv.json +0 -18
  134. homeassistant/components/template/translations/tr.json +0 -11
  135. homeassistant/components/template/translations/uk.json +0 -11
  136. homeassistant/components/template/translations/vi.json +0 -11
  137. homeassistant/components/template/translations/zh-Hans.json +0 -18
  138. homeassistant/components/template/translations/zh-Hant.json +0 -18
  139. homeassistant/components/tesla_fleet/translations/cs.json +1 -1
  140. homeassistant/components/teslemetry/translations/cs.json +1 -1
  141. homeassistant/components/teslemetry/translations/de.json +1 -1
  142. homeassistant/components/teslemetry/translations/es.json +97 -5
  143. homeassistant/components/tessie/translations/cs.json +1 -1
  144. homeassistant/components/togrill/translations/es.json +28 -0
  145. homeassistant/components/tuya/translations/es.json +24 -1
  146. homeassistant/components/velux/translations/es.json +7 -0
  147. homeassistant/components/volvo/translations/es.json +141 -1
  148. homeassistant/components/wallbox/translations/cs.json +1 -1
  149. homeassistant/components/yalexs_ble/translations/es.json +16 -1
  150. homeassistant/components/yolink/translations/es.json +16 -0
  151. homeassistant/components/zha/translations/es.json +66 -0
  152. homeassistant/components/zwave_js/translations/es.json +20 -2
  153. homeassistant/const.py +1 -1
  154. homeassistant/helpers/area_registry.py +2 -4
  155. homeassistant/helpers/device_registry.py +1 -1
  156. homeassistant/helpers/floor_registry.py +2 -4
  157. homeassistant/package_constraints.txt +3 -3
  158. {homeassistant-2025.9.0b4.dist-info → homeassistant-2025.9.0b6.dist-info}/METADATA +2 -2
  159. {homeassistant-2025.9.0b4.dist-info → homeassistant-2025.9.0b6.dist-info}/RECORD +164 -162
  160. {homeassistant-2025.9.0b4.dist-info → homeassistant-2025.9.0b6.dist-info}/WHEEL +0 -0
  161. {homeassistant-2025.9.0b4.dist-info → homeassistant-2025.9.0b6.dist-info}/entry_points.txt +0 -0
  162. {homeassistant-2025.9.0b4.dist-info → homeassistant-2025.9.0b6.dist-info}/licenses/LICENSE.md +0 -0
  163. {homeassistant-2025.9.0b4.dist-info → homeassistant-2025.9.0b6.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  164. {homeassistant-2025.9.0b4.dist-info → homeassistant-2025.9.0b6.dist-info}/top_level.txt +0 -0
@@ -29,15 +29,44 @@
29
29
  },
30
30
  "entity": {
31
31
  "sensor": {
32
+ "battery_consumed": {
33
+ "name": "Bater\u00eda consumida"
34
+ },
32
35
  "battery_power": {
33
36
  "name": "Energ\u00eda de la bater\u00eda"
34
37
  },
35
38
  "battery_soc": {
36
39
  "name": "Estado de carga de la bater\u00eda"
37
40
  },
41
+ "battery_status": {
42
+ "name": "Estado de la bater\u00eda",
43
+ "state": {
44
+ "charged": "Cargado",
45
+ "charging": "Cargando",
46
+ "discharging": "Descargando"
47
+ }
48
+ },
38
49
  "battery_stored": {
39
50
  "name": "Bater\u00eda almacenada"
40
51
  },
52
+ "energy_battery_consumed": {
53
+ "name": "Energ\u00eda consumida desde las bater\u00edas hoy"
54
+ },
55
+ "energy_battery_stored": {
56
+ "name": "Energ\u00eda almacenada en bater\u00edas hoy"
57
+ },
58
+ "energy_building_consumption": {
59
+ "name": "Consumo del edificio hoy"
60
+ },
61
+ "energy_grid_consumed": {
62
+ "name": "Energ\u00eda consumida de la red hoy"
63
+ },
64
+ "energy_grid_injected": {
65
+ "name": "Energ\u00eda inyectada a la red hoy"
66
+ },
67
+ "energy_pv": {
68
+ "name": "Energ\u00eda fotovoltaica hoy"
69
+ },
41
70
  "grid_current_l1": {
42
71
  "name": "Corriente de red L1"
43
72
  },
@@ -77,9 +106,40 @@
77
106
  "inverter_injection_power_limit": {
78
107
  "name": "L\u00edmite de potencia de inyecci\u00f3n"
79
108
  },
109
+ "manager_inverter_state": {
110
+ "name": "Estado del inversor",
111
+ "state": {
112
+ "grid_consumption": "Consumo de la red",
113
+ "grid_injection": "Inyecci\u00f3n a la red",
114
+ "grid_synchronised_but_not_used": "Red no sincronizada pero utilizada",
115
+ "not_connected": "No conectado",
116
+ "unsynchronized": "No sincronizado"
117
+ }
118
+ },
80
119
  "meter_power": {
81
120
  "name": "Potencia del contador"
82
121
  },
122
+ "monitoring_minute_building_consumption": {
123
+ "name": "Consumo del edificio"
124
+ },
125
+ "monitoring_minute_grid_consumption": {
126
+ "name": "Consumo de la red"
127
+ },
128
+ "monitoring_minute_grid_injection": {
129
+ "name": "Inyecci\u00f3n a la red"
130
+ },
131
+ "monitoring_minute_grid_power_flow": {
132
+ "name": "Flujo de energ\u00eda de la red"
133
+ },
134
+ "monitoring_minute_solar_production": {
135
+ "name": "Producci\u00f3n solar"
136
+ },
137
+ "monitoring_self_consumption": {
138
+ "name": "Autoconsumo"
139
+ },
140
+ "monitoring_self_sufficiency": {
141
+ "name": "Autosuficiencia"
142
+ },
83
143
  "output_current_l1": {
84
144
  "name": "Corriente de salida L1"
85
145
  },
@@ -133,6 +193,26 @@
133
193
  },
134
194
  "temp_component_temperature": {
135
195
  "name": "Temperatura del componente"
196
+ },
197
+ "timeline_type_msg": {
198
+ "name": "Estado de la l\u00ednea de tiempo",
199
+ "state": {
200
+ "com_lost": "Comunicaci\u00f3n perdida.",
201
+ "error_bat": "Se ha detectado un error en la bater\u00eda",
202
+ "error_grid": "Se ha detectado un error en la red el\u00e9ctrica.",
203
+ "error_ond": "Se ha detectado un error en el inversor.",
204
+ "error_pv": "Error en el sistema fotovoltaico detectado.",
205
+ "error_soft": "Error de software detectado.",
206
+ "good_1": "Sistema funcionando normalmente.",
207
+ "info_bat": "Informaci\u00f3n de la bater\u00eda disponible.",
208
+ "info_ond": "Informaci\u00f3n del inversor disponible.",
209
+ "info_smartlo": "Informaci\u00f3n de carga inteligente disponible.",
210
+ "info_soft": "Informaci\u00f3n del software disponible.",
211
+ "warning_bat": "Advertencia de bater\u00eda detectada.",
212
+ "warning_grid": "Advertencia de red el\u00e9ctrica detectada.",
213
+ "warning_pv": "Advertencia de sistema fotovoltaico detectada.",
214
+ "web_account": "Notificaci\u00f3n de cuenta web."
215
+ }
136
216
  }
137
217
  }
138
218
  }
@@ -156,8 +156,56 @@
156
156
  "config_panel": {
157
157
  "entities": {
158
158
  "create": {
159
+ "_": {
160
+ "entity": {
161
+ "description": "Configuraci\u00f3n espec\u00edfica de Home Assistant.",
162
+ "device_description": "Un dispositivo permite agrupar varias entidades. Selecciona el dispositivo al que pertenece esta entidad o crea uno nuevo.",
163
+ "entity_category_description": "Clasificaci\u00f3n de una entidad no primaria. D\u00e9jala en blanco para comportamiento est\u00e1ndar.",
164
+ "entity_category_title": "Categor\u00eda de la entidad",
165
+ "entity_description": "Opcional si se selecciona un dispositivo; obligatorio en caso contrario. Si la entidad est\u00e1 asignada a un dispositivo, se utiliza el nombre del dispositivo como prefijo.",
166
+ "entity_label": "Nombre de la entidad",
167
+ "name_description": "Define c\u00f3mo debe nombrarse la entidad en Home Assistant.",
168
+ "name_title": "Nombre del dispositivo y de la entidad",
169
+ "title": "Configuraci\u00f3n de entidad"
170
+ },
171
+ "knx": {
172
+ "knx_group_address": {
173
+ "dpt": "Tipo de punto de datos",
174
+ "passive_addresses": "Direcciones pasivas",
175
+ "send_address": "Direcci\u00f3n de env\u00edo",
176
+ "state_address": "Direcci\u00f3n del estado",
177
+ "valid_dpts": "DPT v\u00e1lidos"
178
+ },
179
+ "sync_state": {
180
+ "description": "Solicitar activamente actualizaciones de estado del bus KNX para direcciones de estado.",
181
+ "options": {
182
+ "every": "Programado cada",
183
+ "expire": "Caduca tras la \u00faltima actualizaci\u00f3n del valor",
184
+ "false": "Nunca",
185
+ "init": "Una vez establecida la conexi\u00f3n",
186
+ "true": "Utilizar el valor predeterminado de la integraci\u00f3n"
187
+ },
188
+ "strategy": "Estrategia",
189
+ "title": "Actualizador de estado"
190
+ },
191
+ "title": "Configuraci\u00f3n KNX"
192
+ }
193
+ },
159
194
  "binary_sensor": {
195
+ "description": "Entidad de solo lectura para puntos de datos binarios. Estados de ventanas o puertas, etc.",
160
196
  "knx": {
197
+ "context_timeout": {
198
+ "description": "El tiempo en segundos entre varios payloads de telegramas id\u00e9nticos que contar\u00edan para un contador interno. Esto puede usarse para automatizar los clics m\u00faltiples en un bot\u00f3n. \"0\" para desactivar esta funci\u00f3n.",
199
+ "label": "Tiempo de espera del contexto"
200
+ },
201
+ "ignore_internal_state": {
202
+ "description": "Escribe cada actualizaci\u00f3n en la m\u00e1quina de estados, incluso si los datos son los mismos.",
203
+ "label": "Forzar actualizaci\u00f3n"
204
+ },
205
+ "invert": {
206
+ "description": "Invertir el payload antes de procesarlo.",
207
+ "label": "Invertir"
208
+ },
161
209
  "reset_after": {
162
210
  "description": "Vuelve al estado \"apagado\" despu\u00e9s de los segundos especificados.",
163
211
  "label": "Restablecer despu\u00e9s de"
@@ -181,6 +229,9 @@
181
229
  "ga_position_set": {
182
230
  "label": "Establecer posici\u00f3n"
183
231
  },
232
+ "ga_position_state": {
233
+ "label": "Posici\u00f3n actual"
234
+ },
184
235
  "ga_step": {
185
236
  "label": "Movimiento paso a paso"
186
237
  },
@@ -223,13 +274,61 @@
223
274
  "title": "Duraci\u00f3n del recorrido"
224
275
  },
225
276
  "travelling_time_down": {
226
- "description": "Tiempo que necesita la cubierta para cerrarse completamente en segundos."
277
+ "description": "Tiempo que necesita la cubierta para cerrarse completamente en segundos.",
278
+ "label": "Tiempo de viaje para el cierre"
279
+ },
280
+ "travelling_time_up": {
281
+ "description": "Tiempo que la tapa necesita para abrirse completamente en segundos.",
282
+ "label": "Tiempo de viaje para la apertura"
227
283
  }
228
284
  }
229
285
  },
286
+ "header": "Crear una nueva entidad",
230
287
  "light": {
288
+ "description": "La plataforma de iluminaci\u00f3n KNX se utiliza como interfaz para actuadores de atenuaci\u00f3n, controladores LED, pasarelas DALI y similares.",
231
289
  "knx": {
232
290
  "color": {
291
+ "description": "Controla el color de la luz.",
292
+ "ga_blue_brightness": {
293
+ "label": "Brillo del azul"
294
+ },
295
+ "ga_blue_switch": {
296
+ "label": "Interruptor azul"
297
+ },
298
+ "ga_color": {
299
+ "label": "Color",
300
+ "options": {
301
+ "232_600": "RGB",
302
+ "242_600": "XYY",
303
+ "251_600": "RGBW"
304
+ }
305
+ },
306
+ "ga_green_brightness": {
307
+ "label": "Brillo del verde"
308
+ },
309
+ "ga_green_switch": {
310
+ "label": "Interruptor verde"
311
+ },
312
+ "ga_hue": {
313
+ "description": "Controla el tono de la luz.",
314
+ "label": "Matiz"
315
+ },
316
+ "ga_red_brightness": {
317
+ "label": "Brillo del rojo"
318
+ },
319
+ "ga_red_switch": {
320
+ "label": "Interruptor rojo"
321
+ },
322
+ "ga_saturation": {
323
+ "description": "Controla la saturaci\u00f3n de la luz.",
324
+ "label": "Saturaci\u00f3n"
325
+ },
326
+ "ga_white_brightness": {
327
+ "label": "Brillo del blanco"
328
+ },
329
+ "ga_white_switch": {
330
+ "label": "Interruptor blanco"
331
+ },
233
332
  "options": {
234
333
  "hsv_addresses": {
235
334
  "description": "Tono, saturaci\u00f3n y brillo utilizando direcciones de grupo individuales.",
@@ -245,15 +344,19 @@
245
344
  }
246
345
  },
247
346
  "section_blue": {
347
+ "description": "Controla el componente de color azul de la luz. Se requiere la direcci\u00f3n del grupo de brillo.",
248
348
  "title": "Azul"
249
349
  },
250
350
  "section_green": {
351
+ "description": "Controla el componente de color verde de la luz. Se requiere la direcci\u00f3n del grupo de brillo.",
251
352
  "title": "Verde"
252
353
  },
253
354
  "section_red": {
355
+ "description": "Controla el componente de color rojo de la luz. Se requiere la direcci\u00f3n del grupo de brillo.",
254
356
  "title": "Rojo"
255
357
  },
256
358
  "section_white": {
359
+ "description": "Controla el componente de color blanco de la luz. Se requiere la direcci\u00f3n del grupo de brillo.",
257
360
  "title": "Blanco"
258
361
  },
259
362
  "title": "Color"
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "entity_component": {
27
27
  "_": {
28
- "name": "Zamknout",
28
+ "name": "Z\u00e1mek",
29
29
  "state": {
30
30
  "jammed": "Zaseknuto",
31
31
  "locked": "Zam\u010deno",
@@ -82,5 +82,5 @@
82
82
  "name": "Odemknout"
83
83
  }
84
84
  },
85
- "title": "Zamknout"
85
+ "title": "Z\u00e1mek"
86
86
  }
@@ -183,7 +183,7 @@
183
183
  },
184
184
  "lock": {
185
185
  "lock": {
186
- "name": "Zamknout"
186
+ "name": "Z\u00e1mek"
187
187
  }
188
188
  },
189
189
  "number": {
@@ -47,6 +47,9 @@
47
47
  },
48
48
  "entity": {
49
49
  "binary_sensor": {
50
+ "alarm_door": {
51
+ "name": "Alarma de puerta"
52
+ },
50
53
  "battery_alert": {
51
54
  "name": "Alerta de bater\u00eda"
52
55
  },
@@ -112,6 +115,9 @@
112
115
  "resume": {
113
116
  "name": "Reanudar"
114
117
  },
118
+ "self_test_request": {
119
+ "name": "Autodiagn\u00f3stico"
120
+ },
115
121
  "start": {
116
122
  "name": "Iniciar"
117
123
  },
@@ -298,6 +304,9 @@
298
304
  "activated_carbon_filter_condition": {
299
305
  "name": "Estado del filtro de carb\u00f3n activado"
300
306
  },
307
+ "active_current": {
308
+ "name": "Corriente activa"
309
+ },
301
310
  "air_quality": {
302
311
  "name": "Calidad del aire",
303
312
  "state": {
@@ -309,6 +318,9 @@
309
318
  "very_poor": "Muy pobre"
310
319
  }
311
320
  },
321
+ "apparent_current": {
322
+ "name": "Corriente aparente"
323
+ },
312
324
  "auto_close_time": {
313
325
  "name": "Hora de cierre autom\u00e1tico"
314
326
  },
@@ -372,6 +384,15 @@
372
384
  "estimated_heat_required": {
373
385
  "name": "Energ\u00eda calor\u00edfica necesaria"
374
386
  },
387
+ "eve_weather_trend": {
388
+ "name": "Tendencia meteorol\u00f3gica",
389
+ "state": {
390
+ "cloudy": "Nublado",
391
+ "rainy": "Lluvioso",
392
+ "stormy": "Tormentoso",
393
+ "sunny": "Soleado"
394
+ }
395
+ },
375
396
  "evse_charge_current": {
376
397
  "name": "Corriente de carga"
377
398
  },
@@ -446,6 +467,15 @@
446
467
  "pump_speed": {
447
468
  "name": "Velocidad de rotaci\u00f3n"
448
469
  },
470
+ "reactive_current": {
471
+ "name": "Corriente reactiva"
472
+ },
473
+ "rms_current": {
474
+ "name": "Corriente efectiva"
475
+ },
476
+ "rms_voltage": {
477
+ "name": "Tensi\u00f3n efectiva"
478
+ },
449
479
  "switch_current_position": {
450
480
  "name": "Posici\u00f3n actual del interruptor"
451
481
  },
@@ -458,6 +488,9 @@
458
488
  "valve_position": {
459
489
  "name": "Posici\u00f3n de la v\u00e1lvula"
460
490
  },
491
+ "voltage": {
492
+ "name": "Tensi\u00f3n"
493
+ },
461
494
  "window_covering_target_position": {
462
495
  "name": "Posici\u00f3n de apertura objetivo"
463
496
  }
@@ -188,6 +188,7 @@
188
188
  "name": "ID de contenido"
189
189
  },
190
190
  "media_content_type": {
191
+ "description": "El tipo de contenido que se va a explorar, como imagen, m\u00fasica, programa de TV, v\u00eddeo, episodio, canal o lista de reproducci\u00f3n.",
191
192
  "name": "Tipo de contenido"
192
193
  }
193
194
  },
@@ -251,6 +252,10 @@
251
252
  "enqueue": {
252
253
  "description": "Si el contenido debe reproducirse ahora o a\u00f1adirse a la cola.",
253
254
  "name": "Poner en cola"
255
+ },
256
+ "media": {
257
+ "description": "El medio seleccionado para reproducir.",
258
+ "name": "Medios"
254
259
  }
255
260
  },
256
261
  "name": "Reproducir contenido multimedia"
@@ -273,7 +278,7 @@
273
278
  "name": "ID de contenido"
274
279
  },
275
280
  "media_content_type": {
276
- "description": "El tipo de contenido que se quiere explorar, como imagen, m\u00fasica, programa de televisi\u00f3n, video, episodio, canal o lista de reproducci\u00f3n.",
281
+ "description": "El tipo de contenido que se va a explorar, como imagen, m\u00fasica, programa de TV, v\u00eddeo, episodio, canal o lista de reproducci\u00f3n.",
277
282
  "name": "Tipo de contenido"
278
283
  },
279
284
  "media_filter_classes": {
@@ -239,6 +239,7 @@
239
239
  "plate_step_8": "4\u2022",
240
240
  "plate_step_9": "5",
241
241
  "plate_step_boost": "Impulso",
242
+ "plate_step_boost_2": "Impulso 2",
242
243
  "plate_step_warm": "Calentando"
243
244
  }
244
245
  },
@@ -899,6 +900,18 @@
899
900
  "yom_tov": "Yom tov",
900
901
  "yorkshire_pudding": "Pudin de Yorkshire",
901
902
  "zander_fillet": "Lucioperca (filete)"
903
+ },
904
+ "state_attributes": {
905
+ "profile": {
906
+ "name": "Perfil",
907
+ "state": {
908
+ "profile_1": "Perfil 1",
909
+ "profile_2": "Perfil 2",
910
+ "profile_3": "Perfil 3",
911
+ "profile_4": "Perfil 4",
912
+ "profile_5": "Perfil 5"
913
+ }
914
+ }
902
915
  }
903
916
  },
904
917
  "program_phase": {
@@ -157,5 +157,8 @@ class SlaveSensor(
157
157
  def _handle_coordinator_update(self) -> None:
158
158
  """Handle updated data from the coordinator."""
159
159
  result = self.coordinator.data
160
- self._attr_is_on = bool(result[self._result_inx] & 1) if result else None
160
+ if not result or self._result_inx >= len(result):
161
+ self._attr_is_on = None
162
+ else:
163
+ self._attr_is_on = bool(result[self._result_inx] & 1)
161
164
  super()._handle_coordinator_update()
@@ -363,7 +363,7 @@ class ModbusThermostat(BaseStructPlatform, RestoreEntity, ClimateEntity):
363
363
  )
364
364
  break
365
365
 
366
- await self._async_update_write_state()
366
+ await self.async_local_update(cancel_pending_update=True)
367
367
 
368
368
  async def async_set_fan_mode(self, fan_mode: str) -> None:
369
369
  """Set new target fan mode."""
@@ -385,7 +385,7 @@ class ModbusThermostat(BaseStructPlatform, RestoreEntity, ClimateEntity):
385
385
  CALL_TYPE_WRITE_REGISTER,
386
386
  )
387
387
 
388
- await self._async_update_write_state()
388
+ await self.async_local_update(cancel_pending_update=True)
389
389
 
390
390
  async def async_set_swing_mode(self, swing_mode: str) -> None:
391
391
  """Set new target swing mode."""
@@ -408,7 +408,7 @@ class ModbusThermostat(BaseStructPlatform, RestoreEntity, ClimateEntity):
408
408
  CALL_TYPE_WRITE_REGISTER,
409
409
  )
410
410
  break
411
- await self._async_update_write_state()
411
+ await self.async_local_update(cancel_pending_update=True)
412
412
 
413
413
  async def async_set_temperature(self, **kwargs: Any) -> None:
414
414
  """Set new target temperature."""
@@ -463,7 +463,7 @@ class ModbusThermostat(BaseStructPlatform, RestoreEntity, ClimateEntity):
463
463
  CALL_TYPE_WRITE_REGISTERS,
464
464
  )
465
465
  self._attr_available = result is not None
466
- await self._async_update_write_state()
466
+ await self.async_local_update(cancel_pending_update=True)
467
467
 
468
468
  async def _async_update(self) -> None:
469
469
  """Update Target & Current Temperature."""
@@ -111,7 +111,7 @@ class ModbusCover(BasePlatform, CoverEntity, RestoreEntity):
111
111
  self._slave, self._write_address, self._state_open, self._write_type
112
112
  )
113
113
  self._attr_available = result is not None
114
- await self._async_update_write_state()
114
+ await self.async_local_update(cancel_pending_update=True)
115
115
 
116
116
  async def async_close_cover(self, **kwargs: Any) -> None:
117
117
  """Close cover."""
@@ -119,7 +119,7 @@ class ModbusCover(BasePlatform, CoverEntity, RestoreEntity):
119
119
  self._slave, self._write_address, self._state_closed, self._write_type
120
120
  )
121
121
  self._attr_available = result is not None
122
- await self._async_update_write_state()
122
+ await self.async_local_update(cancel_pending_update=True)
123
123
 
124
124
  async def _async_update(self) -> None:
125
125
  """Update the state of the cover."""
@@ -112,14 +112,16 @@ class BasePlatform(Entity):
112
112
  async def _async_update(self) -> None:
113
113
  """Virtual function to be overwritten."""
114
114
 
115
- async def async_update(self) -> None:
115
+ async def async_update(self, now: datetime | None = None) -> None:
116
116
  """Update the entity state."""
117
- if self._cancel_call:
118
- self._cancel_call()
119
- await self.async_local_update()
117
+ await self.async_local_update(cancel_pending_update=True)
120
118
 
121
- async def async_local_update(self, now: datetime | None = None) -> None:
119
+ async def async_local_update(
120
+ self, now: datetime | None = None, cancel_pending_update: bool = False
121
+ ) -> None:
122
122
  """Update the entity state."""
123
+ if cancel_pending_update and self._cancel_call:
124
+ self._cancel_call()
123
125
  await self._async_update()
124
126
  self.async_write_ha_state()
125
127
  if self._scan_interval > 0:
@@ -131,62 +133,22 @@ class BasePlatform(Entity):
131
133
 
132
134
  async def async_will_remove_from_hass(self) -> None:
133
135
  """Remove entity from hass."""
134
- _LOGGER.debug(f"Removing entity {self._attr_name}")
135
- if self._cancel_call:
136
- self._cancel_call()
137
- self._cancel_call = None
136
+ self.async_disable()
138
137
 
139
138
  @callback
140
- def async_hold(self) -> None:
139
+ def async_disable(self) -> None:
141
140
  """Remote stop entity."""
142
- _LOGGER.debug(f"hold entity {self._attr_name}")
143
- self._async_cancel_future_pending_update()
144
- self._attr_available = False
145
- self.async_write_ha_state()
146
-
147
- async def _async_update_write_state(self) -> None:
148
- """Update the entity state and write it to the state machine."""
141
+ _LOGGER.info(f"hold entity {self._attr_name}")
149
142
  if self._cancel_call:
150
143
  self._cancel_call()
151
144
  self._cancel_call = None
152
- await self.async_local_update()
153
-
154
- async def _async_update_if_not_in_progress(
155
- self, now: datetime | None = None
156
- ) -> None:
157
- """Update the entity state if not already in progress."""
158
- await self._async_update_write_state()
159
-
160
- @callback
161
- def async_run(self) -> None:
162
- """Remote start entity."""
163
- _LOGGER.info(f"start entity {self._attr_name}")
164
- self._async_schedule_future_update(0.1)
165
- self._cancel_call = async_call_later(
166
- self.hass, timedelta(seconds=0.1), self.async_local_update
167
- )
168
- self._attr_available = True
145
+ self._attr_available = False
169
146
  self.async_write_ha_state()
170
147
 
171
- @callback
172
- def _async_schedule_future_update(self, delay: float) -> None:
173
- """Schedule an update in the future."""
174
- self._async_cancel_future_pending_update()
175
- self._cancel_call = async_call_later(
176
- self.hass, delay, self._async_update_if_not_in_progress
177
- )
178
-
179
- @callback
180
- def _async_cancel_future_pending_update(self) -> None:
181
- """Cancel a future pending update."""
182
- if self._cancel_call:
183
- self._cancel_call()
184
- self._cancel_call = None
185
-
186
148
  async def async_await_connection(self, _now: Any) -> None:
187
149
  """Wait for first connect."""
188
150
  await self._hub.event_connected.wait()
189
- self.async_run()
151
+ await self.async_local_update(cancel_pending_update=True)
190
152
 
191
153
  async def async_base_added_to_hass(self) -> None:
192
154
  """Handle entity which will be added."""
@@ -198,10 +160,12 @@ class BasePlatform(Entity):
198
160
  )
199
161
  )
200
162
  self.async_on_remove(
201
- async_dispatcher_connect(self.hass, SIGNAL_STOP_ENTITY, self.async_hold)
163
+ async_dispatcher_connect(self.hass, SIGNAL_STOP_ENTITY, self.async_disable)
202
164
  )
203
165
  self.async_on_remove(
204
- async_dispatcher_connect(self.hass, SIGNAL_START_ENTITY, self.async_run)
166
+ async_dispatcher_connect(
167
+ self.hass, SIGNAL_START_ENTITY, self.async_local_update
168
+ )
205
169
  )
206
170
 
207
171
 
@@ -388,10 +352,15 @@ class BaseSwitch(BasePlatform, ToggleEntity, RestoreEntity):
388
352
  return
389
353
 
390
354
  if self._verify_delay:
391
- self._async_schedule_future_update(self._verify_delay)
355
+ assert self._verify_delay == 1
356
+ if self._cancel_call:
357
+ self._cancel_call()
358
+ self._cancel_call = None
359
+ self._cancel_call = async_call_later(
360
+ self.hass, self._verify_delay, self.async_update
361
+ )
392
362
  return
393
-
394
- await self._async_update_write_state()
363
+ await self.async_local_update(cancel_pending_update=True)
395
364
 
396
365
  async def async_turn_off(self, **kwargs: Any) -> None:
397
366
  """Set switch off."""
@@ -312,15 +312,14 @@ class ModbusHub:
312
312
  async def async_pb_connect(self) -> None:
313
313
  """Connect to device, async."""
314
314
  while True:
315
- async with self._lock:
316
- try:
317
- if await self._client.connect(): # type: ignore[union-attr]
318
- _LOGGER.info(f"modbus {self.name} communication open")
319
- break
320
- except ModbusException as exception_error:
321
- self._log_error(
322
- f"{self.name} connect failed, please check your configuration ({exception_error!s})"
323
- )
315
+ try:
316
+ if await self._client.connect(): # type: ignore[union-attr]
317
+ _LOGGER.info(f"modbus {self.name} communication open")
318
+ break
319
+ except ModbusException as exception_error:
320
+ self._log_error(
321
+ f"{self.name} connect failed, please check your configuration ({exception_error!s})"
322
+ )
324
323
  _LOGGER.info(
325
324
  f"modbus {self.name} connect NOT a success ! retrying in {PRIMARY_RECONNECT_DELAY} seconds"
326
325
  )
@@ -181,6 +181,10 @@ class SlaveSensor(
181
181
  def _handle_coordinator_update(self) -> None:
182
182
  """Handle updated data from the coordinator."""
183
183
  result = self.coordinator.data
184
- self._attr_native_value = result[self._idx] if result else None
185
- self._attr_available = result is not None
184
+ if not result or self._idx >= len(result):
185
+ self._attr_native_value = None
186
+ self._attr_available = False
187
+ else:
188
+ self._attr_native_value = result[self._idx]
189
+ self._attr_available = True
186
190
  super()._handle_coordinator_update()