homeassistant 2025.9.0b3__py3-none-any.whl → 2025.9.0b5__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 (67) hide show
  1. homeassistant/components/ai_task/translations/pl.json +28 -0
  2. homeassistant/components/aladdin_connect/translations/he.json +28 -0
  3. homeassistant/components/alexa_devices/translations/ga.json +47 -0
  4. homeassistant/components/alexa_devices/translations/zh-Hans.json +40 -0
  5. homeassistant/components/august/translations/he.json +25 -1
  6. homeassistant/components/bayesian/translations/he.json +96 -0
  7. homeassistant/components/bayesian/translations/sv.json +7 -0
  8. homeassistant/components/binary_sensor/translations/sv.json +1 -1
  9. homeassistant/components/cloud/manifest.json +1 -1
  10. homeassistant/components/dsmr_reader/translations/ga.json +3 -0
  11. homeassistant/components/ecowitt/manifest.json +1 -1
  12. homeassistant/components/elkm1/translations/ga.json +18 -0
  13. homeassistant/components/energy/translations/ga.json +6 -1
  14. homeassistant/components/energyzero/translations/ga.json +25 -0
  15. homeassistant/components/environment_canada/translations/ga.json +5 -0
  16. homeassistant/components/escea/translations/ga.json +5 -0
  17. homeassistant/components/fireservicerota/translations/ga.json +17 -0
  18. homeassistant/components/flux_led/translations/ga.json +12 -1
  19. homeassistant/components/forked_daapd/translations/ga.json +32 -1
  20. homeassistant/components/foscam/translations/ga.json +10 -0
  21. homeassistant/components/fritzbox_callmonitor/translations/ga.json +1 -0
  22. homeassistant/components/fronius/translations/ga.json +15 -0
  23. homeassistant/components/frontend/manifest.json +1 -1
  24. homeassistant/components/frontier_silicon/translations/ga.json +7 -1
  25. homeassistant/components/fully_kiosk/translations/ga.json +17 -1
  26. homeassistant/components/hassio/translations/he.json +4 -0
  27. homeassistant/components/homekit/translations/he.json +7 -0
  28. homeassistant/components/homekit/translations/zh-Hans.json +1 -0
  29. homeassistant/components/hue/translations/nl.json +1 -0
  30. homeassistant/components/hue/translations/zh-Hans.json +1 -0
  31. homeassistant/components/husqvarna_automower_ble/config_flow.py +24 -11
  32. homeassistant/components/husqvarna_automower_ble/manifest.json +1 -1
  33. homeassistant/components/husqvarna_automower_ble/translations/he.json +4 -0
  34. homeassistant/components/imeon_inverter/translations/zh-Hans.json +1 -0
  35. homeassistant/components/lifx/translations/de.json +6 -6
  36. homeassistant/components/matter/translations/he.json +48 -0
  37. homeassistant/components/media_player/translations/he.json +6 -1
  38. homeassistant/components/modbus/binary_sensor.py +4 -1
  39. homeassistant/components/modbus/sensor.py +6 -2
  40. homeassistant/components/mqtt/translations/fr.json +1 -0
  41. homeassistant/components/mqtt/translations/he.json +38 -0
  42. homeassistant/components/mqtt/translations/sv.json +1 -1
  43. homeassistant/components/niko_home_control/translations/he.json +7 -1
  44. homeassistant/components/pooldose/translations/he.json +48 -0
  45. homeassistant/components/random/translations/sv.json +1 -1
  46. homeassistant/components/smartthings/translations/he.json +13 -0
  47. homeassistant/components/somfy_mylink/translations/he.json +5 -0
  48. homeassistant/components/template/translations/he.json +149 -0
  49. homeassistant/components/template/translations/sv.json +1 -1
  50. homeassistant/components/uptimerobot/coordinator.py +4 -1
  51. homeassistant/components/uptimerobot/quality_scale.yaml +1 -3
  52. homeassistant/components/volvo/manifest.json +1 -1
  53. homeassistant/components/volvo/translations/he.json +3 -0
  54. homeassistant/components/yalexs_ble/translations/zh-Hans.json +16 -1
  55. homeassistant/const.py +1 -1
  56. homeassistant/helpers/area_registry.py +2 -4
  57. homeassistant/helpers/device_registry.py +16 -10
  58. homeassistant/helpers/entity_registry.py +29 -19
  59. homeassistant/helpers/floor_registry.py +2 -4
  60. homeassistant/package_constraints.txt +2 -2
  61. {homeassistant-2025.9.0b3.dist-info → homeassistant-2025.9.0b5.dist-info}/METADATA +2 -2
  62. {homeassistant-2025.9.0b3.dist-info → homeassistant-2025.9.0b5.dist-info}/RECORD +67 -64
  63. {homeassistant-2025.9.0b3.dist-info → homeassistant-2025.9.0b5.dist-info}/WHEEL +0 -0
  64. {homeassistant-2025.9.0b3.dist-info → homeassistant-2025.9.0b5.dist-info}/entry_points.txt +0 -0
  65. {homeassistant-2025.9.0b3.dist-info → homeassistant-2025.9.0b5.dist-info}/licenses/LICENSE.md +0 -0
  66. {homeassistant-2025.9.0b3.dist-info → homeassistant-2025.9.0b5.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  67. {homeassistant-2025.9.0b3.dist-info → homeassistant-2025.9.0b5.dist-info}/top_level.txt +0 -0
@@ -136,6 +136,32 @@
136
136
  },
137
137
  "title": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05db\u05d9\u05e1\u05d5\u05d9"
138
138
  },
139
+ "event": {
140
+ "data": {
141
+ "device_class": "\u05de\u05d7\u05dc\u05e7\u05ea \u05d4\u05ea\u05e7\u05df",
142
+ "device_id": "\u05d4\u05ea\u05e7\u05df",
143
+ "event_type": "\u05e1\u05d5\u05d2 \u05d0\u05d9\u05e8\u05d5\u05e2 \u05e9\u05d4\u05d5\u05e4\u05e2\u05dc \u05dc\u05d0\u05d7\u05e8\u05d5\u05e0\u05d4",
144
+ "event_types": "\u05e1\u05d5\u05d2\u05d9 \u05d0\u05d9\u05e8\u05d5\u05e2\u05d9\u05dd",
145
+ "name": "\u05e9\u05dd"
146
+ },
147
+ "data_description": {
148
+ "device_id": "\u05d1\u05d7\u05d9\u05e8\u05ea \u05d4\u05ea\u05e7\u05df \u05dc\u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05d9\u05e9\u05d5\u05ea \u05d6\u05d5.",
149
+ "event_type": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e1\u05d5\u05d2 \u05d4\u05d0\u05d9\u05e8\u05d5\u05e2.",
150
+ "event_types": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e8\u05e9\u05d9\u05de\u05d4 \u05e9\u05dc \u05e1\u05d5\u05d2\u05d9 \u05d0\u05d9\u05e8\u05d5\u05e2\u05d9\u05dd \u05d6\u05de\u05d9\u05e0\u05d9\u05dd."
151
+ },
152
+ "sections": {
153
+ "advanced_options": {
154
+ "data": {
155
+ "availability": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05d6\u05de\u05d9\u05e0\u05d4"
156
+ },
157
+ "data_description": {
158
+ "availability": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05db\u05d3\u05d9 \u05dc\u05e7\u05d1\u05dc \u05d0\u05ea \u05d4\u05de\u05e6\u05d1 '\u05d6\u05de\u05d9\u05df' \u05e9\u05dc \u05d4\u05d9\u05e9\u05d5\u05ea. \u05d0\u05dd \u05d4\u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05d0 \u05de\u05e6\u05dc\u05d9\u05d7\u05d4 \u05dc\u05e2\u05d1\u05d3 \u05d0\u05d5 \u05de\u05d7\u05d6\u05d9\u05e8\u05d4 'True', ''1'', 'true\"', 'yes\"', 'on\"', 'enable\"', \u05d0\u05d5 \u05de\u05e1\u05e4\u05e8 \u05e9\u05d0\u05d9\u05e0\u05d5 \u05d0\u05e4\u05e1, \u05d4\u05d9\u05e9\u05d5\u05ea \u05ea\u05d4\u05d9\u05d4 '\u05d6\u05de\u05d9\u05e0\u05d4'. \u05d0\u05dd \u05d4\u05ea\u05d1\u05e0\u05d9\u05ea \u05de\u05d7\u05d6\u05d9\u05e8\u05d4 \u05e2\u05e8\u05da \u05d0\u05d7\u05e8, \u05d4\u05d9\u05e9\u05d5\u05ea \u05ea\u05d4\u05d9\u05d4 '\u05dc\u05d0 \u05d6\u05de\u05d9\u05e0\u05d4'. \u05d0\u05dd \u05dc\u05d0 \u05de\u05d5\u05d2\u05d3\u05e8\u05ea, \u05d4\u05d9\u05e9\u05d5\u05ea \u05ea\u05de\u05d9\u05d3 \u05ea\u05d4\u05d9\u05d4 '\u05d6\u05de\u05d9\u05e0\u05d4'. \u05d9\u05e9 \u05dc\u05e9\u05d9\u05dd \u05dc\u05d1 \u05e9\u05d4\u05e9\u05d5\u05d5\u05d0\u05ea \u05d4\u05de\u05d7\u05e8\u05d5\u05d6\u05d5\u05ea \u05d0\u05d9\u05e0\u05d4 \u05ea\u05dc\u05d5\u05d9\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea; \u05de\u05d5\u05ea\u05e8 'TrUe' \u05d5-''yEs'."
159
+ },
160
+ "name": "\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05de\u05ea\u05e7\u05d3\u05de\u05d5\u05ea"
161
+ }
162
+ },
163
+ "title": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05d0\u05d9\u05e8\u05d5\u05e2"
164
+ },
139
165
  "fan": {
140
166
  "data": {
141
167
  "device_id": "\u05d4\u05ea\u05e7\u05df",
@@ -378,6 +404,48 @@
378
404
  },
379
405
  "title": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05de\u05ea\u05d2"
380
406
  },
407
+ "update": {
408
+ "data": {
409
+ "backup": "\u05d2\u05d9\u05d1\u05d5\u05d9",
410
+ "device_class": "\u05de\u05d7\u05dc\u05e7\u05ea \u05d4\u05ea\u05e7\u05df",
411
+ "device_id": "\u05d4\u05ea\u05e7\u05df",
412
+ "in_progress": "\u05d1\u05ea\u05d4\u05dc\u05d9\u05da",
413
+ "install": "\u05e4\u05e2\u05d5\u05dc\u05d5\u05ea \u05d1\u05d4\u05ea\u05e7\u05e0\u05d4",
414
+ "installed_version": "\u05d2\u05d9\u05e8\u05e1\u05d4 \u05de\u05d5\u05ea\u05e7\u05e0\u05ea",
415
+ "latest_version": "\u05d4\u05d2\u05d9\u05e8\u05e1\u05d4 \u05d4\u05e2\u05d3\u05db\u05e0\u05d9\u05ea",
416
+ "name": "\u05e9\u05dd",
417
+ "release_summary": "\u05ea\u05e7\u05e6\u05d9\u05e8 \u05e9\u05d7\u05e8\u05d5\u05e8",
418
+ "release_url": "\u05db\u05ea\u05d5\u05d1\u05ea \u05d0\u05ea\u05e8 \u05e9\u05dc \u05e9\u05d7\u05e8\u05d5\u05e8",
419
+ "specific_version": "\u05d2\u05e8\u05e1\u05d4 \u05e1\u05e4\u05e6\u05d9\u05e4\u05d9\u05ea",
420
+ "title": "\u05db\u05d5\u05ea\u05e8\u05ea",
421
+ "update_percent": "\u05d0\u05d7\u05d5\u05d6 \u05d4\u05e2\u05d3\u05db\u05d5\u05df"
422
+ },
423
+ "data_description": {
424
+ "backup": "\u05d4\u05e4\u05e2\u05dc\u05d4 \u05d0\u05d5 \u05d4\u05e9\u05d1\u05ea\u05d4 \u05e9\u05dc \u05d4\u05d0\u05e4\u05e9\u05e8\u05d5\u05ea `\u05d2\u05d9\u05d1\u05d5\u05d9 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9 \u05dc\u05e4\u05e0\u05d9 \u05e2\u05d3\u05db\u05d5\u05df` \u05d1\u05ea\u05d9\u05e7\u05d5\u05df \u05d4\u05e2\u05d3\u05db\u05d5\u05e0\u05d9\u05dd. \u05db\u05d0\u05e9\u05e8 \u05d4\u05d5\u05d0 \u05de\u05d5\u05e9\u05d1\u05ea, \u05d4\u05de\u05e9\u05ea\u05e0\u05d4 `backup` \u05ea\u05de\u05d9\u05d3 \u05d9\u05e1\u05e4\u05e7 `False` \u05d1\u05de\u05d4\u05dc\u05da \u05e4\u05e2\u05d5\u05dc\u05ea `install` \u05d5\u05d4\u05d5\u05d0 \u05dc\u05d0 \u05d9\u05e7\u05d1\u05dc \u05d0\u05ea \u05d4\u05d0\u05e4\u05e9\u05e8\u05d5\u05ea `backup`.",
425
+ "device_id": "\u05d1\u05d7\u05d9\u05e8\u05ea \u05d4\u05ea\u05e7\u05df \u05dc\u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05d9\u05e9\u05d5\u05ea \u05d6\u05d5.",
426
+ "in_progress": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05db\u05d3\u05d9 \u05dc\u05e7\u05d1\u05dc \u05d0\u05ea \u05d4\u05de\u05e6\u05d1 \u05e9\u05de\u05ea\u05d1\u05e6\u05e2.",
427
+ "install": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05e4\u05e2\u05d5\u05dc\u05d5\u05ea \u05dc\u05d4\u05e4\u05e2\u05dc\u05d4 \u05d1\u05e2\u05ea \u05d4\u05ea\u05e7\u05e0\u05ea \u05d4\u05e2\u05d3\u05db\u05d5\u05df. \u05de\u05e7\u05d1\u05dc \u05d0\u05ea \u05d4\u05de\u05e9\u05ea\u05e0\u05d9\u05dd `specific_version` \u05d5`backup` \u05db\u05d0\u05e9\u05e8 \u05d4\u05d5\u05d0 \u05de\u05d5\u05e4\u05e2\u05dc.",
428
+ "installed_version": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e7\u05d1\u05dc\u05ea \u05d4\u05d2\u05e8\u05e1\u05d4 \u05d4\u05de\u05d5\u05ea\u05e7\u05e0\u05ea.",
429
+ "latest_version": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e7\u05d1\u05dc\u05ea \u05d4\u05d2\u05e8\u05e1\u05d4 \u05d4\u05e2\u05d3\u05db\u05e0\u05d9\u05ea \u05d1\u05d9\u05d5\u05ea\u05e8.",
430
+ "release_summary": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e7\u05d1\u05dc\u05ea \u05e1\u05d9\u05db\u05d5\u05dd \u05d4\u05e9\u05d7\u05e8\u05d5\u05e8.",
431
+ "release_url": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e7\u05d1\u05dc\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d0\u05ea\u05e8 \u05dc\u05e9\u05d7\u05e8\u05d5\u05e8.",
432
+ "specific_version": "\u05d4\u05e4\u05e2\u05dc\u05d4 \u05d0\u05d5 \u05d4\u05e9\u05d1\u05ea\u05d4 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e9\u05ea\u05e0\u05d4 `version` \u05e2\u05dd \u05d4\u05e4\u05e2\u05d5\u05dc\u05d4 `install`. \u05db\u05d0\u05e9\u05e8 \u05d4\u05d5\u05d0 \u05de\u05d5\u05e9\u05d1\u05ea, \u05d4\u05de\u05e9\u05ea\u05e0\u05d4 `specific_version` \u05ea\u05de\u05d9\u05d3 \u05d9\u05e1\u05e4\u05e7 `None` \u05d1\u05e4\u05e2\u05d5\u05dc\u05d5\u05ea `install`.",
433
+ "title": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e7\u05d1\u05dc\u05ea \u05db\u05d5\u05ea\u05e8\u05ea \u05d4\u05e2\u05d3\u05db\u05d5\u05df.",
434
+ "update_percent": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05db\u05d3\u05d9 \u05dc\u05e7\u05d1\u05dc \u05d0\u05ea \u05d0\u05d7\u05d5\u05d6 \u05d4\u05e9\u05dc\u05de\u05ea \u05d4\u05e2\u05d3\u05db\u05d5\u05df."
435
+ },
436
+ "sections": {
437
+ "advanced_options": {
438
+ "data": {
439
+ "availability": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05d6\u05de\u05d9\u05e0\u05d4"
440
+ },
441
+ "data_description": {
442
+ "availability": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05db\u05d3\u05d9 \u05dc\u05e7\u05d1\u05dc \u05d0\u05ea \u05d4\u05de\u05e6\u05d1 '\u05d6\u05de\u05d9\u05df' \u05e9\u05dc \u05d4\u05d9\u05e9\u05d5\u05ea. \u05d0\u05dd \u05d4\u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05d0 \u05de\u05e6\u05dc\u05d9\u05d7\u05d4 \u05dc\u05e2\u05d1\u05d3 \u05d0\u05d5 \u05de\u05d7\u05d6\u05d9\u05e8\u05d4 'True', ''1'', 'true\"', 'yes\"', 'on\"', 'enable\"', \u05d0\u05d5 \u05de\u05e1\u05e4\u05e8 \u05e9\u05d0\u05d9\u05e0\u05d5 \u05d0\u05e4\u05e1, \u05d4\u05d9\u05e9\u05d5\u05ea \u05ea\u05d4\u05d9\u05d4 '\u05d6\u05de\u05d9\u05e0\u05d4'. \u05d0\u05dd \u05d4\u05ea\u05d1\u05e0\u05d9\u05ea \u05de\u05d7\u05d6\u05d9\u05e8\u05d4 \u05e2\u05e8\u05da \u05d0\u05d7\u05e8, \u05d4\u05d9\u05e9\u05d5\u05ea \u05ea\u05d4\u05d9\u05d4 '\u05dc\u05d0 \u05d6\u05de\u05d9\u05e0\u05d4'. \u05d0\u05dd \u05dc\u05d0 \u05de\u05d5\u05d2\u05d3\u05e8\u05ea, \u05d4\u05d9\u05e9\u05d5\u05ea \u05ea\u05de\u05d9\u05d3 \u05ea\u05d4\u05d9\u05d4 '\u05d6\u05de\u05d9\u05e0\u05d4'. \u05d9\u05e9 \u05dc\u05e9\u05d9\u05dd \u05dc\u05d1 \u05e9\u05d4\u05e9\u05d5\u05d5\u05d0\u05ea \u05d4\u05de\u05d7\u05e8\u05d5\u05d6\u05d5\u05ea \u05d0\u05d9\u05e0\u05d4 \u05ea\u05dc\u05d5\u05d9\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea; \u05de\u05d5\u05ea\u05e8 'TrUe' \u05d5-''yEs'."
443
+ },
444
+ "name": "\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05de\u05ea\u05e7\u05d3\u05de\u05d5\u05ea"
445
+ }
446
+ },
447
+ "title": "\u05e2\u05d3\u05db\u05d5\u05df \u05ea\u05d1\u05e0\u05d9\u05ea"
448
+ },
381
449
  "user": {
382
450
  "description": "\u05e2\u05d5\u05d6\u05e8 \u05d6\u05d4 \u05de\u05d0\u05e4\u05e9\u05e8 \u05dc\u05da \u05dc\u05d9\u05e6\u05d5\u05e8 \u05d9\u05e9\u05d5\u05d9\u05d5\u05ea \u05e2\u05d5\u05d6\u05e8\u05d5\u05ea \u05e9\u05de\u05d2\u05d3\u05d9\u05e8\u05d5\u05ea \u05d0\u05ea \u05de\u05e6\u05d1\u05df \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05ea\u05d1\u05e0\u05d9\u05ea.",
383
451
  "menu_options": {
@@ -385,6 +453,7 @@
385
453
  "binary_sensor": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05d7\u05d9\u05d9\u05e9\u05df \u05d1\u05d9\u05e0\u05d0\u05e8\u05d9",
386
454
  "button": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05d7\u05e6\u05df",
387
455
  "cover": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05db\u05d9\u05e1\u05d5\u05d9",
456
+ "event": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05d0\u05d9\u05e8\u05d5\u05e2",
388
457
  "fan": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05de\u05d0\u05d5\u05d5\u05e8\u05e8",
389
458
  "image": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05ea\u05de\u05d5\u05e0\u05d4",
390
459
  "light": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05ea\u05d0\u05d5\u05e8\u05d4",
@@ -393,6 +462,7 @@
393
462
  "select": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05d1\u05d7\u05d9\u05e8\u05d4",
394
463
  "sensor": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05d7\u05d9\u05d9\u05e9\u05df",
395
464
  "switch": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05de\u05ea\u05d2",
465
+ "update": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05e2\u05d3\u05db\u05d5\u05df",
396
466
  "vacuum": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05e9\u05d5\u05d0\u05d1"
397
467
  },
398
468
  "title": "\u05de\u05e1\u05d9\u05d9\u05e2 \u05ea\u05d1\u05e0\u05d9\u05d5\u05ea"
@@ -569,6 +639,31 @@
569
639
  },
570
640
  "title": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05db\u05d9\u05e1\u05d5\u05d9"
571
641
  },
642
+ "event": {
643
+ "data": {
644
+ "device_id": "\u05d4\u05ea\u05e7\u05df",
645
+ "event_type": "\u05e1\u05d5\u05d2 \u05d0\u05d9\u05e8\u05d5\u05e2 \u05e9\u05d4\u05d5\u05e4\u05e2\u05dc \u05dc\u05d0\u05d7\u05e8\u05d5\u05e0\u05d4",
646
+ "event_types": "\u05e1\u05d5\u05d2\u05d9 \u05d0\u05d9\u05e8\u05d5\u05e2\u05d9\u05dd",
647
+ "name": "\u05e9\u05dd"
648
+ },
649
+ "data_description": {
650
+ "device_id": "\u05d1\u05d7\u05d9\u05e8\u05ea \u05d4\u05ea\u05e7\u05df \u05dc\u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05d9\u05e9\u05d5\u05ea \u05d6\u05d5.",
651
+ "event_type": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e1\u05d5\u05d2 \u05d4\u05d0\u05d9\u05e8\u05d5\u05e2.",
652
+ "event_types": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e8\u05e9\u05d9\u05de\u05d4 \u05e9\u05dc \u05e1\u05d5\u05d2\u05d9 \u05d0\u05d9\u05e8\u05d5\u05e2\u05d9\u05dd \u05d6\u05de\u05d9\u05e0\u05d9\u05dd."
653
+ },
654
+ "sections": {
655
+ "advanced_options": {
656
+ "data": {
657
+ "availability": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05d6\u05de\u05d9\u05e0\u05d4"
658
+ },
659
+ "data_description": {
660
+ "availability": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05db\u05d3\u05d9 \u05dc\u05e7\u05d1\u05dc \u05d0\u05ea \u05d4\u05de\u05e6\u05d1 '\u05d6\u05de\u05d9\u05df' \u05e9\u05dc \u05d4\u05d9\u05e9\u05d5\u05ea. \u05d0\u05dd \u05d4\u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05d0 \u05de\u05e6\u05dc\u05d9\u05d7\u05d4 \u05dc\u05e2\u05d1\u05d3 \u05d0\u05d5 \u05de\u05d7\u05d6\u05d9\u05e8\u05d4 'True', ''1'', 'true\"', 'yes\"', 'on\"', 'enable\"', \u05d0\u05d5 \u05de\u05e1\u05e4\u05e8 \u05e9\u05d0\u05d9\u05e0\u05d5 \u05d0\u05e4\u05e1, \u05d4\u05d9\u05e9\u05d5\u05ea \u05ea\u05d4\u05d9\u05d4 '\u05d6\u05de\u05d9\u05e0\u05d4'. \u05d0\u05dd \u05d4\u05ea\u05d1\u05e0\u05d9\u05ea \u05de\u05d7\u05d6\u05d9\u05e8\u05d4 \u05e2\u05e8\u05da \u05d0\u05d7\u05e8, \u05d4\u05d9\u05e9\u05d5\u05ea \u05ea\u05d4\u05d9\u05d4 '\u05dc\u05d0 \u05d6\u05de\u05d9\u05e0\u05d4'. \u05d0\u05dd \u05dc\u05d0 \u05de\u05d5\u05d2\u05d3\u05e8\u05ea, \u05d4\u05d9\u05e9\u05d5\u05ea \u05ea\u05de\u05d9\u05d3 \u05ea\u05d4\u05d9\u05d4 '\u05d6\u05de\u05d9\u05e0\u05d4'. \u05d9\u05e9 \u05dc\u05e9\u05d9\u05dd \u05dc\u05d1 \u05e9\u05d4\u05e9\u05d5\u05d5\u05d0\u05ea \u05d4\u05de\u05d7\u05e8\u05d5\u05d6\u05d5\u05ea \u05d0\u05d9\u05e0\u05d4 \u05ea\u05dc\u05d5\u05d9\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea; \u05de\u05d5\u05ea\u05e8 'TrUe' \u05d5-''yEs'."
661
+ },
662
+ "name": "\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05de\u05ea\u05e7\u05d3\u05de\u05d5\u05ea"
663
+ }
664
+ },
665
+ "title": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05d0\u05d9\u05e8\u05d5\u05e2"
666
+ },
572
667
  "fan": {
573
668
  "data": {
574
669
  "device_id": "\u05d4\u05ea\u05e7\u05df",
@@ -805,6 +900,48 @@
805
900
  },
806
901
  "title": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05de\u05ea\u05d2"
807
902
  },
903
+ "update": {
904
+ "data": {
905
+ "backup": "\u05d2\u05d9\u05d1\u05d5\u05d9",
906
+ "device_class": "\u05de\u05d7\u05dc\u05e7\u05ea \u05d4\u05ea\u05e7\u05df",
907
+ "device_id": "\u05d4\u05ea\u05e7\u05df",
908
+ "in_progress": "\u05d1\u05ea\u05d4\u05dc\u05d9\u05da",
909
+ "install": "\u05e4\u05e2\u05d5\u05dc\u05d5\u05ea \u05d1\u05d4\u05ea\u05e7\u05e0\u05d4",
910
+ "installed_version": "\u05d2\u05d9\u05e8\u05e1\u05d4 \u05de\u05d5\u05ea\u05e7\u05e0\u05ea",
911
+ "latest_version": "\u05d4\u05d2\u05d9\u05e8\u05e1\u05d4 \u05d4\u05e2\u05d3\u05db\u05e0\u05d9\u05ea",
912
+ "name": "\u05e9\u05dd",
913
+ "release_summary": "\u05ea\u05e7\u05e6\u05d9\u05e8 \u05e9\u05d7\u05e8\u05d5\u05e8",
914
+ "release_url": "\u05db\u05ea\u05d5\u05d1\u05ea \u05d0\u05ea\u05e8 \u05e9\u05dc \u05e9\u05d7\u05e8\u05d5\u05e8",
915
+ "specific_version": "\u05d2\u05e8\u05e1\u05d4 \u05e1\u05e4\u05e6\u05d9\u05e4\u05d9\u05ea",
916
+ "title": "\u05db\u05d5\u05ea\u05e8\u05ea",
917
+ "update_percent": "\u05d0\u05d7\u05d5\u05d6 \u05d4\u05e2\u05d3\u05db\u05d5\u05df"
918
+ },
919
+ "data_description": {
920
+ "backup": "\u05d4\u05e4\u05e2\u05dc\u05d4 \u05d0\u05d5 \u05d4\u05e9\u05d1\u05ea\u05d4 \u05e9\u05dc \u05d4\u05d0\u05e4\u05e9\u05e8\u05d5\u05ea `\u05d2\u05d9\u05d1\u05d5\u05d9 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9 \u05dc\u05e4\u05e0\u05d9 \u05e2\u05d3\u05db\u05d5\u05df` \u05d1\u05ea\u05d9\u05e7\u05d5\u05df \u05d4\u05e2\u05d3\u05db\u05d5\u05e0\u05d9\u05dd. \u05db\u05d0\u05e9\u05e8 \u05d4\u05d5\u05d0 \u05de\u05d5\u05e9\u05d1\u05ea, \u05d4\u05de\u05e9\u05ea\u05e0\u05d4 `backup` \u05ea\u05de\u05d9\u05d3 \u05d9\u05e1\u05e4\u05e7 `False` \u05d1\u05de\u05d4\u05dc\u05da \u05e4\u05e2\u05d5\u05dc\u05ea `install` \u05d5\u05d4\u05d5\u05d0 \u05dc\u05d0 \u05d9\u05e7\u05d1\u05dc \u05d0\u05ea \u05d4\u05d0\u05e4\u05e9\u05e8\u05d5\u05ea `backup`.",
921
+ "device_id": "\u05d1\u05d7\u05d9\u05e8\u05ea \u05d4\u05ea\u05e7\u05df \u05dc\u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05d9\u05e9\u05d5\u05ea \u05d6\u05d5.",
922
+ "in_progress": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05db\u05d3\u05d9 \u05dc\u05e7\u05d1\u05dc \u05d0\u05ea \u05d4\u05de\u05e6\u05d1 \u05e9\u05de\u05ea\u05d1\u05e6\u05e2.",
923
+ "install": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05e4\u05e2\u05d5\u05dc\u05d5\u05ea \u05dc\u05d4\u05e4\u05e2\u05dc\u05d4 \u05d1\u05e2\u05ea \u05d4\u05ea\u05e7\u05e0\u05ea \u05d4\u05e2\u05d3\u05db\u05d5\u05df. \u05de\u05e7\u05d1\u05dc \u05d0\u05ea \u05d4\u05de\u05e9\u05ea\u05e0\u05d9\u05dd `specific_version` \u05d5`backup` \u05db\u05d0\u05e9\u05e8 \u05d4\u05d5\u05d0 \u05de\u05d5\u05e4\u05e2\u05dc.",
924
+ "installed_version": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e7\u05d1\u05dc\u05ea \u05d4\u05d2\u05e8\u05e1\u05d4 \u05d4\u05de\u05d5\u05ea\u05e7\u05e0\u05ea.",
925
+ "latest_version": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e7\u05d1\u05dc\u05ea \u05d4\u05d2\u05e8\u05e1\u05d4 \u05d4\u05e2\u05d3\u05db\u05e0\u05d9\u05ea \u05d1\u05d9\u05d5\u05ea\u05e8.",
926
+ "release_summary": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e7\u05d1\u05dc\u05ea \u05e1\u05d9\u05db\u05d5\u05dd \u05d4\u05e9\u05d7\u05e8\u05d5\u05e8.",
927
+ "release_url": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e7\u05d1\u05dc\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d0\u05ea\u05e8 \u05dc\u05e9\u05d7\u05e8\u05d5\u05e8.",
928
+ "specific_version": "\u05d4\u05e4\u05e2\u05dc\u05d4 \u05d0\u05d5 \u05d4\u05e9\u05d1\u05ea\u05d4 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e9\u05ea\u05e0\u05d4 `version` \u05e2\u05dd \u05d4\u05e4\u05e2\u05d5\u05dc\u05d4 `install`. \u05db\u05d0\u05e9\u05e8 \u05d4\u05d5\u05d0 \u05de\u05d5\u05e9\u05d1\u05ea, \u05d4\u05de\u05e9\u05ea\u05e0\u05d4 `specific_version` \u05ea\u05de\u05d9\u05d3 \u05d9\u05e1\u05e4\u05e7 `None` \u05d1\u05e4\u05e2\u05d5\u05dc\u05d5\u05ea `install`.",
929
+ "title": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05e7\u05d1\u05dc\u05ea \u05db\u05d5\u05ea\u05e8\u05ea \u05d4\u05e2\u05d3\u05db\u05d5\u05df.",
930
+ "update_percent": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05db\u05d3\u05d9 \u05dc\u05e7\u05d1\u05dc \u05d0\u05ea \u05d0\u05d7\u05d5\u05d6 \u05d4\u05e9\u05dc\u05de\u05ea \u05d4\u05e2\u05d3\u05db\u05d5\u05df."
931
+ },
932
+ "sections": {
933
+ "advanced_options": {
934
+ "data": {
935
+ "availability": "\u05ea\u05d1\u05e0\u05d9\u05ea \u05d6\u05de\u05d9\u05e0\u05d4"
936
+ },
937
+ "data_description": {
938
+ "availability": "\u05de\u05d2\u05d3\u05d9\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea \u05db\u05d3\u05d9 \u05dc\u05e7\u05d1\u05dc \u05d0\u05ea \u05d4\u05de\u05e6\u05d1 '\u05d6\u05de\u05d9\u05df' \u05e9\u05dc \u05d4\u05d9\u05e9\u05d5\u05ea. \u05d0\u05dd \u05d4\u05ea\u05d1\u05e0\u05d9\u05ea \u05dc\u05d0 \u05de\u05e6\u05dc\u05d9\u05d7\u05d4 \u05dc\u05e2\u05d1\u05d3 \u05d0\u05d5 \u05de\u05d7\u05d6\u05d9\u05e8\u05d4 'True', ''1'', 'true\"', 'yes\"', 'on\"', 'enable\"', \u05d0\u05d5 \u05de\u05e1\u05e4\u05e8 \u05e9\u05d0\u05d9\u05e0\u05d5 \u05d0\u05e4\u05e1, \u05d4\u05d9\u05e9\u05d5\u05ea \u05ea\u05d4\u05d9\u05d4 '\u05d6\u05de\u05d9\u05e0\u05d4'. \u05d0\u05dd \u05d4\u05ea\u05d1\u05e0\u05d9\u05ea \u05de\u05d7\u05d6\u05d9\u05e8\u05d4 \u05e2\u05e8\u05da \u05d0\u05d7\u05e8, \u05d4\u05d9\u05e9\u05d5\u05ea \u05ea\u05d4\u05d9\u05d4 '\u05dc\u05d0 \u05d6\u05de\u05d9\u05e0\u05d4'. \u05d0\u05dd \u05dc\u05d0 \u05de\u05d5\u05d2\u05d3\u05e8\u05ea, \u05d4\u05d9\u05e9\u05d5\u05ea \u05ea\u05de\u05d9\u05d3 \u05ea\u05d4\u05d9\u05d4 '\u05d6\u05de\u05d9\u05e0\u05d4'. \u05d9\u05e9 \u05dc\u05e9\u05d9\u05dd \u05dc\u05d1 \u05e9\u05d4\u05e9\u05d5\u05d5\u05d0\u05ea \u05d4\u05de\u05d7\u05e8\u05d5\u05d6\u05d5\u05ea \u05d0\u05d9\u05e0\u05d4 \u05ea\u05dc\u05d5\u05d9\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea; \u05de\u05d5\u05ea\u05e8 'TrUe' \u05d5-''yEs'."
939
+ },
940
+ "name": "\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05de\u05ea\u05e7\u05d3\u05de\u05d5\u05ea"
941
+ }
942
+ },
943
+ "title": "\u05e2\u05d3\u05db\u05d5\u05df \u05ea\u05d1\u05e0\u05d9\u05ea"
944
+ },
808
945
  "vacuum": {
809
946
  "data": {
810
947
  "clean_spot": "\u05e4\u05e2\u05d5\u05dc\u05d5\u05ea \u05d1\u05e0\u05d9\u05e7\u05d5\u05d9 \u05e0\u05e7\u05d5\u05d3\u05d4",
@@ -909,6 +1046,13 @@
909
1046
  "window": "\u05d7\u05dc\u05d5\u05df"
910
1047
  }
911
1048
  },
1049
+ "event_device_class": {
1050
+ "options": {
1051
+ "button": "\u05dc\u05d7\u05e6\u05df",
1052
+ "doorbell": "\u05e4\u05e2\u05de\u05d5\u05df \u05d3\u05dc\u05ea",
1053
+ "motion": "\u05ea\u05e0\u05d5\u05e2\u05d4"
1054
+ }
1055
+ },
912
1056
  "sensor_device_class": {
913
1057
  "options": {
914
1058
  "absolute_humidity": "\u05dc\u05d7\u05d5\u05ea \u05de\u05d5\u05d7\u05dc\u05d8\u05ea",
@@ -982,6 +1126,11 @@
982
1126
  "options": {
983
1127
  "none": "\u05d0\u05d9\u05df \u05d9\u05d7\u05d9\u05d3\u05ea \u05de\u05d9\u05d3\u05d4"
984
1128
  }
1129
+ },
1130
+ "update_device_class": {
1131
+ "options": {
1132
+ "firmware": "\u05e7\u05d5\u05e9\u05d7\u05d4"
1133
+ }
985
1134
  }
986
1135
  },
987
1136
  "services": {
@@ -691,7 +691,7 @@
691
691
  "moisture": "Fukt",
692
692
  "motion": "R\u00f6relse",
693
693
  "moving": "F\u00f6rflyttning",
694
- "occupancy": "Bel\u00e4ggning",
694
+ "occupancy": "N\u00e4rvaro",
695
695
  "opening": "\u00d6ppning",
696
696
  "plug": "Kontakt",
697
697
  "power": "Str\u00f6m",
@@ -65,7 +65,10 @@ class UptimeRobotDataUpdateCoordinator(DataUpdateCoordinator[list[UptimeRobotMon
65
65
  if device := device_registry.async_get_device(
66
66
  identifiers={(DOMAIN, monitor_id)}
67
67
  ):
68
- device_registry.async_remove_device(device.id)
68
+ device_registry.async_update_device(
69
+ device_id=device.id,
70
+ remove_config_entry_id=self.config_entry.entry_id,
71
+ )
69
72
 
70
73
  # If there are new monitors, we should reload the config entry so we can
71
74
  # create new devices and entities.
@@ -74,9 +74,7 @@ rules:
74
74
  repair-issues:
75
75
  status: exempt
76
76
  comment: no known use cases for repair issues or flows, yet
77
- stale-devices:
78
- status: todo
79
- comment: We should remove the config entry from the device rather than remove the device
77
+ stale-devices: done
80
78
 
81
79
  # Platinum
82
80
  async-dependency: done
@@ -9,5 +9,5 @@
9
9
  "iot_class": "cloud_polling",
10
10
  "loggers": ["volvocarsapi"],
11
11
  "quality_scale": "silver",
12
- "requirements": ["volvocarsapi==0.4.1"]
12
+ "requirements": ["volvocarsapi==0.4.2"]
13
13
  }
@@ -1,4 +1,7 @@
1
1
  {
2
+ "common": {
3
+ "pressure": "\u05dc\u05d7\u05e5"
4
+ },
2
5
  "config": {
3
6
  "abort": {
4
7
  "already_configured": "\u05ea\u05e6\u05d5\u05e8\u05ea \u05d4\u05d7\u05e9\u05d1\u05d5\u05df \u05db\u05d1\u05e8 \u05e0\u05e7\u05d1\u05e2\u05d4",
@@ -19,10 +19,25 @@
19
19
  "integration_discovery_confirm": {
20
20
  "description": "\u60a8\u8981\u4f7f\u7528\u84dd\u7259\u5730\u5740 {address} \u8bbe\u7f6e{name}\u5417 \uff1f"
21
21
  },
22
+ "key_slot": {
23
+ "data": {
24
+ "key": "\u79bb\u7ebf\u5bc6\u94a5\uff0832 \u5b57\u8282\u5341\u516d\u8fdb\u5236\u5b57\u7b26\u4e32\uff09",
25
+ "slot": "\u79bb\u7ebf\u5bc6\u94a5\u69fd\uff080-255 \u4e4b\u95f4\u7684\u6574\u6570\uff09"
26
+ },
27
+ "description": "\u8f93\u5165\u5730\u5740\u4e3a {address} \u7684{title}\u9501\u7684\u5bc6\u94a5\u3002\u5982\u679c\u60a8\u4f7f\u7528 August \u6216 Yale \u4e91\u96c6\u6210\u83b7\u53d6\u5bc6\u94a5\uff0c\u5219\u53ef\u4ee5\u5728\u9501\u5904\u4e8e\u84dd\u7259\u8303\u56f4\u5185\u65f6\u91cd\u65b0\u52a0\u8f7d August \u6216 Yale \u4e91\u96c6\u6210\uff0c\u4ee5\u907f\u514d\u6b64\u624b\u52a8\u8bbe\u7f6e\u3002"
28
+ },
29
+ "reauth_validate": {
30
+ "data": {
31
+ "key": "\u79bb\u7ebf\u5bc6\u94a5\uff0832 \u5b57\u8282\u5341\u516d\u8fdb\u5236\u5b57\u7b26\u4e32\uff09",
32
+ "slot": "\u79bb\u7ebf\u5bc6\u94a5\u69fd\uff080-255 \u4e4b\u95f4\u7684\u6574\u6570\uff09"
33
+ },
34
+ "description": "\u8f93\u5165\u5730\u5740\u4e3a {address} \u7684{title}\u9501\u7684\u66f4\u65b0\u5bc6\u94a5\u3002\u5982\u679c\u60a8\u4f7f\u7528 August \u6216 Yale \u4e91\u96c6\u6210\u83b7\u53d6\u5bc6\u94a5\uff0c\u5219\u53ef\u4ee5\u5728\u9501\u5904\u4e8e\u84dd\u7259\u8303\u56f4\u5185\u65f6\u91cd\u65b0\u52a0\u8f7d August \u6216 Yale \u4e91\u96c6\u6210\uff0c\u4ee5\u907f\u514d\u624b\u52a8\u91cd\u65b0\u9a8c\u8bc1\u3002"
35
+ },
22
36
  "user": {
23
37
  "data": {
24
38
  "address": "\u84dd\u7259\u5730\u5740"
25
- }
39
+ },
40
+ "description": "\u9009\u62e9\u60a8\u60f3\u8981\u901a\u8fc7\u84dd\u7259\u8bbe\u7f6e\u7684\u8bbe\u5907\u3002"
26
41
  }
27
42
  }
28
43
  },
homeassistant/const.py CHANGED
@@ -25,7 +25,7 @@ if TYPE_CHECKING:
25
25
  APPLICATION_NAME: Final = "HomeAssistant"
26
26
  MAJOR_VERSION: Final = 2025
27
27
  MINOR_VERSION: Final = 9
28
- PATCH_VERSION: Final = "0b3"
28
+ PATCH_VERSION: Final = "0b5"
29
29
  __short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}"
30
30
  __version__: Final = f"{__short_version__}.{PATCH_VERSION}"
31
31
  REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 13, 2)
@@ -179,8 +179,7 @@ class AreaRegistryItems(NormalizedNameBaseRegistryItems[AreaEntry]):
179
179
  self._floors_index[entry.floor_id][key] = True
180
180
  for label in entry.labels:
181
181
  self._labels_index[label][key] = True
182
- for alias in entry.aliases:
183
- normalized_alias = normalize_name(alias)
182
+ for normalized_alias in {normalize_name(alias) for alias in entry.aliases}:
184
183
  self._aliases_index[normalized_alias][key] = True
185
184
 
186
185
  def _unindex_entry(
@@ -190,8 +189,7 @@ class AreaRegistryItems(NormalizedNameBaseRegistryItems[AreaEntry]):
190
189
  super()._unindex_entry(key, replacement_entry)
191
190
  entry = self.data[key]
192
191
  if aliases := entry.aliases:
193
- for alias in aliases:
194
- normalized_alias = normalize_name(alias)
192
+ for normalized_alias in {normalize_name(alias) for alias in aliases}:
195
193
  self._unindex_entry_value(key, normalized_alias, self._aliases_index)
196
194
  if labels := entry.labels:
197
195
  for label in labels:
@@ -9,7 +9,7 @@ from enum import StrEnum
9
9
  from functools import lru_cache
10
10
  import logging
11
11
  import time
12
- from typing import TYPE_CHECKING, Any, Final, Literal, TypedDict
12
+ from typing import TYPE_CHECKING, Any, Literal, TypedDict
13
13
 
14
14
  import attr
15
15
  from yarl import URL
@@ -57,7 +57,7 @@ EVENT_DEVICE_REGISTRY_UPDATED: EventType[EventDeviceRegistryUpdatedData] = Event
57
57
  )
58
58
  STORAGE_KEY = "core.device_registry"
59
59
  STORAGE_VERSION_MAJOR = 1
60
- STORAGE_VERSION_MINOR = 11
60
+ STORAGE_VERSION_MINOR = 12
61
61
 
62
62
  CLEANUP_DELAY = 10
63
63
 
@@ -68,8 +68,6 @@ CONNECTION_ZIGBEE = "zigbee"
68
68
 
69
69
  ORPHANED_DEVICE_KEEP_SECONDS = 86400 * 30
70
70
 
71
- UNDEFINED_STR: Final = "UNDEFINED"
72
-
73
71
  # Can be removed when suggested_area is removed from DeviceEntry
74
72
  RUNTIME_ONLY_ATTRS = {"suggested_area"}
75
73
 
@@ -528,7 +526,8 @@ class DeletedDeviceEntry:
528
526
  "created_at": self.created_at,
529
527
  "disabled_by": self.disabled_by
530
528
  if self.disabled_by is not UNDEFINED
531
- else UNDEFINED_STR,
529
+ else None,
530
+ "disabled_by_undefined": self.disabled_by is UNDEFINED,
532
531
  "identifiers": list(self.identifiers),
533
532
  "id": self.id,
534
533
  "labels": list(self.labels),
@@ -616,7 +615,7 @@ class DeviceRegistryStore(storage.Store[dict[str, list[dict[str, Any]]]]):
616
615
  # Introduced in 2025.6
617
616
  for device in old_data["deleted_devices"]:
618
617
  device["area_id"] = None
619
- device["disabled_by"] = UNDEFINED_STR
618
+ device["disabled_by"] = None
620
619
  device["labels"] = []
621
620
  device["name_by_user"] = None
622
621
  if old_minor_version < 11:
@@ -629,6 +628,11 @@ class DeviceRegistryStore(storage.Store[dict[str, list[dict[str, Any]]]]):
629
628
  device["connections"] = _normalize_connections(
630
629
  device["connections"]
631
630
  )
631
+ if old_minor_version < 12:
632
+ # Version 1.12 adds undefined flags to deleted devices, this is a bugfix
633
+ # of version 1.10
634
+ for device in old_data["deleted_devices"]:
635
+ device["disabled_by_undefined"] = old_minor_version < 10
632
636
 
633
637
  if old_major_version > 2:
634
638
  raise NotImplementedError
@@ -1456,13 +1460,13 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]):
1456
1460
 
1457
1461
  # Introduced in 0.111
1458
1462
  def get_optional_enum[_EnumT: StrEnum](
1459
- cls: type[_EnumT], value: str | None
1463
+ cls: type[_EnumT], value: str | None, undefined: bool
1460
1464
  ) -> _EnumT | UndefinedType | None:
1461
1465
  """Convert string to the passed enum, UNDEFINED or None."""
1466
+ if undefined:
1467
+ return UNDEFINED
1462
1468
  if value is None:
1463
1469
  return None
1464
- if value == UNDEFINED_STR:
1465
- return UNDEFINED
1466
1470
  try:
1467
1471
  return cls(value)
1468
1472
  except ValueError:
@@ -1481,7 +1485,9 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]):
1481
1485
  connections={tuple(conn) for conn in device["connections"]},
1482
1486
  created_at=datetime.fromisoformat(device["created_at"]),
1483
1487
  disabled_by=get_optional_enum(
1484
- DeviceEntryDisabler, device["disabled_by"]
1488
+ DeviceEntryDisabler,
1489
+ device["disabled_by"],
1490
+ device["disabled_by_undefined"],
1485
1491
  ),
1486
1492
  identifiers={tuple(iden) for iden in device["identifiers"]},
1487
1493
  id=device["id"],
@@ -16,7 +16,7 @@ from datetime import datetime, timedelta
16
16
  from enum import StrEnum
17
17
  import logging
18
18
  import time
19
- from typing import TYPE_CHECKING, Any, Final, Literal, NotRequired, TypedDict
19
+ from typing import TYPE_CHECKING, Any, Literal, NotRequired, TypedDict
20
20
 
21
21
  import attr
22
22
  import voluptuous as vol
@@ -79,14 +79,12 @@ EVENT_ENTITY_REGISTRY_UPDATED: EventType[EventEntityRegistryUpdatedData] = Event
79
79
  _LOGGER = logging.getLogger(__name__)
80
80
 
81
81
  STORAGE_VERSION_MAJOR = 1
82
- STORAGE_VERSION_MINOR = 18
82
+ STORAGE_VERSION_MINOR = 19
83
83
  STORAGE_KEY = "core.entity_registry"
84
84
 
85
85
  CLEANUP_INTERVAL = 3600 * 24
86
86
  ORPHANED_ENTITY_KEEP_SECONDS = 3600 * 24 * 30
87
87
 
88
- UNDEFINED_STR: Final = "UNDEFINED"
89
-
90
88
  ENTITY_CATEGORY_VALUE_TO_INDEX: dict[EntityCategory | None, int] = {
91
89
  val: idx for idx, val in enumerate(EntityCategory)
92
90
  }
@@ -462,19 +460,20 @@ class DeletedRegistryEntry:
462
460
  "device_class": self.device_class,
463
461
  "disabled_by": self.disabled_by
464
462
  if self.disabled_by is not UNDEFINED
465
- else UNDEFINED_STR,
463
+ else None,
464
+ "disabled_by_undefined": self.disabled_by is UNDEFINED,
466
465
  "entity_id": self.entity_id,
467
466
  "hidden_by": self.hidden_by
468
467
  if self.hidden_by is not UNDEFINED
469
- else UNDEFINED_STR,
468
+ else None,
469
+ "hidden_by_undefined": self.hidden_by is UNDEFINED,
470
470
  "icon": self.icon,
471
471
  "id": self.id,
472
472
  "labels": list(self.labels),
473
473
  "modified_at": self.modified_at,
474
474
  "name": self.name,
475
- "options": self.options
476
- if self.options is not UNDEFINED
477
- else UNDEFINED_STR,
475
+ "options": self.options if self.options is not UNDEFINED else {},
476
+ "options_undefined": self.options is UNDEFINED,
478
477
  "orphaned_timestamp": self.orphaned_timestamp,
479
478
  "platform": self.platform,
480
479
  "unique_id": self.unique_id,
@@ -605,12 +604,20 @@ class EntityRegistryStore(storage.Store[dict[str, list[dict[str, Any]]]]):
605
604
  entity["area_id"] = None
606
605
  entity["categories"] = {}
607
606
  entity["device_class"] = None
608
- entity["disabled_by"] = UNDEFINED_STR
609
- entity["hidden_by"] = UNDEFINED_STR
607
+ entity["disabled_by"] = None
608
+ entity["hidden_by"] = None
610
609
  entity["icon"] = None
611
610
  entity["labels"] = []
612
611
  entity["name"] = None
613
- entity["options"] = UNDEFINED_STR
612
+ entity["options"] = {}
613
+ if old_minor_version < 19:
614
+ # Version 1.19 adds undefined flags to deleted entities, this is a bugfix
615
+ # of version 1.18
616
+ set_to_undefined = old_minor_version < 18
617
+ for entity in data["deleted_entities"]:
618
+ entity["disabled_by_undefined"] = set_to_undefined
619
+ entity["hidden_by_undefined"] = set_to_undefined
620
+ entity["options_undefined"] = set_to_undefined
614
621
 
615
622
  if old_major_version > 1:
616
623
  raise NotImplementedError
@@ -1557,13 +1564,13 @@ class EntityRegistry(BaseRegistry):
1557
1564
  )
1558
1565
 
1559
1566
  def get_optional_enum[_EnumT: StrEnum](
1560
- cls: type[_EnumT], value: str | None
1567
+ cls: type[_EnumT], value: str | None, undefined: bool
1561
1568
  ) -> _EnumT | UndefinedType | None:
1562
1569
  """Convert string to the passed enum, UNDEFINED or None."""
1570
+ if undefined:
1571
+ return UNDEFINED
1563
1572
  if value is None:
1564
1573
  return None
1565
- if value == UNDEFINED_STR:
1566
- return UNDEFINED
1567
1574
  try:
1568
1575
  return cls(value)
1569
1576
  except ValueError:
@@ -1586,7 +1593,6 @@ class EntityRegistry(BaseRegistry):
1586
1593
  entity["platform"],
1587
1594
  entity["unique_id"],
1588
1595
  )
1589
-
1590
1596
  deleted_entities[key] = DeletedRegistryEntry(
1591
1597
  aliases=set(entity["aliases"]),
1592
1598
  area_id=entity["area_id"],
@@ -1596,11 +1602,15 @@ class EntityRegistry(BaseRegistry):
1596
1602
  created_at=datetime.fromisoformat(entity["created_at"]),
1597
1603
  device_class=entity["device_class"],
1598
1604
  disabled_by=get_optional_enum(
1599
- RegistryEntryDisabler, entity["disabled_by"]
1605
+ RegistryEntryDisabler,
1606
+ entity["disabled_by"],
1607
+ entity["disabled_by_undefined"],
1600
1608
  ),
1601
1609
  entity_id=entity["entity_id"],
1602
1610
  hidden_by=get_optional_enum(
1603
- RegistryEntryHider, entity["hidden_by"]
1611
+ RegistryEntryHider,
1612
+ entity["hidden_by"],
1613
+ entity["hidden_by_undefined"],
1604
1614
  ),
1605
1615
  icon=entity["icon"],
1606
1616
  id=entity["id"],
@@ -1608,7 +1618,7 @@ class EntityRegistry(BaseRegistry):
1608
1618
  modified_at=datetime.fromisoformat(entity["modified_at"]),
1609
1619
  name=entity["name"],
1610
1620
  options=entity["options"]
1611
- if entity["options"] is not UNDEFINED_STR
1621
+ if not entity["options_undefined"]
1612
1622
  else UNDEFINED,
1613
1623
  orphaned_timestamp=entity["orphaned_timestamp"],
1614
1624
  platform=entity["platform"],
@@ -105,8 +105,7 @@ class FloorRegistryItems(NormalizedNameBaseRegistryItems[FloorEntry]):
105
105
  def _index_entry(self, key: str, entry: FloorEntry) -> None:
106
106
  """Index an entry."""
107
107
  super()._index_entry(key, entry)
108
- for alias in entry.aliases:
109
- normalized_alias = normalize_name(alias)
108
+ for normalized_alias in {normalize_name(alias) for alias in entry.aliases}:
110
109
  self._aliases_index[normalized_alias][key] = True
111
110
 
112
111
  def _unindex_entry(
@@ -116,8 +115,7 @@ class FloorRegistryItems(NormalizedNameBaseRegistryItems[FloorEntry]):
116
115
  super()._unindex_entry(key, replacement_entry)
117
116
  entry = self.data[key]
118
117
  if aliases := entry.aliases:
119
- for alias in aliases:
120
- normalized_alias = normalize_name(alias)
118
+ for normalized_alias in {normalize_name(alias) for alias in aliases}:
121
119
  self._unindex_entry_value(key, normalized_alias, self._aliases_index)
122
120
 
123
121
  def get_floors_for_alias(self, alias: str) -> list[FloorEntry]:
@@ -35,10 +35,10 @@ fnv-hash-fast==1.5.0
35
35
  go2rtc-client==0.2.1
36
36
  ha-ffmpeg==3.2.2
37
37
  habluetooth==5.3.0
38
- hass-nabucasa==1.0.0
38
+ hass-nabucasa==1.1.0
39
39
  hassil==3.2.0
40
40
  home-assistant-bluetooth==1.13.1
41
- home-assistant-frontend==20250901.0
41
+ home-assistant-frontend==20250903.1
42
42
  home-assistant-intents==2025.8.29
43
43
  httpx==0.28.1
44
44
  ifaddr==0.2.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: homeassistant
3
- Version: 2025.9.0b3
3
+ Version: 2025.9.0b5
4
4
  Summary: Open-source home automation platform running on Python 3.
5
5
  Author-email: The Home Assistant Authors <hello@home-assistant.io>
6
6
  License-Expression: Apache-2.0
@@ -40,7 +40,7 @@ Requires-Dist: certifi>=2021.5.30
40
40
  Requires-Dist: ciso8601==2.3.2
41
41
  Requires-Dist: cronsim==2.6
42
42
  Requires-Dist: fnv-hash-fast==1.5.0
43
- Requires-Dist: hass-nabucasa==1.0.0
43
+ Requires-Dist: hass-nabucasa==1.1.0
44
44
  Requires-Dist: httpx==0.28.1
45
45
  Requires-Dist: home-assistant-bluetooth==1.13.1
46
46
  Requires-Dist: ifaddr==0.2.0