homeassistant 2025.12.0b1__py3-none-any.whl → 2025.12.0b2__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 (39) hide show
  1. homeassistant/components/anglian_water/translations/et.json +27 -1
  2. homeassistant/components/anthropic/__init__.py +2 -9
  3. homeassistant/components/climate/translations/bg.json +14 -0
  4. homeassistant/components/climate/translations/cs.json +25 -3
  5. homeassistant/components/climate/translations/de.json +22 -0
  6. homeassistant/components/climate/translations/et.json +13 -1
  7. homeassistant/components/climate/translations/sk.json +22 -0
  8. homeassistant/components/climate/translations/zh-Hant.json +22 -0
  9. homeassistant/components/energyid/translations/bg.json +7 -0
  10. homeassistant/components/frontend/manifest.json +1 -1
  11. homeassistant/components/google_air_quality/translations/et.json +32 -1
  12. homeassistant/components/knx/translations/sk.json +3 -0
  13. homeassistant/components/mqtt/translations/cs.json +22 -22
  14. homeassistant/components/music_assistant/translations/bg.json +6 -1
  15. homeassistant/components/pooldose/translations/et.json +11 -0
  16. homeassistant/components/roborock/image.py +5 -2
  17. homeassistant/components/roborock/manifest.json +1 -1
  18. homeassistant/components/shelly/const.py +1 -0
  19. homeassistant/components/shelly/translations/sv.json +189 -9
  20. homeassistant/components/template/__init__.py +20 -1
  21. homeassistant/components/template/helpers.py +3 -0
  22. homeassistant/components/wled/config_flow.py +29 -1
  23. homeassistant/components/wled/coordinator.py +12 -0
  24. homeassistant/components/wled/strings.json +6 -1
  25. homeassistant/components/wled/translations/bg.json +2 -1
  26. homeassistant/components/wled/translations/de.json +6 -1
  27. homeassistant/components/wled/translations/en.json +6 -1
  28. homeassistant/components/wled/translations/et.json +6 -1
  29. homeassistant/components/wled/translations/sk.json +6 -1
  30. homeassistant/components/zha/translations/et.json +42 -0
  31. homeassistant/const.py +1 -1
  32. homeassistant/package_constraints.txt +1 -1
  33. {homeassistant-2025.12.0b1.dist-info → homeassistant-2025.12.0b2.dist-info}/METADATA +1 -1
  34. {homeassistant-2025.12.0b1.dist-info → homeassistant-2025.12.0b2.dist-info}/RECORD +39 -38
  35. {homeassistant-2025.12.0b1.dist-info → homeassistant-2025.12.0b2.dist-info}/WHEEL +0 -0
  36. {homeassistant-2025.12.0b1.dist-info → homeassistant-2025.12.0b2.dist-info}/entry_points.txt +0 -0
  37. {homeassistant-2025.12.0b1.dist-info → homeassistant-2025.12.0b2.dist-info}/licenses/LICENSE.md +0 -0
  38. {homeassistant-2025.12.0b1.dist-info → homeassistant-2025.12.0b2.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  39. {homeassistant-2025.12.0b1.dist-info → homeassistant-2025.12.0b2.dist-info}/top_level.txt +0 -0
@@ -6,6 +6,7 @@
6
6
  "another_device": "Omkonfigureringen misslyckades, IP-adressen/v\u00e4rdnamnet f\u00f6r en annan Shelly-enhet anv\u00e4ndes.",
7
7
  "ble_not_permitted": "Enheten \u00e4r bunden till ett Shelly-molnkonto och kan inte tillhandah\u00e5llas via Bluetooth. Anv\u00e4nd Shelly-appen f\u00f6r att tillhandah\u00e5lla WiFi-autentiseringsuppgifter och l\u00e4gg sedan till enheten n\u00e4r den visas i ditt n\u00e4tverk.",
8
8
  "cannot_connect": "Det gick inte att ansluta till enheten. Se till att enheten \u00e4r p\u00e5slagen och inom r\u00e4ckh\u00e5ll.",
9
+ "custom_port_not_supported": "Gen1-enheter st\u00f6djer inte anpassad port.",
9
10
  "firmware_not_fully_provisioned": "Enheten \u00e4r inte helt etablerad. Kontakta Shellys support",
10
11
  "invalid_discovery_info": "Ogiltig information om Bluetooth-identifiering.",
11
12
  "ipv6_not_supported": "IPv6 st\u00f6ds inte.",
@@ -31,7 +32,16 @@
31
32
  },
32
33
  "step": {
33
34
  "bluetooth_confirm": {
34
- "description": "Shelly-enheten {name} har uppt\u00e4ckts via Bluetooth men \u00e4r inte ansluten till WiFi. \n\nVill du tillhandah\u00e5lla WiFi-autentiseringsuppgifter till den h\u00e4r enheten?"
35
+ "data": {
36
+ "disable_ap": "Inaktivera WiFi-\u00e5tkomstpunkt efter installation",
37
+ "disable_ble_rpc": "Inaktivera Bluetooth RPC efter installation"
38
+ },
39
+ "data_description": {
40
+ "disable_ap": "F\u00f6r att f\u00f6rb\u00e4ttra s\u00e4kerheten b\u00f6r du inaktivera WiFi-\u00e5tkomstpunkten efter att du har anslutit till n\u00e4tverket.",
41
+ "disable_ble_rpc": "F\u00f6r f\u00f6rb\u00e4ttrad s\u00e4kerhet, avaktivera Bluetooth RPC-\u00e5tkomst efter att WiFi har konfigurerats. Bluetooth kommer att f\u00f6rbli aktiverat f\u00f6r BLE-sensorer och -knappar."
42
+ },
43
+ "description": "Shelly-enheten {name} har uppt\u00e4ckts via Bluetooth men \u00e4r inte ansluten till WiFi. \n\nVill du tillhandah\u00e5lla WiFi-autentiseringsuppgifter till den h\u00e4r enheten?",
44
+ "title": "St\u00e4ll in WiFi via Bluetooth"
35
45
  },
36
46
  "confirm_discovery": {
37
47
  "description": "Vill du konfigurera {model} p\u00e5 {host}?\n\nBatteridrivna enheter som \u00e4r l\u00f6senordsskyddade m\u00e5ste v\u00e4ckas innan du forts\u00e4tter med installationen.\nBatteridrivna enheter som inte \u00e4r l\u00f6senordsskyddade kommer att l\u00e4ggas till n\u00e4r enheten vaknar, du kan nu manuellt v\u00e4cka enheten med en knapp p\u00e5 den eller v\u00e4nta p\u00e5 n\u00e4sta datauppdatering fr\u00e5n enheten."
@@ -66,11 +76,24 @@
66
76
  },
67
77
  "description": "Uppdatera konfiguration f\u00f6r {device_name}.\n\nBatteridrivna enheter m\u00e5ste v\u00e4ckas innan installation, tryck p\u00e5 n\u00e5gon knapp p\u00e5 enheten f\u00f6r att v\u00e4cka den nu."
68
78
  },
79
+ "user": {
80
+ "data": {
81
+ "device": "Enhet"
82
+ },
83
+ "data_description": {
84
+ "device": "V\u00e4lj en uppt\u00e4ckt enhet eller ange en adress manuellt."
85
+ }
86
+ },
69
87
  "user_manual": {
70
88
  "data": {
71
89
  "host": "V\u00e4rd",
72
90
  "port": "Port"
73
- }
91
+ },
92
+ "data_description": {
93
+ "host": "V\u00e4rdnamn eller IP-adress f\u00f6r den Shelly-enhet som du vill ansluta till.",
94
+ "port": "TCP-port f\u00f6r den Shelly-enhet som ska anslutas till (Gen2+)."
95
+ },
96
+ "description": "Batteridrivna enheter m\u00e5ste v\u00e4ckas innan installation, tryck p\u00e5 en knapp p\u00e5 enheten f\u00f6r att v\u00e4cka den nu."
74
97
  },
75
98
  "wifi_scan": {
76
99
  "data": {
@@ -79,7 +102,8 @@
79
102
  },
80
103
  "data_description": {
81
104
  "ssid": "V\u00e4lj ett WiFi-n\u00e4tverk fr\u00e5n listan eller ange ett anpassat SSID f\u00f6r dolda n\u00e4tverk."
82
- }
105
+ },
106
+ "description": "V\u00e4lj ett WiFi-n\u00e4tverk och ange ett l\u00f6senord f\u00f6r att installera enheten."
83
107
  },
84
108
  "wifi_scan_failed": {
85
109
  "description": "Det gick inte att s\u00f6ka efter WiFi-n\u00e4tverk via Bluetooth. Enheten kan vara utom r\u00e4ckh\u00e5ll eller s\u00e5 misslyckades Bluetooth-anslutningen. Vill du f\u00f6rs\u00f6ka igen?"
@@ -92,7 +116,8 @@
92
116
  "button1": "F\u00f6rsta knappen",
93
117
  "button2": "Andra knappen",
94
118
  "button3": "Tredje knappen",
95
- "button4": "Fj\u00e4rde knappen"
119
+ "button4": "Fj\u00e4rde knappen",
120
+ "button5": "Femte knappen"
96
121
  },
97
122
  "trigger_type": {
98
123
  "btn_down": "{subtype} knapp nedtryckt",
@@ -114,6 +139,9 @@
114
139
  "cable_unplugged": {
115
140
  "name": "Kabel fr\u00e5nkopplad"
116
141
  },
142
+ "cable_unplugged_with_channel_name": {
143
+ "name": "{channel_name} kabel ej ansluten"
144
+ },
117
145
  "calibration": {
118
146
  "name": "Kalibrering"
119
147
  },
@@ -123,11 +151,62 @@
123
151
  "door": {
124
152
  "name": "D\u00f6rr"
125
153
  },
154
+ "external_input": {
155
+ "name": "Extern ing\u00e5ng"
156
+ },
157
+ "external_power": {
158
+ "name": "Extern effekt"
159
+ },
160
+ "flood": {
161
+ "name": "\u00d6versv\u00e4mning"
162
+ },
163
+ "flood_with_channel_name": {
164
+ "name": "{channel_name} \u00f6versv\u00e4mning"
165
+ },
166
+ "input": {
167
+ "name": "Ing\u00e5ng"
168
+ },
169
+ "input_with_number": {
170
+ "name": "Ing\u00e5ng {input_number}"
171
+ },
126
172
  "mute": {
127
173
  "name": "Tyst"
128
174
  },
175
+ "mute_with_channel_name": {
176
+ "name": "{channel_name} tyst"
177
+ },
178
+ "occupancy_with_channel_name": {
179
+ "name": "{channel_name} bel\u00e4ggning"
180
+ },
181
+ "overcurrent": {
182
+ "name": "\u00d6verstr\u00f6m"
183
+ },
184
+ "overcurrent_with_channel_name": {
185
+ "name": "{channel_name} \u00f6verstr\u00f6m"
186
+ },
187
+ "overheating": {
188
+ "name": "\u00d6verhettad"
189
+ },
190
+ "overheating_with_channel_name": {
191
+ "name": "{channel_name} \u00f6verhettad"
192
+ },
193
+ "overpowering": {
194
+ "name": "Effekt \u00f6verskrids"
195
+ },
196
+ "overpowering_with_channel_name": {
197
+ "name": "{channel_name} effekt \u00f6verskrids"
198
+ },
199
+ "overvoltage": {
200
+ "name": "\u00d6versp\u00e4nning"
201
+ },
202
+ "overvoltage_with_channel_name": {
203
+ "name": "{channel_name} \u00f6versp\u00e4nning"
204
+ },
129
205
  "restart_required": {
130
206
  "name": "Omstart kr\u00e4vs"
207
+ },
208
+ "smoke_with_channel_name": {
209
+ "name": "{channel_name} r\u00f6k"
131
210
  }
132
211
  },
133
212
  "button": {
@@ -166,6 +245,7 @@
166
245
  },
167
246
  "event": {
168
247
  "input": {
248
+ "name": "Ing\u00e5ng {input_number}",
169
249
  "state_attributes": {
170
250
  "event_type": {
171
251
  "state": {
@@ -193,8 +273,14 @@
193
273
  "external_temperature": {
194
274
  "name": "Extern temperatur"
195
275
  },
276
+ "target_humidity": {
277
+ "name": "M\u00e5lfuktighet"
278
+ },
196
279
  "target_temperature": {
197
280
  "name": "M\u00e5ltemperatur"
281
+ },
282
+ "valve_position": {
283
+ "name": "Ventill\u00e4ge"
198
284
  }
199
285
  },
200
286
  "select": {
@@ -212,12 +298,24 @@
212
298
  }
213
299
  },
214
300
  "sensor": {
301
+ "adc": {
302
+ "name": "ADC"
303
+ },
215
304
  "analog": {
216
305
  "name": "Analog"
217
306
  },
218
307
  "analog_value": {
219
308
  "name": "Analogt v\u00e4rde"
220
309
  },
310
+ "analog_value_with_channel_name": {
311
+ "name": "{channel_name} analogt v\u00e4rde"
312
+ },
313
+ "analog_with_channel_name": {
314
+ "name": "{channel_name} analog"
315
+ },
316
+ "apparent_power_with_channel_name": {
317
+ "name": "{channel_name} skenbar effekt"
318
+ },
221
319
  "average_temperature": {
222
320
  "name": "Genomsnittlig temperatur"
223
321
  },
@@ -234,6 +332,12 @@
234
332
  "charger_wait": "Laddning pausad av fordonet"
235
333
  }
236
334
  },
335
+ "current_with_channel_name": {
336
+ "name": "{channel_name} str\u00f6m"
337
+ },
338
+ "current_with_phase_name": {
339
+ "name": "Fas {phase_name} str\u00f6m"
340
+ },
237
341
  "detected_objects": {
238
342
  "name": "Uppt\u00e4ckta objekt",
239
343
  "unit_of_measurement": "f\u00f6rem\u00e5l"
@@ -245,6 +349,21 @@
245
349
  "device_temperature": {
246
350
  "name": "Enhetstemperatur"
247
351
  },
352
+ "energy_consumed": {
353
+ "name": "F\u00f6rbrukad energi"
354
+ },
355
+ "energy_consumed_with_channel_name": {
356
+ "name": "{channel_name} f\u00f6rbrukad energi"
357
+ },
358
+ "energy_returned": {
359
+ "name": "\u00c5terf\u00f6rd energi"
360
+ },
361
+ "energy_returned_with_channel_name": {
362
+ "name": "{channel_name} \u00e5terf\u00f6rd energi"
363
+ },
364
+ "energy_with_channel_name": {
365
+ "name": "{channel_name} energi"
366
+ },
248
367
  "frequency_with_channel_name": {
249
368
  "name": "{channel_name} frekvens"
250
369
  },
@@ -287,6 +406,15 @@
287
406
  "warmup": "Uppv\u00e4rmning"
288
407
  }
289
408
  },
409
+ "power_factor_with_channel_name": {
410
+ "name": "{channel_name} effektfaktor"
411
+ },
412
+ "power_with_channel_name": {
413
+ "name": "{channel_name} effekt"
414
+ },
415
+ "power_with_phase_name": {
416
+ "name": "Fas {phase_name} effekt"
417
+ },
290
418
  "pulse_counter": {
291
419
  "name": "Pulsr\u00e4knare"
292
420
  },
@@ -311,10 +439,23 @@
311
439
  }
312
440
  }
313
441
  },
442
+ "session_duration": {
443
+ "name": "Sessionens l\u00e4ngd"
444
+ },
445
+ "session_energy": {
446
+ "name": "Session energi"
447
+ },
314
448
  "temperature_with_channel_name": {
315
449
  "name": "{channel_name} temperatur"
316
450
  },
451
+ "tilt": {
452
+ "name": "Lutning"
453
+ },
454
+ "valve_position": {
455
+ "name": "Ventill\u00e4ge"
456
+ },
317
457
  "valve_status": {
458
+ "name": "Ventilstatus",
318
459
  "state": {
319
460
  "checking": "Kontrollerar",
320
461
  "closed": "St\u00e4ngd",
@@ -324,11 +465,23 @@
324
465
  "opening": "\u00d6ppnar"
325
466
  }
326
467
  },
468
+ "voltage_with_channel_name": {
469
+ "name": "{channel_name} sp\u00e4nning"
470
+ },
471
+ "voltage_with_phase_name": {
472
+ "name": "Fas {phase_name} sp\u00e4nning"
473
+ },
327
474
  "voltmeter": {
328
475
  "name": "Voltmeter"
329
476
  },
477
+ "voltmeter_value": {
478
+ "name": "Voltmeterv\u00e4rde"
479
+ },
330
480
  "water_consumption": {
331
- "name": "Vattenkonsumption"
481
+ "name": "Vattenf\u00f6rbrukning"
482
+ },
483
+ "water_flow_rate": {
484
+ "name": "Vattenfl\u00f6des"
332
485
  },
333
486
  "water_pressure": {
334
487
  "name": "Vattentryck"
@@ -347,9 +500,20 @@
347
500
  "frost_protection": {
348
501
  "name": "Frostskydd"
349
502
  },
503
+ "thermostat_enabled": {
504
+ "name": "Termostat aktiverad"
505
+ },
506
+ "valve_opened": {
507
+ "name": "Ventil \u00f6ppen"
508
+ },
350
509
  "zone_with_number": {
351
510
  "name": "Zon {zone_number}"
352
511
  }
512
+ },
513
+ "update": {
514
+ "beta_firmware": {
515
+ "name": "Beta-mjukvara"
516
+ }
353
517
  }
354
518
  },
355
519
  "exceptions": {
@@ -412,8 +576,8 @@
412
576
  "deprecated_firmware": {
413
577
  "fix_flow": {
414
578
  "abort": {
415
- "cannot_connect": "Misslyckades med att ansluta",
416
- "update_not_available": "Enheten erbjuder inte firmwareuppdatering. Kontrollera internetanslutningen (gateway, DNS, tid) och starta om enheten."
579
+ "cannot_connect": "Det gick inte att ansluta",
580
+ "update_not_available": "Enheten erbjuder inte firmwareuppdatering. Kontrollera internetanslutningen (gateway, DNS, tid) och starta sedan om enheten."
417
581
  },
418
582
  "step": {
419
583
  "confirm": {
@@ -431,9 +595,20 @@
431
595
  "open_wifi_ap": {
432
596
  "fix_flow": {
433
597
  "abort": {
434
- "cannot_connect": "Misslyckades att ansluta"
598
+ "cannot_connect": "Det gick inte att ansluta"
599
+ },
600
+ "step": {
601
+ "init": {
602
+ "description": "Din Shelly-enhet {device_name} med IP-adress {ip_address} har en \u00f6ppen WiFi-\u00e5tkomstpunkt aktiverad utan l\u00f6senord. Detta \u00e4r en s\u00e4kerhetsrisk eftersom vem som helst i n\u00e4rheten kan ansluta till enheten. \n\nObs: Om du inaktiverar \u00e5tkomstpunkten kan enheten beh\u00f6va startas om.",
603
+ "menu_options": {
604
+ "confirm": "St\u00e4ng av WiFi-accesspunkt",
605
+ "ignore": "Ignorera"
606
+ },
607
+ "title": "\u00d6ppen WiFi-accesspunkt f\u00f6r {device_name}"
608
+ }
435
609
  }
436
- }
610
+ },
611
+ "title": "\u00d6ppen WiFi-accesspunkt f\u00f6r {device_name}"
437
612
  },
438
613
  "outbound_websocket_incorrectly_enabled": {
439
614
  "fix_flow": {
@@ -483,6 +658,11 @@
483
658
  "disabled": "Inaktiverad",
484
659
  "passive": "Passiv"
485
660
  }
661
+ },
662
+ "device": {
663
+ "options": {
664
+ "manual": "Ange adress manuellt"
665
+ }
486
666
  }
487
667
  }
488
668
  }
@@ -8,6 +8,11 @@ import logging
8
8
  from typing import Any
9
9
 
10
10
  from homeassistant import config as conf_util
11
+ from homeassistant.components.automation import (
12
+ DOMAIN as AUTOMATION_DOMAIN,
13
+ NEW_TRIGGERS_CONDITIONS_FEATURE_FLAG,
14
+ )
15
+ from homeassistant.components.labs import async_listen as async_labs_listen
11
16
  from homeassistant.config_entries import ConfigEntry
12
17
  from homeassistant.const import (
13
18
  CONF_DEVICE_ID,
@@ -16,7 +21,7 @@ from homeassistant.const import (
16
21
  CONF_UNIQUE_ID,
17
22
  SERVICE_RELOAD,
18
23
  )
19
- from homeassistant.core import Event, HomeAssistant, ServiceCall
24
+ from homeassistant.core import Event, HomeAssistant, ServiceCall, callback
20
25
  from homeassistant.exceptions import ConfigEntryError, HomeAssistantError
21
26
  from homeassistant.helpers import discovery, issue_registry as ir
22
27
  from homeassistant.helpers.device import (
@@ -90,6 +95,20 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
90
95
 
91
96
  async_register_admin_service(hass, DOMAIN, SERVICE_RELOAD, _reload_config)
92
97
 
98
+ @callback
99
+ def new_triggers_conditions_listener() -> None:
100
+ """Handle new_triggers_conditions flag change."""
101
+ hass.async_create_task(
102
+ _reload_config(ServiceCall(hass, DOMAIN, SERVICE_RELOAD))
103
+ )
104
+
105
+ async_labs_listen(
106
+ hass,
107
+ AUTOMATION_DOMAIN,
108
+ NEW_TRIGGERS_CONDITIONS_FEATURE_FLAG,
109
+ new_triggers_conditions_listener,
110
+ )
111
+
93
112
  return True
94
113
 
95
114
 
@@ -46,6 +46,7 @@ from .const import (
46
46
  CONF_DEFAULT_ENTITY_ID,
47
47
  CONF_PICTURE,
48
48
  DOMAIN,
49
+ PLATFORMS,
49
50
  )
50
51
  from .entity import AbstractTemplateEntity
51
52
  from .template_entity import TemplateEntity
@@ -234,6 +235,8 @@ def create_legacy_template_issue(
234
235
  hass: HomeAssistant, config: ConfigType, domain: str
235
236
  ) -> None:
236
237
  """Create a repair for legacy template entities."""
238
+ if domain not in PLATFORMS:
239
+ return
237
240
 
238
241
  breadcrumb = "Template Entity"
239
242
  # Default entity id should be in most legacy configuration because
@@ -9,6 +9,7 @@ from wled import WLED, Device, WLEDConnectionError
9
9
 
10
10
  from homeassistant.components import onboarding
11
11
  from homeassistant.config_entries import (
12
+ SOURCE_RECONFIGURE,
12
13
  ConfigFlow,
13
14
  ConfigFlowResult,
14
15
  OptionsFlowWithReload,
@@ -16,6 +17,7 @@ from homeassistant.config_entries import (
16
17
  from homeassistant.const import CONF_HOST, CONF_MAC
17
18
  from homeassistant.core import callback
18
19
  from homeassistant.helpers.aiohttp_client import async_get_clientsession
20
+ from homeassistant.helpers.device_registry import format_mac
19
21
  from homeassistant.helpers.service_info.zeroconf import ZeroconfServiceInfo
20
22
 
21
23
  from .const import CONF_KEEP_MAIN_LIGHT, DEFAULT_KEEP_MAIN_LIGHT, DOMAIN
@@ -52,6 +54,19 @@ class WLEDFlowHandler(ConfigFlow, domain=DOMAIN):
52
54
  await self.async_set_unique_id(
53
55
  device.info.mac_address, raise_on_progress=False
54
56
  )
57
+ if self.source == SOURCE_RECONFIGURE:
58
+ entry = self._get_reconfigure_entry()
59
+ self._abort_if_unique_id_mismatch(
60
+ reason="unique_id_mismatch",
61
+ description_placeholders={
62
+ "expected_mac": format_mac(entry.unique_id).upper(),
63
+ "actual_mac": format_mac(self.unique_id).upper(),
64
+ },
65
+ )
66
+ return self.async_update_reload_and_abort(
67
+ entry,
68
+ data_updates=user_input,
69
+ )
55
70
  self._abort_if_unique_id_configured(
56
71
  updates={CONF_HOST: user_input[CONF_HOST]}
57
72
  )
@@ -61,13 +76,26 @@ class WLEDFlowHandler(ConfigFlow, domain=DOMAIN):
61
76
  CONF_HOST: user_input[CONF_HOST],
62
77
  },
63
78
  )
79
+ data_schema = vol.Schema({vol.Required(CONF_HOST): str})
80
+ if self.source == SOURCE_RECONFIGURE:
81
+ entry = self._get_reconfigure_entry()
82
+ data_schema = self.add_suggested_values_to_schema(
83
+ data_schema,
84
+ entry.data,
85
+ )
64
86
 
65
87
  return self.async_show_form(
66
88
  step_id="user",
67
- data_schema=vol.Schema({vol.Required(CONF_HOST): str}),
89
+ data_schema=data_schema,
68
90
  errors=errors or {},
69
91
  )
70
92
 
93
+ async def async_step_reconfigure(
94
+ self, user_input: dict[str, Any] | None = None
95
+ ) -> ConfigFlowResult:
96
+ """Handle reconfigure flow for WLED entry."""
97
+ return await self.async_step_user(user_input)
98
+
71
99
  async def async_step_zeroconf(
72
100
  self, discovery_info: ZeroconfServiceInfo
73
101
  ) -> ConfigFlowResult:
@@ -14,7 +14,9 @@ from wled import (
14
14
  from homeassistant.config_entries import ConfigEntry
15
15
  from homeassistant.const import CONF_HOST, EVENT_HOMEASSISTANT_STOP
16
16
  from homeassistant.core import CALLBACK_TYPE, Event, HomeAssistant, callback
17
+ from homeassistant.exceptions import ConfigEntryError
17
18
  from homeassistant.helpers.aiohttp_client import async_get_clientsession
19
+ from homeassistant.helpers.device_registry import format_mac
18
20
  from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
19
21
 
20
22
  from .const import (
@@ -120,6 +122,16 @@ class WLEDDataUpdateCoordinator(DataUpdateCoordinator[WLEDDevice]):
120
122
  translation_placeholders={"error": str(error)},
121
123
  ) from error
122
124
 
125
+ if device.info.mac_address != self.config_entry.unique_id:
126
+ raise ConfigEntryError(
127
+ translation_domain=DOMAIN,
128
+ translation_key="mac_address_mismatch",
129
+ translation_placeholders={
130
+ "expected_mac": format_mac(self.config_entry.unique_id).upper(),
131
+ "actual_mac": format_mac(device.info.mac_address).upper(),
132
+ },
133
+ )
134
+
123
135
  # If the device supports a WebSocket, try activating it.
124
136
  if (
125
137
  device.info.websocket is not None
@@ -2,7 +2,9 @@
2
2
  "config": {
3
3
  "abort": {
4
4
  "already_configured": "[%key:common::config_flow::abort::already_configured_device%]",
5
- "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]"
5
+ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
6
+ "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]",
7
+ "unique_id_mismatch": "MAC address does not match the configured device. Expected to connect to device with MAC: `{expected_mac}`, but connected to device with MAC: `{actual_mac}`. \n\nPlease ensure you reconfigure against the same device."
6
8
  },
7
9
  "error": {
8
10
  "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]"
@@ -133,6 +135,9 @@
133
135
  },
134
136
  "invalid_response_wled_error": {
135
137
  "message": "Invalid response from WLED API: {error}"
138
+ },
139
+ "mac_address_mismatch": {
140
+ "message": "MAC address does not match the configured device. Expected to connect to device with MAC: {expected_mac}, but connected to device with MAC: {actual_mac}."
136
141
  }
137
142
  },
138
143
  "options": {
@@ -2,7 +2,8 @@
2
2
  "config": {
3
3
  "abort": {
4
4
  "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e",
5
- "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435"
5
+ "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435",
6
+ "reconfigure_successful": "\u041f\u0440\u0435\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u0435\u0442\u043e \u0431\u0435\u0448\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e"
6
7
  },
7
8
  "error": {
8
9
  "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435"
@@ -2,7 +2,9 @@
2
2
  "config": {
3
3
  "abort": {
4
4
  "already_configured": "Ger\u00e4t ist bereits konfiguriert",
5
- "cannot_connect": "Verbindung fehlgeschlagen"
5
+ "cannot_connect": "Verbindung fehlgeschlagen",
6
+ "reconfigure_successful": "Die Neukonfiguration war erfolgreich",
7
+ "unique_id_mismatch": "Die MAC-Adresse stimmt nicht mit dem konfigurierten Ger\u00e4t \u00fcberein. Es wurde eine Verbindung mit einem Ger\u00e4t mit MAC `{expected_mac}` erwartet, aber eine Verbindung mit einem Ger\u00e4t mit MAC `{actual_mac}` hergestellt.\n\nBitte stelle sicher, dass du mit demselben Ger\u00e4t neu konfigurierst."
6
8
  },
7
9
  "error": {
8
10
  "cannot_connect": "Verbindung fehlgeschlagen"
@@ -133,6 +135,9 @@
133
135
  },
134
136
  "invalid_response_wled_error": {
135
137
  "message": "Ung\u00fcltige Antwort der WLED-API: {error}"
138
+ },
139
+ "mac_address_mismatch": {
140
+ "message": "Die MAC-Adresse stimmt nicht mit dem konfigurierten Ger\u00e4t \u00fcberein. Es wurde eine Verbindung mit einem Ger\u00e4t mit MAC `{expected_mac}` erwartet, aber eine Verbindung mit einem Ger\u00e4t mit MAC `{actual_mac}` hergestellt."
136
141
  }
137
142
  },
138
143
  "options": {
@@ -2,7 +2,9 @@
2
2
  "config": {
3
3
  "abort": {
4
4
  "already_configured": "Device is already configured",
5
- "cannot_connect": "Failed to connect"
5
+ "cannot_connect": "Failed to connect",
6
+ "reconfigure_successful": "Re-configuration was successful",
7
+ "unique_id_mismatch": "MAC address does not match the configured device. Expected to connect to device with MAC: `{expected_mac}`, but connected to device with MAC: `{actual_mac}`. \n\nPlease ensure you reconfigure against the same device."
6
8
  },
7
9
  "error": {
8
10
  "cannot_connect": "Failed to connect"
@@ -133,6 +135,9 @@
133
135
  },
134
136
  "invalid_response_wled_error": {
135
137
  "message": "Invalid response from WLED API: {error}"
138
+ },
139
+ "mac_address_mismatch": {
140
+ "message": "MAC address does not match the configured device. Expected to connect to device with MAC: {expected_mac}, but connected to device with MAC: {actual_mac}."
136
141
  }
137
142
  },
138
143
  "options": {
@@ -2,7 +2,9 @@
2
2
  "config": {
3
3
  "abort": {
4
4
  "already_configured": "See WLED seade on juba h\u00e4\u00e4lestatud.",
5
- "cannot_connect": "\u00dchendamine nurjus"
5
+ "cannot_connect": "\u00dchendamine nurjus",
6
+ "reconfigure_successful": "\u00dcmberseadistamine \u00f5nnestus",
7
+ "unique_id_mismatch": "MAC-aadress ei vasta konfigureeritud seadmele. Oodatakse \u00fchenduse loomist seadmega, mille MAC-aadress on: `{expected_mac}`, aga \u00fchendatud seadmega mille MAC-kood on: `{actual_mac}`. \n \n Veendu, et seadistad uuesti sama seadet."
6
8
  },
7
9
  "error": {
8
10
  "cannot_connect": "\u00dchendamine nurjus"
@@ -133,6 +135,9 @@
133
135
  },
134
136
  "invalid_response_wled_error": {
135
137
  "message": "Kehtetu vastus WLED API-lt: {error}"
138
+ },
139
+ "mac_address_mismatch": {
140
+ "message": "MAC-aadress ei vasta konfigureeritud seadmele. Oodatakse \u00fchenduse loomist seadmega, mille MAC-aadress on: {expected_mac}, aga \u00fchendatud seadmega mille MAC-aadress on: {actual_mac}."
136
141
  }
137
142
  },
138
143
  "options": {
@@ -2,7 +2,9 @@
2
2
  "config": {
3
3
  "abort": {
4
4
  "already_configured": "Zariadenie u\u017e je nakonfigurovan\u00e9",
5
- "cannot_connect": "Nepodarilo sa pripoji\u0165"
5
+ "cannot_connect": "Nepodarilo sa pripoji\u0165",
6
+ "reconfigure_successful": "Rekonfigur\u00e1cia bola \u00faspe\u0161n\u00e1",
7
+ "unique_id_mismatch": "Adresa MAC sa nezhoduje s nakonfigurovan\u00fdm zariaden\u00edm. O\u010dak\u00e1valo sa pripojenie k zariadeniu s MAC: `{expected_mac}`, ale pripojilo sa k zariadeniu s MAC: `{actual_mac}`. \n\nZabezpe\u010dte op\u00e4tovn\u00fa konfigur\u00e1ciu vo\u010di tomu ist\u00e9mu zariadeniu."
6
8
  },
7
9
  "error": {
8
10
  "cannot_connect": "Nepodarilo sa pripoji\u0165"
@@ -133,6 +135,9 @@
133
135
  },
134
136
  "invalid_response_wled_error": {
135
137
  "message": "Neplatn\u00e1 odpove\u010f z WLED API: {error}"
138
+ },
139
+ "mac_address_mismatch": {
140
+ "message": "Adresa MAC sa nezhoduje s nakonfigurovan\u00fdm zariaden\u00edm. O\u010dak\u00e1va sa pripojenie k zariadeniu s MAC: {expected_mac}, ale pripojil sa k zariadeniu s adresou MAC: {actual_mac}."
136
141
  }
137
142
  },
138
143
  "options": {