homeassistant 2025.12.0__py3-none-any.whl → 2025.12.0b1__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.
- homeassistant/auth/permissions/events.py +0 -2
- homeassistant/components/acaia/translations/pl.json +1 -23
- homeassistant/components/accuweather/translations/tr.json +0 -19
- homeassistant/components/ai_task/translations/tr.json +0 -17
- homeassistant/components/airly/translations/sr-Latn.json +0 -7
- homeassistant/components/airnow/translations/sr-Latn.json +0 -3
- homeassistant/components/airobot/translations/bg.json +2 -1
- homeassistant/components/airobot/translations/cs.json +1 -1
- homeassistant/components/airobot/translations/de.json +1 -1
- homeassistant/components/airobot/translations/el.json +1 -4
- homeassistant/components/airobot/translations/en-GB.json +1 -1
- homeassistant/components/airobot/translations/en.json +1 -1
- homeassistant/components/airobot/translations/et.json +1 -1
- homeassistant/components/airobot/translations/lt.json +1 -1
- homeassistant/components/airobot/translations/nl.json +2 -1
- homeassistant/components/airobot/translations/pt.json +5 -1
- homeassistant/components/airobot/translations/sk.json +1 -1
- homeassistant/components/airobot/translations/sv.json +2 -1
- homeassistant/components/airobot/translations/tr.json +5 -1
- homeassistant/components/airobot/translations/zh-Hans.json +1 -1
- homeassistant/components/airobot/translations/zh-Hant.json +1 -1
- homeassistant/components/airq/translations/sr-Latn.json +0 -7
- homeassistant/components/airthings/translations/tr.json +1 -2
- homeassistant/components/airthings_ble/translations/sr-Latn.json +0 -7
- homeassistant/components/airthings_ble/translations/tr.json +0 -7
- homeassistant/components/airvisual/translations/sr-Latn.json +0 -14
- homeassistant/components/airzone/translations/tr.json +0 -9
- homeassistant/components/aladdin_connect/translations/tr.json +1 -7
- homeassistant/components/alarm_control_panel/strings.json +21 -14
- homeassistant/components/alarm_control_panel/translations/cs.json +19 -12
- homeassistant/components/alarm_control_panel/translations/de.json +14 -7
- homeassistant/components/alarm_control_panel/translations/en-GB.json +1 -86
- homeassistant/components/alarm_control_panel/translations/en.json +21 -14
- homeassistant/components/alarm_control_panel/translations/es.json +1 -86
- homeassistant/components/alarm_control_panel/translations/et.json +1 -86
- homeassistant/components/alarm_control_panel/translations/ga.json +1 -72
- homeassistant/components/alarm_control_panel/translations/lt.json +21 -14
- homeassistant/components/alarm_control_panel/translations/pt.json +31 -14
- homeassistant/components/alarm_control_panel/translations/sk.json +21 -14
- homeassistant/components/alarm_control_panel/translations/sr-Latn.json +1 -5
- homeassistant/components/alarm_control_panel/translations/tr.json +1 -72
- homeassistant/components/alarm_control_panel/translations/zh-Hans.json +6 -1
- homeassistant/components/alarm_control_panel/translations/zh-Hant.json +21 -14
- homeassistant/components/alexa_devices/translations/it.json +1 -24
- homeassistant/components/alexa_devices/translations/tr.json +0 -52
- homeassistant/components/androidtv_remote/translations/mk.json +0 -7
- homeassistant/components/anglian_water/__init__.py +2 -6
- homeassistant/components/anglian_water/entity.py +1 -5
- homeassistant/components/anglian_water/sensor.py +2 -1
- homeassistant/components/anglian_water/strings.json +1 -1
- homeassistant/components/anglian_water/translations/de.json +1 -1
- homeassistant/components/anglian_water/translations/en.json +1 -1
- homeassistant/components/anglian_water/translations/et.json +1 -45
- homeassistant/components/anglian_water/translations/pt.json +2 -1
- homeassistant/components/anglian_water/translations/sk.json +1 -1
- homeassistant/components/anglian_water/translations/zh-Hans.json +2 -32
- homeassistant/components/anthropic/__init__.py +9 -2
- homeassistant/components/aosmith/translations/tr.json +0 -11
- homeassistant/components/apcupsd/translations/es.json +0 -14
- homeassistant/components/apcupsd/translations/sr-Latn.json +0 -3
- homeassistant/components/apple_tv/manifest.json +0 -1
- homeassistant/components/assist_pipeline/pipeline.py +57 -58
- homeassistant/components/assist_satellite/manifest.json +1 -1
- homeassistant/components/assist_satellite/strings.json +12 -8
- homeassistant/components/assist_satellite/translations/cs.json +12 -8
- homeassistant/components/assist_satellite/translations/de.json +12 -8
- homeassistant/components/assist_satellite/translations/en-GB.json +1 -54
- homeassistant/components/assist_satellite/translations/en.json +12 -8
- homeassistant/components/assist_satellite/translations/es.json +1 -54
- homeassistant/components/assist_satellite/translations/et.json +1 -54
- homeassistant/components/assist_satellite/translations/ga.json +1 -46
- homeassistant/components/assist_satellite/translations/lt.json +12 -8
- homeassistant/components/assist_satellite/translations/pt.json +16 -4
- homeassistant/components/assist_satellite/translations/sk.json +12 -8
- homeassistant/components/assist_satellite/translations/tr.json +1 -46
- homeassistant/components/assist_satellite/translations/zh-Hans.json +0 -5
- homeassistant/components/assist_satellite/translations/zh-Hant.json +12 -8
- homeassistant/components/august/translations/tr.json +1 -23
- homeassistant/components/automation/__init__.py +0 -1
- homeassistant/components/automation/manifest.json +0 -2
- homeassistant/components/automation/strings.json +4 -4
- homeassistant/components/automation/translations/cs.json +4 -4
- homeassistant/components/automation/translations/de.json +4 -4
- homeassistant/components/automation/translations/en-GB.json +0 -8
- homeassistant/components/automation/translations/en.json +4 -4
- homeassistant/components/automation/translations/es.json +0 -8
- homeassistant/components/automation/translations/et.json +4 -4
- homeassistant/components/automation/translations/fr.json +0 -8
- homeassistant/components/automation/translations/lt.json +4 -4
- homeassistant/components/automation/translations/pt.json +8 -0
- homeassistant/components/automation/translations/sk.json +4 -4
- homeassistant/components/automation/translations/sr-Latn.json +0 -28
- homeassistant/components/automation/translations/zh-Hant.json +4 -4
- homeassistant/components/backblaze_b2/translations/de.json +2 -2
- homeassistant/components/backblaze_b2/translations/es.json +1 -1
- homeassistant/components/bang_olufsen/translations/es.json +0 -992
- homeassistant/components/bang_olufsen/translations/ga.json +0 -992
- homeassistant/components/bang_olufsen/translations/nl.json +3 -76
- homeassistant/components/bang_olufsen/translations/pt.json +0 -1
- homeassistant/components/bayesian/translations/sr-Latn.json +1 -2
- homeassistant/components/bayesian/translations/tr.json +10 -81
- homeassistant/components/binary_sensor/icons.json +0 -8
- homeassistant/components/binary_sensor/strings.json +1 -36
- homeassistant/components/binary_sensor/translations/cs.json +1 -36
- homeassistant/components/binary_sensor/translations/de.json +1 -36
- homeassistant/components/binary_sensor/translations/en-GB.json +1 -36
- homeassistant/components/binary_sensor/translations/en.json +1 -36
- homeassistant/components/binary_sensor/translations/es.json +1 -36
- homeassistant/components/binary_sensor/translations/et.json +1 -36
- homeassistant/components/binary_sensor/translations/lt.json +1 -36
- homeassistant/components/binary_sensor/translations/mk.json +0 -8
- homeassistant/components/binary_sensor/translations/sk.json +1 -36
- homeassistant/components/binary_sensor/translations/sr-Latn.json +0 -1
- homeassistant/components/binary_sensor/translations/zh-Hant.json +1 -36
- homeassistant/components/blebox/translations/sr-Latn.json +0 -1
- homeassistant/components/blink/translations/tr.json +1 -16
- homeassistant/components/blue_current/translations/tr.json +0 -44
- homeassistant/components/bosch_alarm/__init__.py +2 -2
- homeassistant/components/bosch_alarm/config_flow.py +1 -1
- homeassistant/components/bosch_alarm/diagnostics.py +1 -2
- homeassistant/components/bosch_alarm/entity.py +1 -1
- homeassistant/components/bosch_alarm/manifest.json +1 -1
- homeassistant/components/broadlink/manifest.json +0 -1
- homeassistant/components/broadlink/translations/sr-Latn.json +0 -5
- homeassistant/components/brother/translations/tr.json +2 -53
- homeassistant/components/bsblan/translations/sr-Latn.json +0 -4
- homeassistant/components/bsblan/translations/tr.json +2 -22
- homeassistant/components/bthome/translations/tr.json +0 -35
- homeassistant/components/button/translations/sr-Latn.json +0 -20
- homeassistant/components/camera/__init__.py +1 -1
- homeassistant/components/camera/translations/mk.json +2 -4
- homeassistant/components/climate/strings.json +15 -10
- homeassistant/components/climate/translations/bg.json +0 -14
- homeassistant/components/climate/translations/cs.json +9 -26
- homeassistant/components/climate/translations/de.json +6 -23
- homeassistant/components/climate/translations/el.json +1 -54
- homeassistant/components/climate/translations/en-GB.json +1 -64
- homeassistant/components/climate/translations/en.json +15 -10
- homeassistant/components/climate/translations/es.json +1 -64
- homeassistant/components/climate/translations/et.json +1 -64
- homeassistant/components/climate/translations/ga.json +1 -54
- homeassistant/components/climate/translations/lt.json +9 -26
- homeassistant/components/climate/translations/mk.json +3 -10
- homeassistant/components/climate/translations/pt.json +12 -19
- homeassistant/components/climate/translations/ru.json +1 -54
- homeassistant/components/climate/translations/sk.json +9 -26
- homeassistant/components/climate/translations/sr-Latn.json +3 -101
- homeassistant/components/climate/translations/sv.json +1 -17
- homeassistant/components/climate/translations/tr.json +1 -54
- homeassistant/components/climate/translations/zh-Hans.json +0 -14
- homeassistant/components/climate/translations/zh-Hant.json +9 -26
- homeassistant/components/cloud/__init__.py +5 -18
- homeassistant/components/cloud/ai_task.py +12 -5
- homeassistant/components/cloud/client.py +5 -9
- homeassistant/components/cloud/conversation.py +11 -2
- homeassistant/components/cloud/entity.py +6 -5
- homeassistant/components/cloud/http_api.py +0 -21
- homeassistant/components/cloud/manifest.json +1 -1
- homeassistant/components/cloud/translations/en-GB.json +0 -7
- homeassistant/components/cloud/translations/es.json +0 -7
- homeassistant/components/cloud/translations/et.json +0 -7
- homeassistant/components/cloud/translations/ga.json +0 -7
- homeassistant/components/cloud/translations/tr.json +0 -7
- homeassistant/components/coinbase/translations/tr.json +1 -10
- homeassistant/components/comelit/translations/tr.json +0 -2
- homeassistant/components/conversation/__init__.py +3 -8
- homeassistant/components/conversation/default_agent.py +56 -61
- homeassistant/components/conversation/manifest.json +1 -1
- homeassistant/components/counter/translations/sr-Latn.json +1 -41
- homeassistant/components/cover/icons.json +29 -0
- homeassistant/components/cover/strings.json +159 -1
- homeassistant/components/cover/translations/cs.json +159 -1
- homeassistant/components/cover/translations/de.json +159 -1
- homeassistant/components/cover/translations/en.json +159 -1
- homeassistant/components/cover/translations/et.json +30 -1
- homeassistant/components/cover/translations/lt.json +159 -1
- homeassistant/components/cover/translations/pt.json +158 -1
- homeassistant/components/cover/translations/sk.json +159 -1
- homeassistant/components/cover/translations/sr-Latn.json +1 -5
- homeassistant/components/cover/translations/zh-Hans.json +105 -1
- homeassistant/components/cover/translations/zh-Hant.json +159 -1
- homeassistant/components/cover/trigger.py +116 -0
- homeassistant/components/cover/triggers.yaml +79 -0
- homeassistant/components/deconz/translations/mk.json +1 -3
- homeassistant/components/deluge/translations/tr.json +0 -8
- homeassistant/components/derivative/translations/es.json +0 -6
- homeassistant/components/derivative/translations/ga.json +0 -6
- homeassistant/components/derivative/translations/sr-Latn.json +4 -41
- homeassistant/components/dlna_dmr/manifest.json +0 -1
- homeassistant/components/dlna_dms/manifest.json +0 -1
- homeassistant/components/downloader/translations/tr.json +0 -8
- homeassistant/components/duckdns/translations/en-GB.json +0 -1
- homeassistant/components/duckdns/translations/es.json +0 -41
- homeassistant/components/duckdns/translations/ga.json +0 -40
- homeassistant/components/ecovacs/manifest.json +1 -1
- homeassistant/components/ecovacs/translations/tr.json +2 -50
- homeassistant/components/ecowitt/manifest.json +0 -1
- homeassistant/components/elevenlabs/translations/tr.json +1 -17
- homeassistant/components/elkm1/translations/tr.json +0 -4
- homeassistant/components/energyid/translations/zh-Hans.json +1 -17
- homeassistant/components/enphase_envoy/manifest.json +1 -1
- homeassistant/components/enphase_envoy/translations/tr.json +0 -15
- homeassistant/components/esphome/const.py +1 -1
- homeassistant/components/esphome/manifest.json +1 -1
- homeassistant/components/esphome/strings.json +1 -1
- homeassistant/components/esphome/translations/bg.json +1 -0
- homeassistant/components/esphome/translations/ca.json +1 -0
- homeassistant/components/esphome/translations/cs.json +1 -1
- homeassistant/components/esphome/translations/da.json +1 -0
- homeassistant/components/esphome/translations/de.json +1 -1
- homeassistant/components/esphome/translations/el.json +1 -0
- homeassistant/components/esphome/translations/en-GB.json +1 -1
- homeassistant/components/esphome/translations/en.json +1 -1
- homeassistant/components/esphome/translations/es.json +1 -1
- homeassistant/components/esphome/translations/et.json +1 -1
- homeassistant/components/esphome/translations/fi.json +1 -0
- homeassistant/components/esphome/translations/fr.json +1 -0
- homeassistant/components/esphome/translations/ga.json +1 -0
- homeassistant/components/esphome/translations/he.json +1 -0
- homeassistant/components/esphome/translations/hu.json +1 -0
- homeassistant/components/esphome/translations/id.json +1 -0
- homeassistant/components/esphome/translations/it.json +1 -0
- homeassistant/components/esphome/translations/ja.json +1 -0
- homeassistant/components/esphome/translations/ko.json +1 -0
- homeassistant/components/esphome/translations/lt.json +1 -1
- homeassistant/components/esphome/translations/nb.json +1 -0
- homeassistant/components/esphome/translations/nl.json +1 -0
- homeassistant/components/esphome/translations/pl.json +1 -0
- homeassistant/components/esphome/translations/pt-BR.json +1 -0
- homeassistant/components/esphome/translations/pt.json +1 -1
- homeassistant/components/esphome/translations/ro.json +1 -0
- homeassistant/components/esphome/translations/ru.json +1 -0
- homeassistant/components/esphome/translations/sk.json +1 -1
- homeassistant/components/esphome/translations/sl.json +1 -0
- homeassistant/components/esphome/translations/sv.json +1 -0
- homeassistant/components/esphome/translations/tr.json +1 -1
- homeassistant/components/esphome/translations/uk.json +1 -0
- homeassistant/components/esphome/translations/vi.json +1 -0
- homeassistant/components/esphome/translations/zh-Hans.json +1 -1
- homeassistant/components/esphome/translations/zh-Hant.json +1 -1
- homeassistant/components/essent/translations/nl.json +0 -32
- homeassistant/components/essent/translations/zh-Hans.json +0 -38
- homeassistant/components/event/translations/pl.json +1 -2
- homeassistant/components/event/translations/sr-Latn.json +1 -16
- homeassistant/components/fan/strings.json +6 -4
- homeassistant/components/fan/translations/cs.json +6 -4
- homeassistant/components/fan/translations/de.json +4 -2
- homeassistant/components/fan/translations/en-GB.json +1 -34
- homeassistant/components/fan/translations/en.json +6 -4
- homeassistant/components/fan/translations/es.json +1 -34
- homeassistant/components/fan/translations/et.json +6 -4
- homeassistant/components/fan/translations/ga.json +1 -30
- homeassistant/components/fan/translations/lt.json +6 -4
- homeassistant/components/fan/translations/mk.json +0 -11
- homeassistant/components/fan/translations/nl.json +1 -6
- homeassistant/components/fan/translations/pt.json +8 -2
- homeassistant/components/fan/translations/sk.json +6 -4
- homeassistant/components/fan/translations/tr.json +1 -30
- homeassistant/components/fan/translations/zh-Hant.json +6 -4
- homeassistant/components/file/translations/tr.json +0 -26
- homeassistant/components/filter/translations/sr-Latn.json +11 -149
- homeassistant/components/firefly_iii/translations/de.json +2 -2
- homeassistant/components/firefly_iii/translations/tr.json +0 -87
- homeassistant/components/foscam/translations/tr.json +1 -45
- homeassistant/components/fritz/translations/tr.json +0 -24
- homeassistant/components/fronius/manifest.json +0 -1
- homeassistant/components/fronius/translations/sr-Latn.json +0 -3
- homeassistant/components/frontend/manifest.json +1 -1
- homeassistant/components/frontend/storage.py +6 -16
- homeassistant/components/frontend/translations/de.json +2 -2
- homeassistant/components/frontend/translations/el.json +0 -8
- homeassistant/components/frontend/translations/es.json +0 -8
- homeassistant/components/frontend/translations/ga.json +0 -8
- homeassistant/components/frontend/translations/ru.json +0 -8
- homeassistant/components/frontend/translations/sr-Latn.json +0 -8
- homeassistant/components/frontend/translations/tr.json +0 -8
- homeassistant/components/frontend/translations/zh-Hans.json +0 -3
- homeassistant/components/fully_kiosk/translations/tr.json +0 -15
- homeassistant/components/fyta/translations/sr-Latn.json +0 -6
- homeassistant/components/generic/translations/sr-Latn.json +0 -42
- homeassistant/components/generic_hygrostat/translations/sr-Latn.json +4 -36
- homeassistant/components/generic_thermostat/translations/sr-Latn.json +6 -46
- homeassistant/components/geocaching/translations/tr.json +1 -2
- homeassistant/components/gios/translations/sr-Latn.json +0 -10
- homeassistant/components/go2rtc/__init__.py +2 -6
- homeassistant/components/go2rtc/const.py +1 -0
- homeassistant/components/go2rtc/server.py +6 -16
- homeassistant/components/google/manifest.json +0 -1
- homeassistant/components/google_air_quality/manifest.json +1 -1
- homeassistant/components/google_air_quality/strings.json +6 -8
- homeassistant/components/google_air_quality/translations/bg.json +7 -0
- homeassistant/components/google_air_quality/translations/cs.json +6 -8
- homeassistant/components/google_air_quality/translations/de.json +6 -8
- homeassistant/components/google_air_quality/translations/en.json +6 -8
- homeassistant/components/google_air_quality/translations/et.json +13 -82
- homeassistant/components/google_air_quality/translations/lt.json +13 -1
- homeassistant/components/google_air_quality/translations/nl.json +6 -38
- homeassistant/components/google_air_quality/translations/pt.json +13 -1
- homeassistant/components/google_air_quality/translations/sk.json +13 -1
- homeassistant/components/google_air_quality/translations/zh-Hans.json +11 -81
- homeassistant/components/google_air_quality/translations/zh-Hant.json +13 -1
- homeassistant/components/google_assistant/translations/sr-Latn.json +1 -1
- homeassistant/components/google_assistant_sdk/translations/es.json +0 -3
- homeassistant/components/google_assistant_sdk/translations/tr.json +0 -7
- homeassistant/components/google_generative_ai_conversation/translations/tr.json +0 -6
- homeassistant/components/google_sheets/translations/es.json +0 -4
- homeassistant/components/google_sheets/translations/tr.json +0 -22
- homeassistant/components/google_translate/manifest.json +0 -1
- homeassistant/components/google_weather/translations/es.json +0 -66
- homeassistant/components/google_weather/translations/ga.json +0 -37
- homeassistant/components/gpsd/translations/sr-Latn.json +0 -3
- homeassistant/components/group/notify.py +5 -28
- homeassistant/components/group/translations/sr-Latn.json +12 -154
- homeassistant/components/group/translations/tr.json +1 -19
- homeassistant/components/growatt_server/translations/tr.json +0 -87
- homeassistant/components/habitica/translations/tr.json +0 -76
- homeassistant/components/hassio/const.py +0 -1
- homeassistant/components/hassio/strings.json +1 -1
- homeassistant/components/hassio/translations/cs.json +1 -1
- homeassistant/components/hassio/translations/de.json +1 -1
- homeassistant/components/hassio/translations/el.json +1 -0
- homeassistant/components/hassio/translations/en-GB.json +1 -1
- homeassistant/components/hassio/translations/en.json +1 -1
- homeassistant/components/hassio/translations/es.json +1 -1
- homeassistant/components/hassio/translations/et.json +1 -1
- homeassistant/components/hassio/translations/fr.json +1 -0
- homeassistant/components/hassio/translations/fy.json +3 -0
- homeassistant/components/hassio/translations/ga.json +1 -0
- homeassistant/components/hassio/translations/he.json +1 -0
- homeassistant/components/hassio/translations/id.json +1 -0
- homeassistant/components/hassio/translations/lt.json +1 -1
- homeassistant/components/hassio/translations/mk.json +1 -0
- homeassistant/components/hassio/translations/nl.json +1 -0
- homeassistant/components/hassio/translations/pt.json +1 -0
- homeassistant/components/hassio/translations/ru.json +1 -0
- homeassistant/components/hassio/translations/sk.json +1 -1
- homeassistant/components/hassio/translations/sr-Latn.json +0 -5
- homeassistant/components/hassio/translations/sv.json +1 -0
- homeassistant/components/hassio/translations/tr.json +0 -38
- homeassistant/components/hassio/translations/zh-Hans.json +1 -0
- homeassistant/components/hassio/translations/zh-Hant.json +1 -1
- homeassistant/components/history_stats/translations/sr-Latn.json +3 -85
- homeassistant/components/holiday/translations/pl.json +0 -7
- homeassistant/components/home_connect/manifest.json +0 -1
- homeassistant/components/home_connect/translations/de.json +2 -2
- homeassistant/components/home_connect/translations/es.json +0 -46
- homeassistant/components/home_connect/translations/ga.json +0 -46
- homeassistant/components/home_connect/translations/tr.json +0 -32
- homeassistant/components/homeassistant_connect_zbt2/config_flow.py +17 -0
- homeassistant/components/homeassistant_connect_zbt2/const.py +58 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/es.json +0 -8
- homeassistant/components/homeassistant_connect_zbt2/translations/ga.json +0 -8
- homeassistant/components/homeassistant_connect_zbt2/translations/tr.json +0 -145
- homeassistant/components/homeassistant_hardware/firmware_config_flow.py +73 -81
- homeassistant/components/homeassistant_hardware/translations/es.json +0 -4
- homeassistant/components/homeassistant_hardware/translations/ga.json +0 -4
- homeassistant/components/homeassistant_hardware/translations/tr.json +1 -44
- homeassistant/components/homeassistant_hardware/update.py +10 -13
- homeassistant/components/homeassistant_hardware/util.py +53 -59
- homeassistant/components/homeassistant_sky_connect/translations/es.json +0 -8
- homeassistant/components/homeassistant_sky_connect/translations/ga.json +0 -8
- homeassistant/components/homeassistant_sky_connect/translations/tr.json +0 -71
- homeassistant/components/homeassistant_yellow/translations/es.json +0 -4
- homeassistant/components/homeassistant_yellow/translations/ga.json +0 -4
- homeassistant/components/homeassistant_yellow/translations/tr.json +0 -35
- homeassistant/components/homekit/translations/tr.json +0 -12
- homeassistant/components/homekit_controller/manifest.json +0 -1
- homeassistant/components/homewizard/manifest.json +0 -1
- homeassistant/components/hue/translations/mk.json +1 -3
- homeassistant/components/hue/translations/tr.json +0 -1
- homeassistant/components/hue_ble/strings.json +1 -1
- homeassistant/components/hue_ble/translations/en.json +1 -1
- homeassistant/components/hue_ble/translations/lt.json +1 -1
- homeassistant/components/hue_ble/translations/nl.json +0 -3
- homeassistant/components/hue_ble/translations/pt.json +2 -1
- homeassistant/components/hue_ble/translations/sk.json +1 -1
- homeassistant/components/hue_ble/translations/zh-Hans.json +1 -11
- homeassistant/components/humidifier/translations/mk.json +0 -6
- homeassistant/components/husqvarna_automower/translations/tr.json +0 -88
- homeassistant/components/huum/translations/sr-Latn.json +0 -5
- homeassistant/components/ibeacon/manifest.json +0 -1
- homeassistant/components/icloud/translations/tr.json +0 -3
- homeassistant/components/image/translations/sr-Latn.json +1 -2
- homeassistant/components/imap/translations/tr.json +0 -21
- homeassistant/components/imeon_inverter/translations/en-GB.json +0 -21
- homeassistant/components/incomfort/translations/tr.json +0 -3
- homeassistant/components/input_boolean/translations/mk.json +2 -4
- homeassistant/components/input_number/translations/sr-Latn.json +0 -17
- homeassistant/components/integration/translations/sr-Latn.json +2 -54
- homeassistant/components/iometer/manifest.json +1 -1
- homeassistant/components/iometer/translations/tr.json +1 -3
- homeassistant/components/iron_os/translations/en-GB.json +1 -5
- homeassistant/components/iron_os/translations/es.json +1 -5
- homeassistant/components/jewish_calendar/translations/tr.json +1 -9
- homeassistant/components/kitchen_sink/translations/en-GB.json +0 -2
- homeassistant/components/kitchen_sink/translations/es.json +0 -20
- homeassistant/components/kitchen_sink/translations/et.json +1 -5
- homeassistant/components/kitchen_sink/translations/ga.json +0 -4
- homeassistant/components/kitchen_sink/translations/it.json +0 -12
- homeassistant/components/kitchen_sink/translations/nl.json +0 -4
- homeassistant/components/kitchen_sink/translations/ru.json +0 -8
- homeassistant/components/kitchen_sink/translations/sv.json +0 -3
- homeassistant/components/kitchen_sink/translations/tr.json +0 -4
- homeassistant/components/knx/translations/el.json +0 -43
- homeassistant/components/knx/translations/es.json +0 -3
- homeassistant/components/knx/translations/et.json +0 -3
- homeassistant/components/knx/translations/sk.json +0 -3
- homeassistant/components/knx/translations/tr.json +0 -318
- homeassistant/components/knx/translations/zh-Hans.json +0 -3
- homeassistant/components/konnected/manifest.json +0 -1
- homeassistant/components/konnected/translations/tr.json +0 -6
- homeassistant/components/labs/__init__.py +1 -2
- homeassistant/components/labs/const.py +2 -0
- homeassistant/components/labs/translations/lt.json +1 -1
- homeassistant/components/labs/websocket_api.py +1 -2
- homeassistant/components/lawn_mower/strings.json +12 -8
- homeassistant/components/lawn_mower/translations/cs.json +11 -7
- homeassistant/components/lawn_mower/translations/de.json +11 -7
- homeassistant/components/lawn_mower/translations/en-GB.json +1 -56
- homeassistant/components/lawn_mower/translations/en.json +12 -8
- homeassistant/components/lawn_mower/translations/es.json +1 -56
- homeassistant/components/lawn_mower/translations/et.json +2 -46
- homeassistant/components/lawn_mower/translations/ga.json +1 -48
- homeassistant/components/lawn_mower/translations/lt.json +12 -8
- homeassistant/components/lawn_mower/translations/pt.json +16 -4
- homeassistant/components/lawn_mower/translations/sk.json +12 -8
- homeassistant/components/lawn_mower/translations/tr.json +1 -48
- homeassistant/components/lawn_mower/translations/zh-Hant.json +12 -8
- homeassistant/components/letpot/manifest.json +1 -1
- homeassistant/components/letpot/translations/tr.json +0 -8
- homeassistant/components/lg_thinq/manifest.json +1 -1
- homeassistant/components/lg_thinq/translations/sr-Latn.json +0 -8
- homeassistant/components/lg_thinq/translations/tr.json +0 -20
- homeassistant/components/libre_hardware_monitor/coordinator.py +18 -26
- homeassistant/components/lifx/translations/tr.json +0 -3
- homeassistant/components/light/strings.json +8 -4
- homeassistant/components/light/translations/bg.json +12 -0
- homeassistant/components/light/translations/cs.json +8 -4
- homeassistant/components/light/translations/de.json +6 -2
- homeassistant/components/light/translations/el.json +0 -6
- homeassistant/components/light/translations/en-GB.json +2 -69
- homeassistant/components/light/translations/en.json +8 -4
- homeassistant/components/light/translations/es.json +2 -68
- homeassistant/components/light/translations/et.json +8 -34
- homeassistant/components/light/translations/ga.json +2 -65
- homeassistant/components/light/translations/lt.json +8 -4
- homeassistant/components/light/translations/mk.json +3 -10
- homeassistant/components/light/translations/nl.json +1 -6
- homeassistant/components/light/translations/pt.json +10 -2
- homeassistant/components/light/translations/ru.json +3 -67
- homeassistant/components/light/translations/sk.json +8 -4
- homeassistant/components/light/translations/sr-Latn.json +4 -217
- homeassistant/components/light/translations/tr.json +2 -65
- homeassistant/components/light/translations/zh-Hans.json +10 -2
- homeassistant/components/light/translations/zh-Hant.json +8 -4
- homeassistant/components/litterrobot/translations/tr.json +0 -6
- homeassistant/components/logger/helpers.py +0 -10
- homeassistant/components/logger/websocket_api.py +1 -12
- homeassistant/components/lovelace/translations/es.json +0 -5
- homeassistant/components/lovelace/translations/ga.json +0 -5
- homeassistant/components/mastodon/translations/es.json +0 -7
- homeassistant/components/mastodon/translations/ga.json +0 -7
- homeassistant/components/mastodon/translations/tr.json +0 -4
- homeassistant/components/matrix/translations/tr.json +0 -42
- homeassistant/components/matter/manifest.json +0 -1
- homeassistant/components/matter/translations/es.json +0 -13
- homeassistant/components/matter/translations/ga.json +0 -10
- homeassistant/components/matter/translations/sr-Latn.json +0 -3
- homeassistant/components/matter/translations/tr.json +0 -105
- homeassistant/components/mcp/translations/tr.json +1 -20
- homeassistant/components/mealie/translations/tr.json +0 -11
- homeassistant/components/media_extractor/manifest.json +1 -1
- homeassistant/components/media_player/strings.json +3 -2
- homeassistant/components/media_player/translations/cs.json +3 -2
- homeassistant/components/media_player/translations/de.json +2 -1
- homeassistant/components/media_player/translations/en-GB.json +1 -24
- homeassistant/components/media_player/translations/en.json +3 -2
- homeassistant/components/media_player/translations/es.json +1 -24
- homeassistant/components/media_player/translations/et.json +1 -8
- homeassistant/components/media_player/translations/ga.json +1 -22
- homeassistant/components/media_player/translations/lt.json +3 -2
- homeassistant/components/media_player/translations/mk.json +2 -4
- homeassistant/components/media_player/translations/pt.json +4 -1
- homeassistant/components/media_player/translations/sk.json +3 -2
- homeassistant/components/media_player/translations/tr.json +1 -22
- homeassistant/components/media_player/translations/zh-Hant.json +3 -2
- homeassistant/components/met/manifest.json +0 -1
- homeassistant/components/meteo_france/const.py +0 -1
- homeassistant/components/miele/const.py +7 -9
- homeassistant/components/miele/strings.json +0 -1
- homeassistant/components/miele/translations/cs.json +0 -1
- homeassistant/components/miele/translations/de.json +0 -1
- homeassistant/components/miele/translations/en-GB.json +0 -1
- homeassistant/components/miele/translations/en.json +0 -1
- homeassistant/components/miele/translations/es.json +0 -16
- homeassistant/components/miele/translations/et.json +0 -1
- homeassistant/components/miele/translations/ga.json +0 -14
- homeassistant/components/miele/translations/it.json +0 -1
- homeassistant/components/miele/translations/lt.json +0 -1
- homeassistant/components/miele/translations/sk.json +0 -1
- homeassistant/components/miele/translations/sr-Latn.json +0 -10
- homeassistant/components/miele/translations/tr.json +1 -20
- homeassistant/components/miele/translations/zh-Hant.json +0 -1
- homeassistant/components/min_max/translations/sr-Latn.json +2 -44
- homeassistant/components/mold_indicator/translations/sr-Latn.json +3 -41
- homeassistant/components/motion_blinds/manifest.json +0 -1
- homeassistant/components/mqtt/entity.py +0 -1
- homeassistant/components/mqtt/strings.json +5 -4
- homeassistant/components/mqtt/translations/bg.json +5 -0
- homeassistant/components/mqtt/translations/cs.json +27 -26
- homeassistant/components/mqtt/translations/de.json +8 -7
- homeassistant/components/mqtt/translations/en-GB.json +5 -4
- homeassistant/components/mqtt/translations/en.json +5 -4
- homeassistant/components/mqtt/translations/es.json +8 -91
- homeassistant/components/mqtt/translations/et.json +5 -4
- homeassistant/components/mqtt/translations/fr.json +4 -1
- homeassistant/components/mqtt/translations/ga.json +9 -65
- homeassistant/components/mqtt/translations/he.json +6 -1
- homeassistant/components/mqtt/translations/hu.json +2 -0
- homeassistant/components/mqtt/translations/it.json +7 -2
- homeassistant/components/mqtt/translations/lt.json +5 -4
- homeassistant/components/mqtt/translations/mk.json +0 -6
- homeassistant/components/mqtt/translations/nl.json +6 -1
- homeassistant/components/mqtt/translations/pt.json +6 -3
- homeassistant/components/mqtt/translations/ru.json +6 -6
- homeassistant/components/mqtt/translations/sk.json +5 -4
- homeassistant/components/mqtt/translations/sr-Latn.json +22 -148
- homeassistant/components/mqtt/translations/sv.json +2 -1
- homeassistant/components/mqtt/translations/tr.json +5 -255
- homeassistant/components/mqtt/translations/zh-Hans.json +6 -3
- homeassistant/components/mqtt/translations/zh-Hant.json +5 -4
- homeassistant/components/music_assistant/__init__.py +1 -2
- homeassistant/components/music_assistant/config_flow.py +5 -23
- homeassistant/components/music_assistant/manifest.json +0 -1
- homeassistant/components/music_assistant/translations/bg.json +1 -6
- homeassistant/components/music_assistant/translations/el.json +1 -3
- homeassistant/components/music_assistant/translations/en-GB.json +1 -23
- homeassistant/components/music_assistant/translations/es.json +1 -25
- homeassistant/components/music_assistant/translations/et.json +0 -1
- homeassistant/components/music_assistant/translations/ga.json +1 -24
- homeassistant/components/music_assistant/translations/it.json +1 -26
- homeassistant/components/music_assistant/translations/nl.json +1 -3
- homeassistant/components/music_assistant/translations/ru.json +1 -23
- homeassistant/components/music_assistant/translations/sv.json +1 -3
- homeassistant/components/music_assistant/translations/tr.json +1 -24
- homeassistant/components/music_assistant/translations/zh-Hans.json +0 -16
- homeassistant/components/nasweb/translations/tr.json +0 -7
- homeassistant/components/neato/translations/es.json +0 -5
- homeassistant/components/neato/translations/ga.json +0 -5
- homeassistant/components/neato/translations/tr.json +0 -5
- homeassistant/components/nederlandse_spoorwegen/translations/es.json +0 -10
- homeassistant/components/nederlandse_spoorwegen/translations/tr.json +0 -25
- homeassistant/components/nest/manifest.json +1 -1
- homeassistant/components/nest/translations/es.json +0 -12
- homeassistant/components/nest/translations/tr.json +0 -12
- homeassistant/components/netgear/translations/sr-Latn.json +0 -3
- homeassistant/components/nextdns/translations/tr.json +1 -14
- homeassistant/components/nightscout/translations/tr.json +0 -4
- homeassistant/components/niko_home_control/translations/el.json +0 -18
- homeassistant/components/niko_home_control/translations/es.json +1 -3
- homeassistant/components/niko_home_control/translations/tr.json +1 -10
- homeassistant/components/nina/translations/el.json +0 -6
- homeassistant/components/nina/translations/en-GB.json +0 -8
- homeassistant/components/nina/translations/es.json +0 -8
- homeassistant/components/nina/translations/ga.json +0 -8
- homeassistant/components/nina/translations/tr.json +0 -54
- homeassistant/components/nina/translations/zh-Hans.json +0 -2
- homeassistant/components/nordpool/manifest.json +1 -1
- homeassistant/components/ntfy/translations/tr.json +0 -78
- homeassistant/components/nuki/manifest.json +0 -1
- homeassistant/components/number/translations/sr-Latn.json +0 -181
- homeassistant/components/number/translations/tr.json +0 -6
- homeassistant/components/octoprint/translations/tr.json +0 -10
- homeassistant/components/onboarding/const.py +1 -16
- homeassistant/components/onboarding/views.py +2 -2
- homeassistant/components/onedrive/translations/es.json +0 -3
- homeassistant/components/onewire/translations/tr.json +0 -10
- homeassistant/components/openai_conversation/translations/tr.json +1 -6
- homeassistant/components/opentherm_gw/services.py +2 -17
- homeassistant/components/opentherm_gw/strings.json +3 -3
- homeassistant/components/opentherm_gw/translations/cs.json +3 -3
- homeassistant/components/opentherm_gw/translations/de.json +3 -3
- homeassistant/components/opentherm_gw/translations/el.json +3 -3
- homeassistant/components/opentherm_gw/translations/en-GB.json +3 -3
- homeassistant/components/opentherm_gw/translations/en.json +3 -3
- homeassistant/components/opentherm_gw/translations/es.json +3 -3
- homeassistant/components/opentherm_gw/translations/et.json +3 -3
- homeassistant/components/opentherm_gw/translations/ga.json +3 -0
- homeassistant/components/opentherm_gw/translations/hu.json +3 -0
- homeassistant/components/opentherm_gw/translations/it.json +2 -0
- homeassistant/components/opentherm_gw/translations/ja.json +3 -0
- homeassistant/components/opentherm_gw/translations/lt.json +3 -3
- homeassistant/components/opentherm_gw/translations/nl.json +2 -0
- homeassistant/components/opentherm_gw/translations/pt.json +3 -3
- homeassistant/components/opentherm_gw/translations/ru.json +3 -3
- homeassistant/components/opentherm_gw/translations/sk.json +3 -3
- homeassistant/components/opentherm_gw/translations/sv.json +3 -0
- homeassistant/components/opentherm_gw/translations/tr.json +3 -0
- homeassistant/components/opentherm_gw/translations/zh-Hans.json +3 -3
- homeassistant/components/opentherm_gw/translations/zh-Hant.json +3 -3
- homeassistant/components/openweathermap/translations/tr.json +0 -49
- homeassistant/components/opower/translations/tr.json +1 -33
- homeassistant/components/oralb/manifest.json +0 -1
- homeassistant/components/oralb/translations/tr.json +2 -29
- homeassistant/components/ping/helpers.py +1 -1
- homeassistant/components/ping/manifest.json +0 -1
- homeassistant/components/playstation_network/coordinator.py +7 -14
- homeassistant/components/playstation_network/translations/tr.json +0 -56
- homeassistant/components/plugwise/translations/en-GB.json +1 -1
- homeassistant/components/plugwise/translations/es.json +0 -2
- homeassistant/components/plugwise/translations/sr-Latn.json +0 -12
- homeassistant/components/plugwise/translations/tr.json +1 -11
- homeassistant/components/plum_lightpad/translations/tr.json +1 -8
- homeassistant/components/point/translations/es.json +0 -5
- homeassistant/components/pooldose/translations/en-GB.json +0 -11
- homeassistant/components/pooldose/translations/es.json +0 -68
- homeassistant/components/pooldose/translations/et.json +0 -11
- homeassistant/components/pooldose/translations/ga.json +0 -11
- homeassistant/components/pooldose/translations/it.json +0 -11
- homeassistant/components/pooldose/translations/tr.json +1 -84
- homeassistant/components/pooldose/translations/zh-Hans.json +0 -6
- homeassistant/components/portainer/translations/tr.json +0 -82
- homeassistant/components/probe_plus/translations/tr.json +0 -5
- homeassistant/components/ps4/translations/tr.json +0 -6
- homeassistant/components/qbittorrent/translations/tr.json +0 -4
- homeassistant/components/qbus/translations/tr.json +0 -10
- homeassistant/components/random/translations/es.json +0 -1
- homeassistant/components/random/translations/sr-Latn.json +6 -119
- homeassistant/components/random/translations/tr.json +0 -2
- homeassistant/components/renault/translations/tr.json +0 -12
- homeassistant/components/reolink/manifest.json +1 -2
- homeassistant/components/reolink/translations/pl.json +1 -10
- homeassistant/components/reolink/translations/tr.json +1 -67
- homeassistant/components/rest/manifest.json +0 -1
- homeassistant/components/ridwell/translations/tr.json +0 -22
- homeassistant/components/ring/manifest.json +0 -1
- homeassistant/components/roborock/image.py +2 -5
- homeassistant/components/roborock/manifest.json +1 -2
- homeassistant/components/roborock/roborock_storage.py +10 -29
- homeassistant/components/roborock/translations/tr.json +1 -9
- homeassistant/components/roomba/translations/tr.json +0 -6
- homeassistant/components/satel_integra/translations/sr-Latn.json +1 -2
- homeassistant/components/saunum/translations/el.json +1 -7
- homeassistant/components/saunum/translations/en-GB.json +1 -11
- homeassistant/components/saunum/translations/es.json +1 -38
- homeassistant/components/saunum/translations/et.json +1 -11
- homeassistant/components/saunum/translations/ga.json +1 -38
- homeassistant/components/saunum/translations/mk.json +0 -5
- homeassistant/components/saunum/translations/tr.json +1 -11
- homeassistant/components/schedule/translations/sr-Latn.json +1 -18
- homeassistant/components/scrape/translations/es.json +0 -1
- homeassistant/components/scrape/translations/sr-Latn.json +2 -63
- homeassistant/components/scrape/translations/tr.json +0 -4
- homeassistant/components/sensibo/translations/sr-Latn.json +0 -19
- homeassistant/components/sensor/translations/sr-Latn.json +5 -141
- homeassistant/components/sensor/translations/tr.json +0 -10
- homeassistant/components/senz/manifest.json +0 -1
- homeassistant/components/senz/translations/es.json +1 -17
- homeassistant/components/sfr_box/translations/tr.json +0 -4
- homeassistant/components/shelly/const.py +0 -1
- homeassistant/components/shelly/manifest.json +1 -1
- homeassistant/components/shelly/sensor.py +2 -0
- homeassistant/components/shelly/strings.json +0 -8
- homeassistant/components/shelly/switch.py +1 -0
- homeassistant/components/shelly/translations/bg.json +0 -5
- homeassistant/components/shelly/translations/cs.json +0 -8
- homeassistant/components/shelly/translations/de.json +0 -8
- homeassistant/components/shelly/translations/en-GB.json +0 -8
- homeassistant/components/shelly/translations/en.json +0 -8
- homeassistant/components/shelly/translations/es.json +2 -192
- homeassistant/components/shelly/translations/et.json +1 -10
- homeassistant/components/shelly/translations/fr.json +0 -10
- homeassistant/components/shelly/translations/ga.json +0 -46
- homeassistant/components/shelly/translations/it.json +2 -13
- homeassistant/components/shelly/translations/lt.json +0 -8
- homeassistant/components/shelly/translations/mk.json +0 -3
- homeassistant/components/shelly/translations/nl.json +0 -7
- homeassistant/components/shelly/translations/pl.json +0 -8
- homeassistant/components/shelly/translations/pt.json +0 -8
- homeassistant/components/shelly/translations/ru.json +0 -5
- homeassistant/components/shelly/translations/sk.json +0 -8
- homeassistant/components/shelly/translations/sv.json +9 -189
- homeassistant/components/shelly/translations/tr.json +5 -171
- homeassistant/components/shelly/translations/zh-Hans.json +0 -8
- homeassistant/components/shelly/translations/zh-Hant.json +0 -8
- homeassistant/components/shelly/valve.py +1 -1
- homeassistant/components/siren/translations/mk.json +2 -4
- homeassistant/components/smarla/translations/tr.json +0 -15
- homeassistant/components/smartthings/manifest.json +0 -1
- homeassistant/components/smartthings/translations/es.json +0 -74
- homeassistant/components/smartthings/translations/nl.json +0 -13
- homeassistant/components/smartthings/translations/tr.json +0 -20
- homeassistant/components/smhi/translations/tr.json +0 -19
- homeassistant/components/snoo/translations/tr.json +0 -8
- homeassistant/components/solaredge/translations/tr.json +3 -64
- homeassistant/components/sonos/manifest.json +0 -1
- homeassistant/components/speedtestdotnet/manifest.json +0 -1
- homeassistant/components/spotify/translations/es.json +0 -5
- homeassistant/components/sql/translations/es.json +0 -1
- homeassistant/components/sql/translations/sr-Latn.json +2 -61
- homeassistant/components/sql/translations/tr.json +0 -83
- homeassistant/components/squeezebox/translations/mk.json +0 -5
- homeassistant/components/squeezebox/translations/tr.json +0 -63
- homeassistant/components/starline/translations/sr-Latn.json +0 -7
- homeassistant/components/statistics/translations/sr-Latn.json +2 -118
- homeassistant/components/switch/translations/mk.json +1 -5
- homeassistant/components/switch/translations/sr-Latn.json +1 -2
- homeassistant/components/switch_as_x/translations/sr-Latn.json +3 -27
- homeassistant/components/switchbot/manifest.json +0 -1
- homeassistant/components/switchbot/translations/el.json +1 -2
- homeassistant/components/switchbot/translations/tr.json +0 -34
- homeassistant/components/switchbot_cloud/translations/tr.json +0 -20
- homeassistant/components/synology_dsm/translations/sr-Latn.json +0 -3
- homeassistant/components/system_bridge/translations/tr.json +0 -3
- homeassistant/components/systemmonitor/translations/tr.json +0 -6
- homeassistant/components/tautulli/translations/de.json +1 -1
- homeassistant/components/tedee/manifest.json +0 -1
- homeassistant/components/telegram/translations/de.json +1 -1
- homeassistant/components/telegram/translations/tr.json +0 -6
- homeassistant/components/telegram_bot/translations/tr.json +4 -203
- homeassistant/components/template/__init__.py +1 -31
- homeassistant/components/template/helpers.py +0 -5
- homeassistant/components/template/translations/de.json +4 -4
- homeassistant/components/template/translations/el.json +0 -4
- homeassistant/components/template/translations/es.json +0 -5
- homeassistant/components/template/translations/ga.json +0 -4
- homeassistant/components/template/translations/it.json +0 -4
- homeassistant/components/template/translations/pl.json +0 -37
- homeassistant/components/template/translations/ru.json +0 -4
- homeassistant/components/template/translations/sr-Latn.json +72 -933
- homeassistant/components/template/translations/tr.json +2 -172
- homeassistant/components/template/translations/zh-Hans.json +0 -4
- homeassistant/components/tesla_fleet/manifest.json +0 -1
- homeassistant/components/tesla_fleet/translations/es.json +0 -5
- homeassistant/components/tesla_fleet/translations/sr-Latn.json +0 -5
- homeassistant/components/tesla_wall_connector/translations/es.json +0 -3
- homeassistant/components/tesla_wall_connector/translations/ga.json +0 -3
- homeassistant/components/teslemetry/manifest.json +0 -1
- homeassistant/components/teslemetry/translations/sr-Latn.json +0 -5
- homeassistant/components/teslemetry/translations/tr.json +1 -77
- homeassistant/components/tessie/manifest.json +0 -1
- homeassistant/components/tessie/translations/sr-Latn.json +0 -5
- homeassistant/components/tessie/translations/tr.json +0 -3
- homeassistant/components/text/strings.json +3 -2
- homeassistant/components/text/translations/bg.json +8 -1
- homeassistant/components/text/translations/cs.json +3 -2
- homeassistant/components/text/translations/de.json +3 -2
- homeassistant/components/text/translations/en-GB.json +1 -7
- homeassistant/components/text/translations/en.json +3 -2
- homeassistant/components/text/translations/es.json +1 -7
- homeassistant/components/text/translations/et.json +1 -7
- homeassistant/components/text/translations/lt.json +3 -2
- homeassistant/components/text/translations/pt.json +8 -1
- homeassistant/components/text/translations/sk.json +3 -2
- homeassistant/components/text/translations/sr-Latn.json +2 -4
- homeassistant/components/text/translations/zh-Hant.json +3 -2
- homeassistant/components/tod/translations/sr-Latn.json +1 -16
- homeassistant/components/tolo/translations/tr.json +1 -2
- homeassistant/components/tomorrowio/translations/sr-Latn.json +0 -24
- homeassistant/components/tplink/manifest.json +0 -1
- homeassistant/components/traccar_server/translations/tr.json +0 -12
- homeassistant/components/transmission/translations/tr.json +0 -24
- homeassistant/components/trend/translations/sr-Latn.json +0 -21
- homeassistant/components/tuya/__init__.py +4 -12
- homeassistant/components/tuya/binary_sensor.py +2 -2
- homeassistant/components/tuya/humidifier.py +3 -3
- homeassistant/components/tuya/models.py +20 -18
- homeassistant/components/tuya/translations/es.json +0 -32
- homeassistant/components/tuya/translations/ga.json +0 -6
- homeassistant/components/tuya/translations/sr-Latn.json +0 -45
- homeassistant/components/tuya/translations/tr.json +0 -72
- homeassistant/components/tuya/util.py +9 -11
- homeassistant/components/twitch/translations/es.json +0 -5
- homeassistant/components/ukraine_alarm/translations/tr.json +1 -2
- homeassistant/components/unifi/light.py +29 -62
- homeassistant/components/unifi/translations/es.json +0 -3
- homeassistant/components/unifi/translations/tr.json +0 -5
- homeassistant/components/unifiprotect/camera.py +1 -5
- homeassistant/components/unifiprotect/manifest.json +1 -1
- homeassistant/components/unifiprotect/translations/bg.json +7 -0
- homeassistant/components/unifiprotect/translations/cs.json +1 -1
- homeassistant/components/unifiprotect/translations/de.json +1 -1
- homeassistant/components/unifiprotect/translations/el.json +5 -1
- homeassistant/components/unifiprotect/translations/en-GB.json +1 -11
- homeassistant/components/unifiprotect/translations/en.json +1 -1
- homeassistant/components/unifiprotect/translations/es.json +1 -11
- homeassistant/components/unifiprotect/translations/fi.json +7 -0
- homeassistant/components/unifiprotect/translations/ga.json +10 -10
- homeassistant/components/unifiprotect/translations/lt.json +1 -1
- homeassistant/components/unifiprotect/translations/nl.json +3 -0
- homeassistant/components/unifiprotect/translations/pt.json +10 -0
- homeassistant/components/unifiprotect/translations/sk.json +1 -1
- homeassistant/components/unifiprotect/translations/sr-Latn.json +0 -11
- homeassistant/components/unifiprotect/translations/sv.json +0 -3
- homeassistant/components/unifiprotect/translations/tr.json +0 -10
- homeassistant/components/unifiprotect/translations/zh-Hans.json +3 -2
- homeassistant/components/unifiprotect/translations/zh-Hant.json +1 -1
- homeassistant/components/update/translations/sr-Latn.json +1 -51
- homeassistant/components/utility_meter/translations/sr-Latn.json +2 -63
- homeassistant/components/vacuum/strings.json +12 -8
- homeassistant/components/vacuum/translations/cs.json +12 -8
- homeassistant/components/vacuum/translations/de.json +11 -7
- homeassistant/components/vacuum/translations/en-GB.json +1 -56
- homeassistant/components/vacuum/translations/en.json +12 -8
- homeassistant/components/vacuum/translations/es.json +1 -56
- homeassistant/components/vacuum/translations/et.json +1 -51
- homeassistant/components/vacuum/translations/ga.json +1 -48
- homeassistant/components/vacuum/translations/lt.json +12 -8
- homeassistant/components/vacuum/translations/pt.json +16 -4
- homeassistant/components/vacuum/translations/ru.json +1 -48
- homeassistant/components/vacuum/translations/sk.json +12 -8
- homeassistant/components/vacuum/translations/sv.json +1 -13
- homeassistant/components/vacuum/translations/tr.json +1 -48
- homeassistant/components/vacuum/translations/zh-Hans.json +2 -6
- homeassistant/components/vacuum/translations/zh-Hant.json +12 -8
- homeassistant/components/vegehub/translations/tr.json +0 -5
- homeassistant/components/velux/translations/tr.json +0 -12
- homeassistant/components/vesync/manifest.json +1 -1
- homeassistant/components/vesync/translations/tr.json +0 -11
- homeassistant/components/vicare/translations/es.json +0 -54
- homeassistant/components/vicare/translations/sr-Latn.json +0 -10
- homeassistant/components/vicare/translations/tr.json +0 -21
- homeassistant/components/volvo/translations/es.json +0 -6
- homeassistant/components/volvo/translations/tr.json +0 -142
- homeassistant/components/volvooncall/translations/tr.json +1 -18
- homeassistant/components/waqi/translations/sr-Latn.json +0 -32
- homeassistant/components/waqi/translations/tr.json +0 -40
- homeassistant/components/water_heater/translations/sr-Latn.json +1 -2
- homeassistant/components/weatherflow/translations/tr.json +0 -8
- homeassistant/components/webostv/manifest.json +0 -1
- homeassistant/components/whirlpool/translations/tr.json +0 -81
- homeassistant/components/withings/translations/es.json +0 -5
- homeassistant/components/withings/translations/sr-Latn.json +0 -5
- homeassistant/components/wled/config_flow.py +2 -34
- homeassistant/components/wled/coordinator.py +0 -21
- homeassistant/components/wled/strings.json +2 -15
- homeassistant/components/wled/translations/bg.json +1 -2
- homeassistant/components/wled/translations/cs.json +2 -15
- homeassistant/components/wled/translations/de.json +2 -15
- homeassistant/components/wled/translations/el.json +1 -20
- homeassistant/components/wled/translations/en-GB.json +2 -15
- homeassistant/components/wled/translations/en.json +2 -15
- homeassistant/components/wled/translations/es.json +2 -15
- homeassistant/components/wled/translations/et.json +2 -15
- homeassistant/components/wled/translations/ga.json +1 -6
- homeassistant/components/wled/translations/it.json +1 -6
- homeassistant/components/wled/translations/lt.json +2 -15
- homeassistant/components/wled/translations/nl.json +1 -2
- homeassistant/components/wled/translations/pl.json +1 -8
- homeassistant/components/wled/translations/pt.json +1 -6
- homeassistant/components/wled/translations/ru.json +2 -29
- homeassistant/components/wled/translations/sk.json +2 -15
- homeassistant/components/wled/translations/tr.json +1 -26
- homeassistant/components/wled/translations/zh-Hans.json +1 -6
- homeassistant/components/wled/translations/zh-Hant.json +2 -15
- homeassistant/components/wled/update.py +1 -1
- homeassistant/components/workday/translations/tr.json +0 -5
- homeassistant/components/xbox/translations/es.json +1 -16
- homeassistant/components/xbox/translations/ga.json +1 -10
- homeassistant/components/xbox/translations/tr.json +0 -111
- homeassistant/components/xiaomi_aqara/translations/sr-Latn.json +0 -6
- homeassistant/components/xiaomi_ble/manifest.json +0 -1
- homeassistant/components/yardian/translations/tr.json +0 -16
- homeassistant/components/yolink/translations/tr.json +0 -14
- homeassistant/components/youtube/manifest.json +1 -1
- homeassistant/components/youtube/translations/es.json +0 -5
- homeassistant/components/zha/config_flow.py +6 -2
- homeassistant/components/zha/manifest.json +0 -1
- homeassistant/components/zha/radio_manager.py +2 -2
- homeassistant/components/zha/translations/de.json +1 -1
- homeassistant/components/zha/translations/en-GB.json +0 -44
- homeassistant/components/zha/translations/es.json +0 -44
- homeassistant/components/zha/translations/et.json +0 -42
- homeassistant/components/zha/translations/ga.json +0 -44
- homeassistant/components/zha/translations/it.json +0 -44
- homeassistant/components/zha/translations/mk.json +1 -18
- homeassistant/components/zha/translations/nl.json +0 -8
- homeassistant/components/zha/translations/sr-Latn.json +0 -3
- homeassistant/components/zha/translations/tr.json +2 -213
- homeassistant/components/zha/translations/zh-Hans.json +0 -12
- homeassistant/components/zwave_js/translations/tr.json +0 -17
- homeassistant/const.py +1 -2
- homeassistant/generated/integrations.json +21 -21
- homeassistant/generated/labs.py +2 -2
- homeassistant/helpers/area_registry.py +1 -8
- homeassistant/helpers/condition.py +1 -16
- homeassistant/helpers/entity.py +1 -3
- homeassistant/helpers/floor_registry.py +1 -12
- homeassistant/helpers/trigger.py +1 -16
- homeassistant/package_constraints.txt +4 -4
- {homeassistant-2025.12.0.dist-info → homeassistant-2025.12.0b1.dist-info}/METADATA +2 -2
- {homeassistant-2025.12.0.dist-info → homeassistant-2025.12.0b1.dist-info}/RECORD +897 -983
- homeassistant/components/actron_air/translations/tr.json +0 -27
- homeassistant/components/airobot/translations/es.json +0 -44
- homeassistant/components/airobot/translations/ga.json +0 -40
- homeassistant/components/airobot/translations/it.json +0 -1
- homeassistant/components/airos/translations/tr.json +0 -71
- homeassistant/components/alert/translations/mk.json +0 -10
- homeassistant/components/anglian_water/translations/el.json +0 -20
- homeassistant/components/anglian_water/translations/en-GB.json +0 -55
- homeassistant/components/anglian_water/translations/es.json +0 -55
- homeassistant/components/anglian_water/translations/ga.json +0 -54
- homeassistant/components/anglian_water/translations/sv.json +0 -14
- homeassistant/components/anglian_water/translations/tr.json +0 -54
- homeassistant/components/automation/translations/mk.json +0 -10
- homeassistant/components/backblaze_b2/translations/tr.json +0 -92
- homeassistant/components/binary_sensor/trigger.py +0 -67
- homeassistant/components/binary_sensor/triggers.yaml +0 -25
- homeassistant/components/color_extractor/translations/mk.json +0 -7
- homeassistant/components/compit/translations/tr.json +0 -35
- homeassistant/components/cync/translations/tr.json +0 -46
- homeassistant/components/datetime/translations/sr-Latn.json +0 -17
- homeassistant/components/droplet/translations/tr.json +0 -40
- homeassistant/components/ekeybionyx/translations/tr.json +0 -66
- homeassistant/components/energy/translations/sr-Latn.json +0 -64
- homeassistant/components/energyid/translations/bg.json +0 -7
- homeassistant/components/energyid/translations/el.json +0 -53
- homeassistant/components/energyid/translations/en-GB.json +0 -71
- homeassistant/components/energyid/translations/es.json +0 -71
- homeassistant/components/energyid/translations/ga.json +0 -71
- homeassistant/components/energyid/translations/it.json +0 -71
- homeassistant/components/energyid/translations/nl.json +0 -1
- homeassistant/components/energyid/translations/sv.json +0 -37
- homeassistant/components/energyid/translations/tr.json +0 -71
- homeassistant/components/essent/translations/el.json +0 -9
- homeassistant/components/essent/translations/en-GB.json +0 -70
- homeassistant/components/essent/translations/es.json +0 -70
- homeassistant/components/essent/translations/ga.json +0 -70
- homeassistant/components/essent/translations/tr.json +0 -70
- homeassistant/components/fing/translations/tr.json +0 -24
- homeassistant/components/forked_daapd/translations/sr-Latn.json +0 -8
- homeassistant/components/go2rtc/util.py +0 -12
- homeassistant/components/google_air_quality/translations/el.json +0 -72
- homeassistant/components/google_air_quality/translations/en-GB.json +0 -225
- homeassistant/components/google_air_quality/translations/es.json +0 -239
- homeassistant/components/google_air_quality/translations/fr.json +0 -14
- homeassistant/components/google_air_quality/translations/ga.json +0 -225
- homeassistant/components/google_air_quality/translations/it.json +0 -106
- homeassistant/components/google_air_quality/translations/pl.json +0 -11
- homeassistant/components/google_air_quality/translations/ru.json +0 -33
- homeassistant/components/google_air_quality/translations/sr-Latn.json +0 -35
- homeassistant/components/google_air_quality/translations/sv.json +0 -122
- homeassistant/components/google_air_quality/translations/tr.json +0 -225
- homeassistant/components/hanna/translations/es.json +0 -44
- homeassistant/components/hue_ble/translations/el.json +0 -11
- homeassistant/components/hue_ble/translations/en-GB.json +0 -21
- homeassistant/components/hue_ble/translations/es.json +0 -21
- homeassistant/components/hue_ble/translations/et.json +0 -21
- homeassistant/components/hue_ble/translations/ga.json +0 -20
- homeassistant/components/hue_ble/translations/tr.json +0 -20
- homeassistant/components/hunterdouglas_powerview/translations/sr-Latn.json +0 -9
- homeassistant/components/imeon_inverter/translations/tr.json +0 -57
- homeassistant/components/inels/translations/tr.json +0 -30
- homeassistant/components/irm_kmi/translations/tr.json +0 -21
- homeassistant/components/labs/translations/es.json +0 -3
- homeassistant/components/labs/translations/sr-Latn.json +0 -3
- homeassistant/components/lannouncer/translations/tr.json +0 -8
- homeassistant/components/libre_hardware_monitor/translations/tr.json +0 -23
- homeassistant/components/london_underground/translations/tr.json +0 -38
- homeassistant/components/lunatone/translations/tr.json +0 -36
- homeassistant/components/media_source/translations/tr.json +0 -5
- homeassistant/components/meteo_lt/translations/tr.json +0 -14
- homeassistant/components/nintendo_parental_controls/translations/tr.json +0 -68
- homeassistant/components/notify/translations/sr-Latn.json +0 -3
- homeassistant/components/openrgb/translations/tr.json +0 -84
- homeassistant/components/prowl/translations/tr.json +0 -21
- homeassistant/components/remote/translations/mk.json +0 -10
- homeassistant/components/satel_integra/translations/tr.json +0 -131
- homeassistant/components/saunum/translations/ru.json +0 -9
- homeassistant/components/saunum/translations/sr-Latn.json +0 -9
- homeassistant/components/script/translations/mk.json +0 -10
- homeassistant/components/sftp_storage/translations/tr.json +0 -22
- homeassistant/components/sleep_as_android/translations/tr.json +0 -68
- homeassistant/components/togrill/translations/tr.json +0 -58
- homeassistant/components/uptime_kuma/translations/tr.json +0 -13
- homeassistant/components/vacuum/translations/mk.json +0 -10
- homeassistant/components/victron_ble/translations/es.json +0 -234
- homeassistant/components/victron_remote_monitoring/translations/tr.json +0 -102
- homeassistant/components/water_heater/translations/mk.json +0 -10
- homeassistant/components/zeroconf/translations/tr.json +0 -14
- {homeassistant-2025.12.0.dist-info → homeassistant-2025.12.0b1.dist-info}/WHEEL +0 -0
- {homeassistant-2025.12.0.dist-info → homeassistant-2025.12.0b1.dist-info}/entry_points.txt +0 -0
- {homeassistant-2025.12.0.dist-info → homeassistant-2025.12.0b1.dist-info}/licenses/LICENSE.md +0 -0
- {homeassistant-2025.12.0.dist-info → homeassistant-2025.12.0b1.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
- {homeassistant-2025.12.0.dist-info → homeassistant-2025.12.0b1.dist-info}/top_level.txt +0 -0
|
@@ -4,13 +4,12 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
6
|
from collections.abc import Awaitable, Callable
|
|
7
|
-
from contextlib import suppress
|
|
8
7
|
from datetime import datetime, timedelta
|
|
9
8
|
from enum import Enum
|
|
10
9
|
import logging
|
|
11
10
|
from typing import Any, cast
|
|
12
11
|
|
|
13
|
-
from hass_nabucasa import Cloud
|
|
12
|
+
from hass_nabucasa import Cloud
|
|
14
13
|
import voluptuous as vol
|
|
15
14
|
|
|
16
15
|
from homeassistant.components import alexa, google_assistant
|
|
@@ -79,16 +78,13 @@ from .subscription import async_subscription_info
|
|
|
79
78
|
DEFAULT_MODE = MODE_PROD
|
|
80
79
|
|
|
81
80
|
PLATFORMS = [
|
|
81
|
+
Platform.AI_TASK,
|
|
82
82
|
Platform.BINARY_SENSOR,
|
|
83
|
+
Platform.CONVERSATION,
|
|
83
84
|
Platform.STT,
|
|
84
85
|
Platform.TTS,
|
|
85
86
|
]
|
|
86
87
|
|
|
87
|
-
LLM_PLATFORMS = [
|
|
88
|
-
Platform.AI_TASK,
|
|
89
|
-
Platform.CONVERSATION,
|
|
90
|
-
]
|
|
91
|
-
|
|
92
88
|
SERVICE_REMOTE_CONNECT = "remote_connect"
|
|
93
89
|
SERVICE_REMOTE_DISCONNECT = "remote_disconnect"
|
|
94
90
|
|
|
@@ -435,14 +431,7 @@ def _handle_prefs_updated(hass: HomeAssistant, cloud: Cloud[CloudClient]) -> Non
|
|
|
435
431
|
|
|
436
432
|
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|
437
433
|
"""Set up a config entry."""
|
|
438
|
-
|
|
439
|
-
if (cloud := hass.data[DATA_CLOUD]).is_logged_in:
|
|
440
|
-
with suppress(NabuCasaBaseError):
|
|
441
|
-
await cloud.llm.async_ensure_token()
|
|
442
|
-
platforms += LLM_PLATFORMS
|
|
443
|
-
|
|
444
|
-
await hass.config_entries.async_forward_entry_setups(entry, platforms)
|
|
445
|
-
entry.runtime_data = {"platforms": platforms}
|
|
434
|
+
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
|
446
435
|
stt_tts_entities_added = hass.data[DATA_PLATFORMS_SETUP]["stt_tts_entities_added"]
|
|
447
436
|
stt_tts_entities_added.set()
|
|
448
437
|
|
|
@@ -451,9 +440,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|
|
451
440
|
|
|
452
441
|
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|
453
442
|
"""Unload a config entry."""
|
|
454
|
-
return await hass.config_entries.async_unload_platforms(
|
|
455
|
-
entry, entry.runtime_data["platforms"]
|
|
456
|
-
)
|
|
443
|
+
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|
|
457
444
|
|
|
458
445
|
|
|
459
446
|
@callback
|
|
@@ -6,6 +6,7 @@ import io
|
|
|
6
6
|
from json import JSONDecodeError
|
|
7
7
|
import logging
|
|
8
8
|
|
|
9
|
+
from hass_nabucasa import NabuCasaBaseError
|
|
9
10
|
from hass_nabucasa.llm import (
|
|
10
11
|
LLMAuthenticationError,
|
|
11
12
|
LLMError,
|
|
@@ -19,7 +20,7 @@ from PIL import Image
|
|
|
19
20
|
from homeassistant.components import ai_task, conversation
|
|
20
21
|
from homeassistant.config_entries import ConfigEntry
|
|
21
22
|
from homeassistant.core import HomeAssistant
|
|
22
|
-
from homeassistant.exceptions import HomeAssistantError
|
|
23
|
+
from homeassistant.exceptions import ConfigEntryAuthFailed, HomeAssistantError
|
|
23
24
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|
24
25
|
from homeassistant.util.json import json_loads
|
|
25
26
|
|
|
@@ -93,11 +94,17 @@ async def async_setup_entry(
|
|
|
93
94
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
|
94
95
|
) -> None:
|
|
95
96
|
"""Set up Home Assistant Cloud AI Task entity."""
|
|
96
|
-
cloud
|
|
97
|
-
|
|
97
|
+
if not (cloud := hass.data[DATA_CLOUD]).is_logged_in:
|
|
98
|
+
return
|
|
99
|
+
try:
|
|
100
|
+
await cloud.llm.async_ensure_token()
|
|
101
|
+
except (LLMError, NabuCasaBaseError):
|
|
102
|
+
return
|
|
98
103
|
|
|
104
|
+
async_add_entities([CloudLLMTaskEntity(cloud, config_entry)])
|
|
99
105
|
|
|
100
|
-
|
|
106
|
+
|
|
107
|
+
class CloudLLMTaskEntity(ai_task.AITaskEntity, BaseCloudLLMEntity):
|
|
101
108
|
"""Home Assistant Cloud AI Task entity."""
|
|
102
109
|
|
|
103
110
|
_attr_has_entity_name = True
|
|
@@ -174,7 +181,7 @@ class CloudAITaskEntity(BaseCloudLLMEntity, ai_task.AITaskEntity):
|
|
|
174
181
|
attachments=attachments,
|
|
175
182
|
)
|
|
176
183
|
except LLMAuthenticationError as err:
|
|
177
|
-
raise
|
|
184
|
+
raise ConfigEntryAuthFailed("Cloud LLM authentication failed") from err
|
|
178
185
|
except LLMRateLimitError as err:
|
|
179
186
|
raise HomeAssistantError("Cloud LLM is rate limited") from err
|
|
180
187
|
except LLMResponseError as err:
|
|
@@ -71,7 +71,6 @@ class CloudClient(Interface):
|
|
|
71
71
|
self._google_config_init_lock = asyncio.Lock()
|
|
72
72
|
self._relayer_region: str | None = None
|
|
73
73
|
self._cloud_ice_servers_listener: Callable[[], None] | None = None
|
|
74
|
-
self._ice_servers: list[RTCIceServer] = []
|
|
75
74
|
|
|
76
75
|
@property
|
|
77
76
|
def base_path(self) -> Path:
|
|
@@ -118,11 +117,6 @@ class CloudClient(Interface):
|
|
|
118
117
|
"""Return the connected relayer region."""
|
|
119
118
|
return self._relayer_region
|
|
120
119
|
|
|
121
|
-
@property
|
|
122
|
-
def ice_servers(self) -> list[RTCIceServer]:
|
|
123
|
-
"""Return the current ICE servers."""
|
|
124
|
-
return self._ice_servers
|
|
125
|
-
|
|
126
120
|
async def get_alexa_config(self) -> alexa_config.CloudAlexaConfig:
|
|
127
121
|
"""Return Alexa config."""
|
|
128
122
|
if self._alexa_config is None:
|
|
@@ -209,8 +203,11 @@ class CloudClient(Interface):
|
|
|
209
203
|
ice_servers: list[RTCIceServer],
|
|
210
204
|
) -> Callable[[], None]:
|
|
211
205
|
"""Register cloud ice server."""
|
|
212
|
-
|
|
213
|
-
|
|
206
|
+
|
|
207
|
+
def get_ice_servers() -> list[RTCIceServer]:
|
|
208
|
+
return ice_servers
|
|
209
|
+
|
|
210
|
+
return async_register_ice_servers(self._hass, get_ice_servers)
|
|
214
211
|
|
|
215
212
|
async def async_register_cloud_ice_servers_listener(
|
|
216
213
|
prefs: CloudPreferences,
|
|
@@ -271,7 +268,6 @@ class CloudClient(Interface):
|
|
|
271
268
|
|
|
272
269
|
async def logout_cleanups(self) -> None:
|
|
273
270
|
"""Cleanup some stuff after logout."""
|
|
274
|
-
self._ice_servers = []
|
|
275
271
|
await self.prefs.async_set_username(None)
|
|
276
272
|
|
|
277
273
|
if self._alexa_config:
|
|
@@ -4,6 +4,9 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from typing import Literal
|
|
6
6
|
|
|
7
|
+
from hass_nabucasa import NabuCasaBaseError
|
|
8
|
+
from hass_nabucasa.llm import LLMError
|
|
9
|
+
|
|
7
10
|
from homeassistant.components import conversation
|
|
8
11
|
from homeassistant.config_entries import ConfigEntry
|
|
9
12
|
from homeassistant.const import MATCH_ALL
|
|
@@ -21,13 +24,19 @@ async def async_setup_entry(
|
|
|
21
24
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
|
22
25
|
) -> None:
|
|
23
26
|
"""Set up the Home Assistant Cloud conversation entity."""
|
|
24
|
-
cloud
|
|
27
|
+
if not (cloud := hass.data[DATA_CLOUD]).is_logged_in:
|
|
28
|
+
return
|
|
29
|
+
try:
|
|
30
|
+
await cloud.llm.async_ensure_token()
|
|
31
|
+
except (LLMError, NabuCasaBaseError):
|
|
32
|
+
return
|
|
33
|
+
|
|
25
34
|
async_add_entities([CloudConversationEntity(cloud, config_entry)])
|
|
26
35
|
|
|
27
36
|
|
|
28
37
|
class CloudConversationEntity(
|
|
29
|
-
BaseCloudLLMEntity,
|
|
30
38
|
conversation.ConversationEntity,
|
|
39
|
+
BaseCloudLLMEntity,
|
|
31
40
|
):
|
|
32
41
|
"""Home Assistant Cloud conversation agent."""
|
|
33
42
|
|
|
@@ -8,9 +8,10 @@ import logging
|
|
|
8
8
|
import re
|
|
9
9
|
from typing import Any, Literal, cast
|
|
10
10
|
|
|
11
|
-
from hass_nabucasa import Cloud
|
|
11
|
+
from hass_nabucasa import Cloud
|
|
12
12
|
from hass_nabucasa.llm import (
|
|
13
13
|
LLMAuthenticationError,
|
|
14
|
+
LLMError,
|
|
14
15
|
LLMRateLimitError,
|
|
15
16
|
LLMResponseError,
|
|
16
17
|
LLMServiceError,
|
|
@@ -36,7 +37,7 @@ from voluptuous_openapi import convert
|
|
|
36
37
|
|
|
37
38
|
from homeassistant.components import conversation
|
|
38
39
|
from homeassistant.config_entries import ConfigEntry
|
|
39
|
-
from homeassistant.exceptions import HomeAssistantError
|
|
40
|
+
from homeassistant.exceptions import ConfigEntryAuthFailed, HomeAssistantError
|
|
40
41
|
from homeassistant.helpers import llm
|
|
41
42
|
from homeassistant.helpers.entity import Entity
|
|
42
43
|
from homeassistant.util import slugify
|
|
@@ -561,7 +562,7 @@ class BaseCloudLLMEntity(Entity):
|
|
|
561
562
|
"schema": _format_structured_output(
|
|
562
563
|
structure, chat_log.llm_api
|
|
563
564
|
),
|
|
564
|
-
"strict":
|
|
565
|
+
"strict": True,
|
|
565
566
|
},
|
|
566
567
|
}
|
|
567
568
|
|
|
@@ -600,14 +601,14 @@ class BaseCloudLLMEntity(Entity):
|
|
|
600
601
|
)
|
|
601
602
|
|
|
602
603
|
except LLMAuthenticationError as err:
|
|
603
|
-
raise
|
|
604
|
+
raise ConfigEntryAuthFailed("Cloud LLM authentication failed") from err
|
|
604
605
|
except LLMRateLimitError as err:
|
|
605
606
|
raise HomeAssistantError("Cloud LLM is rate limited") from err
|
|
606
607
|
except LLMResponseError as err:
|
|
607
608
|
raise HomeAssistantError(str(err)) from err
|
|
608
609
|
except LLMServiceError as err:
|
|
609
610
|
raise HomeAssistantError("Error talking to Cloud LLM") from err
|
|
610
|
-
except
|
|
611
|
+
except LLMError as err:
|
|
611
612
|
raise HomeAssistantError(str(err)) from err
|
|
612
613
|
|
|
613
614
|
if not chat_log.unresponded_tool_results:
|
|
@@ -99,7 +99,6 @@ def async_setup(hass: HomeAssistant) -> None:
|
|
|
99
99
|
websocket_api.async_register_command(hass, websocket_hook_delete)
|
|
100
100
|
websocket_api.async_register_command(hass, websocket_remote_connect)
|
|
101
101
|
websocket_api.async_register_command(hass, websocket_remote_disconnect)
|
|
102
|
-
websocket_api.async_register_command(hass, websocket_webrtc_ice_servers)
|
|
103
102
|
|
|
104
103
|
websocket_api.async_register_command(hass, google_assistant_get)
|
|
105
104
|
websocket_api.async_register_command(hass, google_assistant_list)
|
|
@@ -1108,7 +1107,6 @@ async def alexa_sync(
|
|
|
1108
1107
|
|
|
1109
1108
|
|
|
1110
1109
|
@websocket_api.websocket_command({"type": "cloud/tts/info"})
|
|
1111
|
-
@callback
|
|
1112
1110
|
def tts_info(
|
|
1113
1111
|
hass: HomeAssistant,
|
|
1114
1112
|
connection: websocket_api.ActiveConnection,
|
|
@@ -1136,22 +1134,3 @@ def tts_info(
|
|
|
1136
1134
|
)
|
|
1137
1135
|
|
|
1138
1136
|
connection.send_result(msg["id"], {"languages": result})
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
@websocket_api.websocket_command(
|
|
1142
|
-
{
|
|
1143
|
-
vol.Required("type"): "cloud/webrtc/ice_servers",
|
|
1144
|
-
}
|
|
1145
|
-
)
|
|
1146
|
-
@_require_cloud_login
|
|
1147
|
-
@callback
|
|
1148
|
-
def websocket_webrtc_ice_servers(
|
|
1149
|
-
hass: HomeAssistant,
|
|
1150
|
-
connection: websocket_api.ActiveConnection,
|
|
1151
|
-
msg: dict[str, Any],
|
|
1152
|
-
) -> None:
|
|
1153
|
-
"""Handle get WebRTC ICE servers websocket command."""
|
|
1154
|
-
connection.send_result(
|
|
1155
|
-
msg["id"],
|
|
1156
|
-
[server.to_dict() for server in hass.data[DATA_CLOUD].client.ice_servers],
|
|
1157
|
-
)
|
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"entity": {
|
|
3
|
-
"ai_task": {
|
|
4
|
-
"cloud_ai": {
|
|
5
|
-
"name": "Home Assistant Cloud AI"
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
},
|
|
9
2
|
"exceptions": {
|
|
10
3
|
"backup_size_too_large": {
|
|
11
4
|
"message": "El tama\u00f1o de la copia de seguridad de {size}GB es demasiado grande para subirla a Home Assistant Cloud."
|
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"entity": {
|
|
3
|
-
"ai_task": {
|
|
4
|
-
"cloud_ai": {
|
|
5
|
-
"name": "C\u00fant\u00f3ir Baile Cloud AI"
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
},
|
|
9
2
|
"exceptions": {
|
|
10
3
|
"backup_size_too_large": {
|
|
11
4
|
"message": "T\u00e1 an m\u00e9id c\u00faltaca de {size}GB r\u00f3mh\u00f3r le huasl\u00f3d\u00e1il chuig Home Assistant Cloud."
|
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"entity": {
|
|
3
|
-
"ai_task": {
|
|
4
|
-
"cloud_ai": {
|
|
5
|
-
"name": "Home Asistan\u0131 Bulut Yapay Zeka"
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
},
|
|
9
2
|
"exceptions": {
|
|
10
3
|
"backup_size_too_large": {
|
|
11
4
|
"message": "{size} GB'l\u0131k yedekleme boyutu Home Assistant Cloud'a y\u00fcklenemeyecek kadar b\u00fcy\u00fck."
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"config": {
|
|
3
3
|
"abort": {
|
|
4
|
-
"already_configured": "Cihaz zaten yap\u0131land\u0131r\u0131lm\u0131\u015f"
|
|
5
|
-
"reauth_successful": "Kimlik bilgileri ba\u015far\u0131yla g\u00fcncellendi"
|
|
4
|
+
"already_configured": "Cihaz zaten yap\u0131land\u0131r\u0131lm\u0131\u015f"
|
|
6
5
|
},
|
|
7
6
|
"error": {
|
|
8
7
|
"cannot_connect": "Ba\u011flanma hatas\u0131",
|
|
@@ -12,14 +11,6 @@
|
|
|
12
11
|
"unknown": "Beklenmeyen hata"
|
|
13
12
|
},
|
|
14
13
|
"step": {
|
|
15
|
-
"reauth_confirm": {
|
|
16
|
-
"data": {
|
|
17
|
-
"api_key": "API Anahtar\u0131",
|
|
18
|
-
"api_token": "API gizli dizisi"
|
|
19
|
-
},
|
|
20
|
-
"description": "Mevcut Coinbase API anahtar\u0131n\u0131z kullan\u0131mdan kald\u0131r\u0131lan v2 API i\u00e7in g\u00f6r\u00fcn\u00fcyor. L\u00fctfen v3 API i\u00e7in olu\u015fturulmu\u015f yeni bir API anahtar\u0131yla yeniden yap\u0131land\u0131r\u0131n. [Geli\u015ftirici Platformu]'nu ziyaret edin.{developer_url}) i\u00e7in yeni kimlik bilgileri olu\u015fturmak i\u00e7in {account_name}.",
|
|
21
|
-
"title": "Coinbase API kimlik bilgilerini g\u00fcncelleyin"
|
|
22
|
-
},
|
|
23
14
|
"user": {
|
|
24
15
|
"data": {
|
|
25
16
|
"api_key": "API Anahtar\u0131",
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
"already_configured": "Hizmet zaten yap\u0131land\u0131r\u0131lm\u0131\u015f",
|
|
5
5
|
"cannot_connect": "Ba\u011flanma hatas\u0131",
|
|
6
6
|
"invalid_auth": "Ge\u00e7ersiz kimlik do\u011frulama",
|
|
7
|
-
"invalid_pin": "Verilen PIN ge\u00e7ersiz. 4-10 haneli bir say\u0131 olmal\u0131d\u0131r.",
|
|
8
7
|
"reauth_successful": "Yeniden kimlik do\u011frulama ba\u015far\u0131l\u0131 oldu",
|
|
9
8
|
"reconfigure_successful": "Yeniden yap\u0131land\u0131rma ba\u015far\u0131l\u0131 oldu",
|
|
10
9
|
"unknown": "Beklenmeyen hata"
|
|
@@ -12,7 +11,6 @@
|
|
|
12
11
|
"error": {
|
|
13
12
|
"cannot_connect": "Ba\u011flanma hatas\u0131",
|
|
14
13
|
"invalid_auth": "Ge\u00e7ersiz kimlik do\u011frulama",
|
|
15
|
-
"invalid_pin": "Verilen PIN ge\u00e7ersiz. 4-10 haneli bir say\u0131 olmal\u0131d\u0131r.",
|
|
16
14
|
"unknown": "Beklenmeyen hata"
|
|
17
15
|
},
|
|
18
16
|
"flow_title": "{host}",
|
|
@@ -236,9 +236,7 @@ async def async_prepare_agent(
|
|
|
236
236
|
|
|
237
237
|
|
|
238
238
|
async def async_handle_sentence_triggers(
|
|
239
|
-
hass: HomeAssistant,
|
|
240
|
-
user_input: ConversationInput,
|
|
241
|
-
chat_log: ChatLog,
|
|
239
|
+
hass: HomeAssistant, user_input: ConversationInput
|
|
242
240
|
) -> str | None:
|
|
243
241
|
"""Try to match input against sentence triggers and return response text.
|
|
244
242
|
|
|
@@ -247,13 +245,12 @@ async def async_handle_sentence_triggers(
|
|
|
247
245
|
agent = get_agent_manager(hass).default_agent
|
|
248
246
|
assert agent is not None
|
|
249
247
|
|
|
250
|
-
return await agent.async_handle_sentence_triggers(user_input
|
|
248
|
+
return await agent.async_handle_sentence_triggers(user_input)
|
|
251
249
|
|
|
252
250
|
|
|
253
251
|
async def async_handle_intents(
|
|
254
252
|
hass: HomeAssistant,
|
|
255
253
|
user_input: ConversationInput,
|
|
256
|
-
chat_log: ChatLog,
|
|
257
254
|
*,
|
|
258
255
|
intent_filter: Callable[[RecognizeResult], bool] | None = None,
|
|
259
256
|
) -> intent.IntentResponse | None:
|
|
@@ -264,9 +261,7 @@ async def async_handle_intents(
|
|
|
264
261
|
agent = get_agent_manager(hass).default_agent
|
|
265
262
|
assert agent is not None
|
|
266
263
|
|
|
267
|
-
return await agent.async_handle_intents(
|
|
268
|
-
user_input, chat_log, intent_filter=intent_filter
|
|
269
|
-
)
|
|
264
|
+
return await agent.async_handle_intents(user_input, intent_filter=intent_filter)
|
|
270
265
|
|
|
271
266
|
|
|
272
267
|
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|
@@ -431,14 +431,26 @@ class DefaultAgent(ConversationEntity):
|
|
|
431
431
|
) -> ConversationResult:
|
|
432
432
|
"""Handle a message."""
|
|
433
433
|
response: intent.IntentResponse | None = None
|
|
434
|
+
tool_input: llm.ToolInput | None = None
|
|
435
|
+
tool_result: dict[str, Any] = {}
|
|
434
436
|
|
|
435
437
|
# Check if a trigger matched
|
|
436
438
|
if trigger_result := await self.async_recognize_sentence_trigger(user_input):
|
|
437
439
|
# Process callbacks and get response
|
|
438
440
|
response_text = await self._handle_trigger_result(
|
|
439
|
-
trigger_result, user_input
|
|
441
|
+
trigger_result, user_input
|
|
440
442
|
)
|
|
441
443
|
|
|
444
|
+
# Create tool result
|
|
445
|
+
tool_input = llm.ToolInput(
|
|
446
|
+
tool_name="trigger_sentence",
|
|
447
|
+
tool_args={},
|
|
448
|
+
external=True,
|
|
449
|
+
)
|
|
450
|
+
tool_result = {
|
|
451
|
+
"response": response_text,
|
|
452
|
+
}
|
|
453
|
+
|
|
442
454
|
# Convert to conversation result
|
|
443
455
|
response = intent.IntentResponse(
|
|
444
456
|
language=user_input.language or self.hass.config.language
|
|
@@ -450,7 +462,40 @@ class DefaultAgent(ConversationEntity):
|
|
|
450
462
|
intent_result = await self.async_recognize_intent(user_input)
|
|
451
463
|
|
|
452
464
|
response = await self._async_process_intent_result(
|
|
453
|
-
intent_result, user_input
|
|
465
|
+
intent_result, user_input
|
|
466
|
+
)
|
|
467
|
+
|
|
468
|
+
if response.response_type != intent.IntentResponseType.ERROR:
|
|
469
|
+
assert intent_result is not None
|
|
470
|
+
assert intent_result.intent is not None
|
|
471
|
+
# Create external tool call for the intent
|
|
472
|
+
tool_input = llm.ToolInput(
|
|
473
|
+
tool_name=intent_result.intent.name,
|
|
474
|
+
tool_args={
|
|
475
|
+
entity.name: entity.value or entity.text
|
|
476
|
+
for entity in intent_result.entities_list
|
|
477
|
+
},
|
|
478
|
+
external=True,
|
|
479
|
+
)
|
|
480
|
+
# Create tool result from intent response
|
|
481
|
+
tool_result = llm.IntentResponseDict(response)
|
|
482
|
+
|
|
483
|
+
# Add tool call and result to chat log if we have one
|
|
484
|
+
if tool_input is not None:
|
|
485
|
+
chat_log.async_add_assistant_content_without_tools(
|
|
486
|
+
AssistantContent(
|
|
487
|
+
agent_id=user_input.agent_id,
|
|
488
|
+
content=None,
|
|
489
|
+
tool_calls=[tool_input],
|
|
490
|
+
)
|
|
491
|
+
)
|
|
492
|
+
chat_log.async_add_assistant_content_without_tools(
|
|
493
|
+
ToolResultContent(
|
|
494
|
+
agent_id=user_input.agent_id,
|
|
495
|
+
tool_call_id=tool_input.id,
|
|
496
|
+
tool_name=tool_input.tool_name,
|
|
497
|
+
tool_result=tool_result,
|
|
498
|
+
)
|
|
454
499
|
)
|
|
455
500
|
|
|
456
501
|
speech: str = response.speech.get("plain", {}).get("speech", "")
|
|
@@ -469,7 +514,6 @@ class DefaultAgent(ConversationEntity):
|
|
|
469
514
|
self,
|
|
470
515
|
result: RecognizeResult | None,
|
|
471
516
|
user_input: ConversationInput,
|
|
472
|
-
chat_log: ChatLog,
|
|
473
517
|
) -> intent.IntentResponse:
|
|
474
518
|
"""Process user input with intents."""
|
|
475
519
|
language = user_input.language or self.hass.config.language
|
|
@@ -532,21 +576,12 @@ class DefaultAgent(ConversationEntity):
|
|
|
532
576
|
ConversationTraceEventType.TOOL_CALL,
|
|
533
577
|
{
|
|
534
578
|
"intent_name": result.intent.name,
|
|
535
|
-
"slots": {
|
|
579
|
+
"slots": {
|
|
580
|
+
entity.name: entity.value or entity.text
|
|
581
|
+
for entity in result.entities_list
|
|
582
|
+
},
|
|
536
583
|
},
|
|
537
584
|
)
|
|
538
|
-
tool_input = llm.ToolInput(
|
|
539
|
-
tool_name=result.intent.name,
|
|
540
|
-
tool_args={entity.name: entity.value for entity in result.entities_list},
|
|
541
|
-
external=True,
|
|
542
|
-
)
|
|
543
|
-
chat_log.async_add_assistant_content_without_tools(
|
|
544
|
-
AssistantContent(
|
|
545
|
-
agent_id=user_input.agent_id,
|
|
546
|
-
content=None,
|
|
547
|
-
tool_calls=[tool_input],
|
|
548
|
-
)
|
|
549
|
-
)
|
|
550
585
|
|
|
551
586
|
try:
|
|
552
587
|
intent_response = await intent.async_handle(
|
|
@@ -609,16 +644,6 @@ class DefaultAgent(ConversationEntity):
|
|
|
609
644
|
)
|
|
610
645
|
intent_response.async_set_speech(speech)
|
|
611
646
|
|
|
612
|
-
tool_result = llm.IntentResponseDict(intent_response)
|
|
613
|
-
chat_log.async_add_assistant_content_without_tools(
|
|
614
|
-
ToolResultContent(
|
|
615
|
-
agent_id=user_input.agent_id,
|
|
616
|
-
tool_call_id=tool_input.id,
|
|
617
|
-
tool_name=tool_input.tool_name,
|
|
618
|
-
tool_result=tool_result,
|
|
619
|
-
)
|
|
620
|
-
)
|
|
621
|
-
|
|
622
647
|
return intent_response
|
|
623
648
|
|
|
624
649
|
def _recognize(
|
|
@@ -1545,31 +1570,16 @@ class DefaultAgent(ConversationEntity):
|
|
|
1545
1570
|
)
|
|
1546
1571
|
|
|
1547
1572
|
async def _handle_trigger_result(
|
|
1548
|
-
self,
|
|
1549
|
-
result: SentenceTriggerResult,
|
|
1550
|
-
user_input: ConversationInput,
|
|
1551
|
-
chat_log: ChatLog,
|
|
1573
|
+
self, result: SentenceTriggerResult, user_input: ConversationInput
|
|
1552
1574
|
) -> str:
|
|
1553
1575
|
"""Run sentence trigger callbacks and return response text."""
|
|
1576
|
+
|
|
1554
1577
|
# Gather callback responses in parallel
|
|
1555
1578
|
trigger_callbacks = [
|
|
1556
1579
|
self._triggers_details[trigger_id].callback(user_input, trigger_result)
|
|
1557
1580
|
for trigger_id, trigger_result in result.matched_triggers.items()
|
|
1558
1581
|
]
|
|
1559
1582
|
|
|
1560
|
-
tool_input = llm.ToolInput(
|
|
1561
|
-
tool_name="trigger_sentence",
|
|
1562
|
-
tool_args={},
|
|
1563
|
-
external=True,
|
|
1564
|
-
)
|
|
1565
|
-
chat_log.async_add_assistant_content_without_tools(
|
|
1566
|
-
AssistantContent(
|
|
1567
|
-
agent_id=user_input.agent_id,
|
|
1568
|
-
content=None,
|
|
1569
|
-
tool_calls=[tool_input],
|
|
1570
|
-
)
|
|
1571
|
-
)
|
|
1572
|
-
|
|
1573
1583
|
# Use first non-empty result as response.
|
|
1574
1584
|
#
|
|
1575
1585
|
# There may be multiple copies of a trigger running when editing in
|
|
@@ -1598,38 +1608,23 @@ class DefaultAgent(ConversationEntity):
|
|
|
1598
1608
|
f"component.{DOMAIN}.conversation.agent.done", "Done"
|
|
1599
1609
|
)
|
|
1600
1610
|
|
|
1601
|
-
tool_result: dict[str, Any] = {"response": response_text}
|
|
1602
|
-
chat_log.async_add_assistant_content_without_tools(
|
|
1603
|
-
ToolResultContent(
|
|
1604
|
-
agent_id=user_input.agent_id,
|
|
1605
|
-
tool_call_id=tool_input.id,
|
|
1606
|
-
tool_name=tool_input.tool_name,
|
|
1607
|
-
tool_result=tool_result,
|
|
1608
|
-
)
|
|
1609
|
-
)
|
|
1610
|
-
|
|
1611
1611
|
return response_text
|
|
1612
1612
|
|
|
1613
1613
|
async def async_handle_sentence_triggers(
|
|
1614
|
-
self,
|
|
1615
|
-
user_input: ConversationInput,
|
|
1616
|
-
chat_log: ChatLog,
|
|
1614
|
+
self, user_input: ConversationInput
|
|
1617
1615
|
) -> str | None:
|
|
1618
1616
|
"""Try to input sentence against sentence triggers and return response text.
|
|
1619
1617
|
|
|
1620
1618
|
Returns None if no match occurred.
|
|
1621
1619
|
"""
|
|
1622
1620
|
if trigger_result := await self.async_recognize_sentence_trigger(user_input):
|
|
1623
|
-
return await self._handle_trigger_result(
|
|
1624
|
-
trigger_result, user_input, chat_log
|
|
1625
|
-
)
|
|
1621
|
+
return await self._handle_trigger_result(trigger_result, user_input)
|
|
1626
1622
|
|
|
1627
1623
|
return None
|
|
1628
1624
|
|
|
1629
1625
|
async def async_handle_intents(
|
|
1630
1626
|
self,
|
|
1631
1627
|
user_input: ConversationInput,
|
|
1632
|
-
chat_log: ChatLog,
|
|
1633
1628
|
*,
|
|
1634
1629
|
intent_filter: Callable[[RecognizeResult], bool] | None = None,
|
|
1635
1630
|
) -> intent.IntentResponse | None:
|
|
@@ -1645,7 +1640,7 @@ class DefaultAgent(ConversationEntity):
|
|
|
1645
1640
|
# No error message on failed match
|
|
1646
1641
|
return None
|
|
1647
1642
|
|
|
1648
|
-
response = await self._async_process_intent_result(result, user_input
|
|
1643
|
+
response = await self._async_process_intent_result(result, user_input)
|
|
1649
1644
|
if (
|
|
1650
1645
|
response.response_type == intent.IntentResponseType.ERROR
|
|
1651
1646
|
and response.error_code
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
"documentation": "https://www.home-assistant.io/integrations/conversation",
|
|
7
7
|
"integration_type": "entity",
|
|
8
8
|
"quality_scale": "internal",
|
|
9
|
-
"requirements": ["hassil==3.
|
|
9
|
+
"requirements": ["hassil==3.4.0", "home-assistant-intents==2025.11.24"]
|
|
10
10
|
}
|