homeassistant 2025.9.4__py3-none-any.whl → 2025.10.0b0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of homeassistant might be problematic. Click here for more details.
- homeassistant/__main__.py +32 -26
- homeassistant/auth/mfa_modules/notify.py +1 -1
- homeassistant/auth/mfa_modules/totp.py +1 -1
- homeassistant/brands/fritzbox.json +1 -1
- homeassistant/brands/google.json +0 -1
- homeassistant/components/acaia/coordinator.py +2 -0
- homeassistant/components/acaia/manifest.json +1 -1
- homeassistant/components/accuweather/__init__.py +15 -12
- homeassistant/components/accuweather/config_flow.py +47 -0
- homeassistant/components/accuweather/const.py +2 -1
- homeassistant/components/accuweather/coordinator.py +82 -15
- homeassistant/components/accuweather/manifest.json +1 -2
- homeassistant/components/accuweather/strings.json +18 -0
- homeassistant/components/accuweather/translations/bg.json +3 -0
- homeassistant/components/accuweather/translations/ca.json +3 -0
- homeassistant/components/accuweather/translations/cs.json +18 -0
- homeassistant/components/accuweather/translations/de.json +18 -0
- homeassistant/components/accuweather/translations/el.json +3 -0
- homeassistant/components/accuweather/translations/en-GB.json +18 -0
- homeassistant/components/accuweather/translations/en.json +18 -0
- homeassistant/components/accuweather/translations/es.json +18 -0
- homeassistant/components/accuweather/translations/et.json +18 -0
- homeassistant/components/accuweather/translations/ga.json +3 -0
- homeassistant/components/accuweather/translations/he.json +9 -0
- homeassistant/components/accuweather/translations/it.json +3 -0
- homeassistant/components/accuweather/translations/lt.json +18 -0
- homeassistant/components/accuweather/translations/nl.json +3 -0
- homeassistant/components/accuweather/translations/pl.json +18 -0
- homeassistant/components/accuweather/translations/pt.json +18 -0
- homeassistant/components/accuweather/translations/ru.json +3 -0
- homeassistant/components/accuweather/translations/sk.json +18 -0
- homeassistant/components/accuweather/translations/zh-Hans.json +18 -0
- homeassistant/components/accuweather/translations/zh-Hant.json +18 -0
- homeassistant/components/accuweather/weather.py +36 -1
- homeassistant/components/ai_task/__init__.py +9 -37
- homeassistant/components/ai_task/const.py +3 -3
- homeassistant/components/ai_task/entity.py +5 -0
- homeassistant/components/ai_task/http.py +1 -0
- homeassistant/components/ai_task/manifest.json +1 -1
- homeassistant/components/ai_task/media_source.py +20 -69
- homeassistant/components/ai_task/task.py +57 -69
- homeassistant/components/airos/__init__.py +2 -2
- homeassistant/components/airos/binary_sensor.py +2 -2
- homeassistant/components/airos/config_flow.py +2 -2
- homeassistant/components/airos/coordinator.py +4 -4
- homeassistant/components/airos/manifest.json +1 -1
- homeassistant/components/airos/sensor.py +2 -2
- homeassistant/components/airos/translations/pt.json +1 -1
- homeassistant/components/airzone/manifest.json +1 -1
- homeassistant/components/airzone/select.py +19 -1
- homeassistant/components/airzone/strings.json +10 -0
- homeassistant/components/airzone/translations/cs.json +10 -0
- homeassistant/components/airzone/translations/de.json +10 -0
- homeassistant/components/airzone/translations/en-GB.json +10 -0
- homeassistant/components/airzone/translations/en.json +10 -0
- homeassistant/components/airzone/translations/sk.json +10 -0
- homeassistant/components/airzone/translations/zh-Hant.json +10 -0
- homeassistant/components/aladdin_connect/manifest.json +5 -0
- homeassistant/components/aladdin_connect/strings.json +3 -0
- homeassistant/components/aladdin_connect/translations/cs.json +3 -0
- homeassistant/components/aladdin_connect/translations/de.json +3 -0
- homeassistant/components/aladdin_connect/translations/en-GB.json +3 -0
- homeassistant/components/aladdin_connect/translations/en.json +3 -0
- homeassistant/components/aladdin_connect/translations/es.json +3 -0
- homeassistant/components/aladdin_connect/translations/et.json +3 -0
- homeassistant/components/aladdin_connect/translations/ga.json +3 -0
- homeassistant/components/aladdin_connect/translations/it.json +9 -1
- homeassistant/components/aladdin_connect/translations/lt.json +3 -0
- homeassistant/components/aladdin_connect/translations/pt.json +3 -0
- homeassistant/components/aladdin_connect/translations/ru.json +3 -0
- homeassistant/components/aladdin_connect/translations/sk.json +3 -0
- homeassistant/components/aladdin_connect/translations/zh-Hans.json +3 -0
- homeassistant/components/aladdin_connect/translations/zh-Hant.json +3 -0
- homeassistant/components/alarm_control_panel/__init__.py +1 -1
- homeassistant/components/alert/__init__.py +8 -2
- homeassistant/components/alert/entity.py +8 -2
- homeassistant/components/alert/reproduce_state.py +4 -1
- homeassistant/components/alexa_devices/binary_sensor.py +18 -6
- homeassistant/components/alexa_devices/coordinator.py +31 -1
- homeassistant/components/alexa_devices/notify.py +17 -7
- homeassistant/components/alexa_devices/quality_scale.yaml +2 -4
- homeassistant/components/alexa_devices/sensor.py +16 -6
- homeassistant/components/alexa_devices/strings.json +0 -4
- homeassistant/components/alexa_devices/switch.py +16 -6
- homeassistant/components/alexa_devices/translations/cs.json +0 -4
- homeassistant/components/alexa_devices/translations/de.json +0 -4
- homeassistant/components/alexa_devices/translations/en-GB.json +0 -4
- homeassistant/components/alexa_devices/translations/en.json +0 -4
- homeassistant/components/alexa_devices/translations/es.json +0 -4
- homeassistant/components/alexa_devices/translations/et.json +0 -4
- homeassistant/components/alexa_devices/translations/ga.json +0 -4
- homeassistant/components/alexa_devices/translations/lt.json +0 -4
- homeassistant/components/alexa_devices/translations/nl.json +2 -0
- homeassistant/components/alexa_devices/translations/pt.json +3 -7
- homeassistant/components/alexa_devices/translations/sk.json +0 -4
- homeassistant/components/alexa_devices/translations/zh-Hans.json +0 -4
- homeassistant/components/alexa_devices/translations/zh-Hant.json +0 -4
- homeassistant/components/amcrest/services.py +1 -1
- homeassistant/components/analytics/__init__.py +16 -1
- homeassistant/components/analytics/analytics.py +295 -42
- homeassistant/components/analytics/manifest.json +1 -1
- homeassistant/components/androidtv/__init__.py +12 -0
- homeassistant/components/androidtv/media_player.py +1 -39
- homeassistant/components/androidtv/services.py +66 -0
- homeassistant/components/androidtv_remote/config_flow.py +29 -22
- homeassistant/components/androidtv_remote/entity.py +2 -4
- homeassistant/components/androidtv_remote/manifest.json +1 -0
- homeassistant/components/androidtv_remote/media_player.py +10 -2
- homeassistant/components/androidtv_remote/quality_scale.yaml +78 -0
- homeassistant/components/androidtv_remote/strings.json +14 -1
- homeassistant/components/androidtv_remote/translations/cs.json +13 -0
- homeassistant/components/androidtv_remote/translations/de.json +13 -0
- homeassistant/components/androidtv_remote/translations/en-GB.json +13 -0
- homeassistant/components/androidtv_remote/translations/en.json +13 -0
- homeassistant/components/androidtv_remote/translations/es.json +13 -0
- homeassistant/components/androidtv_remote/translations/et.json +13 -0
- homeassistant/components/androidtv_remote/translations/fr.json +6 -0
- homeassistant/components/androidtv_remote/translations/ga.json +13 -0
- homeassistant/components/androidtv_remote/translations/it.json +8 -0
- homeassistant/components/androidtv_remote/translations/lt.json +13 -0
- homeassistant/components/androidtv_remote/translations/pt.json +13 -0
- homeassistant/components/androidtv_remote/translations/ru.json +1 -0
- homeassistant/components/androidtv_remote/translations/sk.json +13 -0
- homeassistant/components/androidtv_remote/translations/zh-Hans.json +13 -0
- homeassistant/components/androidtv_remote/translations/zh-Hant.json +13 -0
- homeassistant/components/aosmith/__init__.py +1 -1
- homeassistant/components/aosmith/icons.json +5 -0
- homeassistant/components/aosmith/manifest.json +1 -1
- homeassistant/components/aosmith/select.py +70 -0
- homeassistant/components/aosmith/strings.json +11 -0
- homeassistant/components/aosmith/translations/bg.json +10 -0
- homeassistant/components/aosmith/translations/ca.json +7 -0
- homeassistant/components/aosmith/translations/cs.json +11 -0
- homeassistant/components/aosmith/translations/de.json +11 -0
- homeassistant/components/aosmith/translations/el.json +7 -0
- homeassistant/components/aosmith/translations/en-GB.json +11 -0
- homeassistant/components/aosmith/translations/en.json +11 -0
- homeassistant/components/aosmith/translations/es.json +11 -0
- homeassistant/components/aosmith/translations/et.json +11 -0
- homeassistant/components/aosmith/translations/ga.json +11 -0
- homeassistant/components/aosmith/translations/he.json +9 -0
- homeassistant/components/aosmith/translations/it.json +13 -0
- homeassistant/components/aosmith/translations/lt.json +11 -0
- homeassistant/components/aosmith/translations/nl.json +9 -0
- homeassistant/components/aosmith/translations/pl.json +13 -0
- homeassistant/components/aosmith/translations/pt.json +11 -0
- homeassistant/components/aosmith/translations/ru.json +11 -0
- homeassistant/components/aosmith/translations/sk.json +11 -0
- homeassistant/components/aosmith/translations/zh-Hans.json +11 -0
- homeassistant/components/aosmith/translations/zh-Hant.json +11 -0
- homeassistant/components/apcupsd/__init__.py +1 -1
- homeassistant/components/apcupsd/coordinator.py +1 -0
- homeassistant/components/apcupsd/manifest.json +2 -2
- homeassistant/components/apcupsd/quality_scale.yaml +1 -4
- homeassistant/components/apcupsd/sensor.py +5 -1
- homeassistant/components/assist_pipeline/__init__.py +2 -0
- homeassistant/components/assist_pipeline/acknowledge.mp3 +0 -0
- homeassistant/components/assist_pipeline/const.py +4 -0
- homeassistant/components/assist_pipeline/manifest.json +1 -1
- homeassistant/components/assist_pipeline/pipeline.py +105 -16
- homeassistant/components/assist_pipeline/select.py +26 -4
- homeassistant/components/assist_pipeline/strings.json +1 -1
- homeassistant/components/assist_pipeline/translations/he.json +1 -0
- homeassistant/components/assist_satellite/entity.py +1 -0
- homeassistant/components/assist_satellite/intent.py +0 -1
- homeassistant/components/assist_satellite/manifest.json +1 -1
- homeassistant/components/asuswrt/bridge.py +14 -0
- homeassistant/components/asuswrt/router.py +2 -0
- homeassistant/components/august/lock.py +13 -19
- homeassistant/components/august/manifest.json +1 -1
- homeassistant/components/backup/http.py +3 -2
- homeassistant/components/backup/strings.json +3 -3
- homeassistant/components/backup/translations/fy.json +24 -0
- homeassistant/components/backup/translations/he.json +2 -0
- homeassistant/components/bayesian/binary_sensor.py +4 -6
- homeassistant/components/bayesian/translations/he.json +6 -3
- homeassistant/components/bayesian/translations/lt.json +3 -0
- homeassistant/components/blue_current/__init__.py +87 -5
- homeassistant/components/blue_current/const.py +6 -0
- homeassistant/components/blue_current/icons.json +5 -0
- homeassistant/components/blue_current/services.yaml +12 -0
- homeassistant/components/blue_current/strings.json +44 -0
- homeassistant/components/blue_current/translations/cs.json +44 -0
- homeassistant/components/blue_current/translations/de.json +44 -0
- homeassistant/components/blue_current/translations/en-GB.json +44 -0
- homeassistant/components/blue_current/translations/en.json +44 -0
- homeassistant/components/blue_current/translations/sk.json +44 -0
- homeassistant/components/blue_current/translations/zh-Hant.json +44 -0
- homeassistant/components/bluesound/manifest.json +1 -1
- homeassistant/components/bluesound/media_player.py +10 -4
- homeassistant/components/bluetooth/__init__.py +2 -0
- homeassistant/components/bluetooth/api.py +23 -3
- homeassistant/components/bluetooth/manager.py +109 -3
- homeassistant/components/bluetooth/strings.json +14 -0
- homeassistant/components/bluetooth/translations/bg.json +5 -0
- homeassistant/components/bluetooth/translations/cs.json +14 -0
- homeassistant/components/bluetooth/translations/de.json +14 -0
- homeassistant/components/bluetooth/translations/el.json +14 -0
- homeassistant/components/bluetooth/translations/en-GB.json +14 -0
- homeassistant/components/bluetooth/translations/en.json +14 -0
- homeassistant/components/bluetooth/translations/es.json +14 -0
- homeassistant/components/bluetooth/translations/et.json +14 -0
- homeassistant/components/bluetooth/translations/fr.json +14 -0
- homeassistant/components/bluetooth/translations/ga.json +14 -0
- homeassistant/components/bluetooth/translations/he.json +5 -0
- homeassistant/components/bluetooth/translations/lt.json +14 -0
- homeassistant/components/bluetooth/translations/pt.json +14 -0
- homeassistant/components/bluetooth/translations/ru.json +14 -0
- homeassistant/components/bluetooth/translations/sk.json +14 -0
- homeassistant/components/bluetooth/translations/zh-Hans.json +14 -0
- homeassistant/components/bluetooth/translations/zh-Hant.json +14 -0
- homeassistant/components/bluetooth/websocket_api.py +123 -24
- homeassistant/components/braviatv/diagnostics.py +2 -0
- homeassistant/components/bring/coordinator.py +1 -0
- homeassistant/components/bring/event.py +3 -2
- homeassistant/components/bring/strings.json +0 -4
- homeassistant/components/bring/translations/bg.json +0 -3
- homeassistant/components/bring/translations/ca.json +0 -3
- homeassistant/components/bring/translations/cs.json +0 -4
- homeassistant/components/bring/translations/de.json +0 -4
- homeassistant/components/bring/translations/el.json +0 -4
- homeassistant/components/bring/translations/en-GB.json +0 -4
- homeassistant/components/bring/translations/en.json +0 -4
- homeassistant/components/bring/translations/es-419.json +0 -4
- homeassistant/components/bring/translations/es.json +0 -4
- homeassistant/components/bring/translations/et.json +0 -4
- homeassistant/components/bring/translations/fi.json +0 -4
- homeassistant/components/bring/translations/ga.json +0 -4
- homeassistant/components/bring/translations/hr.json +0 -4
- homeassistant/components/bring/translations/hu.json +0 -4
- homeassistant/components/bring/translations/it.json +0 -3
- homeassistant/components/bring/translations/ja.json +0 -4
- homeassistant/components/bring/translations/ko.json +0 -3
- homeassistant/components/bring/translations/lt.json +0 -4
- homeassistant/components/bring/translations/pt-BR.json +0 -4
- homeassistant/components/bring/translations/pt.json +0 -4
- homeassistant/components/bring/translations/ru.json +0 -4
- homeassistant/components/bring/translations/sk.json +0 -4
- homeassistant/components/bring/translations/sv.json +0 -4
- homeassistant/components/bring/translations/tr.json +0 -4
- homeassistant/components/bring/translations/zh-Hans.json +0 -4
- homeassistant/components/bring/translations/zh-Hant.json +0 -4
- homeassistant/components/brother/__init__.py +34 -3
- homeassistant/components/brother/config_flow.py +57 -9
- homeassistant/components/brother/const.py +7 -0
- homeassistant/components/brother/manifest.json +1 -1
- homeassistant/components/brother/strings.json +44 -1
- homeassistant/components/brother/translations/bg.json +44 -1
- homeassistant/components/brother/translations/ca.json +21 -0
- homeassistant/components/brother/translations/cs.json +45 -2
- homeassistant/components/brother/translations/de.json +45 -2
- homeassistant/components/brother/translations/el.json +22 -1
- homeassistant/components/brother/translations/en-GB.json +45 -2
- homeassistant/components/brother/translations/en.json +45 -2
- homeassistant/components/brother/translations/es.json +45 -2
- homeassistant/components/brother/translations/et.json +45 -2
- homeassistant/components/brother/translations/ga.json +45 -2
- homeassistant/components/brother/translations/he.json +21 -0
- homeassistant/components/brother/translations/it.json +40 -1
- homeassistant/components/brother/translations/lt.json +45 -2
- homeassistant/components/brother/translations/nl.json +22 -1
- homeassistant/components/brother/translations/pl.json +45 -2
- homeassistant/components/brother/translations/pt.json +45 -2
- homeassistant/components/brother/translations/sk.json +45 -2
- homeassistant/components/brother/translations/sl.json +34 -2
- homeassistant/components/brother/translations/zh-Hans.json +45 -2
- homeassistant/components/brother/translations/zh-Hant.json +45 -2
- homeassistant/components/bsblan/strings.json +2 -2
- homeassistant/components/bthome/manifest.json +1 -1
- homeassistant/components/bthome/sensor.py +10 -0
- homeassistant/components/camera/__init__.py +9 -7
- homeassistant/components/camera/prefs.py +10 -1
- homeassistant/components/cast/discovery.py +2 -1
- homeassistant/components/cast/helpers.py +4 -1
- homeassistant/components/cast/media_player.py +3 -1
- homeassistant/components/climate/intent.py +0 -1
- homeassistant/components/climate/strings.json +3 -3
- homeassistant/components/climate/translations/fr.json +6 -0
- homeassistant/components/cloud/http_api.py +109 -0
- homeassistant/components/cloud/subscription.py +5 -1
- homeassistant/components/comelit/binary_sensor.py +17 -4
- homeassistant/components/comelit/coordinator.py +57 -4
- homeassistant/components/comelit/cover.py +15 -4
- homeassistant/components/comelit/light.py +15 -4
- homeassistant/components/comelit/quality_scale.yaml +2 -6
- homeassistant/components/comelit/sensor.py +35 -17
- homeassistant/components/comelit/switch.py +19 -0
- homeassistant/components/compit/__init__.py +45 -0
- homeassistant/components/compit/climate.py +265 -0
- homeassistant/components/compit/config_flow.py +110 -0
- homeassistant/components/compit/const.py +4 -0
- homeassistant/components/compit/coordinator.py +43 -0
- homeassistant/components/compit/manifest.json +12 -0
- homeassistant/components/compit/quality_scale.yaml +86 -0
- homeassistant/components/compit/strings.json +35 -0
- homeassistant/components/compit/translations/ca.json +25 -0
- homeassistant/components/compit/translations/cs.json +35 -0
- homeassistant/components/compit/translations/de.json +35 -0
- homeassistant/components/compit/translations/en-GB.json +35 -0
- homeassistant/components/compit/translations/en.json +35 -0
- homeassistant/components/compit/translations/es.json +35 -0
- homeassistant/components/compit/translations/et.json +35 -0
- homeassistant/components/compit/translations/ga.json +35 -0
- homeassistant/components/compit/translations/he.json +25 -0
- homeassistant/components/compit/translations/lt.json +35 -0
- homeassistant/components/compit/translations/mk.json +20 -0
- homeassistant/components/compit/translations/nl.json +25 -0
- homeassistant/components/compit/translations/pt.json +35 -0
- homeassistant/components/compit/translations/ru.json +35 -0
- homeassistant/components/compit/translations/sk.json +35 -0
- homeassistant/components/compit/translations/zh-Hans.json +35 -0
- homeassistant/components/compit/translations/zh-Hant.json +35 -0
- homeassistant/components/conversation/__init__.py +11 -14
- homeassistant/components/conversation/agent_manager.py +40 -4
- homeassistant/components/conversation/chat_log.py +6 -2
- homeassistant/components/conversation/const.py +0 -3
- homeassistant/components/conversation/default_agent.py +74 -80
- homeassistant/components/conversation/http.py +7 -5
- homeassistant/components/conversation/icons.json +5 -0
- homeassistant/components/conversation/manifest.json +3 -3
- homeassistant/components/conversation/models.py +4 -0
- homeassistant/components/conversation/trigger.py +32 -4
- homeassistant/components/cover/translations/pl.json +2 -1
- homeassistant/components/cync/__init__.py +58 -0
- homeassistant/components/cync/config_flow.py +118 -0
- homeassistant/components/cync/const.py +9 -0
- homeassistant/components/cync/coordinator.py +87 -0
- homeassistant/components/cync/entity.py +45 -0
- homeassistant/components/cync/light.py +180 -0
- homeassistant/components/cync/manifest.json +11 -0
- homeassistant/components/cync/quality_scale.yaml +69 -0
- homeassistant/components/cync/strings.json +32 -0
- homeassistant/components/cync/translations/de.json +32 -0
- homeassistant/components/cync/translations/en-GB.json +32 -0
- homeassistant/components/cync/translations/en.json +32 -0
- homeassistant/components/cync/translations/he.json +20 -0
- homeassistant/components/debugpy/manifest.json +1 -1
- homeassistant/components/deconz/sensor.py +1 -1
- homeassistant/components/deconz/translations/de.json +1 -1
- homeassistant/components/default_config/manifest.json +2 -0
- homeassistant/components/deluge/const.py +2 -0
- homeassistant/components/deluge/coordinator.py +37 -8
- homeassistant/components/deluge/icons.json +12 -0
- homeassistant/components/deluge/sensor.py +12 -0
- homeassistant/components/deluge/strings.json +8 -0
- homeassistant/components/deluge/translations/cs.json +8 -0
- homeassistant/components/deluge/translations/de.json +8 -0
- homeassistant/components/deluge/translations/en-GB.json +8 -0
- homeassistant/components/deluge/translations/en.json +8 -0
- homeassistant/components/deluge/translations/es.json +8 -0
- homeassistant/components/deluge/translations/et.json +8 -0
- homeassistant/components/deluge/translations/ga.json +8 -0
- homeassistant/components/deluge/translations/lt.json +8 -0
- homeassistant/components/deluge/translations/nl.json +8 -0
- homeassistant/components/deluge/translations/pt.json +8 -0
- homeassistant/components/deluge/translations/sk.json +8 -0
- homeassistant/components/deluge/translations/zh-Hans.json +8 -0
- homeassistant/components/deluge/translations/zh-Hant.json +8 -0
- homeassistant/components/derivative/diagnostics.py +23 -0
- homeassistant/components/derivative/manifest.json +2 -1
- homeassistant/components/derivative/sensor.py +50 -3
- homeassistant/components/droplet/__init__.py +37 -0
- homeassistant/components/droplet/config_flow.py +118 -0
- homeassistant/components/droplet/const.py +11 -0
- homeassistant/components/droplet/coordinator.py +84 -0
- homeassistant/components/droplet/icons.json +15 -0
- homeassistant/components/droplet/manifest.json +11 -0
- homeassistant/components/droplet/quality_scale.yaml +72 -0
- homeassistant/components/droplet/sensor.py +131 -0
- homeassistant/components/droplet/strings.json +46 -0
- homeassistant/components/droplet/translations/bg.json +33 -0
- homeassistant/components/droplet/translations/ca.json +17 -0
- homeassistant/components/droplet/translations/cs.json +52 -0
- homeassistant/components/droplet/translations/de.json +52 -0
- homeassistant/components/droplet/translations/el.json +17 -0
- homeassistant/components/droplet/translations/en-GB.json +52 -0
- homeassistant/components/droplet/translations/en.json +52 -0
- homeassistant/components/droplet/translations/es.json +52 -0
- homeassistant/components/droplet/translations/et.json +52 -0
- homeassistant/components/droplet/translations/ga.json +52 -0
- homeassistant/components/droplet/translations/he.json +17 -0
- homeassistant/components/droplet/translations/lt.json +52 -0
- homeassistant/components/droplet/translations/nl.json +17 -0
- homeassistant/components/droplet/translations/pt.json +52 -0
- homeassistant/components/droplet/translations/sk.json +52 -0
- homeassistant/components/droplet/translations/zh-Hans.json +52 -0
- homeassistant/components/droplet/translations/zh-Hant.json +52 -0
- homeassistant/components/ecobee/strings.json +0 -4
- homeassistant/components/ecobee/translations/bg.json +0 -3
- homeassistant/components/ecobee/translations/ca.json +0 -3
- homeassistant/components/ecobee/translations/cs.json +0 -4
- homeassistant/components/ecobee/translations/de.json +1 -5
- homeassistant/components/ecobee/translations/el.json +0 -4
- homeassistant/components/ecobee/translations/en-GB.json +0 -4
- homeassistant/components/ecobee/translations/en.json +0 -4
- homeassistant/components/ecobee/translations/es.json +0 -4
- homeassistant/components/ecobee/translations/et.json +0 -4
- homeassistant/components/ecobee/translations/ga.json +0 -4
- homeassistant/components/ecobee/translations/he.json +0 -3
- homeassistant/components/ecobee/translations/hu.json +0 -4
- homeassistant/components/ecobee/translations/it.json +0 -3
- homeassistant/components/ecobee/translations/ja.json +0 -3
- homeassistant/components/ecobee/translations/lt.json +0 -4
- homeassistant/components/ecobee/translations/mk.json +0 -9
- homeassistant/components/ecobee/translations/nl.json +0 -7
- homeassistant/components/ecobee/translations/pt-BR.json +0 -7
- homeassistant/components/ecobee/translations/pt.json +0 -4
- homeassistant/components/ecobee/translations/ru.json +0 -4
- homeassistant/components/ecobee/translations/sk.json +0 -4
- homeassistant/components/ecobee/translations/sv.json +0 -4
- homeassistant/components/ecobee/translations/tr.json +0 -3
- homeassistant/components/ecobee/translations/zh-Hans.json +0 -4
- homeassistant/components/ecobee/translations/zh-Hant.json +0 -4
- homeassistant/components/ecovacs/manifest.json +1 -1
- homeassistant/components/ecovacs/number.py +28 -1
- homeassistant/components/ecovacs/select.py +5 -1
- homeassistant/components/ecovacs/strings.json +7 -2
- homeassistant/components/ecovacs/translations/ca.json +0 -1
- homeassistant/components/ecovacs/translations/cs.json +6 -1
- homeassistant/components/ecovacs/translations/de.json +6 -1
- homeassistant/components/ecovacs/translations/el.json +0 -1
- homeassistant/components/ecovacs/translations/en-GB.json +6 -1
- homeassistant/components/ecovacs/translations/en.json +6 -1
- homeassistant/components/ecovacs/translations/es.json +0 -1
- homeassistant/components/ecovacs/translations/et.json +0 -1
- homeassistant/components/ecovacs/translations/fi.json +0 -1
- homeassistant/components/ecovacs/translations/fr.json +0 -1
- homeassistant/components/ecovacs/translations/ga.json +0 -1
- homeassistant/components/ecovacs/translations/hu.json +0 -1
- homeassistant/components/ecovacs/translations/ja.json +0 -1
- homeassistant/components/ecovacs/translations/lt.json +6 -1
- homeassistant/components/ecovacs/translations/pt.json +3 -2
- homeassistant/components/ecovacs/translations/ru.json +0 -1
- homeassistant/components/ecovacs/translations/sk.json +6 -1
- homeassistant/components/ecovacs/translations/sv.json +0 -1
- homeassistant/components/ecovacs/translations/tr.json +0 -1
- homeassistant/components/ecovacs/translations/zh-Hans.json +6 -1
- homeassistant/components/ecovacs/translations/zh-Hant.json +6 -1
- homeassistant/components/ecovacs/util.py +0 -5
- homeassistant/components/ecowitt/sensor.py +33 -0
- homeassistant/components/ekeybionyx/__init__.py +24 -0
- homeassistant/components/ekeybionyx/application_credentials.py +14 -0
- homeassistant/components/ekeybionyx/config_flow.py +271 -0
- homeassistant/components/ekeybionyx/const.py +13 -0
- homeassistant/components/ekeybionyx/event.py +70 -0
- homeassistant/components/ekeybionyx/manifest.json +11 -0
- homeassistant/components/ekeybionyx/quality_scale.yaml +92 -0
- homeassistant/components/ekeybionyx/strings.json +66 -0
- homeassistant/components/ekeybionyx/translations/cs.json +66 -0
- homeassistant/components/ekeybionyx/translations/de.json +66 -0
- homeassistant/components/ekeybionyx/translations/en-GB.json +66 -0
- homeassistant/components/ekeybionyx/translations/en.json +66 -0
- homeassistant/components/ekeybionyx/translations/he.json +24 -0
- homeassistant/components/ekeybionyx/translations/sk.json +66 -0
- homeassistant/components/ekeybionyx/translations/zh-Hant.json +66 -0
- homeassistant/components/elkm1/config_flow.py +85 -3
- homeassistant/components/elkm1/sensor.py +25 -1
- homeassistant/components/elkm1/strings.json +22 -10
- homeassistant/components/elkm1/translations/bg.json +7 -0
- homeassistant/components/elkm1/translations/ca.json +9 -0
- homeassistant/components/elkm1/translations/cs.json +12 -0
- homeassistant/components/elkm1/translations/de.json +12 -0
- homeassistant/components/elkm1/translations/el.json +9 -0
- homeassistant/components/elkm1/translations/en-GB.json +12 -0
- homeassistant/components/elkm1/translations/en.json +12 -0
- homeassistant/components/elkm1/translations/es.json +12 -0
- homeassistant/components/elkm1/translations/et.json +12 -0
- homeassistant/components/elkm1/translations/ga.json +12 -0
- homeassistant/components/elkm1/translations/he.json +8 -1
- homeassistant/components/elkm1/translations/lt.json +12 -0
- homeassistant/components/elkm1/translations/nl.json +9 -0
- homeassistant/components/elkm1/translations/pt.json +12 -0
- homeassistant/components/elkm1/translations/ru.json +21 -1
- homeassistant/components/elkm1/translations/sk.json +12 -0
- homeassistant/components/elkm1/translations/uk.json +7 -0
- homeassistant/components/elkm1/translations/zh-Hans.json +12 -0
- homeassistant/components/elkm1/translations/zh-Hant.json +12 -0
- homeassistant/components/energy/sensor.py +3 -1
- homeassistant/components/energy/validate.py +2 -0
- homeassistant/components/enocean/manifest.json +1 -1
- homeassistant/components/enphase_envoy/diagnostics.py +0 -1
- homeassistant/components/eq3btsmart/__init__.py +1 -1
- homeassistant/components/eq3btsmart/manifest.json +1 -1
- homeassistant/components/esphome/__init__.py +1 -0
- homeassistant/components/esphome/assist_satellite.py +57 -20
- homeassistant/components/esphome/climate.py +38 -5
- homeassistant/components/esphome/config_flow.py +40 -22
- homeassistant/components/esphome/const.py +2 -0
- homeassistant/components/esphome/entry_data.py +47 -12
- homeassistant/components/esphome/icons.json +6 -0
- homeassistant/components/esphome/lock.py +3 -1
- homeassistant/components/esphome/manager.py +1 -1
- homeassistant/components/esphome/manifest.json +1 -1
- homeassistant/components/esphome/select.py +84 -26
- homeassistant/components/esphome/strings.json +7 -6
- homeassistant/components/esphome/translations/cs.json +1 -0
- homeassistant/components/esphome/translations/de.json +1 -0
- homeassistant/components/esphome/translations/en-GB.json +1 -0
- homeassistant/components/esphome/translations/en.json +1 -0
- homeassistant/components/esphome/translations/es.json +1 -0
- homeassistant/components/esphome/translations/et.json +1 -0
- homeassistant/components/esphome/translations/fr.json +9 -0
- homeassistant/components/esphome/translations/ga.json +1 -0
- homeassistant/components/esphome/translations/he.json +11 -2
- homeassistant/components/esphome/translations/lt.json +1 -0
- homeassistant/components/esphome/translations/pt.json +1 -0
- homeassistant/components/esphome/translations/ru.json +1 -0
- homeassistant/components/esphome/translations/sk.json +1 -0
- homeassistant/components/esphome/translations/zh-Hans.json +1 -0
- homeassistant/components/esphome/translations/zh-Hant.json +1 -0
- homeassistant/components/evil_genius_labs/manifest.json +1 -1
- homeassistant/components/evohome/__init__.py +3 -3
- homeassistant/components/ezviz/sensor.py +8 -38
- homeassistant/components/ezviz/strings.json +0 -12
- homeassistant/components/ezviz/translations/cs.json +0 -12
- homeassistant/components/ezviz/translations/de.json +0 -12
- homeassistant/components/ezviz/translations/en-GB.json +0 -12
- homeassistant/components/ezviz/translations/en.json +0 -12
- homeassistant/components/ezviz/translations/es.json +0 -12
- homeassistant/components/ezviz/translations/et.json +0 -12
- homeassistant/components/ezviz/translations/ga.json +0 -12
- homeassistant/components/ezviz/translations/it.json +0 -12
- homeassistant/components/ezviz/translations/lt.json +0 -12
- homeassistant/components/ezviz/translations/pt.json +0 -12
- homeassistant/components/ezviz/translations/sk.json +0 -12
- homeassistant/components/ezviz/translations/sv.json +0 -9
- homeassistant/components/ezviz/translations/zh-Hans.json +0 -12
- homeassistant/components/ezviz/translations/zh-Hant.json +0 -12
- homeassistant/components/feedreader/manifest.json +1 -1
- homeassistant/components/file/__init__.py +11 -0
- homeassistant/components/file/const.py +4 -0
- homeassistant/components/file/icons.json +7 -0
- homeassistant/components/file/services.py +88 -0
- homeassistant/components/file/services.yaml +14 -0
- homeassistant/components/file/strings.json +31 -0
- homeassistant/components/file/translations/cs.json +31 -0
- homeassistant/components/file/translations/de.json +31 -0
- homeassistant/components/file/translations/en-GB.json +31 -0
- homeassistant/components/file/translations/en.json +31 -0
- homeassistant/components/file/translations/fr.json +31 -0
- homeassistant/components/file/translations/lt.json +31 -0
- homeassistant/components/file/translations/sk.json +31 -0
- homeassistant/components/file/translations/zh-Hans.json +31 -0
- homeassistant/components/file/translations/zh-Hant.json +31 -0
- homeassistant/components/fjaraskupan/manifest.json +1 -1
- homeassistant/components/flexit/climate.py +7 -7
- homeassistant/components/flexit_bacnet/sensor.py +5 -0
- homeassistant/components/flo/coordinator.py +1 -1
- homeassistant/components/foscam/__init__.py +2 -1
- homeassistant/components/foscam/coordinator.py +12 -2
- homeassistant/components/foscam/entity.py +2 -0
- homeassistant/components/foscam/icons.json +8 -0
- homeassistant/components/foscam/manifest.json +1 -1
- homeassistant/components/foscam/number.py +93 -0
- homeassistant/components/foscam/strings.json +8 -0
- homeassistant/components/foscam/switch.py +0 -2
- homeassistant/components/foscam/translations/cs.json +8 -0
- homeassistant/components/foscam/translations/de.json +8 -0
- homeassistant/components/foscam/translations/en-GB.json +8 -0
- homeassistant/components/foscam/translations/en.json +8 -0
- homeassistant/components/foscam/translations/es.json +8 -0
- homeassistant/components/foscam/translations/et.json +8 -0
- homeassistant/components/foscam/translations/ga.json +8 -0
- homeassistant/components/foscam/translations/it.json +10 -0
- homeassistant/components/foscam/translations/lt.json +8 -0
- homeassistant/components/foscam/translations/pt.json +8 -0
- homeassistant/components/foscam/translations/sk.json +8 -0
- homeassistant/components/foscam/translations/zh-Hans.json +8 -0
- homeassistant/components/foscam/translations/zh-Hant.json +8 -0
- homeassistant/components/fritz/coordinator.py +2 -2
- homeassistant/components/fritz/entity.py +1 -1
- homeassistant/components/fritz/manifest.json +2 -2
- homeassistant/components/fritz/sensor.py +18 -0
- homeassistant/components/fritz/services.py +4 -3
- homeassistant/components/fritz/strings.json +7 -4
- homeassistant/components/fritz/switch.py +1 -1
- homeassistant/components/fritz/translations/bg.json +3 -0
- homeassistant/components/fritz/translations/cs.json +3 -0
- homeassistant/components/fritz/translations/de.json +3 -0
- homeassistant/components/fritz/translations/en-GB.json +3 -0
- homeassistant/components/fritz/translations/en.json +3 -0
- homeassistant/components/fritz/translations/es.json +3 -0
- homeassistant/components/fritz/translations/et.json +3 -0
- homeassistant/components/fritz/translations/ga.json +3 -0
- homeassistant/components/fritz/translations/it.json +3 -0
- homeassistant/components/fritz/translations/lt.json +3 -0
- homeassistant/components/fritz/translations/nl.json +3 -0
- homeassistant/components/fritz/translations/pt.json +3 -0
- homeassistant/components/fritz/translations/ru.json +9 -2
- homeassistant/components/fritz/translations/sk.json +3 -0
- homeassistant/components/fritz/translations/zh-Hans.json +3 -0
- homeassistant/components/fritz/translations/zh-Hant.json +3 -0
- homeassistant/components/fritzbox/button.py +1 -1
- homeassistant/components/fritzbox/manifest.json +1 -1
- homeassistant/components/fritzbox/strings.json +2 -2
- homeassistant/components/fritzbox/translations/fr.json +2 -1
- homeassistant/components/fritzbox_callmonitor/__init__.py +2 -2
- homeassistant/components/fritzbox_callmonitor/const.py +1 -1
- homeassistant/components/fritzbox_callmonitor/manifest.json +2 -2
- homeassistant/components/fritzbox_callmonitor/strings.json +1 -1
- homeassistant/components/fronius/translations/de.json +4 -4
- homeassistant/components/frontend/__init__.py +35 -13
- homeassistant/components/frontend/manifest.json +1 -1
- homeassistant/components/generic_thermostat/manifest.json +2 -1
- homeassistant/components/geniushub/__init__.py +1 -1
- homeassistant/components/geocaching/entity.py +39 -0
- homeassistant/components/geocaching/icons.json +18 -0
- homeassistant/components/geocaching/sensor.py +95 -14
- homeassistant/components/geocaching/strings.json +30 -5
- homeassistant/components/geocaching/translations/cs.json +20 -5
- homeassistant/components/geocaching/translations/de.json +20 -5
- homeassistant/components/geocaching/translations/en-GB.json +20 -5
- homeassistant/components/geocaching/translations/en.json +20 -5
- homeassistant/components/geocaching/translations/es.json +20 -5
- homeassistant/components/geocaching/translations/et.json +20 -5
- homeassistant/components/geocaching/translations/ga.json +20 -5
- homeassistant/components/geocaching/translations/lt.json +20 -5
- homeassistant/components/geocaching/translations/nl.json +20 -5
- homeassistant/components/geocaching/translations/pt.json +20 -5
- homeassistant/components/geocaching/translations/ru.json +14 -5
- homeassistant/components/geocaching/translations/sk.json +20 -5
- homeassistant/components/geocaching/translations/zh-Hans.json +20 -5
- homeassistant/components/geocaching/translations/zh-Hant.json +20 -5
- homeassistant/components/go2rtc/__init__.py +30 -1
- homeassistant/components/google/__init__.py +0 -8
- homeassistant/components/google/config_flow.py +7 -3
- homeassistant/components/google_cloud/__init__.py +0 -6
- homeassistant/components/google_cloud/config_flow.py +2 -2
- homeassistant/components/google_cloud/strings.json +1 -1
- homeassistant/components/google_generative_ai_conversation/__init__.py +18 -18
- homeassistant/components/google_generative_ai_conversation/ai_task.py +117 -6
- homeassistant/components/google_generative_ai_conversation/const.py +1 -0
- homeassistant/components/google_generative_ai_conversation/entity.py +171 -38
- homeassistant/components/google_generative_ai_conversation/manifest.json +2 -2
- homeassistant/components/google_generative_ai_conversation/services.yaml +0 -4
- homeassistant/components/google_generative_ai_conversation/strings.json +8 -13
- homeassistant/components/google_generative_ai_conversation/translations/bg.json +1 -6
- homeassistant/components/google_generative_ai_conversation/translations/ca.json +1 -6
- homeassistant/components/google_generative_ai_conversation/translations/cs.json +5 -10
- homeassistant/components/google_generative_ai_conversation/translations/de.json +5 -10
- homeassistant/components/google_generative_ai_conversation/translations/el.json +1 -14
- homeassistant/components/google_generative_ai_conversation/translations/en-GB.json +5 -10
- homeassistant/components/google_generative_ai_conversation/translations/en.json +5 -10
- homeassistant/components/google_generative_ai_conversation/translations/es.json +5 -10
- homeassistant/components/google_generative_ai_conversation/translations/et.json +5 -10
- homeassistant/components/google_generative_ai_conversation/translations/fi.json +1 -7
- homeassistant/components/google_generative_ai_conversation/translations/fr.json +5 -10
- homeassistant/components/google_generative_ai_conversation/translations/ga.json +1 -14
- homeassistant/components/google_generative_ai_conversation/translations/he.json +2 -13
- homeassistant/components/google_generative_ai_conversation/translations/hu.json +1 -14
- homeassistant/components/google_generative_ai_conversation/translations/id.json +1 -8
- homeassistant/components/google_generative_ai_conversation/translations/it.json +1 -7
- homeassistant/components/google_generative_ai_conversation/translations/ja.json +1 -7
- homeassistant/components/google_generative_ai_conversation/translations/lt.json +5 -10
- homeassistant/components/google_generative_ai_conversation/translations/nb.json +1 -6
- homeassistant/components/google_generative_ai_conversation/translations/nl.json +0 -5
- homeassistant/components/google_generative_ai_conversation/translations/pl.json +1 -7
- homeassistant/components/google_generative_ai_conversation/translations/pt-BR.json +1 -11
- homeassistant/components/google_generative_ai_conversation/translations/pt.json +5 -10
- homeassistant/components/google_generative_ai_conversation/translations/ru.json +5 -10
- homeassistant/components/google_generative_ai_conversation/translations/sk.json +5 -10
- homeassistant/components/google_generative_ai_conversation/translations/sl.json +1 -14
- homeassistant/components/google_generative_ai_conversation/translations/sv.json +1 -14
- homeassistant/components/google_generative_ai_conversation/translations/tr.json +1 -14
- homeassistant/components/google_generative_ai_conversation/translations/zh-Hans.json +5 -10
- homeassistant/components/google_generative_ai_conversation/translations/zh-Hant.json +5 -10
- homeassistant/components/google_mail/services.py +1 -1
- homeassistant/components/google_photos/media_source.py +1 -2
- homeassistant/components/govee_light_local/manifest.json +1 -1
- homeassistant/components/growatt_server/translations/ru.json +6 -0
- homeassistant/components/habitica/binary_sensor.py +0 -2
- homeassistant/components/habitica/const.py +1 -0
- homeassistant/components/habitica/sensor.py +22 -0
- homeassistant/components/habitica/services.py +11 -0
- homeassistant/components/habitica/services.yaml +11 -0
- homeassistant/components/habitica/strings.json +42 -1
- homeassistant/components/habitica/translations/ca.json +7 -0
- homeassistant/components/habitica/translations/cs.json +41 -0
- homeassistant/components/habitica/translations/de.json +41 -0
- homeassistant/components/habitica/translations/el.json +17 -0
- homeassistant/components/habitica/translations/en-GB.json +41 -0
- homeassistant/components/habitica/translations/en.json +41 -0
- homeassistant/components/habitica/translations/es.json +41 -0
- homeassistant/components/habitica/translations/et.json +41 -0
- homeassistant/components/habitica/translations/ga.json +17 -0
- homeassistant/components/habitica/translations/it.json +1 -0
- homeassistant/components/habitica/translations/lt.json +41 -0
- homeassistant/components/habitica/translations/pt.json +41 -0
- homeassistant/components/habitica/translations/sk.json +41 -0
- homeassistant/components/habitica/translations/zh-Hans.json +41 -0
- homeassistant/components/habitica/translations/zh-Hant.json +41 -0
- homeassistant/components/habitica/util.py +9 -0
- homeassistant/components/hassio/__init__.py +2 -1
- homeassistant/components/hassio/const.py +21 -0
- homeassistant/components/hassio/coordinator.py +13 -0
- homeassistant/components/hassio/http.py +1 -1
- homeassistant/components/hassio/ingress.py +21 -14
- homeassistant/components/hassio/issues.py +30 -5
- homeassistant/components/hassio/manifest.json +1 -1
- homeassistant/components/hassio/repairs.py +3 -13
- homeassistant/components/hassio/strings.json +16 -4
- homeassistant/components/hassio/switch.py +90 -0
- homeassistant/components/hassio/translations/cs.json +12 -0
- homeassistant/components/hassio/translations/de.json +12 -0
- homeassistant/components/hassio/translations/el.json +8 -0
- homeassistant/components/hassio/translations/en-GB.json +12 -0
- homeassistant/components/hassio/translations/en.json +12 -0
- homeassistant/components/hassio/translations/es.json +8 -0
- homeassistant/components/hassio/translations/et.json +8 -0
- homeassistant/components/hassio/translations/fr.json +12 -0
- homeassistant/components/hassio/translations/fy.json +3 -0
- homeassistant/components/hassio/translations/ga.json +8 -0
- homeassistant/components/hassio/translations/he.json +20 -0
- homeassistant/components/hassio/translations/lt.json +12 -0
- homeassistant/components/hassio/translations/mk.json +8 -0
- homeassistant/components/hassio/translations/nl.json +8 -0
- homeassistant/components/hassio/translations/pt.json +8 -0
- homeassistant/components/hassio/translations/ru.json +10 -0
- homeassistant/components/hassio/translations/sk.json +12 -0
- homeassistant/components/hassio/translations/uk.json +3 -0
- homeassistant/components/hassio/translations/zh-Hans.json +12 -0
- homeassistant/components/hassio/translations/zh-Hant.json +12 -0
- homeassistant/components/heos/media_player.py +2 -2
- homeassistant/components/here_travel_time/__init__.py +31 -1
- homeassistant/components/here_travel_time/sensor.py +1 -1
- homeassistant/components/here_travel_time/strings.json +6 -0
- homeassistant/components/here_travel_time/translations/cs.json +6 -0
- homeassistant/components/here_travel_time/translations/de.json +6 -0
- homeassistant/components/here_travel_time/translations/en-GB.json +6 -0
- homeassistant/components/here_travel_time/translations/en.json +6 -0
- homeassistant/components/here_travel_time/translations/fr.json +2 -1
- homeassistant/components/here_travel_time/translations/lt.json +6 -0
- homeassistant/components/here_travel_time/translations/sk.json +6 -0
- homeassistant/components/here_travel_time/translations/zh-Hans.json +6 -0
- homeassistant/components/here_travel_time/translations/zh-Hant.json +6 -0
- homeassistant/components/history_stats/config_flow.py +65 -29
- homeassistant/components/history_stats/diagnostics.py +23 -0
- homeassistant/components/history_stats/strings.json +10 -0
- homeassistant/components/history_stats/translations/bg.json +6 -0
- homeassistant/components/history_stats/translations/ca.json +10 -0
- homeassistant/components/history_stats/translations/cs.json +10 -0
- homeassistant/components/history_stats/translations/de.json +10 -0
- homeassistant/components/history_stats/translations/el.json +10 -0
- homeassistant/components/history_stats/translations/en-GB.json +10 -0
- homeassistant/components/history_stats/translations/en.json +10 -0
- homeassistant/components/history_stats/translations/es.json +10 -0
- homeassistant/components/history_stats/translations/et.json +10 -0
- homeassistant/components/history_stats/translations/ga.json +10 -0
- homeassistant/components/history_stats/translations/he.json +10 -0
- homeassistant/components/history_stats/translations/it.json +10 -0
- homeassistant/components/history_stats/translations/lt.json +10 -0
- homeassistant/components/history_stats/translations/pt.json +10 -0
- homeassistant/components/history_stats/translations/ru.json +10 -0
- homeassistant/components/history_stats/translations/sk.json +10 -0
- homeassistant/components/history_stats/translations/zh-Hans.json +10 -0
- homeassistant/components/history_stats/translations/zh-Hant.json +10 -0
- homeassistant/components/home_connect/__init__.py +0 -1
- homeassistant/components/home_connect/application_credentials.py +0 -10
- homeassistant/components/home_connect/coordinator.py +0 -14
- homeassistant/components/home_connect/icons.json +8 -8
- homeassistant/components/home_connect/strings.json +0 -5
- homeassistant/components/home_connect/translations/ca.json +0 -5
- homeassistant/components/home_connect/translations/cs.json +0 -5
- homeassistant/components/home_connect/translations/de.json +0 -5
- homeassistant/components/home_connect/translations/el.json +0 -5
- homeassistant/components/home_connect/translations/en-GB.json +0 -5
- homeassistant/components/home_connect/translations/en.json +0 -5
- homeassistant/components/home_connect/translations/es.json +0 -5
- homeassistant/components/home_connect/translations/et.json +0 -5
- homeassistant/components/home_connect/translations/fr.json +0 -5
- homeassistant/components/home_connect/translations/ga.json +0 -5
- homeassistant/components/home_connect/translations/hu.json +0 -5
- homeassistant/components/home_connect/translations/it.json +0 -5
- homeassistant/components/home_connect/translations/ja.json +0 -5
- homeassistant/components/home_connect/translations/lt.json +0 -5
- homeassistant/components/home_connect/translations/nl.json +0 -5
- homeassistant/components/home_connect/translations/pt.json +0 -5
- homeassistant/components/home_connect/translations/ru.json +0 -5
- homeassistant/components/home_connect/translations/sk.json +0 -5
- homeassistant/components/home_connect/translations/sv.json +0 -5
- homeassistant/components/home_connect/translations/tr.json +0 -5
- homeassistant/components/home_connect/translations/zh-Hans.json +0 -5
- homeassistant/components/home_connect/translations/zh-Hant.json +0 -5
- homeassistant/components/homeassistant/__init__.py +1 -1
- homeassistant/components/homeassistant/exposed_entities.py +1 -1
- homeassistant/components/homeassistant/scene.py +1 -1
- homeassistant/components/homeassistant_connect_zbt2/__init__.py +71 -0
- homeassistant/components/homeassistant_connect_zbt2/config_flow.py +207 -0
- homeassistant/components/homeassistant_connect_zbt2/const.py +19 -0
- homeassistant/components/homeassistant_connect_zbt2/hardware.py +42 -0
- homeassistant/components/homeassistant_connect_zbt2/manifest.json +18 -0
- homeassistant/components/homeassistant_connect_zbt2/quality_scale.yaml +68 -0
- homeassistant/components/homeassistant_connect_zbt2/strings.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/bg.json +76 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/ca.json +144 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/cs.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/de.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/el.json +166 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/en-GB.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/en.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/es.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/et.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/fr.json +166 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/ga.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/he.json +165 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/lt.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/mk.json +80 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/nl.json +136 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/pl.json +50 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/pt.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/ru.json +163 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/sk.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/zh-Hans.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/translations/zh-Hant.json +228 -0
- homeassistant/components/homeassistant_connect_zbt2/update.py +214 -0
- homeassistant/components/homeassistant_connect_zbt2/util.py +22 -0
- homeassistant/components/homeassistant_hardware/firmware_config_flow.py +352 -257
- homeassistant/components/homeassistant_hardware/manifest.json +1 -1
- homeassistant/components/homeassistant_hardware/strings.json +35 -4
- homeassistant/components/homeassistant_hardware/translations/cs.json +32 -1
- homeassistant/components/homeassistant_hardware/translations/de.json +32 -1
- homeassistant/components/homeassistant_hardware/translations/en-GB.json +32 -1
- homeassistant/components/homeassistant_hardware/translations/en.json +32 -1
- homeassistant/components/homeassistant_hardware/translations/es.json +32 -1
- homeassistant/components/homeassistant_hardware/translations/et.json +32 -1
- homeassistant/components/homeassistant_hardware/translations/fr.json +8 -0
- homeassistant/components/homeassistant_hardware/translations/ga.json +35 -0
- homeassistant/components/homeassistant_hardware/translations/lt.json +32 -1
- homeassistant/components/homeassistant_hardware/translations/mk.json +32 -1
- homeassistant/components/homeassistant_hardware/translations/pt.json +32 -1
- homeassistant/components/homeassistant_hardware/translations/ru.json +39 -0
- homeassistant/components/homeassistant_hardware/translations/sk.json +32 -1
- homeassistant/components/homeassistant_hardware/translations/zh-Hans.json +32 -1
- homeassistant/components/homeassistant_hardware/translations/zh-Hant.json +32 -1
- homeassistant/components/homeassistant_sky_connect/config_flow.py +1 -1
- homeassistant/components/homeassistant_sky_connect/strings.json +64 -2
- homeassistant/components/homeassistant_sky_connect/translations/cs.json +64 -2
- homeassistant/components/homeassistant_sky_connect/translations/de.json +64 -2
- homeassistant/components/homeassistant_sky_connect/translations/en-GB.json +64 -2
- homeassistant/components/homeassistant_sky_connect/translations/en.json +64 -2
- homeassistant/components/homeassistant_sky_connect/translations/es.json +64 -2
- homeassistant/components/homeassistant_sky_connect/translations/et.json +64 -2
- homeassistant/components/homeassistant_sky_connect/translations/fr.json +8 -8
- homeassistant/components/homeassistant_sky_connect/translations/ga.json +64 -2
- homeassistant/components/homeassistant_sky_connect/translations/lt.json +64 -2
- homeassistant/components/homeassistant_sky_connect/translations/mk.json +76 -0
- homeassistant/components/homeassistant_sky_connect/translations/pt.json +64 -2
- homeassistant/components/homeassistant_sky_connect/translations/ru.json +70 -8
- homeassistant/components/homeassistant_sky_connect/translations/sk.json +64 -2
- homeassistant/components/homeassistant_sky_connect/translations/zh-Hans.json +64 -2
- homeassistant/components/homeassistant_sky_connect/translations/zh-Hant.json +64 -2
- homeassistant/components/homeassistant_yellow/config_flow.py +2 -2
- homeassistant/components/homeassistant_yellow/strings.json +32 -1
- homeassistant/components/homeassistant_yellow/translations/cs.json +32 -1
- homeassistant/components/homeassistant_yellow/translations/de.json +32 -1
- homeassistant/components/homeassistant_yellow/translations/en-GB.json +32 -1
- homeassistant/components/homeassistant_yellow/translations/en.json +32 -1
- homeassistant/components/homeassistant_yellow/translations/es.json +32 -1
- homeassistant/components/homeassistant_yellow/translations/et.json +32 -1
- homeassistant/components/homeassistant_yellow/translations/fa.json +11 -1
- homeassistant/components/homeassistant_yellow/translations/fr.json +4 -4
- homeassistant/components/homeassistant_yellow/translations/ga.json +32 -1
- homeassistant/components/homeassistant_yellow/translations/lt.json +32 -1
- homeassistant/components/homeassistant_yellow/translations/mk.json +41 -1
- homeassistant/components/homeassistant_yellow/translations/pt.json +32 -1
- homeassistant/components/homeassistant_yellow/translations/ru.json +35 -4
- homeassistant/components/homeassistant_yellow/translations/sk.json +32 -1
- homeassistant/components/homeassistant_yellow/translations/zh-Hans.json +32 -1
- homeassistant/components/homeassistant_yellow/translations/zh-Hant.json +32 -1
- homeassistant/components/homee/alarm_control_panel.py +18 -7
- homeassistant/components/homee/binary_sensor.py +20 -8
- homeassistant/components/homee/button.py +16 -6
- homeassistant/components/homee/climate.py +16 -6
- homeassistant/components/homee/cover.py +14 -6
- homeassistant/components/homee/event.py +16 -6
- homeassistant/components/homee/fan.py +16 -6
- homeassistant/components/homee/helpers.py +31 -0
- homeassistant/components/homee/light.py +15 -5
- homeassistant/components/homee/lock.py +18 -8
- homeassistant/components/homee/manifest.json +1 -1
- homeassistant/components/homee/number.py +16 -6
- homeassistant/components/homee/quality_scale.yaml +1 -1
- homeassistant/components/homee/select.py +16 -6
- homeassistant/components/homee/sensor.py +40 -23
- homeassistant/components/homee/siren.py +18 -7
- homeassistant/components/homee/switch.py +25 -16
- homeassistant/components/homee/valve.py +16 -6
- homeassistant/components/homekit/type_switches.py +56 -4
- homeassistant/components/homekit_controller/connection.py +8 -1
- homeassistant/components/homekit_controller/manifest.json +1 -1
- homeassistant/components/homekit_controller/utils.py +1 -1
- homeassistant/components/homematic/strings.json +5 -5
- homeassistant/components/homematic/translations/fr.json +1 -0
- homeassistant/components/homematic/translations/ru.json +5 -0
- homeassistant/components/homematicip_cloud/services.py +1 -1
- homeassistant/components/homewizard/number.py +1 -1
- homeassistant/components/homewizard/sensor.py +11 -8
- homeassistant/components/honeywell/strings.json +1 -1
- homeassistant/components/honeywell/translations/cs.json +3 -0
- homeassistant/components/honeywell/translations/es.json +3 -0
- homeassistant/components/honeywell/translations/et.json +3 -0
- homeassistant/components/honeywell/translations/lt.json +3 -0
- homeassistant/components/honeywell/translations/pt.json +3 -0
- homeassistant/components/honeywell/translations/ru.json +3 -0
- homeassistant/components/honeywell/translations/sk.json +3 -0
- homeassistant/components/honeywell/translations/zh-Hans.json +3 -0
- homeassistant/components/honeywell/translations/zh-Hant.json +3 -0
- homeassistant/components/huawei_lte/quality_scale.yaml +88 -0
- homeassistant/components/hue/event.py +28 -3
- homeassistant/components/hue/manifest.json +2 -2
- homeassistant/components/hue/services.py +1 -1
- homeassistant/components/hue/strings.json +1 -1
- homeassistant/components/hue/v2/binary_sensor.py +127 -4
- homeassistant/components/hue/v2/device.py +7 -4
- homeassistant/components/hue/v2/group.py +11 -2
- homeassistant/components/hue/v2/helpers.py +6 -5
- homeassistant/components/hue/v2/light.py +25 -15
- homeassistant/components/hue/v2/sensor.py +67 -2
- homeassistant/components/hunterdouglas_powerview/manifest.json +1 -1
- homeassistant/components/husqvarna_automower/coordinator.py +19 -20
- homeassistant/components/husqvarna_automower/translations/pt.json +1 -1
- homeassistant/components/husqvarna_automower_ble/config_flow.py +43 -35
- homeassistant/components/icloud/manifest.json +1 -1
- homeassistant/components/icloud/strings.json +8 -7
- homeassistant/components/icloud/translations/bg.json +3 -0
- homeassistant/components/icloud/translations/ca.json +2 -1
- homeassistant/components/icloud/translations/cs.json +2 -1
- homeassistant/components/icloud/translations/de.json +2 -1
- homeassistant/components/icloud/translations/el.json +2 -1
- homeassistant/components/icloud/translations/en-GB.json +2 -1
- homeassistant/components/icloud/translations/en.json +2 -1
- homeassistant/components/icloud/translations/es.json +2 -1
- homeassistant/components/icloud/translations/et.json +2 -1
- homeassistant/components/icloud/translations/fr.json +4 -0
- homeassistant/components/icloud/translations/ga.json +3 -0
- homeassistant/components/icloud/translations/he.json +6 -1
- homeassistant/components/icloud/translations/lt.json +2 -1
- homeassistant/components/icloud/translations/nl.json +3 -0
- homeassistant/components/icloud/translations/pt.json +10 -5
- homeassistant/components/icloud/translations/ru.json +12 -5
- homeassistant/components/icloud/translations/sk.json +2 -1
- homeassistant/components/icloud/translations/zh-Hans.json +2 -1
- homeassistant/components/icloud/translations/zh-Hant.json +2 -1
- homeassistant/components/image/__init__.py +14 -0
- homeassistant/components/image_upload/__init__.py +2 -2
- homeassistant/components/image_upload/const.py +1 -0
- homeassistant/components/image_upload/media_source.py +13 -2
- homeassistant/components/imeon_inverter/const.py +8 -0
- homeassistant/components/imeon_inverter/icons.json +5 -0
- homeassistant/components/imeon_inverter/select.py +72 -0
- homeassistant/components/imeon_inverter/strings.json +12 -1
- homeassistant/components/imeon_inverter/translations/bg.json +9 -0
- homeassistant/components/imeon_inverter/translations/cs.json +12 -1
- homeassistant/components/imeon_inverter/translations/de.json +12 -1
- homeassistant/components/imeon_inverter/translations/en-GB.json +12 -1
- homeassistant/components/imeon_inverter/translations/en.json +12 -1
- homeassistant/components/imeon_inverter/translations/es.json +12 -1
- homeassistant/components/imeon_inverter/translations/et.json +12 -1
- homeassistant/components/imeon_inverter/translations/fr.json +0 -1
- homeassistant/components/imeon_inverter/translations/ga.json +12 -1
- homeassistant/components/imeon_inverter/translations/it.json +10 -0
- homeassistant/components/imeon_inverter/translations/lt.json +12 -1
- homeassistant/components/imeon_inverter/translations/pt.json +12 -1
- homeassistant/components/imeon_inverter/translations/sk.json +12 -1
- homeassistant/components/imeon_inverter/translations/zh-Hans.json +12 -1
- homeassistant/components/imeon_inverter/translations/zh-Hant.json +12 -1
- homeassistant/components/imgw_pib/manifest.json +1 -1
- homeassistant/components/immich/media_source.py +1 -2
- homeassistant/components/improv_ble/strings.json +1 -1
- homeassistant/components/improv_ble/translations/fr.json +1 -0
- homeassistant/components/improv_ble/translations/ru.json +1 -0
- homeassistant/components/input_select/services.yaml +4 -1
- homeassistant/components/integration/__init__.py +1 -8
- homeassistant/components/integration/config_flow.py +1 -0
- homeassistant/components/intent/manifest.json +1 -1
- homeassistant/components/irm_kmi/__init__.py +40 -0
- homeassistant/components/irm_kmi/config_flow.py +132 -0
- homeassistant/components/irm_kmi/const.py +102 -0
- homeassistant/components/irm_kmi/coordinator.py +95 -0
- homeassistant/components/irm_kmi/data.py +17 -0
- homeassistant/components/irm_kmi/entity.py +28 -0
- homeassistant/components/irm_kmi/manifest.json +13 -0
- homeassistant/components/irm_kmi/quality_scale.yaml +86 -0
- homeassistant/components/irm_kmi/strings.json +50 -0
- homeassistant/components/irm_kmi/translations/cs.json +50 -0
- homeassistant/components/irm_kmi/translations/de.json +50 -0
- homeassistant/components/irm_kmi/translations/en-GB.json +50 -0
- homeassistant/components/irm_kmi/translations/en.json +50 -0
- homeassistant/components/irm_kmi/translations/es.json +50 -0
- homeassistant/components/irm_kmi/translations/et.json +50 -0
- homeassistant/components/irm_kmi/translations/he.json +39 -0
- homeassistant/components/irm_kmi/translations/lt.json +50 -0
- homeassistant/components/irm_kmi/translations/nl.json +39 -0
- homeassistant/components/irm_kmi/translations/pt.json +50 -0
- homeassistant/components/irm_kmi/translations/sk.json +50 -0
- homeassistant/components/irm_kmi/translations/zh-Hans.json +50 -0
- homeassistant/components/irm_kmi/translations/zh-Hant.json +50 -0
- homeassistant/components/irm_kmi/utils.py +18 -0
- homeassistant/components/irm_kmi/weather.py +158 -0
- homeassistant/components/iron_os/manifest.json +1 -1
- homeassistant/components/isal/manifest.json +1 -1
- homeassistant/components/iskra/manifest.json +1 -1
- homeassistant/components/ista_ecotrend/manifest.json +1 -1
- homeassistant/components/jewish_calendar/quality_scale.yaml +100 -0
- homeassistant/components/kitchen_sink/__init__.py +15 -0
- homeassistant/components/knx/diagnostics.py +4 -2
- homeassistant/components/kodi/config_flow.py +0 -22
- homeassistant/components/kodi/media_player.py +3 -101
- homeassistant/components/lacrosse/sensor.py +1 -1
- homeassistant/components/lannouncer/notify.py +20 -2
- homeassistant/components/lannouncer/strings.json +8 -0
- homeassistant/components/lannouncer/translations/cs.json +8 -0
- homeassistant/components/lannouncer/translations/de.json +8 -0
- homeassistant/components/lannouncer/translations/en-GB.json +8 -0
- homeassistant/components/lannouncer/translations/en.json +8 -0
- homeassistant/components/lannouncer/translations/es.json +8 -0
- homeassistant/components/lannouncer/translations/et.json +8 -0
- homeassistant/components/lannouncer/translations/ga.json +8 -0
- homeassistant/components/lannouncer/translations/it.json +8 -0
- homeassistant/components/lannouncer/translations/lt.json +8 -0
- homeassistant/components/lannouncer/translations/pt.json +8 -0
- homeassistant/components/lannouncer/translations/sk.json +8 -0
- homeassistant/components/lannouncer/translations/zh-Hans.json +8 -0
- homeassistant/components/lannouncer/translations/zh-Hant.json +8 -0
- homeassistant/components/lawn_mower/intent.py +37 -0
- homeassistant/components/lcn/manifest.json +1 -1
- homeassistant/components/lcn/strings.json +0 -52
- homeassistant/components/lcn/translations/bg.json +0 -52
- homeassistant/components/lcn/translations/ca.json +0 -52
- homeassistant/components/lcn/translations/cs.json +0 -52
- homeassistant/components/lcn/translations/de.json +0 -52
- homeassistant/components/lcn/translations/el.json +0 -52
- homeassistant/components/lcn/translations/en-GB.json +0 -52
- homeassistant/components/lcn/translations/en.json +0 -52
- homeassistant/components/lcn/translations/es.json +0 -52
- homeassistant/components/lcn/translations/et.json +0 -52
- homeassistant/components/lcn/translations/fi.json +0 -52
- homeassistant/components/lcn/translations/ga.json +0 -52
- homeassistant/components/lcn/translations/gl.json +0 -10
- homeassistant/components/lcn/translations/hu.json +0 -52
- homeassistant/components/lcn/translations/it.json +0 -52
- homeassistant/components/lcn/translations/ja.json +0 -52
- homeassistant/components/lcn/translations/ko.json +0 -52
- homeassistant/components/lcn/translations/lt.json +0 -52
- homeassistant/components/lcn/translations/nl.json +0 -7
- homeassistant/components/lcn/translations/pt.json +0 -52
- homeassistant/components/lcn/translations/ru.json +0 -52
- homeassistant/components/lcn/translations/sk.json +0 -52
- homeassistant/components/lcn/translations/sv.json +0 -52
- homeassistant/components/lcn/translations/tr.json +0 -52
- homeassistant/components/lcn/translations/vi.json +0 -11
- homeassistant/components/lcn/translations/zh-Hans.json +0 -52
- homeassistant/components/lcn/translations/zh-Hant.json +0 -52
- homeassistant/components/letpot/__init__.py +1 -0
- homeassistant/components/letpot/icons.json +8 -0
- homeassistant/components/letpot/number.py +136 -0
- homeassistant/components/letpot/strings.json +10 -1
- homeassistant/components/letpot/translations/cs.json +9 -0
- homeassistant/components/letpot/translations/de.json +9 -0
- homeassistant/components/letpot/translations/en-GB.json +9 -0
- homeassistant/components/letpot/translations/en.json +9 -0
- homeassistant/components/letpot/translations/es.json +0 -1
- homeassistant/components/letpot/translations/et.json +0 -1
- homeassistant/components/letpot/translations/fr.json +0 -1
- homeassistant/components/letpot/translations/ga.json +0 -1
- homeassistant/components/letpot/translations/it.json +0 -1
- homeassistant/components/letpot/translations/lt.json +0 -1
- homeassistant/components/letpot/translations/pt.json +0 -1
- homeassistant/components/letpot/translations/sk.json +9 -0
- homeassistant/components/letpot/translations/sv.json +0 -1
- homeassistant/components/letpot/translations/zh-Hans.json +0 -1
- homeassistant/components/letpot/translations/zh-Hant.json +10 -1
- homeassistant/components/lg_thinq/coordinator.py +4 -0
- homeassistant/components/lg_thinq/entity.py +6 -1
- homeassistant/components/lg_thinq/icons.json +9 -0
- homeassistant/components/lg_thinq/manifest.json +1 -1
- homeassistant/components/lg_thinq/sensor.py +143 -3
- homeassistant/components/lg_thinq/strings.json +9 -0
- homeassistant/components/lg_thinq/translations/cs.json +9 -0
- homeassistant/components/lg_thinq/translations/de.json +9 -0
- homeassistant/components/lg_thinq/translations/en-GB.json +9 -0
- homeassistant/components/lg_thinq/translations/en.json +9 -0
- homeassistant/components/lg_thinq/translations/es.json +9 -0
- homeassistant/components/lg_thinq/translations/et.json +9 -0
- homeassistant/components/lg_thinq/translations/lt.json +9 -0
- homeassistant/components/lg_thinq/translations/nl.json +9 -0
- homeassistant/components/lg_thinq/translations/pt.json +9 -0
- homeassistant/components/lg_thinq/translations/sk.json +9 -0
- homeassistant/components/lg_thinq/translations/zh-Hans.json +9 -0
- homeassistant/components/lg_thinq/translations/zh-Hant.json +9 -0
- homeassistant/components/libre_hardware_monitor/__init__.py +34 -0
- homeassistant/components/libre_hardware_monitor/config_flow.py +63 -0
- homeassistant/components/libre_hardware_monitor/const.py +6 -0
- homeassistant/components/libre_hardware_monitor/coordinator.py +130 -0
- homeassistant/components/libre_hardware_monitor/manifest.json +10 -0
- homeassistant/components/libre_hardware_monitor/quality_scale.yaml +81 -0
- homeassistant/components/libre_hardware_monitor/sensor.py +95 -0
- homeassistant/components/libre_hardware_monitor/strings.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/ca.json +19 -0
- homeassistant/components/libre_hardware_monitor/translations/cs.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/de.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/el.json +19 -0
- homeassistant/components/libre_hardware_monitor/translations/en-GB.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/en.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/es.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/et.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/ga.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/he.json +19 -0
- homeassistant/components/libre_hardware_monitor/translations/it.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/lt.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/nl.json +19 -0
- homeassistant/components/libre_hardware_monitor/translations/pl.json +19 -0
- homeassistant/components/libre_hardware_monitor/translations/pt.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/ru.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/sk.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/zh-Hans.json +23 -0
- homeassistant/components/libre_hardware_monitor/translations/zh-Hant.json +23 -0
- homeassistant/components/lidarr/coordinator.py +1 -1
- homeassistant/components/lifx/services.yaml +7 -0
- homeassistant/components/lifx/strings.json +4 -0
- homeassistant/components/lifx/translations/cs.json +4 -0
- homeassistant/components/lifx/translations/de.json +4 -0
- homeassistant/components/lifx/translations/en-GB.json +4 -0
- homeassistant/components/lifx/translations/en.json +4 -0
- homeassistant/components/lifx/translations/es.json +4 -0
- homeassistant/components/lifx/translations/et.json +4 -0
- homeassistant/components/lifx/translations/ga.json +4 -0
- homeassistant/components/lifx/translations/it.json +4 -0
- homeassistant/components/lifx/translations/lt.json +4 -0
- homeassistant/components/lifx/translations/pt.json +4 -0
- homeassistant/components/lifx/translations/sk.json +4 -0
- homeassistant/components/lifx/translations/sv.json +3 -0
- homeassistant/components/lifx/translations/zh-Hans.json +4 -0
- homeassistant/components/lifx/translations/zh-Hant.json +4 -0
- homeassistant/components/lightwave/sensor.py +2 -2
- homeassistant/components/litterrobot/icons.json +18 -0
- homeassistant/components/litterrobot/manifest.json +1 -1
- homeassistant/components/litterrobot/select.py +66 -27
- homeassistant/components/litterrobot/sensor.py +28 -1
- homeassistant/components/litterrobot/strings.json +35 -0
- homeassistant/components/litterrobot/switch.py +86 -18
- homeassistant/components/litterrobot/translations/bg.json +9 -0
- homeassistant/components/litterrobot/translations/ca.json +13 -0
- homeassistant/components/litterrobot/translations/cs.json +35 -0
- homeassistant/components/litterrobot/translations/da.json +8 -0
- homeassistant/components/litterrobot/translations/de.json +35 -0
- homeassistant/components/litterrobot/translations/el.json +14 -0
- homeassistant/components/litterrobot/translations/en-GB.json +35 -0
- homeassistant/components/litterrobot/translations/en.json +35 -0
- homeassistant/components/litterrobot/translations/es.json +35 -0
- homeassistant/components/litterrobot/translations/et.json +35 -0
- homeassistant/components/litterrobot/translations/ga.json +35 -0
- homeassistant/components/litterrobot/translations/he.json +14 -0
- homeassistant/components/litterrobot/translations/it.json +24 -0
- homeassistant/components/litterrobot/translations/lt.json +35 -0
- homeassistant/components/litterrobot/translations/mk.json +5 -0
- homeassistant/components/litterrobot/translations/nl.json +22 -0
- homeassistant/components/litterrobot/translations/pl.json +16 -0
- homeassistant/components/litterrobot/translations/pt.json +35 -0
- homeassistant/components/litterrobot/translations/ru.json +20 -0
- homeassistant/components/litterrobot/translations/sk.json +35 -0
- homeassistant/components/litterrobot/translations/uk.json +5 -0
- homeassistant/components/litterrobot/translations/zh-Hans.json +35 -0
- homeassistant/components/litterrobot/translations/zh-Hant.json +35 -0
- homeassistant/components/local_todo/todo.py +1 -1
- homeassistant/components/logbook/helpers.py +34 -9
- homeassistant/components/logbook/manifest.json +1 -1
- homeassistant/components/logbook/strings.json +5 -5
- homeassistant/components/logbook/translations/bg.json +1 -2
- homeassistant/components/logbook/translations/ca.json +1 -6
- homeassistant/components/logbook/translations/cs.json +5 -5
- homeassistant/components/logbook/translations/de.json +5 -5
- homeassistant/components/logbook/translations/el.json +1 -6
- homeassistant/components/logbook/translations/en-GB.json +5 -5
- homeassistant/components/logbook/translations/en.json +5 -5
- homeassistant/components/logbook/translations/es.json +1 -6
- homeassistant/components/logbook/translations/et.json +1 -6
- homeassistant/components/logbook/translations/fi.json +1 -6
- homeassistant/components/logbook/translations/fr.json +1 -5
- homeassistant/components/logbook/translations/ga.json +1 -6
- homeassistant/components/logbook/translations/gl.json +0 -4
- homeassistant/components/logbook/translations/he.json +5 -5
- homeassistant/components/logbook/translations/hu.json +1 -6
- homeassistant/components/logbook/translations/id.json +1 -6
- homeassistant/components/logbook/translations/it.json +1 -6
- homeassistant/components/logbook/translations/ja.json +1 -6
- homeassistant/components/logbook/translations/ko.json +1 -6
- homeassistant/components/logbook/translations/lt.json +5 -5
- homeassistant/components/logbook/translations/nb.json +1 -2
- homeassistant/components/logbook/translations/nl.json +1 -6
- homeassistant/components/logbook/translations/pl.json +1 -4
- homeassistant/components/logbook/translations/pt-BR.json +1 -6
- homeassistant/components/logbook/translations/pt.json +1 -6
- homeassistant/components/logbook/translations/ru.json +1 -6
- homeassistant/components/logbook/translations/sk.json +4 -4
- homeassistant/components/logbook/translations/sl.json +1 -6
- homeassistant/components/logbook/translations/sv.json +1 -6
- homeassistant/components/logbook/translations/tr.json +1 -6
- homeassistant/components/logbook/translations/vi.json +1 -6
- homeassistant/components/logbook/translations/zh-Hans.json +5 -5
- homeassistant/components/logbook/translations/zh-Hant.json +5 -5
- homeassistant/components/lovelace/dashboard.py +2 -2
- homeassistant/components/lutron_caseta/__init__.py +4 -1
- homeassistant/components/lutron_caseta/const.py +1 -0
- homeassistant/components/lutron_caseta/cover.py +44 -2
- homeassistant/components/lutron_caseta/device_trigger.py +2 -1
- homeassistant/components/lutron_caseta/entity.py +5 -1
- homeassistant/components/lutron_caseta/manifest.json +1 -1
- homeassistant/components/mastodon/const.py +1 -0
- homeassistant/components/mastodon/services.py +4 -0
- homeassistant/components/mastodon/services.yaml +203 -0
- homeassistant/components/mastodon/strings.json +4 -0
- homeassistant/components/mastodon/translations/cs.json +4 -0
- homeassistant/components/mastodon/translations/de.json +4 -0
- homeassistant/components/mastodon/translations/en-GB.json +4 -0
- homeassistant/components/mastodon/translations/en.json +4 -0
- homeassistant/components/mastodon/translations/es.json +4 -0
- homeassistant/components/mastodon/translations/et.json +4 -0
- homeassistant/components/mastodon/translations/lt.json +4 -0
- homeassistant/components/mastodon/translations/pt.json +4 -0
- homeassistant/components/mastodon/translations/sk.json +4 -0
- homeassistant/components/mastodon/translations/zh-Hans.json +4 -0
- homeassistant/components/mastodon/translations/zh-Hant.json +4 -0
- homeassistant/components/matter/climate.py +16 -18
- homeassistant/components/matter/discovery.py +7 -0
- homeassistant/components/matter/light.py +1 -0
- homeassistant/components/matter/models.py +3 -0
- homeassistant/components/matter/number.py +16 -1
- homeassistant/components/matter/select.py +1 -1
- homeassistant/components/matter/sensor.py +31 -0
- homeassistant/components/matter/strings.json +6 -3
- homeassistant/components/matter/translations/cs.json +6 -3
- homeassistant/components/matter/translations/de.json +6 -3
- homeassistant/components/matter/translations/en-GB.json +6 -3
- homeassistant/components/matter/translations/en.json +6 -3
- homeassistant/components/matter/translations/es.json +3 -3
- homeassistant/components/matter/translations/et.json +3 -3
- homeassistant/components/matter/translations/fr.json +9 -3
- homeassistant/components/matter/translations/ga.json +3 -3
- homeassistant/components/matter/translations/he.json +12 -3
- homeassistant/components/matter/translations/hu.json +0 -3
- homeassistant/components/matter/translations/it.json +3 -0
- homeassistant/components/matter/translations/lt.json +6 -3
- homeassistant/components/matter/translations/pt.json +3 -3
- homeassistant/components/matter/translations/ru.json +0 -3
- homeassistant/components/matter/translations/sk.json +6 -3
- homeassistant/components/matter/translations/tr.json +0 -3
- homeassistant/components/matter/translations/zh-Hans.json +6 -3
- homeassistant/components/matter/translations/zh-Hant.json +6 -3
- homeassistant/components/mcp/manifest.json +1 -1
- homeassistant/components/mcp_server/http.py +13 -9
- homeassistant/components/mcp_server/manifest.json +1 -1
- homeassistant/components/mcp_server/server.py +1 -1
- homeassistant/components/mcp_server/session.py +2 -2
- homeassistant/components/media_extractor/manifest.json +1 -1
- homeassistant/components/media_player/intent.py +0 -2
- homeassistant/components/media_player/translations/pt.json +1 -1
- homeassistant/components/media_source/__init__.py +19 -165
- homeassistant/components/media_source/helper.py +103 -0
- homeassistant/components/media_source/http.py +79 -0
- homeassistant/components/media_source/local_source.py +144 -97
- homeassistant/components/met/coordinator.py +3 -1
- homeassistant/components/metoffice/sensor.py +11 -0
- homeassistant/components/miele/const.py +252 -170
- homeassistant/components/miele/icons.json +1 -1
- homeassistant/components/miele/manifest.json +2 -2
- homeassistant/components/miele/quality_scale.yaml +6 -14
- homeassistant/components/miele/sensor.py +95 -18
- homeassistant/components/miele/services.py +4 -3
- homeassistant/components/miele/strings.json +1 -0
- homeassistant/components/miele/translations/cs.json +1 -0
- homeassistant/components/miele/translations/de.json +1 -0
- homeassistant/components/miele/translations/en-GB.json +1 -0
- homeassistant/components/miele/translations/en.json +1 -0
- homeassistant/components/miele/translations/es.json +1 -0
- homeassistant/components/miele/translations/et.json +1 -0
- homeassistant/components/miele/translations/he.json +1 -0
- homeassistant/components/miele/translations/lt.json +1 -0
- homeassistant/components/miele/translations/nl.json +1 -0
- homeassistant/components/miele/translations/pt.json +2 -1
- homeassistant/components/miele/translations/ru.json +5 -0
- homeassistant/components/miele/translations/sk.json +1 -0
- homeassistant/components/miele/translations/zh-Hans.json +1 -0
- homeassistant/components/miele/translations/zh-Hant.json +1 -0
- homeassistant/components/miele/vacuum.py +1 -2
- homeassistant/components/min_max/sensor.py +12 -6
- homeassistant/components/mobile_app/manifest.json +1 -1
- homeassistant/components/modbus/__init__.py +3 -2
- homeassistant/components/modbus/binary_sensor.py +3 -3
- homeassistant/components/modbus/climate.py +18 -16
- homeassistant/components/modbus/const.py +1 -0
- homeassistant/components/modbus/cover.py +11 -5
- homeassistant/components/modbus/entity.py +8 -8
- homeassistant/components/modbus/fan.py +2 -2
- homeassistant/components/modbus/light.py +6 -6
- homeassistant/components/modbus/manifest.json +1 -1
- homeassistant/components/modbus/modbus.py +35 -41
- homeassistant/components/modbus/sensor.py +3 -3
- homeassistant/components/modbus/switch.py +2 -2
- homeassistant/components/modbus/validators.py +1 -1
- homeassistant/components/monoprice/media_player.py +1 -1
- homeassistant/components/motionmount/select.py +11 -3
- homeassistant/components/motionmount/strings.json +1 -1
- homeassistant/components/motionmount/translations/ru.json +4 -1
- homeassistant/components/mqtt/abbreviations.py +1 -0
- homeassistant/components/mqtt/config_flow.py +571 -495
- homeassistant/components/mqtt/const.py +6 -0
- homeassistant/components/mqtt/device_automation.py +3 -1
- homeassistant/components/mqtt/entity.py +56 -3
- homeassistant/components/mqtt/image.py +9 -8
- homeassistant/components/mqtt/light/schema_json.py +0 -2
- homeassistant/components/mqtt/manifest.json +1 -0
- homeassistant/components/mqtt/schemas.py +2 -0
- homeassistant/components/mqtt/strings.json +32 -3
- homeassistant/components/mqtt/tag.py +3 -1
- homeassistant/components/mqtt/translations/cs.json +29 -0
- homeassistant/components/mqtt/translations/de.json +29 -0
- homeassistant/components/mqtt/translations/el.json +4 -0
- homeassistant/components/mqtt/translations/en-GB.json +29 -0
- homeassistant/components/mqtt/translations/en.json +29 -0
- homeassistant/components/mqtt/translations/es.json +10 -0
- homeassistant/components/mqtt/translations/et.json +10 -0
- homeassistant/components/mqtt/translations/fr.json +16 -0
- homeassistant/components/mqtt/translations/ga.json +4 -0
- homeassistant/components/mqtt/translations/he.json +19 -0
- homeassistant/components/mqtt/translations/lt.json +29 -0
- homeassistant/components/mqtt/translations/pt.json +10 -0
- homeassistant/components/mqtt/translations/ru.json +6 -0
- homeassistant/components/mqtt/translations/sk.json +29 -0
- homeassistant/components/mqtt/translations/zh-Hans.json +29 -0
- homeassistant/components/mqtt/translations/zh-Hant.json +29 -0
- homeassistant/components/mqtt/util.py +8 -2
- homeassistant/components/music_assistant/__init__.py +47 -16
- homeassistant/components/music_assistant/config_flow.py +34 -8
- homeassistant/components/music_assistant/const.py +1 -0
- homeassistant/components/music_assistant/media_browser.py +1 -1
- homeassistant/components/nam/icons.json +0 -3
- homeassistant/components/nam/sensor.py +1 -0
- homeassistant/components/nederlandse_spoorwegen/__init__.py +56 -1
- homeassistant/components/nederlandse_spoorwegen/config_flow.py +176 -0
- homeassistant/components/nederlandse_spoorwegen/const.py +17 -0
- homeassistant/components/nederlandse_spoorwegen/manifest.json +3 -1
- homeassistant/components/nederlandse_spoorwegen/sensor.py +99 -54
- homeassistant/components/nederlandse_spoorwegen/strings.json +74 -0
- homeassistant/components/nederlandse_spoorwegen/translations/bg.json +28 -0
- homeassistant/components/nederlandse_spoorwegen/translations/ca.json +28 -0
- homeassistant/components/nederlandse_spoorwegen/translations/cs.json +74 -0
- homeassistant/components/nederlandse_spoorwegen/translations/de.json +74 -0
- homeassistant/components/nederlandse_spoorwegen/translations/el.json +28 -0
- homeassistant/components/nederlandse_spoorwegen/translations/en-GB.json +74 -0
- homeassistant/components/nederlandse_spoorwegen/translations/en.json +74 -0
- homeassistant/components/nederlandse_spoorwegen/translations/es.json +74 -0
- homeassistant/components/nederlandse_spoorwegen/translations/et.json +74 -0
- homeassistant/components/nederlandse_spoorwegen/translations/ga.json +74 -0
- homeassistant/components/nederlandse_spoorwegen/translations/he.json +28 -0
- homeassistant/components/nederlandse_spoorwegen/translations/lt.json +74 -0
- homeassistant/components/nederlandse_spoorwegen/translations/nl.json +72 -0
- homeassistant/components/nederlandse_spoorwegen/translations/pt.json +74 -0
- homeassistant/components/nederlandse_spoorwegen/translations/sk.json +74 -0
- homeassistant/components/nederlandse_spoorwegen/translations/uk.json +18 -0
- homeassistant/components/nederlandse_spoorwegen/translations/zh-Hans.json +74 -0
- homeassistant/components/nederlandse_spoorwegen/translations/zh-Hant.json +74 -0
- homeassistant/components/neo/__init__.py +1 -0
- homeassistant/components/neo/manifest.json +6 -0
- homeassistant/components/ness_alarm/manifest.json +1 -1
- homeassistant/components/nextdns/manifest.json +1 -0
- homeassistant/components/nextdns/quality_scale.yaml +88 -0
- homeassistant/components/nibe_heatpump/manifest.json +1 -1
- homeassistant/components/nightscout/translations/de.json +1 -1
- homeassistant/components/nordpool/__init__.py +1 -1
- homeassistant/components/nordpool/coordinator.py +37 -13
- homeassistant/components/nordpool/sensor.py +5 -2
- homeassistant/components/nordpool/strings.json +6 -0
- homeassistant/components/nordpool/translations/cs.json +6 -0
- homeassistant/components/nordpool/translations/de.json +6 -0
- homeassistant/components/nordpool/translations/en-GB.json +6 -0
- homeassistant/components/nordpool/translations/en.json +6 -0
- homeassistant/components/nordpool/translations/es.json +6 -0
- homeassistant/components/nordpool/translations/et.json +6 -0
- homeassistant/components/nordpool/translations/lt.json +6 -0
- homeassistant/components/nordpool/translations/pt.json +6 -0
- homeassistant/components/nordpool/translations/sk.json +6 -0
- homeassistant/components/nordpool/translations/zh-Hans.json +6 -0
- homeassistant/components/nordpool/translations/zh-Hant.json +6 -0
- homeassistant/components/ntfy/__init__.py +1 -1
- homeassistant/components/ntfy/config_flow.py +73 -2
- homeassistant/components/ntfy/const.py +6 -0
- homeassistant/components/ntfy/entity.py +43 -0
- homeassistant/components/ntfy/event.py +172 -0
- homeassistant/components/ntfy/icons.json +10 -0
- homeassistant/components/ntfy/manifest.json +1 -1
- homeassistant/components/ntfy/notify.py +70 -30
- homeassistant/components/ntfy/quality_scale.yaml +6 -18
- homeassistant/components/ntfy/repairs.py +56 -0
- homeassistant/components/ntfy/services.yaml +90 -0
- homeassistant/components/ntfy/strings.json +146 -1
- homeassistant/components/ntfy/translations/bg.json +52 -1
- homeassistant/components/ntfy/translations/ca.json +25 -0
- homeassistant/components/ntfy/translations/cs.json +168 -1
- homeassistant/components/ntfy/translations/de.json +168 -1
- homeassistant/components/ntfy/translations/el.json +45 -1
- homeassistant/components/ntfy/translations/en-GB.json +168 -1
- homeassistant/components/ntfy/translations/en.json +168 -1
- homeassistant/components/ntfy/translations/es.json +168 -1
- homeassistant/components/ntfy/translations/et.json +168 -1
- homeassistant/components/ntfy/translations/ga.json +168 -1
- homeassistant/components/ntfy/translations/he.json +20 -0
- homeassistant/components/ntfy/translations/it.json +12 -0
- homeassistant/components/ntfy/translations/lt.json +168 -1
- homeassistant/components/ntfy/translations/nl.json +42 -0
- homeassistant/components/ntfy/translations/pt.json +168 -1
- homeassistant/components/ntfy/translations/ru.json +165 -1
- homeassistant/components/ntfy/translations/sk.json +168 -1
- homeassistant/components/ntfy/translations/zh-Hans.json +168 -1
- homeassistant/components/ntfy/translations/zh-Hant.json +168 -1
- homeassistant/components/number/__init__.py +6 -3
- homeassistant/components/number/const.py +20 -8
- homeassistant/components/number/icons.json +3 -0
- homeassistant/components/nut/strings.json +1 -1
- homeassistant/components/onvif/strings.json +2 -2
- homeassistant/components/onvif/translations/he.json +3 -1
- homeassistant/components/openai_conversation/__init__.py +1 -1
- homeassistant/components/openai_conversation/ai_task.py +73 -4
- homeassistant/components/openai_conversation/const.py +9 -0
- homeassistant/components/openai_conversation/entity.py +64 -20
- homeassistant/components/openai_conversation/manifest.json +1 -1
- homeassistant/components/openai_conversation/strings.json +6 -0
- homeassistant/components/openai_conversation/translations/cs.json +6 -0
- homeassistant/components/openai_conversation/translations/de.json +6 -0
- homeassistant/components/openai_conversation/translations/en-GB.json +6 -0
- homeassistant/components/openai_conversation/translations/en.json +6 -0
- homeassistant/components/openai_conversation/translations/es.json +6 -0
- homeassistant/components/openai_conversation/translations/et.json +6 -0
- homeassistant/components/openai_conversation/translations/fr.json +6 -0
- homeassistant/components/openai_conversation/translations/ga.json +6 -0
- homeassistant/components/openai_conversation/translations/lt.json +6 -0
- homeassistant/components/openai_conversation/translations/pt.json +6 -0
- homeassistant/components/openai_conversation/translations/sk.json +6 -0
- homeassistant/components/openai_conversation/translations/zh-Hans.json +6 -0
- homeassistant/components/openai_conversation/translations/zh-Hant.json +6 -0
- homeassistant/components/openuv/__init__.py +9 -5
- homeassistant/components/openuv/binary_sensor.py +19 -22
- homeassistant/components/openuv/coordinator.py +91 -1
- homeassistant/components/openweathermap/config_flow.py +29 -39
- homeassistant/components/openweathermap/strings.json +12 -0
- homeassistant/components/openweathermap/translations/cs.json +12 -0
- homeassistant/components/openweathermap/translations/de.json +12 -0
- homeassistant/components/openweathermap/translations/en-GB.json +12 -0
- homeassistant/components/openweathermap/translations/en.json +12 -0
- homeassistant/components/openweathermap/translations/es.json +12 -0
- homeassistant/components/openweathermap/translations/et.json +12 -0
- homeassistant/components/openweathermap/translations/fr.json +12 -0
- homeassistant/components/openweathermap/translations/ga.json +12 -0
- homeassistant/components/openweathermap/translations/lt.json +12 -0
- homeassistant/components/openweathermap/translations/pt.json +12 -0
- homeassistant/components/openweathermap/translations/sk.json +12 -0
- homeassistant/components/openweathermap/translations/zh-Hans.json +12 -0
- homeassistant/components/openweathermap/translations/zh-Hant.json +12 -0
- homeassistant/components/opnsense/__init__.py +13 -12
- homeassistant/components/opnsense/const.py +8 -0
- homeassistant/components/opnsense/device_tracker.py +29 -21
- homeassistant/components/opnsense/manifest.json +1 -1
- homeassistant/components/opower/manifest.json +1 -0
- homeassistant/components/opower/quality_scale.yaml +79 -0
- homeassistant/components/otbr/config_flow.py +1 -4
- homeassistant/components/otp/manifest.json +1 -1
- homeassistant/components/overkiz/climate/atlantic_electrical_heater_with_adjustable_temperature_setpoint.py +1 -0
- homeassistant/components/overkiz/const.py +1 -0
- homeassistant/components/overkiz/strings.json +1 -1
- homeassistant/components/overkiz/switch.py +9 -0
- homeassistant/components/overkiz/translations/fr.json +2 -1
- homeassistant/components/owntracks/manifest.json +1 -1
- homeassistant/components/p1_monitor/config_flow.py +1 -1
- homeassistant/components/p1_monitor/manifest.json +1 -1
- homeassistant/components/paperless_ngx/manifest.json +1 -1
- homeassistant/components/paperless_ngx/quality_scale.yaml +4 -1
- homeassistant/components/philips_js/manifest.json +1 -1
- homeassistant/components/playstation_network/manifest.json +1 -1
- homeassistant/components/playstation_network/translations/pt.json +1 -1
- homeassistant/components/pooldose/config_flow.py +79 -43
- homeassistant/components/pooldose/coordinator.py +1 -0
- homeassistant/components/pooldose/entity.py +11 -3
- homeassistant/components/pooldose/manifest.json +5 -0
- homeassistant/components/pooldose/quality_scale.yaml +2 -6
- homeassistant/components/pooldose/strings.json +8 -1
- homeassistant/components/pooldose/translations/cs.json +8 -1
- homeassistant/components/pooldose/translations/de.json +8 -1
- homeassistant/components/pooldose/translations/en-GB.json +8 -1
- homeassistant/components/pooldose/translations/en.json +8 -1
- homeassistant/components/pooldose/translations/es.json +8 -1
- homeassistant/components/pooldose/translations/et.json +8 -1
- homeassistant/components/pooldose/translations/he.json +2 -1
- homeassistant/components/pooldose/translations/lt.json +8 -1
- homeassistant/components/pooldose/translations/nl.json +2 -1
- homeassistant/components/pooldose/translations/pt.json +8 -1
- homeassistant/components/pooldose/translations/sk.json +8 -1
- homeassistant/components/pooldose/translations/zh-Hans.json +8 -1
- homeassistant/components/pooldose/translations/zh-Hant.json +8 -1
- homeassistant/components/portainer/__init__.py +40 -0
- homeassistant/components/portainer/binary_sensor.py +146 -0
- homeassistant/components/portainer/config_flow.py +95 -0
- homeassistant/components/portainer/const.py +4 -0
- homeassistant/components/portainer/coordinator.py +137 -0
- homeassistant/components/portainer/entity.py +73 -0
- homeassistant/components/portainer/manifest.json +10 -0
- homeassistant/components/portainer/quality_scale.yaml +80 -0
- homeassistant/components/portainer/strings.json +49 -0
- homeassistant/components/portainer/translations/bg.json +27 -0
- homeassistant/components/portainer/translations/ca.json +21 -0
- homeassistant/components/portainer/translations/cs.json +49 -0
- homeassistant/components/portainer/translations/de.json +49 -0
- homeassistant/components/portainer/translations/el.json +21 -0
- homeassistant/components/portainer/translations/en-GB.json +49 -0
- homeassistant/components/portainer/translations/en.json +49 -0
- homeassistant/components/portainer/translations/es.json +49 -0
- homeassistant/components/portainer/translations/et.json +49 -0
- homeassistant/components/portainer/translations/ga.json +49 -0
- homeassistant/components/portainer/translations/he.json +21 -0
- homeassistant/components/portainer/translations/lt.json +49 -0
- homeassistant/components/portainer/translations/nl.json +21 -0
- homeassistant/components/portainer/translations/pt.json +49 -0
- homeassistant/components/portainer/translations/ru.json +49 -0
- homeassistant/components/portainer/translations/sk.json +49 -0
- homeassistant/components/portainer/translations/sl.json +49 -0
- homeassistant/components/portainer/translations/zh-Hans.json +49 -0
- homeassistant/components/portainer/translations/zh-Hant.json +49 -0
- homeassistant/components/profiler/__init__.py +17 -0
- homeassistant/components/profiler/icons.json +3 -0
- homeassistant/components/profiler/services.yaml +1 -0
- homeassistant/components/profiler/strings.json +4 -0
- homeassistant/components/profiler/translations/cs.json +4 -0
- homeassistant/components/profiler/translations/de.json +4 -0
- homeassistant/components/profiler/translations/en-GB.json +4 -0
- homeassistant/components/profiler/translations/en.json +4 -0
- homeassistant/components/profiler/translations/lt.json +4 -0
- homeassistant/components/profiler/translations/sk.json +4 -0
- homeassistant/components/profiler/translations/zh-Hans.json +4 -0
- homeassistant/components/profiler/translations/zh-Hant.json +4 -0
- homeassistant/components/prowl/const.py +3 -0
- homeassistant/components/prowl/manifest.json +4 -1
- homeassistant/components/prowl/notify.py +37 -33
- homeassistant/components/prusalink/coordinator.py +7 -0
- homeassistant/components/prusalink/manifest.json +1 -1
- homeassistant/components/purpleair/coordinator.py +1 -1
- homeassistant/components/pushover/const.py +2 -0
- homeassistant/components/pushover/notify.py +18 -15
- homeassistant/components/pvoutput/translations/de.json +2 -2
- homeassistant/components/pvpc_hourly_pricing/__init__.py +0 -15
- homeassistant/components/pvpc_hourly_pricing/config_flow.py +2 -2
- homeassistant/components/pvpc_hourly_pricing/coordinator.py +7 -4
- homeassistant/components/qbus/entity.py +1 -1
- homeassistant/components/radarr/coordinator.py +1 -1
- homeassistant/components/radio_browser/media_source.py +65 -3
- homeassistant/components/rainbird/translations/fr.json +2 -1
- homeassistant/components/recorder/models/statistics.py +1 -0
- homeassistant/components/recorder/services.py +5 -5
- homeassistant/components/recorder/statistics.py +5 -0
- homeassistant/components/recorder/util.py +8 -1
- homeassistant/components/recorder/websocket_api.py +4 -0
- homeassistant/components/renault/manifest.json +1 -1
- homeassistant/components/reolink/__init__.py +4 -2
- homeassistant/components/reolink/binary_sensor.py +6 -6
- homeassistant/components/reolink/entity.py +41 -4
- homeassistant/components/reolink/icons.json +6 -0
- homeassistant/components/reolink/light.py +34 -4
- homeassistant/components/reolink/manifest.json +1 -1
- homeassistant/components/reolink/number.py +42 -6
- homeassistant/components/reolink/select.py +66 -20
- homeassistant/components/reolink/sensor.py +1 -0
- homeassistant/components/reolink/services.py +1 -1
- homeassistant/components/reolink/siren.py +54 -2
- homeassistant/components/reolink/strings.json +7 -1
- homeassistant/components/reolink/switch.py +41 -3
- homeassistant/components/reolink/translations/cs.json +6 -0
- homeassistant/components/reolink/translations/de.json +6 -0
- homeassistant/components/reolink/translations/en-GB.json +6 -0
- homeassistant/components/reolink/translations/en.json +6 -0
- homeassistant/components/reolink/translations/es.json +6 -0
- homeassistant/components/reolink/translations/et.json +6 -0
- homeassistant/components/reolink/translations/ga.json +6 -0
- homeassistant/components/reolink/translations/it.json +6 -0
- homeassistant/components/reolink/translations/lt.json +6 -0
- homeassistant/components/reolink/translations/pt.json +6 -0
- homeassistant/components/reolink/translations/sk.json +6 -0
- homeassistant/components/reolink/translations/zh-Hans.json +6 -0
- homeassistant/components/reolink/translations/zh-Hant.json +6 -0
- homeassistant/components/reolink/views.py +1 -1
- homeassistant/components/rhasspy/manifest.json +1 -1
- homeassistant/components/ridwell/manifest.json +1 -1
- homeassistant/components/roborock/__init__.py +6 -2
- homeassistant/components/roborock/config_flow.py +8 -0
- homeassistant/components/roborock/const.py +1 -0
- homeassistant/components/roborock/coordinator.py +9 -4
- homeassistant/components/roborock/manifest.json +1 -1
- homeassistant/components/roborock/select.py +1 -1
- homeassistant/components/roborock/strings.json +4 -2
- homeassistant/components/roborock/translations/cs.json +2 -0
- homeassistant/components/roborock/translations/de.json +2 -0
- homeassistant/components/roborock/translations/en-GB.json +2 -0
- homeassistant/components/roborock/translations/en.json +2 -0
- homeassistant/components/roborock/translations/es.json +2 -0
- homeassistant/components/roborock/translations/et.json +2 -0
- homeassistant/components/roborock/translations/ga.json +2 -0
- homeassistant/components/roborock/translations/it.json +4 -0
- homeassistant/components/roborock/translations/lt.json +2 -0
- homeassistant/components/roborock/translations/pt.json +2 -0
- homeassistant/components/roborock/translations/ru.json +2 -0
- homeassistant/components/roborock/translations/sk.json +2 -0
- homeassistant/components/roborock/translations/zh-Hans.json +2 -0
- homeassistant/components/roborock/translations/zh-Hant.json +2 -0
- homeassistant/components/roku/browse_media.py +1 -1
- homeassistant/components/route_b_smart_meter/__init__.py +28 -0
- homeassistant/components/route_b_smart_meter/config_flow.py +116 -0
- homeassistant/components/route_b_smart_meter/const.py +12 -0
- homeassistant/components/route_b_smart_meter/coordinator.py +75 -0
- homeassistant/components/route_b_smart_meter/manifest.json +17 -0
- homeassistant/components/route_b_smart_meter/quality_scale.yaml +82 -0
- homeassistant/components/route_b_smart_meter/sensor.py +109 -0
- homeassistant/components/route_b_smart_meter/strings.json +42 -0
- homeassistant/components/route_b_smart_meter/translations/cs.json +42 -0
- homeassistant/components/route_b_smart_meter/translations/de.json +42 -0
- homeassistant/components/route_b_smart_meter/translations/en-GB.json +42 -0
- homeassistant/components/route_b_smart_meter/translations/en.json +42 -0
- homeassistant/components/route_b_smart_meter/translations/he.json +24 -0
- homeassistant/components/route_b_smart_meter/translations/sk.json +42 -0
- homeassistant/components/route_b_smart_meter/translations/zh-Hant.json +42 -0
- homeassistant/components/samsungtv/manifest.json +1 -1
- homeassistant/components/samsungtv/quality_scale.yaml +1 -3
- homeassistant/components/satel_integra/__init__.py +139 -79
- homeassistant/components/satel_integra/alarm_control_panel.py +27 -24
- homeassistant/components/satel_integra/binary_sensor.py +58 -40
- homeassistant/components/satel_integra/config_flow.py +496 -0
- homeassistant/components/satel_integra/const.py +38 -0
- homeassistant/components/satel_integra/diagnostics.py +26 -0
- homeassistant/components/satel_integra/manifest.json +4 -2
- homeassistant/components/satel_integra/strings.json +210 -0
- homeassistant/components/satel_integra/switch.py +31 -29
- homeassistant/components/satel_integra/translations/ca.json +119 -0
- homeassistant/components/satel_integra/translations/cs.json +210 -0
- homeassistant/components/satel_integra/translations/de.json +210 -0
- homeassistant/components/satel_integra/translations/el.json +125 -0
- homeassistant/components/satel_integra/translations/en-GB.json +210 -0
- homeassistant/components/satel_integra/translations/en.json +210 -0
- homeassistant/components/satel_integra/translations/es.json +210 -0
- homeassistant/components/satel_integra/translations/et.json +209 -0
- homeassistant/components/satel_integra/translations/ga.json +210 -0
- homeassistant/components/satel_integra/translations/he.json +132 -0
- homeassistant/components/satel_integra/translations/lt.json +210 -0
- homeassistant/components/satel_integra/translations/nl.json +125 -0
- homeassistant/components/satel_integra/translations/pl.json +9 -0
- homeassistant/components/satel_integra/translations/pt.json +210 -0
- homeassistant/components/satel_integra/translations/sk.json +210 -0
- homeassistant/components/satel_integra/translations/uk.json +62 -0
- homeassistant/components/satel_integra/translations/zh-Hans.json +210 -0
- homeassistant/components/satel_integra/translations/zh-Hant.json +210 -0
- homeassistant/components/scrape/__init__.py +4 -7
- homeassistant/components/scrape/config_flow.py +1 -0
- homeassistant/components/scrape/coordinator.py +13 -0
- homeassistant/components/select/services.yaml +4 -1
- homeassistant/components/sensor/__init__.py +44 -26
- homeassistant/components/sensor/const.py +23 -7
- homeassistant/components/sensor/device_condition.py +3 -0
- homeassistant/components/sensor/device_trigger.py +3 -0
- homeassistant/components/sensor/icons.json +3 -0
- homeassistant/components/sensor/strings.json +2 -0
- homeassistant/components/sensor/translations/cs.json +2 -0
- homeassistant/components/sensor/translations/de.json +2 -0
- homeassistant/components/sensor/translations/en-GB.json +2 -0
- homeassistant/components/sensor/translations/en.json +2 -0
- homeassistant/components/sensor/translations/es.json +2 -0
- homeassistant/components/sensor/translations/et.json +2 -0
- homeassistant/components/sensor/translations/fr.json +2 -0
- homeassistant/components/sensor/translations/ga.json +2 -0
- homeassistant/components/sensor/translations/he.json +2 -0
- homeassistant/components/sensor/translations/lt.json +2 -0
- homeassistant/components/sensor/translations/pt.json +2 -0
- homeassistant/components/sensor/translations/ru.json +2 -0
- homeassistant/components/sensor/translations/sk.json +2 -0
- homeassistant/components/sensor/translations/zh-Hans.json +2 -0
- homeassistant/components/sensor/translations/zh-Hant.json +2 -0
- homeassistant/components/sftp_storage/__init__.py +155 -0
- homeassistant/components/sftp_storage/backup.py +153 -0
- homeassistant/components/sftp_storage/client.py +311 -0
- homeassistant/components/sftp_storage/config_flow.py +236 -0
- homeassistant/components/sftp_storage/const.py +27 -0
- homeassistant/components/sftp_storage/manifest.json +13 -0
- homeassistant/components/sftp_storage/quality_scale.yaml +140 -0
- homeassistant/components/sftp_storage/strings.json +37 -0
- homeassistant/components/sftp_storage/translations/bg.json +18 -0
- homeassistant/components/sftp_storage/translations/ca.json +14 -0
- homeassistant/components/sftp_storage/translations/cs.json +37 -0
- homeassistant/components/sftp_storage/translations/de.json +37 -0
- homeassistant/components/sftp_storage/translations/el.json +14 -0
- homeassistant/components/sftp_storage/translations/en-GB.json +37 -0
- homeassistant/components/sftp_storage/translations/en.json +37 -0
- homeassistant/components/sftp_storage/translations/es.json +37 -0
- homeassistant/components/sftp_storage/translations/et.json +37 -0
- homeassistant/components/sftp_storage/translations/fr.json +37 -0
- homeassistant/components/sftp_storage/translations/ga.json +37 -0
- homeassistant/components/sftp_storage/translations/he.json +18 -0
- homeassistant/components/sftp_storage/translations/it.json +37 -0
- homeassistant/components/sftp_storage/translations/lt.json +37 -0
- homeassistant/components/sftp_storage/translations/nl.json +17 -0
- homeassistant/components/sftp_storage/translations/pl.json +19 -0
- homeassistant/components/sftp_storage/translations/pt.json +37 -0
- homeassistant/components/sftp_storage/translations/ru.json +34 -0
- homeassistant/components/sftp_storage/translations/sk.json +37 -0
- homeassistant/components/sftp_storage/translations/zh-Hans.json +37 -0
- homeassistant/components/sftp_storage/translations/zh-Hant.json +37 -0
- homeassistant/components/shelly/__init__.py +5 -0
- homeassistant/components/shelly/binary_sensor.py +44 -11
- homeassistant/components/shelly/button.py +103 -14
- homeassistant/components/shelly/climate.py +3 -2
- homeassistant/components/shelly/const.py +22 -5
- homeassistant/components/shelly/coordinator.py +5 -0
- homeassistant/components/shelly/cover.py +30 -0
- homeassistant/components/shelly/entity.py +6 -9
- homeassistant/components/shelly/icons.json +6 -0
- homeassistant/components/shelly/light.py +94 -60
- homeassistant/components/shelly/manifest.json +2 -2
- homeassistant/components/shelly/number.py +8 -5
- homeassistant/components/shelly/repairs.py +46 -5
- homeassistant/components/shelly/select.py +4 -0
- homeassistant/components/shelly/sensor.py +224 -44
- homeassistant/components/shelly/strings.json +25 -24
- homeassistant/components/shelly/switch.py +4 -0
- homeassistant/components/shelly/text.py +4 -0
- homeassistant/components/shelly/translations/bg.json +3 -11
- homeassistant/components/shelly/translations/ca.json +7 -14
- homeassistant/components/shelly/translations/cs.json +25 -24
- homeassistant/components/shelly/translations/de.json +25 -24
- homeassistant/components/shelly/translations/el.json +0 -24
- homeassistant/components/shelly/translations/en-GB.json +25 -24
- homeassistant/components/shelly/translations/en.json +25 -24
- homeassistant/components/shelly/translations/es.json +25 -24
- homeassistant/components/shelly/translations/et.json +25 -24
- homeassistant/components/shelly/translations/fi.json +0 -14
- homeassistant/components/shelly/translations/fr.json +18 -24
- homeassistant/components/shelly/translations/ga.json +25 -24
- homeassistant/components/shelly/translations/gl.json +0 -12
- homeassistant/components/shelly/translations/he.json +7 -14
- homeassistant/components/shelly/translations/hu.json +0 -24
- homeassistant/components/shelly/translations/id.json +0 -14
- homeassistant/components/shelly/translations/is.json +0 -13
- homeassistant/components/shelly/translations/it.json +0 -14
- homeassistant/components/shelly/translations/ja.json +0 -14
- homeassistant/components/shelly/translations/ko.json +0 -14
- homeassistant/components/shelly/translations/lt.json +25 -24
- homeassistant/components/shelly/translations/lv.json +0 -14
- homeassistant/components/shelly/translations/mk.json +13 -0
- homeassistant/components/shelly/translations/nb.json +0 -14
- homeassistant/components/shelly/translations/nl.json +12 -24
- homeassistant/components/shelly/translations/pl.json +27 -16
- homeassistant/components/shelly/translations/pt-BR.json +0 -14
- homeassistant/components/shelly/translations/pt.json +25 -24
- homeassistant/components/shelly/translations/ro.json +0 -14
- homeassistant/components/shelly/translations/ru.json +15 -24
- homeassistant/components/shelly/translations/sk.json +25 -24
- homeassistant/components/shelly/translations/sl.json +0 -22
- homeassistant/components/shelly/translations/sv.json +0 -24
- homeassistant/components/shelly/translations/tr.json +0 -14
- homeassistant/components/shelly/translations/uk.json +15 -14
- homeassistant/components/shelly/translations/zh-Hans.json +25 -24
- homeassistant/components/shelly/translations/zh-Hant.json +25 -24
- homeassistant/components/shelly/utils.py +66 -16
- homeassistant/components/shopping_list/intent.py +0 -1
- homeassistant/components/sia/strings.json +3 -3
- homeassistant/components/sia/translations/he.json +2 -1
- homeassistant/components/sia/translations/ru.json +2 -1
- homeassistant/components/signal_messenger/notify.py +5 -2
- homeassistant/components/simplisafe/__init__.py +1 -1
- homeassistant/components/sleep_as_android/manifest.json +1 -1
- homeassistant/components/sleep_as_android/sensor.py +6 -0
- homeassistant/components/sleep_as_android/translations/pt.json +1 -1
- homeassistant/components/slide_local/coordinator.py +10 -7
- homeassistant/components/slide_local/cover.py +0 -2
- homeassistant/components/sma/config_flow.py +2 -2
- homeassistant/components/smartthings/__init__.py +3 -0
- homeassistant/components/smartthings/climate.py +31 -8
- homeassistant/components/smartthings/icons.json +7 -0
- homeassistant/components/smartthings/strings.json +22 -4
- homeassistant/components/smartthings/switch.py +7 -0
- homeassistant/components/smartthings/translations/cs.json +19 -1
- homeassistant/components/smartthings/translations/de.json +18 -0
- homeassistant/components/smartthings/translations/el.json +0 -3
- homeassistant/components/smartthings/translations/en-GB.json +19 -1
- homeassistant/components/smartthings/translations/en.json +19 -1
- homeassistant/components/smartthings/translations/es.json +3 -6
- homeassistant/components/smartthings/translations/et.json +3 -6
- homeassistant/components/smartthings/translations/fr.json +0 -3
- homeassistant/components/smartthings/translations/ga.json +3 -6
- homeassistant/components/smartthings/translations/he.json +5 -0
- homeassistant/components/smartthings/translations/hu.json +0 -6
- homeassistant/components/smartthings/translations/it.json +5 -0
- homeassistant/components/smartthings/translations/ko.json +0 -2
- homeassistant/components/smartthings/translations/lt.json +3 -6
- homeassistant/components/smartthings/translations/pt.json +3 -6
- homeassistant/components/smartthings/translations/sk.json +19 -1
- homeassistant/components/smartthings/translations/sv.json +0 -6
- homeassistant/components/smartthings/translations/tr.json +0 -6
- homeassistant/components/smartthings/translations/uk.json +16 -0
- homeassistant/components/smartthings/translations/zh-Hans.json +3 -6
- homeassistant/components/smartthings/translations/zh-Hant.json +19 -1
- homeassistant/components/snmp/device_tracker.py +7 -0
- homeassistant/components/solarlog/manifest.json +1 -1
- homeassistant/components/sonos/__init__.py +3 -0
- homeassistant/components/sonos/const.py +1 -0
- homeassistant/components/sonos/manifest.json +2 -1
- homeassistant/components/sonos/media_browser.py +1 -1
- homeassistant/components/sonos/media_player.py +45 -128
- homeassistant/components/sonos/services.py +143 -0
- homeassistant/components/sql/__init__.py +52 -15
- homeassistant/components/sql/config_flow.py +115 -76
- homeassistant/components/sql/const.py +1 -0
- homeassistant/components/sql/sensor.py +6 -6
- homeassistant/components/sql/strings.json +51 -29
- homeassistant/components/sql/translations/bg.json +5 -14
- homeassistant/components/sql/translations/ca.json +0 -26
- homeassistant/components/sql/translations/cs.json +50 -28
- homeassistant/components/sql/translations/de.json +50 -28
- homeassistant/components/sql/translations/el.json +2 -34
- homeassistant/components/sql/translations/en-GB.json +50 -28
- homeassistant/components/sql/translations/en.json +50 -28
- homeassistant/components/sql/translations/es.json +50 -28
- homeassistant/components/sql/translations/et.json +50 -28
- homeassistant/components/sql/translations/fi.json +0 -26
- homeassistant/components/sql/translations/fr.json +52 -26
- homeassistant/components/sql/translations/ga.json +47 -29
- homeassistant/components/sql/translations/gl.json +1 -14
- homeassistant/components/sql/translations/he.json +16 -26
- homeassistant/components/sql/translations/hu.json +2 -34
- homeassistant/components/sql/translations/id.json +0 -21
- homeassistant/components/sql/translations/it.json +5 -26
- homeassistant/components/sql/translations/ja.json +2 -34
- homeassistant/components/sql/translations/ko.json +0 -26
- homeassistant/components/sql/translations/lt.json +50 -28
- homeassistant/components/sql/translations/nb.json +0 -23
- homeassistant/components/sql/translations/nl.json +19 -24
- homeassistant/components/sql/translations/pl.json +0 -22
- homeassistant/components/sql/translations/pt-BR.json +0 -25
- homeassistant/components/sql/translations/pt.json +50 -28
- homeassistant/components/sql/translations/ro.json +0 -25
- homeassistant/components/sql/translations/ru.json +49 -28
- homeassistant/components/sql/translations/sk.json +50 -28
- homeassistant/components/sql/translations/sl.json +4 -28
- homeassistant/components/sql/translations/sv.json +2 -34
- homeassistant/components/sql/translations/tr.json +2 -34
- homeassistant/components/sql/translations/uk.json +0 -26
- homeassistant/components/sql/translations/vi.json +0 -24
- homeassistant/components/sql/translations/zh-Hans.json +50 -28
- homeassistant/components/sql/translations/zh-Hant.json +50 -28
- homeassistant/components/squeezebox/browse_media.py +8 -2
- homeassistant/components/squeezebox/update.py +1 -1
- homeassistant/components/ssdp/server.py +47 -43
- homeassistant/components/starlink/coordinator.py +5 -11
- homeassistant/components/starlink/sensor.py +61 -19
- homeassistant/components/statistics/__init__.py +1 -6
- homeassistant/components/statistics/config_flow.py +1 -0
- homeassistant/components/switchbot/__init__.py +12 -2
- homeassistant/components/switchbot/config_flow.py +87 -5
- homeassistant/components/switchbot/const.py +18 -0
- homeassistant/components/switchbot/entity.py +4 -0
- homeassistant/components/switchbot/icons.json +24 -1
- homeassistant/components/switchbot/manifest.json +1 -1
- homeassistant/components/switchbot/sensor.py +34 -8
- homeassistant/components/switchbot/strings.json +42 -1
- homeassistant/components/switchbot/switch.py +61 -2
- homeassistant/components/switchbot/translations/bg.json +35 -3
- homeassistant/components/switchbot/translations/ca.json +6 -0
- homeassistant/components/switchbot/translations/cs.json +43 -2
- homeassistant/components/switchbot/translations/de.json +43 -2
- homeassistant/components/switchbot/translations/el.json +10 -8
- homeassistant/components/switchbot/translations/en-GB.json +43 -2
- homeassistant/components/switchbot/translations/en.json +43 -2
- homeassistant/components/switchbot/translations/es.json +44 -3
- homeassistant/components/switchbot/translations/et.json +43 -2
- homeassistant/components/switchbot/translations/fr.json +0 -5
- homeassistant/components/switchbot/translations/ga.json +43 -2
- homeassistant/components/switchbot/translations/he.json +6 -0
- homeassistant/components/switchbot/translations/hu.json +0 -8
- homeassistant/components/switchbot/translations/it.json +26 -0
- homeassistant/components/switchbot/translations/ja.json +0 -8
- homeassistant/components/switchbot/translations/lt.json +44 -3
- homeassistant/components/switchbot/translations/nl.json +20 -6
- homeassistant/components/switchbot/translations/pl.json +0 -5
- homeassistant/components/switchbot/translations/pt-BR.json +0 -5
- homeassistant/components/switchbot/translations/pt.json +43 -2
- homeassistant/components/switchbot/translations/ru.json +19 -1
- homeassistant/components/switchbot/translations/sk.json +43 -2
- homeassistant/components/switchbot/translations/sv.json +0 -8
- homeassistant/components/switchbot/translations/tr.json +0 -8
- homeassistant/components/switchbot/translations/uk.json +26 -0
- homeassistant/components/switchbot/translations/zh-Hans.json +43 -2
- homeassistant/components/switchbot/translations/zh-Hant.json +43 -2
- homeassistant/components/switchbot_cloud/__init__.py +46 -1
- homeassistant/components/switchbot_cloud/binary_sensor.py +46 -0
- homeassistant/components/switchbot_cloud/climate.py +47 -6
- homeassistant/components/switchbot_cloud/const.py +24 -0
- homeassistant/components/switchbot_cloud/humidifier.py +155 -0
- homeassistant/components/switchbot_cloud/icons.json +33 -0
- homeassistant/components/switchbot_cloud/light.py +8 -2
- homeassistant/components/switchbot_cloud/manifest.json +7 -2
- homeassistant/components/switchbot_cloud/sensor.py +61 -1
- homeassistant/components/switchbot_cloud/strings.json +21 -0
- homeassistant/components/switchbot_cloud/switch.py +2 -5
- homeassistant/components/switchbot_cloud/translations/ca.json +13 -0
- homeassistant/components/switchbot_cloud/translations/cs.json +21 -0
- homeassistant/components/switchbot_cloud/translations/de.json +21 -0
- homeassistant/components/switchbot_cloud/translations/el.json +13 -0
- homeassistant/components/switchbot_cloud/translations/en-GB.json +21 -0
- homeassistant/components/switchbot_cloud/translations/en.json +21 -0
- homeassistant/components/switchbot_cloud/translations/es.json +21 -0
- homeassistant/components/switchbot_cloud/translations/et.json +21 -0
- homeassistant/components/switchbot_cloud/translations/ga.json +21 -0
- homeassistant/components/switchbot_cloud/translations/he.json +13 -0
- homeassistant/components/switchbot_cloud/translations/it.json +18 -0
- homeassistant/components/switchbot_cloud/translations/lt.json +21 -0
- homeassistant/components/switchbot_cloud/translations/nl.json +13 -0
- homeassistant/components/switchbot_cloud/translations/pt.json +21 -0
- homeassistant/components/switchbot_cloud/translations/ru.json +15 -0
- homeassistant/components/switchbot_cloud/translations/sk.json +21 -0
- homeassistant/components/switchbot_cloud/translations/zh-Hans.json +21 -0
- homeassistant/components/switchbot_cloud/translations/zh-Hant.json +21 -0
- homeassistant/components/synology_dsm/__init__.py +5 -2
- homeassistant/components/synology_dsm/binary_sensor.py +5 -2
- homeassistant/components/synology_dsm/button.py +6 -4
- homeassistant/components/synology_dsm/camera.py +11 -5
- homeassistant/components/synology_dsm/coordinator.py +7 -4
- homeassistant/components/synology_dsm/entity.py +22 -14
- homeassistant/components/synology_dsm/media_source.py +16 -9
- homeassistant/components/synology_dsm/sensor.py +64 -38
- homeassistant/components/synology_dsm/services.py +3 -2
- homeassistant/components/synology_dsm/switch.py +13 -9
- homeassistant/components/synology_dsm/update.py +8 -5
- homeassistant/components/system_bridge/manifest.json +1 -1
- homeassistant/components/system_bridge/sensor.py +9 -0
- homeassistant/components/system_bridge/strings.json +3 -0
- homeassistant/components/system_bridge/translations/cs.json +3 -0
- homeassistant/components/system_bridge/translations/de.json +3 -0
- homeassistant/components/system_bridge/translations/en-GB.json +3 -0
- homeassistant/components/system_bridge/translations/en.json +3 -0
- homeassistant/components/system_bridge/translations/es.json +3 -0
- homeassistant/components/system_bridge/translations/et.json +3 -0
- homeassistant/components/system_bridge/translations/ga.json +3 -0
- homeassistant/components/system_bridge/translations/lt.json +3 -0
- homeassistant/components/system_bridge/translations/nl.json +3 -0
- homeassistant/components/system_bridge/translations/pt.json +3 -0
- homeassistant/components/system_bridge/translations/ru.json +3 -0
- homeassistant/components/system_bridge/translations/sk.json +3 -0
- homeassistant/components/system_bridge/translations/zh-Hans.json +3 -0
- homeassistant/components/system_bridge/translations/zh-Hant.json +3 -0
- homeassistant/components/systemmonitor/binary_sensor.py +3 -9
- homeassistant/components/systemmonitor/const.py +4 -0
- homeassistant/components/systemmonitor/coordinator.py +27 -3
- homeassistant/components/systemmonitor/sensor.py +25 -110
- homeassistant/components/systemmonitor/util.py +0 -6
- homeassistant/components/tag/manifest.json +1 -1
- homeassistant/components/tasmota/camera.py +110 -0
- homeassistant/components/tasmota/const.py +1 -0
- homeassistant/components/tasmota/manifest.json +1 -1
- homeassistant/components/tautulli/translations/de.json +2 -2
- homeassistant/components/telegram_bot/__init__.py +39 -0
- homeassistant/components/telegram_bot/bot.py +22 -0
- homeassistant/components/telegram_bot/const.py +14 -0
- homeassistant/components/telegram_bot/icons.json +3 -0
- homeassistant/components/telegram_bot/services.yaml +32 -0
- homeassistant/components/telegram_bot/strings.json +37 -0
- homeassistant/components/telegram_bot/translations/cs.json +37 -0
- homeassistant/components/telegram_bot/translations/de.json +37 -0
- homeassistant/components/telegram_bot/translations/el.json +11 -0
- homeassistant/components/telegram_bot/translations/en-GB.json +37 -0
- homeassistant/components/telegram_bot/translations/en.json +37 -0
- homeassistant/components/telegram_bot/translations/es.json +37 -0
- homeassistant/components/telegram_bot/translations/et.json +37 -0
- homeassistant/components/telegram_bot/translations/ga.json +37 -0
- homeassistant/components/telegram_bot/translations/he.json +15 -0
- homeassistant/components/telegram_bot/translations/lt.json +37 -0
- homeassistant/components/telegram_bot/translations/nl.json +11 -0
- homeassistant/components/telegram_bot/translations/pt.json +37 -0
- homeassistant/components/telegram_bot/translations/ru.json +34 -0
- homeassistant/components/telegram_bot/translations/sk.json +37 -0
- homeassistant/components/telegram_bot/translations/zh-Hans.json +37 -0
- homeassistant/components/telegram_bot/translations/zh-Hant.json +37 -0
- homeassistant/components/template/config.py +35 -10
- homeassistant/components/template/config_flow.py +1 -1
- homeassistant/components/template/strings.json +20 -20
- homeassistant/components/template/translations/cs.json +4 -4
- homeassistant/components/template/translations/de.json +4 -4
- homeassistant/components/template/translations/el.json +10 -2
- homeassistant/components/template/translations/en-GB.json +4 -4
- homeassistant/components/template/translations/en.json +4 -4
- homeassistant/components/template/translations/es.json +4 -4
- homeassistant/components/template/translations/et.json +4 -4
- homeassistant/components/template/translations/fr.json +5 -4
- homeassistant/components/template/translations/ga.json +4 -4
- homeassistant/components/template/translations/he.json +4 -4
- homeassistant/components/template/translations/it.json +16 -0
- homeassistant/components/template/translations/lt.json +6 -4
- homeassistant/components/template/translations/nl.json +4 -2
- homeassistant/components/template/translations/pt.json +4 -4
- homeassistant/components/template/translations/ru.json +4 -4
- homeassistant/components/template/translations/sk.json +4 -4
- homeassistant/components/template/translations/zh-Hans.json +4 -4
- homeassistant/components/template/translations/zh-Hant.json +4 -4
- homeassistant/components/template/trigger_entity.py +17 -5
- homeassistant/components/tesla_fleet/strings.json +2 -2
- homeassistant/components/teslemetry/icons.json +3 -0
- homeassistant/components/teslemetry/services.py +3 -3
- homeassistant/components/teslemetry/strings.json +3 -0
- homeassistant/components/teslemetry/switch.py +50 -27
- homeassistant/components/teslemetry/translations/cs.json +3 -0
- homeassistant/components/teslemetry/translations/de.json +3 -0
- homeassistant/components/teslemetry/translations/en-GB.json +3 -0
- homeassistant/components/teslemetry/translations/en.json +3 -0
- homeassistant/components/teslemetry/translations/es.json +3 -0
- homeassistant/components/teslemetry/translations/et.json +3 -0
- homeassistant/components/teslemetry/translations/ga.json +3 -0
- homeassistant/components/teslemetry/translations/it.json +5 -0
- homeassistant/components/teslemetry/translations/lt.json +3 -0
- homeassistant/components/teslemetry/translations/pt.json +3 -0
- homeassistant/components/teslemetry/translations/sk.json +3 -0
- homeassistant/components/teslemetry/translations/zh-Hans.json +3 -0
- homeassistant/components/teslemetry/translations/zh-Hant.json +3 -0
- homeassistant/components/thread/discovery.py +1 -0
- homeassistant/components/threshold/__init__.py +1 -8
- homeassistant/components/threshold/config_flow.py +1 -0
- homeassistant/components/tibber/manifest.json +1 -1
- homeassistant/components/tibber/sensor.py +3 -4
- homeassistant/components/tibber/services.py +0 -1
- homeassistant/components/todo/intent.py +0 -2
- homeassistant/components/togrill/__init__.py +6 -1
- homeassistant/components/togrill/icons.json +21 -0
- homeassistant/components/togrill/number.py +79 -26
- homeassistant/components/togrill/select.py +176 -0
- homeassistant/components/togrill/strings.json +40 -0
- homeassistant/components/togrill/translations/ca.json +10 -0
- homeassistant/components/togrill/translations/cs.json +40 -0
- homeassistant/components/togrill/translations/de.json +40 -0
- homeassistant/components/togrill/translations/el.json +6 -0
- homeassistant/components/togrill/translations/en-GB.json +40 -0
- homeassistant/components/togrill/translations/en.json +40 -0
- homeassistant/components/togrill/translations/es.json +40 -0
- homeassistant/components/togrill/translations/et.json +40 -0
- homeassistant/components/togrill/translations/ga.json +40 -0
- homeassistant/components/togrill/translations/he.json +15 -0
- homeassistant/components/togrill/translations/it.json +44 -0
- homeassistant/components/togrill/translations/lt.json +40 -0
- homeassistant/components/togrill/translations/nl.json +21 -0
- homeassistant/components/togrill/translations/pl.json +18 -1
- homeassistant/components/togrill/translations/pt.json +40 -0
- homeassistant/components/togrill/translations/sk.json +40 -0
- homeassistant/components/togrill/translations/sv.json +13 -0
- homeassistant/components/togrill/translations/zh-Hans.json +40 -0
- homeassistant/components/togrill/translations/zh-Hant.json +40 -0
- homeassistant/components/tolo/config_flow.py +47 -17
- homeassistant/components/tolo/strings.json +2 -1
- homeassistant/components/tolo/translations/cs.json +2 -1
- homeassistant/components/tolo/translations/de.json +2 -1
- homeassistant/components/tolo/translations/en-GB.json +2 -1
- homeassistant/components/tolo/translations/en.json +2 -1
- homeassistant/components/tolo/translations/et.json +2 -1
- homeassistant/components/tolo/translations/he.json +2 -1
- homeassistant/components/tolo/translations/lt.json +2 -1
- homeassistant/components/tolo/translations/pt.json +2 -1
- homeassistant/components/tolo/translations/sk.json +2 -1
- homeassistant/components/tolo/translations/zh-Hans.json +2 -1
- homeassistant/components/tolo/translations/zh-Hant.json +2 -1
- homeassistant/components/tts/__init__.py +101 -31
- homeassistant/components/tuya/__init__.py +11 -75
- homeassistant/components/tuya/alarm_control_panel.py +7 -11
- homeassistant/components/tuya/binary_sensor.py +39 -88
- homeassistant/components/tuya/button.py +8 -14
- homeassistant/components/tuya/camera.py +8 -14
- homeassistant/components/tuya/climate.py +12 -24
- homeassistant/components/tuya/const.py +527 -0
- homeassistant/components/tuya/cover.py +63 -36
- homeassistant/components/tuya/diagnostics.py +7 -9
- homeassistant/components/tuya/entity.py +4 -2
- homeassistant/components/tuya/event.py +10 -13
- homeassistant/components/tuya/fan.py +12 -23
- homeassistant/components/tuya/humidifier.py +8 -14
- homeassistant/components/tuya/light.py +45 -96
- homeassistant/components/tuya/manifest.json +1 -1
- homeassistant/components/tuya/number.py +61 -70
- homeassistant/components/tuya/scene.py +3 -3
- homeassistant/components/tuya/select.py +52 -76
- homeassistant/components/tuya/sensor.py +214 -168
- homeassistant/components/tuya/siren.py +11 -22
- homeassistant/components/tuya/strings.json +116 -3
- homeassistant/components/tuya/switch.py +168 -145
- homeassistant/components/tuya/translations/bg.json +32 -0
- homeassistant/components/tuya/translations/ca.json +6 -0
- homeassistant/components/tuya/translations/cs.json +113 -0
- homeassistant/components/tuya/translations/de.json +113 -0
- homeassistant/components/tuya/translations/el.json +28 -0
- homeassistant/components/tuya/translations/en-GB.json +113 -0
- homeassistant/components/tuya/translations/en.json +113 -0
- homeassistant/components/tuya/translations/es.json +104 -0
- homeassistant/components/tuya/translations/et.json +104 -0
- homeassistant/components/tuya/translations/fr.json +6 -0
- homeassistant/components/tuya/translations/ga.json +104 -0
- homeassistant/components/tuya/translations/he.json +32 -0
- homeassistant/components/tuya/translations/it.json +68 -0
- homeassistant/components/tuya/translations/lt.json +113 -0
- homeassistant/components/tuya/translations/nl.json +29 -0
- homeassistant/components/tuya/translations/pt.json +104 -0
- homeassistant/components/tuya/translations/ru.json +3 -0
- homeassistant/components/tuya/translations/sk.json +113 -0
- homeassistant/components/tuya/translations/sl.json +25 -0
- homeassistant/components/tuya/translations/zh-Hans.json +113 -0
- homeassistant/components/tuya/translations/zh-Hant.json +113 -0
- homeassistant/components/tuya/vacuum.py +6 -6
- homeassistant/components/tuya/valve.py +12 -11
- homeassistant/components/twitch/coordinator.py +3 -0
- homeassistant/components/unifi/manifest.json +1 -1
- homeassistant/components/unifiprotect/repairs.py +2 -11
- homeassistant/components/unifiprotect/translations/pt.json +1 -1
- homeassistant/components/universal/media_player.py +1 -1
- homeassistant/components/upcloud/manifest.json +1 -1
- homeassistant/components/uptimerobot/binary_sensor.py +23 -11
- homeassistant/components/uptimerobot/config_flow.py +27 -0
- homeassistant/components/uptimerobot/quality_scale.yaml +2 -6
- homeassistant/components/uptimerobot/sensor.py +32 -14
- homeassistant/components/uptimerobot/strings.json +9 -0
- homeassistant/components/uptimerobot/switch.py +23 -11
- homeassistant/components/uptimerobot/translations/bg.json +6 -0
- homeassistant/components/uptimerobot/translations/ca.json +6 -0
- homeassistant/components/uptimerobot/translations/cs.json +9 -0
- homeassistant/components/uptimerobot/translations/de.json +9 -0
- homeassistant/components/uptimerobot/translations/el.json +9 -0
- homeassistant/components/uptimerobot/translations/en-GB.json +9 -0
- homeassistant/components/uptimerobot/translations/en.json +9 -0
- homeassistant/components/uptimerobot/translations/es.json +9 -0
- homeassistant/components/uptimerobot/translations/et.json +9 -0
- homeassistant/components/uptimerobot/translations/ga.json +9 -0
- homeassistant/components/uptimerobot/translations/he.json +6 -0
- homeassistant/components/uptimerobot/translations/it.json +9 -0
- homeassistant/components/uptimerobot/translations/lt.json +9 -0
- homeassistant/components/uptimerobot/translations/nl.json +6 -0
- homeassistant/components/uptimerobot/translations/pt.json +9 -0
- homeassistant/components/uptimerobot/translations/ru.json +9 -0
- homeassistant/components/uptimerobot/translations/sk.json +9 -0
- homeassistant/components/uptimerobot/translations/zh-Hans.json +9 -0
- homeassistant/components/uptimerobot/translations/zh-Hant.json +9 -0
- homeassistant/components/usage_prediction/__init__.py +89 -0
- homeassistant/components/usage_prediction/common_control.py +239 -0
- homeassistant/components/usage_prediction/const.py +13 -0
- homeassistant/components/usage_prediction/manifest.json +10 -0
- homeassistant/components/usage_prediction/models.py +24 -0
- homeassistant/components/usage_prediction/strings.json +3 -0
- homeassistant/components/usage_prediction/translations/cs.json +3 -0
- homeassistant/components/usage_prediction/translations/de.json +3 -0
- homeassistant/components/usage_prediction/translations/en-GB.json +3 -0
- homeassistant/components/usage_prediction/translations/en.json +3 -0
- homeassistant/components/usage_prediction/translations/es.json +3 -0
- homeassistant/components/usage_prediction/translations/ga.json +3 -0
- homeassistant/components/usage_prediction/translations/lt.json +3 -0
- homeassistant/components/usage_prediction/translations/pt.json +3 -0
- homeassistant/components/usage_prediction/translations/sk.json +3 -0
- homeassistant/components/usage_prediction/translations/zh-Hans.json +3 -0
- homeassistant/components/usage_prediction/translations/zh-Hant.json +3 -0
- homeassistant/components/vacuum/intent.py +3 -1
- homeassistant/components/verisure/alarm_control_panel.py +18 -7
- homeassistant/components/verisure/lock.py +28 -27
- homeassistant/components/verisure/switch.py +1 -1
- homeassistant/components/vesync/__init__.py +20 -50
- homeassistant/components/vesync/binary_sensor.py +14 -7
- homeassistant/components/vesync/common.py +14 -26
- homeassistant/components/vesync/config_flow.py +42 -12
- homeassistant/components/vesync/const.py +10 -87
- homeassistant/components/vesync/coordinator.py +17 -10
- homeassistant/components/vesync/diagnostics.py +37 -29
- homeassistant/components/vesync/entity.py +2 -2
- homeassistant/components/vesync/fan.py +74 -74
- homeassistant/components/vesync/humidifier.py +32 -34
- homeassistant/components/vesync/light.py +24 -16
- homeassistant/components/vesync/manifest.json +4 -3
- homeassistant/components/vesync/number.py +27 -13
- homeassistant/components/vesync/select.py +42 -25
- homeassistant/components/vesync/sensor.py +34 -85
- homeassistant/components/vesync/switch.py +21 -17
- homeassistant/components/vicare/sensor.py +9 -0
- homeassistant/components/vicare/strings.json +3 -0
- homeassistant/components/vicare/translations/cs.json +3 -0
- homeassistant/components/vicare/translations/de.json +3 -0
- homeassistant/components/vicare/translations/en-GB.json +3 -0
- homeassistant/components/vicare/translations/en.json +3 -0
- homeassistant/components/vicare/translations/es.json +3 -0
- homeassistant/components/vicare/translations/et.json +3 -0
- homeassistant/components/vicare/translations/ga.json +3 -0
- homeassistant/components/vicare/translations/it.json +3 -0
- homeassistant/components/vicare/translations/lt.json +3 -0
- homeassistant/components/vicare/translations/pt.json +3 -0
- homeassistant/components/vicare/translations/sk.json +3 -0
- homeassistant/components/vicare/translations/zh-Hans.json +3 -0
- homeassistant/components/vicare/translations/zh-Hant.json +3 -0
- homeassistant/components/victron_remote_monitoring/__init__.py +34 -0
- homeassistant/components/victron_remote_monitoring/config_flow.py +255 -0
- homeassistant/components/victron_remote_monitoring/const.py +9 -0
- homeassistant/components/victron_remote_monitoring/coordinator.py +98 -0
- homeassistant/components/victron_remote_monitoring/manifest.json +11 -0
- homeassistant/components/victron_remote_monitoring/quality_scale.yaml +66 -0
- homeassistant/components/victron_remote_monitoring/sensor.py +250 -0
- homeassistant/components/victron_remote_monitoring/strings.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/ca.json +25 -0
- homeassistant/components/victron_remote_monitoring/translations/cs.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/de.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/en-GB.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/en.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/es.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/et.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/fy.json +24 -0
- homeassistant/components/victron_remote_monitoring/translations/ga.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/he.json +25 -0
- homeassistant/components/victron_remote_monitoring/translations/lt.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/mk.json +60 -0
- homeassistant/components/victron_remote_monitoring/translations/nl.json +25 -0
- homeassistant/components/victron_remote_monitoring/translations/pt.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/ru.json +40 -0
- homeassistant/components/victron_remote_monitoring/translations/sk.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/zh-Hans.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/zh-Hant.json +102 -0
- homeassistant/components/voip/manifest.json +1 -1
- homeassistant/components/voip/translations/he.json +1 -1
- homeassistant/components/volvo/__init__.py +19 -17
- homeassistant/components/volvo/api.py +18 -0
- homeassistant/components/volvo/binary_sensor.py +1 -1
- homeassistant/components/volvo/coordinator.py +92 -53
- homeassistant/components/volvo/entity.py +1 -1
- homeassistant/components/volvo/sensor.py +1 -1
- homeassistant/components/volvo/translations/en-GB.json +1 -1
- homeassistant/components/volvo/translations/pt.json +1 -1
- homeassistant/components/volvooncall/__init__.py +30 -55
- homeassistant/components/volvooncall/config_flow.py +5 -111
- homeassistant/components/volvooncall/const.py +1 -64
- homeassistant/components/volvooncall/manifest.json +2 -3
- homeassistant/components/volvooncall/strings.json +8 -13
- homeassistant/components/volvooncall/translations/bg.json +1 -21
- homeassistant/components/volvooncall/translations/bn.json +1 -7
- homeassistant/components/volvooncall/translations/ca.json +1 -21
- homeassistant/components/volvooncall/translations/cs.json +8 -13
- homeassistant/components/volvooncall/translations/da.json +1 -20
- homeassistant/components/volvooncall/translations/de.json +8 -13
- homeassistant/components/volvooncall/translations/el.json +1 -23
- homeassistant/components/volvooncall/translations/en-GB.json +8 -13
- homeassistant/components/volvooncall/translations/en.json +8 -13
- homeassistant/components/volvooncall/translations/es.json +8 -13
- homeassistant/components/volvooncall/translations/et.json +8 -13
- homeassistant/components/volvooncall/translations/fi.json +1 -21
- homeassistant/components/volvooncall/translations/fr.json +1 -21
- homeassistant/components/volvooncall/translations/fy.json +1 -21
- homeassistant/components/volvooncall/translations/ga.json +1 -21
- homeassistant/components/volvooncall/translations/he.json +1 -20
- homeassistant/components/volvooncall/translations/hu.json +1 -21
- homeassistant/components/volvooncall/translations/id.json +1 -21
- homeassistant/components/volvooncall/translations/it.json +1 -21
- homeassistant/components/volvooncall/translations/ja.json +1 -21
- homeassistant/components/volvooncall/translations/ko.json +1 -21
- homeassistant/components/volvooncall/translations/lt.json +8 -13
- homeassistant/components/volvooncall/translations/lv.json +1 -19
- homeassistant/components/volvooncall/translations/nb.json +1 -21
- homeassistant/components/volvooncall/translations/nl.json +1 -21
- homeassistant/components/volvooncall/translations/pl.json +1 -21
- homeassistant/components/volvooncall/translations/pt-BR.json +1 -21
- homeassistant/components/volvooncall/translations/pt.json +8 -13
- homeassistant/components/volvooncall/translations/ro.json +1 -21
- homeassistant/components/volvooncall/translations/ru.json +8 -11
- homeassistant/components/volvooncall/translations/sk.json +8 -13
- homeassistant/components/volvooncall/translations/sl.json +1 -20
- homeassistant/components/volvooncall/translations/sv.json +1 -21
- homeassistant/components/volvooncall/translations/tr.json +1 -21
- homeassistant/components/volvooncall/translations/uk.json +1 -21
- homeassistant/components/volvooncall/translations/vi.json +1 -7
- homeassistant/components/volvooncall/translations/zh-Hans.json +8 -13
- homeassistant/components/volvooncall/translations/zh-Hant.json +8 -13
- homeassistant/components/wake_on_lan/__init__.py +0 -6
- homeassistant/components/wake_on_lan/config_flow.py +1 -0
- homeassistant/components/weatherflow/__init__.py +1 -0
- homeassistant/components/weatherflow/event.py +104 -0
- homeassistant/components/weatherflow/icons.json +8 -0
- homeassistant/components/weatherflow/strings.json +8 -0
- homeassistant/components/weatherflow/translations/cs.json +8 -0
- homeassistant/components/weatherflow/translations/de.json +8 -0
- homeassistant/components/weatherflow/translations/en-GB.json +8 -0
- homeassistant/components/weatherflow/translations/en.json +8 -0
- homeassistant/components/weatherflow/translations/es.json +8 -0
- homeassistant/components/weatherflow/translations/et.json +8 -0
- homeassistant/components/weatherflow/translations/ga.json +8 -0
- homeassistant/components/weatherflow/translations/lt.json +8 -0
- homeassistant/components/weatherflow/translations/nl.json +8 -0
- homeassistant/components/weatherflow/translations/pt.json +8 -0
- homeassistant/components/weatherflow/translations/sk.json +8 -0
- homeassistant/components/weatherflow/translations/zh-Hans.json +8 -0
- homeassistant/components/weatherflow/translations/zh-Hant.json +8 -0
- homeassistant/components/webhook/trigger.py +10 -3
- homeassistant/components/whirlpool/binary_sensor.py +1 -0
- homeassistant/components/whirlpool/climate.py +24 -29
- homeassistant/components/whirlpool/entity.py +32 -6
- homeassistant/components/whirlpool/manifest.json +2 -2
- homeassistant/components/whirlpool/quality_scale.yaml +5 -15
- homeassistant/components/whirlpool/sensor.py +1 -0
- homeassistant/components/whirlpool/strings.json +3 -0
- homeassistant/components/whirlpool/translations/cs.json +3 -0
- homeassistant/components/whirlpool/translations/de.json +3 -0
- homeassistant/components/whirlpool/translations/en-GB.json +3 -0
- homeassistant/components/whirlpool/translations/en.json +3 -0
- homeassistant/components/whirlpool/translations/es.json +3 -0
- homeassistant/components/whirlpool/translations/et.json +3 -0
- homeassistant/components/whirlpool/translations/ga.json +3 -0
- homeassistant/components/whirlpool/translations/it.json +5 -0
- homeassistant/components/whirlpool/translations/lt.json +3 -0
- homeassistant/components/whirlpool/translations/pt.json +3 -0
- homeassistant/components/whirlpool/translations/ru.json +3 -0
- homeassistant/components/whirlpool/translations/sk.json +3 -0
- homeassistant/components/whirlpool/translations/zh-Hans.json +3 -0
- homeassistant/components/whirlpool/translations/zh-Hant.json +3 -0
- homeassistant/components/wmspro/cover.py +24 -11
- homeassistant/components/workday/calendar.py +104 -0
- homeassistant/components/workday/const.py +1 -1
- homeassistant/components/workday/strings.json +5 -0
- homeassistant/components/workday/translations/ca.json +5 -0
- homeassistant/components/workday/translations/cs.json +5 -0
- homeassistant/components/workday/translations/de.json +5 -0
- homeassistant/components/workday/translations/el.json +5 -0
- homeassistant/components/workday/translations/en-GB.json +5 -0
- homeassistant/components/workday/translations/en.json +5 -0
- homeassistant/components/workday/translations/es.json +5 -0
- homeassistant/components/workday/translations/et.json +5 -0
- homeassistant/components/workday/translations/fr.json +5 -0
- homeassistant/components/workday/translations/ga.json +5 -0
- homeassistant/components/workday/translations/he.json +5 -0
- homeassistant/components/workday/translations/lt.json +5 -0
- homeassistant/components/workday/translations/nl.json +5 -0
- homeassistant/components/workday/translations/pt.json +5 -0
- homeassistant/components/workday/translations/ru.json +5 -0
- homeassistant/components/workday/translations/sk.json +5 -0
- homeassistant/components/workday/translations/uk.json +7 -0
- homeassistant/components/workday/translations/zh-Hans.json +5 -0
- homeassistant/components/workday/translations/zh-Hant.json +5 -0
- homeassistant/components/wyoming/manifest.json +1 -1
- homeassistant/components/wyoming/translations/he.json +1 -1
- homeassistant/components/yale/lock.py +13 -19
- homeassistant/components/yale/manifest.json +1 -1
- homeassistant/components/yalexs_ble/__init__.py +0 -12
- homeassistant/components/yalexs_ble/config_flow.py +2 -2
- homeassistant/components/yalexs_ble/translations/pt.json +2 -2
- homeassistant/components/yalexs_ble/translations/ru.json +12 -0
- homeassistant/components/zabbix/manifest.json +1 -1
- homeassistant/components/zeroconf/manifest.json +1 -1
- homeassistant/components/zha/__init__.py +1 -1
- homeassistant/components/zha/api.py +1 -1
- homeassistant/components/zha/config_flow.py +251 -76
- homeassistant/components/zha/cover.py +1 -15
- homeassistant/components/zha/manifest.json +1 -1
- homeassistant/components/zha/radio_manager.py +81 -82
- homeassistant/components/zha/repairs/network_settings_inconsistent.py +1 -1
- homeassistant/components/zha/strings.json +80 -7
- homeassistant/components/zha/translations/bg.json +0 -5
- homeassistant/components/zha/translations/bn.json +1 -2
- homeassistant/components/zha/translations/ca.json +1 -5
- homeassistant/components/zha/translations/cs.json +81 -8
- homeassistant/components/zha/translations/da.json +1 -6
- homeassistant/components/zha/translations/de.json +81 -8
- homeassistant/components/zha/translations/el.json +0 -4
- homeassistant/components/zha/translations/en-GB.json +81 -8
- homeassistant/components/zha/translations/en.json +81 -8
- homeassistant/components/zha/translations/es.json +0 -5
- homeassistant/components/zha/translations/et.json +0 -5
- homeassistant/components/zha/translations/fi.json +1 -6
- homeassistant/components/zha/translations/fr.json +74 -5
- homeassistant/components/zha/translations/fy.json +0 -3
- homeassistant/components/zha/translations/ga.json +0 -5
- homeassistant/components/zha/translations/gsw.json +1 -4
- homeassistant/components/zha/translations/he.json +0 -3
- homeassistant/components/zha/translations/hu.json +0 -5
- homeassistant/components/zha/translations/id.json +1 -6
- homeassistant/components/zha/translations/it.json +1 -6
- homeassistant/components/zha/translations/ja.json +0 -5
- homeassistant/components/zha/translations/ko.json +1 -6
- homeassistant/components/zha/translations/lt.json +81 -8
- homeassistant/components/zha/translations/nb.json +1 -3
- homeassistant/components/zha/translations/nl.json +0 -5
- homeassistant/components/zha/translations/pl.json +1 -2
- homeassistant/components/zha/translations/pt-BR.json +1 -4
- homeassistant/components/zha/translations/pt.json +0 -5
- homeassistant/components/zha/translations/ro.json +1 -4
- homeassistant/components/zha/translations/ru.json +0 -5
- homeassistant/components/zha/translations/sk.json +81 -8
- homeassistant/components/zha/translations/sl.json +0 -4
- homeassistant/components/zha/translations/sv.json +0 -5
- homeassistant/components/zha/translations/tr.json +0 -5
- homeassistant/components/zha/translations/uk.json +1 -3
- homeassistant/components/zha/translations/zh-Hans.json +81 -8
- homeassistant/components/zha/translations/zh-Hant.json +81 -8
- homeassistant/components/zhong_hong/climate.py +25 -3
- homeassistant/components/zimi/manifest.json +1 -1
- homeassistant/components/zwave_js/__init__.py +25 -7
- homeassistant/components/zwave_js/config_flow.py +102 -24
- homeassistant/components/zwave_js/const.py +3 -0
- homeassistant/components/zwave_js/device_trigger.py +6 -4
- homeassistant/components/zwave_js/strings.json +7 -2
- homeassistant/components/zwave_js/translations/cs.json +5 -0
- homeassistant/components/zwave_js/translations/de.json +5 -0
- homeassistant/components/zwave_js/translations/en-GB.json +5 -0
- homeassistant/components/zwave_js/translations/en.json +5 -0
- homeassistant/components/zwave_js/translations/es.json +4 -0
- homeassistant/components/zwave_js/translations/et.json +4 -0
- homeassistant/components/zwave_js/translations/fr.json +1 -0
- homeassistant/components/zwave_js/translations/ga.json +4 -0
- homeassistant/components/zwave_js/translations/it.json +6 -0
- homeassistant/components/zwave_js/translations/lt.json +5 -0
- homeassistant/components/zwave_js/translations/pt.json +6 -2
- homeassistant/components/zwave_js/translations/ru.json +1 -0
- homeassistant/components/zwave_js/translations/sk.json +5 -0
- homeassistant/components/zwave_js/translations/zh-Hans.json +5 -0
- homeassistant/components/zwave_js/translations/zh-Hant.json +5 -0
- homeassistant/components/zwave_js/triggers/event.py +143 -116
- homeassistant/components/zwave_js/triggers/value_updated.py +66 -39
- homeassistant/config_entries.py +38 -7
- homeassistant/const.py +10 -50
- homeassistant/data_entry_flow.py +140 -2
- homeassistant/generated/application_credentials.py +1 -0
- homeassistant/generated/config_flows.py +13 -0
- homeassistant/generated/dhcp.py +8 -0
- homeassistant/generated/entity_platforms.py +54 -0
- homeassistant/generated/integrations.json +84 -20
- homeassistant/generated/usb.py +6 -0
- homeassistant/generated/zeroconf.py +5 -0
- homeassistant/helpers/condition.py +7 -2
- homeassistant/helpers/config_validation.py +22 -5
- homeassistant/helpers/deprecation.py +35 -0
- homeassistant/helpers/device_registry.py +97 -40
- homeassistant/helpers/entity_component.py +2 -48
- homeassistant/helpers/entity_platform.py +1 -1
- homeassistant/helpers/entity_registry.py +2 -1
- homeassistant/helpers/event.py +2 -1
- homeassistant/helpers/intent.py +18 -21
- homeassistant/helpers/llm.py +4 -3
- homeassistant/helpers/schema_config_entry_flow.py +21 -0
- homeassistant/helpers/selector.py +81 -87
- homeassistant/helpers/service.py +87 -36
- homeassistant/helpers/service_info/esphome.py +26 -0
- homeassistant/helpers/target.py +3 -6
- homeassistant/helpers/{template.py → template/__init__.py} +113 -806
- homeassistant/helpers/template/context.py +45 -0
- homeassistant/helpers/template/extensions/__init__.py +17 -0
- homeassistant/helpers/template/extensions/base.py +60 -0
- homeassistant/helpers/template/extensions/base64.py +50 -0
- homeassistant/helpers/template/extensions/collection.py +191 -0
- homeassistant/helpers/template/extensions/crypto.py +64 -0
- homeassistant/helpers/template/extensions/math.py +329 -0
- homeassistant/helpers/template/extensions/regex.py +109 -0
- homeassistant/helpers/template/extensions/string.py +58 -0
- homeassistant/helpers/template/helpers.py +16 -0
- homeassistant/helpers/template/render_info.py +155 -0
- homeassistant/helpers/trigger.py +86 -11
- homeassistant/helpers/trigger_template_entity.py +2 -2
- homeassistant/package_constraints.txt +14 -14
- homeassistant/runner.py +115 -0
- homeassistant/strings.json +1 -1
- homeassistant/util/unit_conversion.py +29 -0
- homeassistant/util/unit_system.py +6 -0
- {homeassistant-2025.9.4.dist-info → homeassistant-2025.10.0b0.dist-info}/METADATA +6 -6
- {homeassistant-2025.9.4.dist-info → homeassistant-2025.10.0b0.dist-info}/RECORD +2469 -2099
- homeassistant/components/google_gemini/__init__.py +0 -1
- homeassistant/components/google_gemini/manifest.json +0 -6
- homeassistant/components/home_connect/repairs.py +0 -60
- homeassistant/components/home_connect/time.py +0 -172
- homeassistant/components/logbook/translations/da.json +0 -3
- homeassistant/components/volvooncall/binary_sensor.py +0 -79
- homeassistant/components/volvooncall/coordinator.py +0 -40
- homeassistant/components/volvooncall/device_tracker.py +0 -72
- homeassistant/components/volvooncall/entity.py +0 -88
- homeassistant/components/volvooncall/errors.py +0 -7
- homeassistant/components/volvooncall/lock.py +0 -80
- homeassistant/components/volvooncall/models.py +0 -100
- homeassistant/components/volvooncall/sensor.py +0 -72
- homeassistant/components/volvooncall/switch.py +0 -78
- {homeassistant-2025.9.4.dist-info → homeassistant-2025.10.0b0.dist-info}/WHEEL +0 -0
- {homeassistant-2025.9.4.dist-info → homeassistant-2025.10.0b0.dist-info}/entry_points.txt +0 -0
- {homeassistant-2025.9.4.dist-info → homeassistant-2025.10.0b0.dist-info}/licenses/LICENSE.md +0 -0
- {homeassistant-2025.9.4.dist-info → homeassistant-2025.10.0b0.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
- {homeassistant-2025.9.4.dist-info → homeassistant-2025.10.0b0.dist-info}/top_level.txt +0 -0
|
@@ -39,6 +39,7 @@ from homeassistant.components.climate import (
|
|
|
39
39
|
from homeassistant.components.cover import CoverDeviceClass
|
|
40
40
|
from homeassistant.components.file_upload import process_uploaded_file
|
|
41
41
|
from homeassistant.components.hassio import AddonError, AddonManager, AddonState
|
|
42
|
+
from homeassistant.components.image import DEFAULT_CONTENT_TYPE
|
|
42
43
|
from homeassistant.components.light import (
|
|
43
44
|
DEFAULT_MAX_KELVIN,
|
|
44
45
|
DEFAULT_MIN_KELVIN,
|
|
@@ -167,6 +168,7 @@ from .const import (
|
|
|
167
168
|
CONF_COMMAND_ON_TEMPLATE,
|
|
168
169
|
CONF_COMMAND_TEMPLATE,
|
|
169
170
|
CONF_COMMAND_TOPIC,
|
|
171
|
+
CONF_CONTENT_TYPE,
|
|
170
172
|
CONF_CURRENT_HUMIDITY_TEMPLATE,
|
|
171
173
|
CONF_CURRENT_HUMIDITY_TOPIC,
|
|
172
174
|
CONF_CURRENT_TEMP_TEMPLATE,
|
|
@@ -205,6 +207,8 @@ from .const import (
|
|
|
205
207
|
CONF_HUMIDITY_MIN,
|
|
206
208
|
CONF_HUMIDITY_STATE_TEMPLATE,
|
|
207
209
|
CONF_HUMIDITY_STATE_TOPIC,
|
|
210
|
+
CONF_IMAGE_ENCODING,
|
|
211
|
+
CONF_IMAGE_TOPIC,
|
|
208
212
|
CONF_KEEPALIVE,
|
|
209
213
|
CONF_LAST_RESET_VALUE_TEMPLATE,
|
|
210
214
|
CONF_MAX_KELVIN,
|
|
@@ -330,6 +334,8 @@ from .const import (
|
|
|
330
334
|
CONF_TLS_INSECURE,
|
|
331
335
|
CONF_TRANSITION,
|
|
332
336
|
CONF_TRANSPORT,
|
|
337
|
+
CONF_URL_TEMPLATE,
|
|
338
|
+
CONF_URL_TOPIC,
|
|
333
339
|
CONF_WHITE_COMMAND_TOPIC,
|
|
334
340
|
CONF_WHITE_SCALE,
|
|
335
341
|
CONF_WILL_MESSAGE,
|
|
@@ -421,21 +427,73 @@ ADVANCED_OPTIONS = "advanced_options"
|
|
|
421
427
|
SET_CA_CERT = "set_ca_cert"
|
|
422
428
|
SET_CLIENT_CERT = "set_client_cert"
|
|
423
429
|
|
|
430
|
+
CA_VERIFICATION_MODES = [
|
|
431
|
+
"off",
|
|
432
|
+
"auto",
|
|
433
|
+
"custom",
|
|
434
|
+
]
|
|
435
|
+
|
|
436
|
+
SUBENTRY_PLATFORMS = [
|
|
437
|
+
Platform.ALARM_CONTROL_PANEL,
|
|
438
|
+
Platform.BINARY_SENSOR,
|
|
439
|
+
Platform.BUTTON,
|
|
440
|
+
Platform.CLIMATE,
|
|
441
|
+
Platform.COVER,
|
|
442
|
+
Platform.FAN,
|
|
443
|
+
Platform.IMAGE,
|
|
444
|
+
Platform.LIGHT,
|
|
445
|
+
Platform.LOCK,
|
|
446
|
+
Platform.NOTIFY,
|
|
447
|
+
Platform.SENSOR,
|
|
448
|
+
Platform.SWITCH,
|
|
449
|
+
]
|
|
450
|
+
|
|
451
|
+
_CODE_VALIDATION_MODE = {
|
|
452
|
+
"remote_code": REMOTE_CODE,
|
|
453
|
+
"remote_code_text": REMOTE_CODE_TEXT,
|
|
454
|
+
}
|
|
455
|
+
EXCLUDE_FROM_CONFIG_IF_NONE = {CONF_ENTITY_CATEGORY}
|
|
456
|
+
PWD_NOT_CHANGED = "__**password_not_changed**__"
|
|
457
|
+
|
|
458
|
+
# Common selectors
|
|
424
459
|
BOOLEAN_SELECTOR = BooleanSelector()
|
|
460
|
+
TEMPLATE_SELECTOR = TemplateSelector(TemplateSelectorConfig())
|
|
461
|
+
TEMPLATE_SELECTOR_READ_ONLY = TemplateSelector(TemplateSelectorConfig(read_only=True))
|
|
425
462
|
TEXT_SELECTOR = TextSelector(TextSelectorConfig(type=TextSelectorType.TEXT))
|
|
426
463
|
TEXT_SELECTOR_READ_ONLY = TextSelector(
|
|
427
464
|
TextSelectorConfig(type=TextSelectorType.TEXT, read_only=True)
|
|
428
465
|
)
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
466
|
+
OPTIONS_SELECTOR = SelectSelector(
|
|
467
|
+
SelectSelectorConfig(
|
|
468
|
+
options=[],
|
|
469
|
+
custom_value=True,
|
|
470
|
+
multiple=True,
|
|
471
|
+
)
|
|
434
472
|
)
|
|
435
473
|
PASSWORD_SELECTOR = TextSelector(TextSelectorConfig(type=TextSelectorType.PASSWORD))
|
|
436
474
|
QOS_SELECTOR = NumberSelector(
|
|
437
475
|
NumberSelectorConfig(mode=NumberSelectorMode.BOX, min=0, max=2)
|
|
438
476
|
)
|
|
477
|
+
URL_SELECTOR = TextSelector(TextSelectorConfig(type=TextSelectorType.URL))
|
|
478
|
+
|
|
479
|
+
# Config flow specific selectors
|
|
480
|
+
BROKER_VERIFICATION_SELECTOR = SelectSelector(
|
|
481
|
+
SelectSelectorConfig(
|
|
482
|
+
options=CA_VERIFICATION_MODES,
|
|
483
|
+
mode=SelectSelectorMode.DROPDOWN,
|
|
484
|
+
translation_key=SET_CA_CERT,
|
|
485
|
+
)
|
|
486
|
+
)
|
|
487
|
+
# mime configuration from https://pki-tutorial.readthedocs.io/en/latest/mime.html
|
|
488
|
+
CA_CERT_UPLOAD_SELECTOR = FileSelector(
|
|
489
|
+
FileSelectorConfig(accept=".pem,.crt,.cer,.der,application/x-x509-ca-cert")
|
|
490
|
+
)
|
|
491
|
+
CERT_KEY_UPLOAD_SELECTOR = FileSelector(
|
|
492
|
+
FileSelectorConfig(accept=".pem,.key,.der,.pk8,application/pkcs8")
|
|
493
|
+
)
|
|
494
|
+
CERT_UPLOAD_SELECTOR = FileSelector(
|
|
495
|
+
FileSelectorConfig(accept=".pem,.crt,.cer,.der,application/x-x509-user-cert")
|
|
496
|
+
)
|
|
439
497
|
KEEPALIVE_SELECTOR = vol.All(
|
|
440
498
|
NumberSelector(
|
|
441
499
|
NumberSelectorConfig(
|
|
@@ -444,12 +502,17 @@ KEEPALIVE_SELECTOR = vol.All(
|
|
|
444
502
|
),
|
|
445
503
|
vol.Coerce(int),
|
|
446
504
|
)
|
|
505
|
+
PORT_SELECTOR = vol.All(
|
|
506
|
+
NumberSelector(NumberSelectorConfig(mode=NumberSelectorMode.BOX, min=1, max=65535)),
|
|
507
|
+
vol.Coerce(int),
|
|
508
|
+
)
|
|
447
509
|
PROTOCOL_SELECTOR = SelectSelector(
|
|
448
510
|
SelectSelectorConfig(
|
|
449
511
|
options=SUPPORTED_PROTOCOLS,
|
|
450
512
|
mode=SelectSelectorMode.DROPDOWN,
|
|
451
513
|
)
|
|
452
514
|
)
|
|
515
|
+
PUBLISH_TOPIC_SELECTOR = TextSelector(TextSelectorConfig(type=TextSelectorType.TEXT))
|
|
453
516
|
SUPPORTED_TRANSPORTS = [
|
|
454
517
|
SelectOptionDict(value=TRANSPORT_TCP, label="TCP"),
|
|
455
518
|
SelectOptionDict(value=TRANSPORT_WEBSOCKETS, label="WebSocket"),
|
|
@@ -463,54 +526,16 @@ TRANSPORT_SELECTOR = SelectSelector(
|
|
|
463
526
|
WS_HEADERS_SELECTOR = TextSelector(
|
|
464
527
|
TextSelectorConfig(type=TextSelectorType.TEXT, multiline=True)
|
|
465
528
|
)
|
|
466
|
-
CA_VERIFICATION_MODES = [
|
|
467
|
-
"off",
|
|
468
|
-
"auto",
|
|
469
|
-
"custom",
|
|
470
|
-
]
|
|
471
|
-
BROKER_VERIFICATION_SELECTOR = SelectSelector(
|
|
472
|
-
SelectSelectorConfig(
|
|
473
|
-
options=CA_VERIFICATION_MODES,
|
|
474
|
-
mode=SelectSelectorMode.DROPDOWN,
|
|
475
|
-
translation_key=SET_CA_CERT,
|
|
476
|
-
)
|
|
477
|
-
)
|
|
478
529
|
|
|
479
|
-
#
|
|
480
|
-
|
|
481
|
-
FileSelectorConfig(accept=".pem,.crt,.cer,.der,application/x-x509-ca-cert")
|
|
482
|
-
)
|
|
483
|
-
CERT_UPLOAD_SELECTOR = FileSelector(
|
|
484
|
-
FileSelectorConfig(accept=".pem,.crt,.cer,.der,application/x-x509-user-cert")
|
|
485
|
-
)
|
|
486
|
-
KEY_UPLOAD_SELECTOR = FileSelector(
|
|
487
|
-
FileSelectorConfig(accept=".pem,.key,.der,.pk8,application/pkcs8")
|
|
488
|
-
)
|
|
489
|
-
|
|
490
|
-
# Subentry selectors
|
|
491
|
-
SUBENTRY_PLATFORMS = [
|
|
492
|
-
Platform.ALARM_CONTROL_PANEL,
|
|
493
|
-
Platform.BINARY_SENSOR,
|
|
494
|
-
Platform.BUTTON,
|
|
495
|
-
Platform.CLIMATE,
|
|
496
|
-
Platform.COVER,
|
|
497
|
-
Platform.FAN,
|
|
498
|
-
Platform.LIGHT,
|
|
499
|
-
Platform.LOCK,
|
|
500
|
-
Platform.NOTIFY,
|
|
501
|
-
Platform.SENSOR,
|
|
502
|
-
Platform.SWITCH,
|
|
503
|
-
]
|
|
504
|
-
SUBENTRY_PLATFORM_SELECTOR = SelectSelector(
|
|
530
|
+
# MQTT device subentry selectors
|
|
531
|
+
ENTITY_CATEGORY_SELECTOR = SelectSelector(
|
|
505
532
|
SelectSelectorConfig(
|
|
506
|
-
options=[
|
|
533
|
+
options=[category.value for category in EntityCategory],
|
|
507
534
|
mode=SelectSelectorMode.DROPDOWN,
|
|
508
|
-
translation_key=
|
|
535
|
+
translation_key=CONF_ENTITY_CATEGORY,
|
|
536
|
+
sort=True,
|
|
509
537
|
)
|
|
510
538
|
)
|
|
511
|
-
TEMPLATE_SELECTOR = TemplateSelector(TemplateSelectorConfig())
|
|
512
|
-
TEMPLATE_SELECTOR_READ_ONLY = TemplateSelector(TemplateSelectorConfig(read_only=True))
|
|
513
|
-
|
|
514
539
|
SUBENTRY_AVAILABILITY_SCHEMA = vol.Schema(
|
|
515
540
|
{
|
|
516
541
|
vol.Optional(CONF_AVAILABILITY_TOPIC): TEXT_SELECTOR,
|
|
@@ -523,69 +548,11 @@ SUBENTRY_AVAILABILITY_SCHEMA = vol.Schema(
|
|
|
523
548
|
): TEXT_SELECTOR,
|
|
524
549
|
}
|
|
525
550
|
)
|
|
526
|
-
|
|
527
|
-
SelectSelectorConfig(
|
|
528
|
-
options=[category.value for category in EntityCategory],
|
|
529
|
-
mode=SelectSelectorMode.DROPDOWN,
|
|
530
|
-
translation_key=CONF_ENTITY_CATEGORY,
|
|
531
|
-
sort=True,
|
|
532
|
-
)
|
|
533
|
-
)
|
|
534
|
-
|
|
535
|
-
# Sensor specific selectors
|
|
536
|
-
SENSOR_DEVICE_CLASS_SELECTOR = SelectSelector(
|
|
537
|
-
SelectSelectorConfig(
|
|
538
|
-
options=[device_class.value for device_class in SensorDeviceClass],
|
|
539
|
-
mode=SelectSelectorMode.DROPDOWN,
|
|
540
|
-
translation_key="device_class_sensor",
|
|
541
|
-
sort=True,
|
|
542
|
-
)
|
|
543
|
-
)
|
|
544
|
-
BINARY_SENSOR_DEVICE_CLASS_SELECTOR = SelectSelector(
|
|
545
|
-
SelectSelectorConfig(
|
|
546
|
-
options=[device_class.value for device_class in BinarySensorDeviceClass],
|
|
547
|
-
mode=SelectSelectorMode.DROPDOWN,
|
|
548
|
-
translation_key="device_class_binary_sensor",
|
|
549
|
-
sort=True,
|
|
550
|
-
)
|
|
551
|
-
)
|
|
552
|
-
SENSOR_ENTITY_CATEGORY_SELECTOR = SelectSelector(
|
|
553
|
-
SelectSelectorConfig(
|
|
554
|
-
options=[EntityCategory.DIAGNOSTIC.value],
|
|
555
|
-
mode=SelectSelectorMode.DROPDOWN,
|
|
556
|
-
translation_key=CONF_ENTITY_CATEGORY,
|
|
557
|
-
sort=True,
|
|
558
|
-
)
|
|
559
|
-
)
|
|
560
|
-
|
|
561
|
-
BUTTON_DEVICE_CLASS_SELECTOR = SelectSelector(
|
|
562
|
-
SelectSelectorConfig(
|
|
563
|
-
options=[device_class.value for device_class in ButtonDeviceClass],
|
|
564
|
-
mode=SelectSelectorMode.DROPDOWN,
|
|
565
|
-
translation_key="device_class_button",
|
|
566
|
-
sort=True,
|
|
567
|
-
)
|
|
568
|
-
)
|
|
569
|
-
COVER_DEVICE_CLASS_SELECTOR = SelectSelector(
|
|
570
|
-
SelectSelectorConfig(
|
|
571
|
-
options=[device_class.value for device_class in CoverDeviceClass],
|
|
572
|
-
mode=SelectSelectorMode.DROPDOWN,
|
|
573
|
-
translation_key="device_class_cover",
|
|
574
|
-
sort=True,
|
|
575
|
-
)
|
|
576
|
-
)
|
|
577
|
-
SENSOR_STATE_CLASS_SELECTOR = SelectSelector(
|
|
551
|
+
SUBENTRY_PLATFORM_SELECTOR = SelectSelector(
|
|
578
552
|
SelectSelectorConfig(
|
|
579
|
-
options=[
|
|
553
|
+
options=[platform.value for platform in SUBENTRY_PLATFORMS],
|
|
580
554
|
mode=SelectSelectorMode.DROPDOWN,
|
|
581
|
-
translation_key=
|
|
582
|
-
)
|
|
583
|
-
)
|
|
584
|
-
OPTIONS_SELECTOR = SelectSelector(
|
|
585
|
-
SelectSelectorConfig(
|
|
586
|
-
options=[],
|
|
587
|
-
custom_value=True,
|
|
588
|
-
multiple=True,
|
|
555
|
+
translation_key=CONF_PLATFORM,
|
|
589
556
|
)
|
|
590
557
|
)
|
|
591
558
|
SUGGESTED_DISPLAY_PRECISION_SELECTOR = NumberSelector(
|
|
@@ -595,7 +562,7 @@ TIMEOUT_SELECTOR = NumberSelector(
|
|
|
595
562
|
NumberSelectorConfig(mode=NumberSelectorMode.BOX, min=0)
|
|
596
563
|
)
|
|
597
564
|
|
|
598
|
-
#
|
|
565
|
+
# Entity platform specific selectors
|
|
599
566
|
ALARM_CONTROL_PANEL_FEATURES_SELECTOR = SelectSelector(
|
|
600
567
|
SelectSelectorConfig(
|
|
601
568
|
options=list(ALARM_CONTROL_PANEL_SUPPORTED_FEATURES),
|
|
@@ -609,64 +576,37 @@ ALARM_CONTROL_PANEL_CODE_MODE = SelectSelector(
|
|
|
609
576
|
translation_key="alarm_control_panel_code_mode",
|
|
610
577
|
)
|
|
611
578
|
)
|
|
612
|
-
|
|
613
|
-
# Climate specific selectors
|
|
614
|
-
CLIMATE_MODE_SELECTOR = SelectSelector(
|
|
579
|
+
BINARY_SENSOR_DEVICE_CLASS_SELECTOR = SelectSelector(
|
|
615
580
|
SelectSelectorConfig(
|
|
616
|
-
options=[
|
|
617
|
-
|
|
618
|
-
translation_key="
|
|
581
|
+
options=[device_class.value for device_class in BinarySensorDeviceClass],
|
|
582
|
+
mode=SelectSelectorMode.DROPDOWN,
|
|
583
|
+
translation_key="device_class_binary_sensor",
|
|
584
|
+
sort=True,
|
|
619
585
|
)
|
|
620
586
|
)
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
@callback
|
|
624
|
-
def temperature_selector(config: dict[str, Any]) -> Selector:
|
|
625
|
-
"""Return a temperature selector with configured or system unit."""
|
|
626
|
-
|
|
627
|
-
return NumberSelector(
|
|
628
|
-
NumberSelectorConfig(
|
|
629
|
-
mode=NumberSelectorMode.BOX,
|
|
630
|
-
unit_of_measurement=cv.temperature_unit(config[CONF_TEMPERATURE_UNIT]),
|
|
631
|
-
)
|
|
632
|
-
)
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
@callback
|
|
636
|
-
def temperature_step_selector(config: dict[str, Any]) -> Selector:
|
|
637
|
-
"""Return a temperature step selector."""
|
|
638
|
-
|
|
639
|
-
return NumberSelector(
|
|
640
|
-
NumberSelectorConfig(
|
|
641
|
-
mode=NumberSelectorMode.BOX,
|
|
642
|
-
min=0.1,
|
|
643
|
-
max=10.0,
|
|
644
|
-
step=0.1,
|
|
645
|
-
unit_of_measurement=cv.temperature_unit(config[CONF_TEMPERATURE_UNIT]),
|
|
646
|
-
)
|
|
647
|
-
)
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
TEMPERATURE_UNIT_SELECTOR = SelectSelector(
|
|
587
|
+
BUTTON_DEVICE_CLASS_SELECTOR = SelectSelector(
|
|
651
588
|
SelectSelectorConfig(
|
|
652
|
-
options=[
|
|
653
|
-
SelectOptionDict(value="C", label="°C"),
|
|
654
|
-
SelectOptionDict(value="F", label="°F"),
|
|
655
|
-
],
|
|
589
|
+
options=[device_class.value for device_class in ButtonDeviceClass],
|
|
656
590
|
mode=SelectSelectorMode.DROPDOWN,
|
|
591
|
+
translation_key="device_class_button",
|
|
592
|
+
sort=True,
|
|
657
593
|
)
|
|
658
594
|
)
|
|
659
|
-
|
|
595
|
+
CLIMATE_MODE_SELECTOR = SelectSelector(
|
|
660
596
|
SelectSelectorConfig(
|
|
661
|
-
options=["
|
|
597
|
+
options=["auto", "off", "cool", "heat", "dry", "fan_only"],
|
|
598
|
+
multiple=True,
|
|
599
|
+
translation_key="climate_modes",
|
|
600
|
+
)
|
|
601
|
+
)
|
|
602
|
+
COVER_DEVICE_CLASS_SELECTOR = SelectSelector(
|
|
603
|
+
SelectSelectorConfig(
|
|
604
|
+
options=[device_class.value for device_class in CoverDeviceClass],
|
|
662
605
|
mode=SelectSelectorMode.DROPDOWN,
|
|
606
|
+
translation_key="device_class_cover",
|
|
607
|
+
sort=True,
|
|
663
608
|
)
|
|
664
609
|
)
|
|
665
|
-
|
|
666
|
-
# Cover specific selectors
|
|
667
|
-
POSITION_SELECTOR = NumberSelector(NumberSelectorConfig(mode=NumberSelectorMode.BOX))
|
|
668
|
-
|
|
669
|
-
# Fan specific selectors
|
|
670
610
|
FAN_SPEED_RANGE_MIN_SELECTOR = vol.All(
|
|
671
611
|
NumberSelector(NumberSelectorConfig(mode=NumberSelectorMode.BOX, min=1)),
|
|
672
612
|
vol.Coerce(int),
|
|
@@ -675,22 +615,53 @@ FAN_SPEED_RANGE_MAX_SELECTOR = vol.All(
|
|
|
675
615
|
NumberSelector(NumberSelectorConfig(mode=NumberSelectorMode.BOX, min=2)),
|
|
676
616
|
vol.Coerce(int),
|
|
677
617
|
)
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
618
|
+
FLASH_TIME_SELECTOR = NumberSelector(
|
|
619
|
+
NumberSelectorConfig(
|
|
620
|
+
mode=NumberSelectorMode.BOX,
|
|
621
|
+
min=1,
|
|
622
|
+
)
|
|
623
|
+
)
|
|
624
|
+
HUMIDITY_SELECTOR = vol.All(
|
|
625
|
+
NumberSelector(
|
|
626
|
+
NumberSelectorConfig(mode=NumberSelectorMode.BOX, min=0, max=100, step=1)
|
|
627
|
+
),
|
|
628
|
+
vol.Coerce(int),
|
|
629
|
+
)
|
|
630
|
+
IMAGE_CONTENT_TYPE_SELECTOR = SelectSelector(
|
|
682
631
|
SelectSelectorConfig(
|
|
683
|
-
options=[
|
|
632
|
+
options=[
|
|
633
|
+
SelectOptionDict(
|
|
634
|
+
value="image/jpeg", label="Joint Photographic Expert Group image (JPEG)"
|
|
635
|
+
),
|
|
636
|
+
SelectOptionDict(
|
|
637
|
+
value="image/png", label="Portable Network Graphics (PNG)"
|
|
638
|
+
),
|
|
639
|
+
SelectOptionDict(
|
|
640
|
+
value="image/apng", label="Animated Portable Network Graphics (APNG)"
|
|
641
|
+
),
|
|
642
|
+
SelectOptionDict(value="image/avif", label="AV1 Image File Format (AVIF)"),
|
|
643
|
+
SelectOptionDict(
|
|
644
|
+
value="image/gif", label="Graphics Interchange Format (GIF)"
|
|
645
|
+
),
|
|
646
|
+
SelectOptionDict(
|
|
647
|
+
value="image/svg+xml", label="Scalable Vector Graphics (SVG)"
|
|
648
|
+
),
|
|
649
|
+
SelectOptionDict(value="image/webp", label="Web Picture format (WEBP)"),
|
|
650
|
+
],
|
|
684
651
|
mode=SelectSelectorMode.DROPDOWN,
|
|
685
|
-
translation_key="device_class_switch",
|
|
686
652
|
)
|
|
687
653
|
)
|
|
688
|
-
|
|
689
|
-
# Light specific selectors
|
|
690
|
-
LIGHT_SCHEMA_SELECTOR = SelectSelector(
|
|
654
|
+
IMAGE_ENCODING_SELECTOR = SelectSelector(
|
|
691
655
|
SelectSelectorConfig(
|
|
692
|
-
options=["
|
|
693
|
-
translation_key="
|
|
656
|
+
options=["raw", "b64"],
|
|
657
|
+
translation_key="image_encoding",
|
|
658
|
+
mode=SelectSelectorMode.DROPDOWN,
|
|
659
|
+
)
|
|
660
|
+
)
|
|
661
|
+
IMAGE_PROCESSING_MODE_SELECTOR = SelectSelector(
|
|
662
|
+
SelectSelectorConfig(
|
|
663
|
+
options=["image_url", "image_data"],
|
|
664
|
+
translation_key="image_processing_mode",
|
|
694
665
|
)
|
|
695
666
|
)
|
|
696
667
|
KELVIN_SELECTOR = NumberSelector(
|
|
@@ -702,6 +673,28 @@ KELVIN_SELECTOR = NumberSelector(
|
|
|
702
673
|
unit_of_measurement="K",
|
|
703
674
|
)
|
|
704
675
|
)
|
|
676
|
+
LIGHT_SCHEMA_SELECTOR = SelectSelector(
|
|
677
|
+
SelectSelectorConfig(
|
|
678
|
+
options=["basic", "json", "template"],
|
|
679
|
+
translation_key="light_schema",
|
|
680
|
+
)
|
|
681
|
+
)
|
|
682
|
+
ON_COMMAND_TYPE_SELECTOR = SelectSelector(
|
|
683
|
+
SelectSelectorConfig(
|
|
684
|
+
options=VALUES_ON_COMMAND_TYPE,
|
|
685
|
+
mode=SelectSelectorMode.DROPDOWN,
|
|
686
|
+
translation_key=CONF_ON_COMMAND_TYPE,
|
|
687
|
+
sort=True,
|
|
688
|
+
)
|
|
689
|
+
)
|
|
690
|
+
POSITION_SELECTOR = NumberSelector(NumberSelectorConfig(mode=NumberSelectorMode.BOX))
|
|
691
|
+
PRECISION_SELECTOR = SelectSelector(
|
|
692
|
+
SelectSelectorConfig(
|
|
693
|
+
options=["1.0", "0.5", "0.1"],
|
|
694
|
+
mode=SelectSelectorMode.DROPDOWN,
|
|
695
|
+
)
|
|
696
|
+
)
|
|
697
|
+
PRESET_MODES_SELECTOR = OPTIONS_SELECTOR
|
|
705
698
|
SCALE_SELECTOR = NumberSelector(
|
|
706
699
|
NumberSelectorConfig(
|
|
707
700
|
mode=NumberSelectorMode.BOX,
|
|
@@ -710,20 +703,29 @@ SCALE_SELECTOR = NumberSelector(
|
|
|
710
703
|
step=1,
|
|
711
704
|
)
|
|
712
705
|
)
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
706
|
+
SENSOR_DEVICE_CLASS_SELECTOR = SelectSelector(
|
|
707
|
+
SelectSelectorConfig(
|
|
708
|
+
options=[device_class.value for device_class in SensorDeviceClass],
|
|
709
|
+
mode=SelectSelectorMode.DROPDOWN,
|
|
710
|
+
translation_key="device_class_sensor",
|
|
711
|
+
sort=True,
|
|
717
712
|
)
|
|
718
713
|
)
|
|
719
|
-
|
|
714
|
+
SENSOR_ENTITY_CATEGORY_SELECTOR = SelectSelector(
|
|
720
715
|
SelectSelectorConfig(
|
|
721
|
-
options=
|
|
716
|
+
options=[EntityCategory.DIAGNOSTIC.value],
|
|
722
717
|
mode=SelectSelectorMode.DROPDOWN,
|
|
723
|
-
translation_key=
|
|
718
|
+
translation_key=CONF_ENTITY_CATEGORY,
|
|
724
719
|
sort=True,
|
|
725
720
|
)
|
|
726
721
|
)
|
|
722
|
+
SENSOR_STATE_CLASS_SELECTOR = SelectSelector(
|
|
723
|
+
SelectSelectorConfig(
|
|
724
|
+
options=[device_class.value for device_class in SensorStateClass],
|
|
725
|
+
mode=SelectSelectorMode.DROPDOWN,
|
|
726
|
+
translation_key=CONF_STATE_CLASS,
|
|
727
|
+
)
|
|
728
|
+
)
|
|
727
729
|
SUPPORTED_COLOR_MODES_SELECTOR = SelectSelector(
|
|
728
730
|
SelectSelectorConfig(
|
|
729
731
|
options=[platform.value for platform in VALID_COLOR_MODES],
|
|
@@ -733,11 +735,31 @@ SUPPORTED_COLOR_MODES_SELECTOR = SelectSelector(
|
|
|
733
735
|
sort=True,
|
|
734
736
|
)
|
|
735
737
|
)
|
|
736
|
-
|
|
737
|
-
|
|
738
|
+
SWITCH_DEVICE_CLASS_SELECTOR = SelectSelector(
|
|
739
|
+
SelectSelectorConfig(
|
|
740
|
+
options=[device_class.value for device_class in SwitchDeviceClass],
|
|
741
|
+
mode=SelectSelectorMode.DROPDOWN,
|
|
742
|
+
translation_key="device_class_switch",
|
|
743
|
+
)
|
|
744
|
+
)
|
|
745
|
+
TARGET_TEMPERATURE_FEATURE_SELECTOR = SelectSelector(
|
|
746
|
+
SelectSelectorConfig(
|
|
747
|
+
options=["single", "high_low", "none"],
|
|
748
|
+
mode=SelectSelectorMode.DROPDOWN,
|
|
749
|
+
translation_key="target_temperature_feature",
|
|
750
|
+
)
|
|
751
|
+
)
|
|
752
|
+
TEMPERATURE_UNIT_SELECTOR = SelectSelector(
|
|
753
|
+
SelectSelectorConfig(
|
|
754
|
+
options=[
|
|
755
|
+
SelectOptionDict(value="C", label="°C"),
|
|
756
|
+
SelectOptionDict(value="F", label="°F"),
|
|
757
|
+
],
|
|
758
|
+
mode=SelectSelectorMode.DROPDOWN,
|
|
759
|
+
)
|
|
760
|
+
)
|
|
738
761
|
|
|
739
762
|
|
|
740
|
-
# Target temperature feature selector
|
|
741
763
|
@callback
|
|
742
764
|
def configured_target_temperature_feature(config: dict[str, Any]) -> str:
|
|
743
765
|
"""Calculate current target temperature feature from config."""
|
|
@@ -752,26 +774,6 @@ def configured_target_temperature_feature(config: dict[str, Any]) -> str:
|
|
|
752
774
|
return "none"
|
|
753
775
|
|
|
754
776
|
|
|
755
|
-
TARGET_TEMPERATURE_FEATURE_SELECTOR = SelectSelector(
|
|
756
|
-
SelectSelectorConfig(
|
|
757
|
-
options=["single", "high_low", "none"],
|
|
758
|
-
mode=SelectSelectorMode.DROPDOWN,
|
|
759
|
-
translation_key="target_temperature_feature",
|
|
760
|
-
)
|
|
761
|
-
)
|
|
762
|
-
HUMIDITY_SELECTOR = vol.All(
|
|
763
|
-
NumberSelector(
|
|
764
|
-
NumberSelectorConfig(mode=NumberSelectorMode.BOX, min=0, max=100, step=1)
|
|
765
|
-
),
|
|
766
|
-
vol.Coerce(int),
|
|
767
|
-
)
|
|
768
|
-
|
|
769
|
-
_CODE_VALIDATION_MODE = {
|
|
770
|
-
"remote_code": REMOTE_CODE,
|
|
771
|
-
"remote_code_text": REMOTE_CODE_TEXT,
|
|
772
|
-
}
|
|
773
|
-
|
|
774
|
-
|
|
775
777
|
@callback
|
|
776
778
|
def default_alarm_control_panel_code(config: dict[str, Any]) -> str:
|
|
777
779
|
"""Return alarm control panel code based on the stored code and code mode."""
|
|
@@ -786,6 +788,29 @@ def default_alarm_control_panel_code(config: dict[str, Any]) -> str:
|
|
|
786
788
|
return code
|
|
787
789
|
|
|
788
790
|
|
|
791
|
+
@callback
|
|
792
|
+
def default_precision(config: dict[str, Any]) -> str:
|
|
793
|
+
"""Return the thermostat precision for system default unit."""
|
|
794
|
+
|
|
795
|
+
return str(
|
|
796
|
+
config.get(
|
|
797
|
+
CONF_PRECISION,
|
|
798
|
+
0.1
|
|
799
|
+
if cv.temperature_unit(config[CONF_TEMPERATURE_UNIT])
|
|
800
|
+
is UnitOfTemperature.CELSIUS
|
|
801
|
+
else 1.0,
|
|
802
|
+
)
|
|
803
|
+
)
|
|
804
|
+
|
|
805
|
+
|
|
806
|
+
@callback
|
|
807
|
+
def no_empty_list(value: list[Any]) -> list[Any]:
|
|
808
|
+
"""Validate a selector returns at least one item."""
|
|
809
|
+
if not value:
|
|
810
|
+
raise vol.Invalid("empty_list_not_allowed")
|
|
811
|
+
return value
|
|
812
|
+
|
|
813
|
+
|
|
789
814
|
@callback
|
|
790
815
|
def temperature_default_from_celsius_to_system_default(
|
|
791
816
|
value: float,
|
|
@@ -805,20 +830,87 @@ def temperature_default_from_celsius_to_system_default(
|
|
|
805
830
|
|
|
806
831
|
|
|
807
832
|
@callback
|
|
808
|
-
def
|
|
809
|
-
"""Return
|
|
833
|
+
def temperature_selector(config: dict[str, Any]) -> Selector:
|
|
834
|
+
"""Return a temperature selector with configured or system unit."""
|
|
810
835
|
|
|
811
|
-
return
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
836
|
+
return NumberSelector(
|
|
837
|
+
NumberSelectorConfig(
|
|
838
|
+
mode=NumberSelectorMode.BOX,
|
|
839
|
+
unit_of_measurement=cv.temperature_unit(config[CONF_TEMPERATURE_UNIT]),
|
|
840
|
+
)
|
|
841
|
+
)
|
|
842
|
+
|
|
843
|
+
|
|
844
|
+
@callback
|
|
845
|
+
def temperature_step_selector(config: dict[str, Any]) -> Selector:
|
|
846
|
+
"""Return a temperature step selector."""
|
|
847
|
+
|
|
848
|
+
return NumberSelector(
|
|
849
|
+
NumberSelectorConfig(
|
|
850
|
+
mode=NumberSelectorMode.BOX,
|
|
851
|
+
min=0.1,
|
|
852
|
+
max=10.0,
|
|
853
|
+
step=0.1,
|
|
854
|
+
unit_of_measurement=cv.temperature_unit(config[CONF_TEMPERATURE_UNIT]),
|
|
818
855
|
)
|
|
819
856
|
)
|
|
820
857
|
|
|
821
858
|
|
|
859
|
+
@callback
|
|
860
|
+
def unit_of_measurement_selector(user_data: dict[str, Any | None]) -> Selector:
|
|
861
|
+
"""Return a context based unit of measurement selector."""
|
|
862
|
+
|
|
863
|
+
if (state_class := user_data.get(CONF_STATE_CLASS)) in STATE_CLASS_UNITS:
|
|
864
|
+
return SelectSelector(
|
|
865
|
+
SelectSelectorConfig(
|
|
866
|
+
options=[str(uom) for uom in STATE_CLASS_UNITS[state_class]],
|
|
867
|
+
sort=True,
|
|
868
|
+
custom_value=True,
|
|
869
|
+
)
|
|
870
|
+
)
|
|
871
|
+
|
|
872
|
+
if (
|
|
873
|
+
device_class := user_data.get(CONF_DEVICE_CLASS)
|
|
874
|
+
) is None or device_class not in DEVICE_CLASS_UNITS:
|
|
875
|
+
return TEXT_SELECTOR
|
|
876
|
+
return SelectSelector(
|
|
877
|
+
SelectSelectorConfig(
|
|
878
|
+
options=[str(uom) for uom in DEVICE_CLASS_UNITS[device_class]],
|
|
879
|
+
sort=True,
|
|
880
|
+
custom_value=True,
|
|
881
|
+
)
|
|
882
|
+
)
|
|
883
|
+
|
|
884
|
+
|
|
885
|
+
@callback
|
|
886
|
+
def validate(validator: Callable[[Any], Any]) -> Callable[[Any], Any]:
|
|
887
|
+
"""Run validator, then return the unmodified input."""
|
|
888
|
+
|
|
889
|
+
def _validate(value: Any) -> Any:
|
|
890
|
+
validator(value)
|
|
891
|
+
return value
|
|
892
|
+
|
|
893
|
+
return _validate
|
|
894
|
+
|
|
895
|
+
|
|
896
|
+
@callback
|
|
897
|
+
def validate_field(
|
|
898
|
+
field: str,
|
|
899
|
+
validator: Callable[..., Any],
|
|
900
|
+
user_input: dict[str, Any] | None,
|
|
901
|
+
errors: dict[str, str],
|
|
902
|
+
error: str,
|
|
903
|
+
) -> None:
|
|
904
|
+
"""Validate a single field."""
|
|
905
|
+
if user_input is None or field not in user_input or validator is None:
|
|
906
|
+
return
|
|
907
|
+
try:
|
|
908
|
+
user_input[field] = validator(user_input[field])
|
|
909
|
+
except (ValueError, vol.Error, vol.Invalid):
|
|
910
|
+
errors[field] = error
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
# Entity platform config validation
|
|
822
914
|
@callback
|
|
823
915
|
def validate_climate_platform_config(config: dict[str, Any]) -> dict[str, str]:
|
|
824
916
|
"""Validate the climate platform options."""
|
|
@@ -902,6 +994,17 @@ def validate_fan_platform_config(config: dict[str, Any]) -> dict[str, str]:
|
|
|
902
994
|
return errors
|
|
903
995
|
|
|
904
996
|
|
|
997
|
+
@callback
|
|
998
|
+
def validate_light_platform_config(user_data: dict[str, Any]) -> dict[str, str]:
|
|
999
|
+
"""Validate MQTT light configuration."""
|
|
1000
|
+
errors: dict[str, Any] = {}
|
|
1001
|
+
if user_data.get(CONF_MIN_KELVIN, DEFAULT_MIN_KELVIN) >= user_data.get(
|
|
1002
|
+
CONF_MAX_KELVIN, DEFAULT_MAX_KELVIN
|
|
1003
|
+
):
|
|
1004
|
+
errors["advanced_settings"] = "max_below_min_kelvin"
|
|
1005
|
+
return errors
|
|
1006
|
+
|
|
1007
|
+
|
|
905
1008
|
@callback
|
|
906
1009
|
def validate_sensor_platform_config(
|
|
907
1010
|
config: dict[str, Any],
|
|
@@ -944,29 +1047,29 @@ def validate_sensor_platform_config(
|
|
|
944
1047
|
(state_class := config.get(CONF_STATE_CLASS)) is not None
|
|
945
1048
|
and state_class in STATE_CLASS_UNITS
|
|
946
1049
|
and config.get(CONF_UNIT_OF_MEASUREMENT) not in STATE_CLASS_UNITS[state_class]
|
|
947
|
-
):
|
|
948
|
-
errors[CONF_UNIT_OF_MEASUREMENT] = "invalid_uom_for_state_class"
|
|
949
|
-
|
|
950
|
-
return errors
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
@callback
|
|
954
|
-
def no_empty_list(value: list[Any]) -> list[Any]:
|
|
955
|
-
"""Validate a selector returns at least one item."""
|
|
956
|
-
if not value:
|
|
957
|
-
raise vol.Invalid("empty_list_not_allowed")
|
|
958
|
-
return value
|
|
959
|
-
|
|
1050
|
+
):
|
|
1051
|
+
errors[CONF_UNIT_OF_MEASUREMENT] = "invalid_uom_for_state_class"
|
|
960
1052
|
|
|
961
|
-
|
|
962
|
-
def validate(validator: Callable[[Any], Any]) -> Callable[[Any], Any]:
|
|
963
|
-
"""Run validator, then return the unmodified input."""
|
|
1053
|
+
return errors
|
|
964
1054
|
|
|
965
|
-
def _validate(value: Any) -> Any:
|
|
966
|
-
validator(value)
|
|
967
|
-
return value
|
|
968
1055
|
|
|
969
|
-
|
|
1056
|
+
ENTITY_CONFIG_VALIDATOR: dict[
|
|
1057
|
+
str,
|
|
1058
|
+
Callable[[dict[str, Any]], dict[str, str]] | None,
|
|
1059
|
+
] = {
|
|
1060
|
+
Platform.ALARM_CONTROL_PANEL: None,
|
|
1061
|
+
Platform.BINARY_SENSOR.value: None,
|
|
1062
|
+
Platform.BUTTON.value: None,
|
|
1063
|
+
Platform.CLIMATE.value: validate_climate_platform_config,
|
|
1064
|
+
Platform.COVER.value: validate_cover_platform_config,
|
|
1065
|
+
Platform.FAN.value: validate_fan_platform_config,
|
|
1066
|
+
Platform.IMAGE.value: None,
|
|
1067
|
+
Platform.LIGHT.value: validate_light_platform_config,
|
|
1068
|
+
Platform.LOCK.value: None,
|
|
1069
|
+
Platform.NOTIFY.value: None,
|
|
1070
|
+
Platform.SENSOR.value: validate_sensor_platform_config,
|
|
1071
|
+
Platform.SWITCH.value: None,
|
|
1072
|
+
}
|
|
970
1073
|
|
|
971
1074
|
|
|
972
1075
|
@dataclass(frozen=True, kw_only=True)
|
|
@@ -989,43 +1092,6 @@ class PlatformField:
|
|
|
989
1092
|
section: str | None = None
|
|
990
1093
|
|
|
991
1094
|
|
|
992
|
-
@callback
|
|
993
|
-
def unit_of_measurement_selector(user_data: dict[str, Any | None]) -> Selector:
|
|
994
|
-
"""Return a context based unit of measurement selector."""
|
|
995
|
-
|
|
996
|
-
if (state_class := user_data.get(CONF_STATE_CLASS)) in STATE_CLASS_UNITS:
|
|
997
|
-
return SelectSelector(
|
|
998
|
-
SelectSelectorConfig(
|
|
999
|
-
options=[str(uom) for uom in STATE_CLASS_UNITS[state_class]],
|
|
1000
|
-
sort=True,
|
|
1001
|
-
custom_value=True,
|
|
1002
|
-
)
|
|
1003
|
-
)
|
|
1004
|
-
|
|
1005
|
-
if (
|
|
1006
|
-
device_class := user_data.get(CONF_DEVICE_CLASS)
|
|
1007
|
-
) is None or device_class not in DEVICE_CLASS_UNITS:
|
|
1008
|
-
return TEXT_SELECTOR
|
|
1009
|
-
return SelectSelector(
|
|
1010
|
-
SelectSelectorConfig(
|
|
1011
|
-
options=[str(uom) for uom in DEVICE_CLASS_UNITS[device_class]],
|
|
1012
|
-
sort=True,
|
|
1013
|
-
custom_value=True,
|
|
1014
|
-
)
|
|
1015
|
-
)
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
@callback
|
|
1019
|
-
def validate_light_platform_config(user_data: dict[str, Any]) -> dict[str, str]:
|
|
1020
|
-
"""Validate MQTT light configuration."""
|
|
1021
|
-
errors: dict[str, Any] = {}
|
|
1022
|
-
if user_data.get(CONF_MIN_KELVIN, DEFAULT_MIN_KELVIN) >= user_data.get(
|
|
1023
|
-
CONF_MAX_KELVIN, DEFAULT_MAX_KELVIN
|
|
1024
|
-
):
|
|
1025
|
-
errors["advanced_settings"] = "max_below_min_kelvin"
|
|
1026
|
-
return errors
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
1095
|
COMMON_ENTITY_FIELDS: dict[str, PlatformField] = {
|
|
1030
1096
|
CONF_PLATFORM: PlatformField(
|
|
1031
1097
|
selector=SUBENTRY_PLATFORM_SELECTOR,
|
|
@@ -1042,7 +1108,6 @@ COMMON_ENTITY_FIELDS: dict[str, PlatformField] = {
|
|
|
1042
1108
|
selector=TEXT_SELECTOR, required=False, validator=cv.url, error="invalid_url"
|
|
1043
1109
|
),
|
|
1044
1110
|
}
|
|
1045
|
-
|
|
1046
1111
|
SHARED_PLATFORM_ENTITY_FIELDS: dict[str, PlatformField] = {
|
|
1047
1112
|
CONF_ENTITY_CATEGORY: PlatformField(
|
|
1048
1113
|
selector=ENTITY_CATEGORY_SELECTOR,
|
|
@@ -1050,7 +1115,6 @@ SHARED_PLATFORM_ENTITY_FIELDS: dict[str, PlatformField] = {
|
|
|
1050
1115
|
default=None,
|
|
1051
1116
|
),
|
|
1052
1117
|
}
|
|
1053
|
-
|
|
1054
1118
|
PLATFORM_ENTITY_FIELDS: dict[str, dict[str, PlatformField]] = {
|
|
1055
1119
|
Platform.ALARM_CONTROL_PANEL.value: {
|
|
1056
1120
|
CONF_SUPPORTED_FEATURES: PlatformField(
|
|
@@ -1190,6 +1254,33 @@ PLATFORM_ENTITY_FIELDS: dict[str, dict[str, PlatformField]] = {
|
|
|
1190
1254
|
default=lambda config: bool(config.get(CONF_DIRECTION_COMMAND_TOPIC)),
|
|
1191
1255
|
),
|
|
1192
1256
|
},
|
|
1257
|
+
Platform.IMAGE.value: {
|
|
1258
|
+
"image_processing_mode": PlatformField(
|
|
1259
|
+
selector=IMAGE_PROCESSING_MODE_SELECTOR,
|
|
1260
|
+
required=True,
|
|
1261
|
+
exclude_from_config=True,
|
|
1262
|
+
default=(
|
|
1263
|
+
lambda config: "image_url"
|
|
1264
|
+
if config.get(CONF_IMAGE_TOPIC) is None
|
|
1265
|
+
else "image_data"
|
|
1266
|
+
),
|
|
1267
|
+
)
|
|
1268
|
+
},
|
|
1269
|
+
Platform.LIGHT.value: {
|
|
1270
|
+
CONF_SCHEMA: PlatformField(
|
|
1271
|
+
selector=LIGHT_SCHEMA_SELECTOR,
|
|
1272
|
+
required=True,
|
|
1273
|
+
default="basic",
|
|
1274
|
+
exclude_from_reconfig=True,
|
|
1275
|
+
),
|
|
1276
|
+
CONF_COLOR_TEMP_KELVIN: PlatformField(
|
|
1277
|
+
selector=BOOLEAN_SELECTOR,
|
|
1278
|
+
required=True,
|
|
1279
|
+
default=True,
|
|
1280
|
+
is_schema_default=True,
|
|
1281
|
+
),
|
|
1282
|
+
},
|
|
1283
|
+
Platform.LOCK.value: {},
|
|
1193
1284
|
Platform.NOTIFY.value: {},
|
|
1194
1285
|
Platform.SENSOR.value: {
|
|
1195
1286
|
CONF_DEVICE_CLASS: PlatformField(
|
|
@@ -1225,21 +1316,6 @@ PLATFORM_ENTITY_FIELDS: dict[str, dict[str, PlatformField]] = {
|
|
|
1225
1316
|
selector=SWITCH_DEVICE_CLASS_SELECTOR, required=False
|
|
1226
1317
|
),
|
|
1227
1318
|
},
|
|
1228
|
-
Platform.LIGHT.value: {
|
|
1229
|
-
CONF_SCHEMA: PlatformField(
|
|
1230
|
-
selector=LIGHT_SCHEMA_SELECTOR,
|
|
1231
|
-
required=True,
|
|
1232
|
-
default="basic",
|
|
1233
|
-
exclude_from_reconfig=True,
|
|
1234
|
-
),
|
|
1235
|
-
CONF_COLOR_TEMP_KELVIN: PlatformField(
|
|
1236
|
-
selector=BOOLEAN_SELECTOR,
|
|
1237
|
-
required=True,
|
|
1238
|
-
default=True,
|
|
1239
|
-
is_schema_default=True,
|
|
1240
|
-
),
|
|
1241
|
-
},
|
|
1242
|
-
Platform.LOCK.value: {},
|
|
1243
1319
|
}
|
|
1244
1320
|
PLATFORM_MQTT_FIELDS: dict[str, dict[str, PlatformField]] = {
|
|
1245
1321
|
Platform.ALARM_CONTROL_PANEL: {
|
|
@@ -2273,93 +2349,39 @@ PLATFORM_MQTT_FIELDS: dict[str, dict[str, PlatformField]] = {
|
|
|
2273
2349
|
conditions=({"fan_feature_direction": True},),
|
|
2274
2350
|
),
|
|
2275
2351
|
},
|
|
2276
|
-
Platform.
|
|
2277
|
-
|
|
2278
|
-
selector=TEXT_SELECTOR,
|
|
2279
|
-
required=True,
|
|
2280
|
-
validator=valid_publish_topic,
|
|
2281
|
-
error="invalid_publish_topic",
|
|
2282
|
-
),
|
|
2283
|
-
CONF_COMMAND_TEMPLATE: PlatformField(
|
|
2284
|
-
selector=TEMPLATE_SELECTOR,
|
|
2285
|
-
required=False,
|
|
2286
|
-
validator=validate(cv.template),
|
|
2287
|
-
error="invalid_template",
|
|
2288
|
-
),
|
|
2289
|
-
CONF_RETAIN: PlatformField(selector=BOOLEAN_SELECTOR, required=False),
|
|
2290
|
-
},
|
|
2291
|
-
Platform.SENSOR.value: {
|
|
2292
|
-
CONF_STATE_TOPIC: PlatformField(
|
|
2352
|
+
Platform.IMAGE.value: {
|
|
2353
|
+
CONF_IMAGE_TOPIC: PlatformField(
|
|
2293
2354
|
selector=TEXT_SELECTOR,
|
|
2294
2355
|
required=True,
|
|
2295
2356
|
validator=valid_subscribe_topic,
|
|
2296
2357
|
error="invalid_subscribe_topic",
|
|
2358
|
+
conditions=({"image_processing_mode": "image_data"},),
|
|
2297
2359
|
),
|
|
2298
|
-
|
|
2299
|
-
selector=
|
|
2300
|
-
required=False,
|
|
2301
|
-
validator=validate(cv.template),
|
|
2302
|
-
error="invalid_template",
|
|
2303
|
-
),
|
|
2304
|
-
CONF_LAST_RESET_VALUE_TEMPLATE: PlatformField(
|
|
2305
|
-
selector=TEMPLATE_SELECTOR,
|
|
2306
|
-
required=False,
|
|
2307
|
-
validator=validate(cv.template),
|
|
2308
|
-
error="invalid_template",
|
|
2309
|
-
conditions=({CONF_STATE_CLASS: "total"},),
|
|
2310
|
-
),
|
|
2311
|
-
CONF_EXPIRE_AFTER: PlatformField(
|
|
2312
|
-
selector=TIMEOUT_SELECTOR,
|
|
2313
|
-
required=False,
|
|
2314
|
-
validator=cv.positive_int,
|
|
2315
|
-
section="advanced_settings",
|
|
2316
|
-
),
|
|
2317
|
-
},
|
|
2318
|
-
Platform.SWITCH.value: {
|
|
2319
|
-
CONF_COMMAND_TOPIC: PlatformField(
|
|
2320
|
-
selector=TEXT_SELECTOR,
|
|
2360
|
+
CONF_CONTENT_TYPE: PlatformField(
|
|
2361
|
+
selector=IMAGE_CONTENT_TYPE_SELECTOR,
|
|
2321
2362
|
required=True,
|
|
2322
|
-
|
|
2323
|
-
|
|
2363
|
+
default=DEFAULT_CONTENT_TYPE,
|
|
2364
|
+
conditions=({"image_processing_mode": "image_data"},),
|
|
2324
2365
|
),
|
|
2325
|
-
|
|
2326
|
-
selector=
|
|
2366
|
+
CONF_IMAGE_ENCODING: PlatformField(
|
|
2367
|
+
selector=IMAGE_ENCODING_SELECTOR,
|
|
2327
2368
|
required=False,
|
|
2328
|
-
|
|
2329
|
-
|
|
2369
|
+
conditions=({"image_processing_mode": "image_data"},),
|
|
2370
|
+
default="raw",
|
|
2330
2371
|
),
|
|
2331
|
-
|
|
2372
|
+
CONF_URL_TOPIC: PlatformField(
|
|
2332
2373
|
selector=TEXT_SELECTOR,
|
|
2333
|
-
required=
|
|
2374
|
+
required=True,
|
|
2334
2375
|
validator=valid_subscribe_topic,
|
|
2335
2376
|
error="invalid_subscribe_topic",
|
|
2377
|
+
conditions=({"image_processing_mode": "image_url"},),
|
|
2336
2378
|
),
|
|
2337
|
-
|
|
2379
|
+
CONF_URL_TEMPLATE: PlatformField(
|
|
2338
2380
|
selector=TEMPLATE_SELECTOR,
|
|
2339
2381
|
required=False,
|
|
2340
2382
|
validator=validate(cv.template),
|
|
2341
2383
|
error="invalid_template",
|
|
2342
2384
|
),
|
|
2343
|
-
CONF_PAYLOAD_OFF: PlatformField(
|
|
2344
|
-
selector=TEXT_SELECTOR,
|
|
2345
|
-
required=False,
|
|
2346
|
-
default=DEFAULT_PAYLOAD_OFF,
|
|
2347
|
-
),
|
|
2348
|
-
CONF_PAYLOAD_ON: PlatformField(
|
|
2349
|
-
selector=TEXT_SELECTOR,
|
|
2350
|
-
required=False,
|
|
2351
|
-
default=DEFAULT_PAYLOAD_ON,
|
|
2352
|
-
),
|
|
2353
|
-
CONF_STATE_OFF: PlatformField(
|
|
2354
|
-
selector=TEXT_SELECTOR,
|
|
2355
|
-
required=False,
|
|
2356
|
-
),
|
|
2357
|
-
CONF_STATE_ON: PlatformField(
|
|
2358
|
-
selector=TEXT_SELECTOR,
|
|
2359
|
-
required=False,
|
|
2360
|
-
),
|
|
2361
|
-
CONF_RETAIN: PlatformField(selector=BOOLEAN_SELECTOR, required=False),
|
|
2362
|
-
CONF_OPTIMISTIC: PlatformField(selector=BOOLEAN_SELECTOR, required=False),
|
|
2363
2385
|
},
|
|
2364
2386
|
Platform.LIGHT.value: {
|
|
2365
2387
|
CONF_COMMAND_TOPIC: PlatformField(
|
|
@@ -2842,7 +2864,94 @@ PLATFORM_MQTT_FIELDS: dict[str, dict[str, PlatformField]] = {
|
|
|
2842
2864
|
section="advanced_settings",
|
|
2843
2865
|
),
|
|
2844
2866
|
},
|
|
2845
|
-
Platform.LOCK.value: {
|
|
2867
|
+
Platform.LOCK.value: {
|
|
2868
|
+
CONF_COMMAND_TOPIC: PlatformField(
|
|
2869
|
+
selector=TEXT_SELECTOR,
|
|
2870
|
+
required=True,
|
|
2871
|
+
validator=valid_publish_topic,
|
|
2872
|
+
error="invalid_publish_topic",
|
|
2873
|
+
),
|
|
2874
|
+
CONF_COMMAND_TEMPLATE: PlatformField(
|
|
2875
|
+
selector=TEMPLATE_SELECTOR,
|
|
2876
|
+
required=False,
|
|
2877
|
+
validator=validate(cv.template),
|
|
2878
|
+
error="invalid_template",
|
|
2879
|
+
),
|
|
2880
|
+
CONF_STATE_TOPIC: PlatformField(
|
|
2881
|
+
selector=TEXT_SELECTOR,
|
|
2882
|
+
required=False,
|
|
2883
|
+
validator=valid_subscribe_topic,
|
|
2884
|
+
error="invalid_subscribe_topic",
|
|
2885
|
+
),
|
|
2886
|
+
CONF_VALUE_TEMPLATE: PlatformField(
|
|
2887
|
+
selector=TEMPLATE_SELECTOR,
|
|
2888
|
+
required=False,
|
|
2889
|
+
validator=validate(cv.template),
|
|
2890
|
+
error="invalid_template",
|
|
2891
|
+
),
|
|
2892
|
+
CONF_CODE_FORMAT: PlatformField(
|
|
2893
|
+
selector=TEXT_SELECTOR,
|
|
2894
|
+
required=False,
|
|
2895
|
+
validator=validate(cv.is_regex),
|
|
2896
|
+
error="invalid_regular_expression",
|
|
2897
|
+
),
|
|
2898
|
+
CONF_PAYLOAD_LOCK: PlatformField(
|
|
2899
|
+
selector=TEXT_SELECTOR,
|
|
2900
|
+
required=False,
|
|
2901
|
+
default=DEFAULT_PAYLOAD_LOCK,
|
|
2902
|
+
section="lock_payload_settings",
|
|
2903
|
+
),
|
|
2904
|
+
CONF_PAYLOAD_UNLOCK: PlatformField(
|
|
2905
|
+
selector=TEXT_SELECTOR,
|
|
2906
|
+
required=False,
|
|
2907
|
+
default=DEFAULT_PAYLOAD_UNLOCK,
|
|
2908
|
+
section="lock_payload_settings",
|
|
2909
|
+
),
|
|
2910
|
+
CONF_PAYLOAD_OPEN: PlatformField(
|
|
2911
|
+
selector=TEXT_SELECTOR,
|
|
2912
|
+
required=False,
|
|
2913
|
+
section="lock_payload_settings",
|
|
2914
|
+
),
|
|
2915
|
+
CONF_PAYLOAD_RESET: PlatformField(
|
|
2916
|
+
selector=TEXT_SELECTOR,
|
|
2917
|
+
required=False,
|
|
2918
|
+
default=DEFAULT_PAYLOAD_RESET,
|
|
2919
|
+
section="lock_payload_settings",
|
|
2920
|
+
),
|
|
2921
|
+
CONF_STATE_LOCKED: PlatformField(
|
|
2922
|
+
selector=TEXT_SELECTOR,
|
|
2923
|
+
required=False,
|
|
2924
|
+
default=DEFAULT_STATE_LOCKED,
|
|
2925
|
+
section="lock_payload_settings",
|
|
2926
|
+
),
|
|
2927
|
+
CONF_STATE_UNLOCKED: PlatformField(
|
|
2928
|
+
selector=TEXT_SELECTOR,
|
|
2929
|
+
required=False,
|
|
2930
|
+
default=DEFAULT_STATE_UNLOCKED,
|
|
2931
|
+
section="lock_payload_settings",
|
|
2932
|
+
),
|
|
2933
|
+
CONF_STATE_LOCKING: PlatformField(
|
|
2934
|
+
selector=TEXT_SELECTOR,
|
|
2935
|
+
required=False,
|
|
2936
|
+
default=DEFAULT_STATE_LOCKING,
|
|
2937
|
+
section="lock_payload_settings",
|
|
2938
|
+
),
|
|
2939
|
+
CONF_STATE_UNLOCKING: PlatformField(
|
|
2940
|
+
selector=TEXT_SELECTOR,
|
|
2941
|
+
required=False,
|
|
2942
|
+
default=DEFAULT_STATE_UNLOCKING,
|
|
2943
|
+
section="lock_payload_settings",
|
|
2944
|
+
),
|
|
2945
|
+
CONF_STATE_JAMMED: PlatformField(
|
|
2946
|
+
selector=TEXT_SELECTOR,
|
|
2947
|
+
required=False,
|
|
2948
|
+
default=DEFAULT_STATE_JAMMED,
|
|
2949
|
+
section="lock_payload_settings",
|
|
2950
|
+
),
|
|
2951
|
+
CONF_RETAIN: PlatformField(selector=BOOLEAN_SELECTOR, required=False),
|
|
2952
|
+
CONF_OPTIMISTIC: PlatformField(selector=BOOLEAN_SELECTOR, required=False),
|
|
2953
|
+
},
|
|
2954
|
+
Platform.NOTIFY.value: {
|
|
2846
2955
|
CONF_COMMAND_TOPIC: PlatformField(
|
|
2847
2956
|
selector=TEXT_SELECTOR,
|
|
2848
2957
|
required=True,
|
|
@@ -2855,9 +2964,12 @@ PLATFORM_MQTT_FIELDS: dict[str, dict[str, PlatformField]] = {
|
|
|
2855
2964
|
validator=validate(cv.template),
|
|
2856
2965
|
error="invalid_template",
|
|
2857
2966
|
),
|
|
2967
|
+
CONF_RETAIN: PlatformField(selector=BOOLEAN_SELECTOR, required=False),
|
|
2968
|
+
},
|
|
2969
|
+
Platform.SENSOR.value: {
|
|
2858
2970
|
CONF_STATE_TOPIC: PlatformField(
|
|
2859
2971
|
selector=TEXT_SELECTOR,
|
|
2860
|
-
required=
|
|
2972
|
+
required=True,
|
|
2861
2973
|
validator=valid_subscribe_topic,
|
|
2862
2974
|
error="invalid_subscribe_topic",
|
|
2863
2975
|
),
|
|
@@ -2867,86 +2979,67 @@ PLATFORM_MQTT_FIELDS: dict[str, dict[str, PlatformField]] = {
|
|
|
2867
2979
|
validator=validate(cv.template),
|
|
2868
2980
|
error="invalid_template",
|
|
2869
2981
|
),
|
|
2870
|
-
|
|
2871
|
-
selector=
|
|
2982
|
+
CONF_LAST_RESET_VALUE_TEMPLATE: PlatformField(
|
|
2983
|
+
selector=TEMPLATE_SELECTOR,
|
|
2872
2984
|
required=False,
|
|
2873
|
-
validator=validate(cv.
|
|
2874
|
-
error="
|
|
2985
|
+
validator=validate(cv.template),
|
|
2986
|
+
error="invalid_template",
|
|
2987
|
+
conditions=({CONF_STATE_CLASS: "total"},),
|
|
2875
2988
|
),
|
|
2876
|
-
|
|
2877
|
-
selector=
|
|
2989
|
+
CONF_EXPIRE_AFTER: PlatformField(
|
|
2990
|
+
selector=TIMEOUT_SELECTOR,
|
|
2878
2991
|
required=False,
|
|
2879
|
-
|
|
2880
|
-
section="
|
|
2992
|
+
validator=cv.positive_int,
|
|
2993
|
+
section="advanced_settings",
|
|
2881
2994
|
),
|
|
2882
|
-
|
|
2995
|
+
},
|
|
2996
|
+
Platform.SWITCH.value: {
|
|
2997
|
+
CONF_COMMAND_TOPIC: PlatformField(
|
|
2883
2998
|
selector=TEXT_SELECTOR,
|
|
2884
|
-
required=
|
|
2885
|
-
|
|
2886
|
-
|
|
2999
|
+
required=True,
|
|
3000
|
+
validator=valid_publish_topic,
|
|
3001
|
+
error="invalid_publish_topic",
|
|
2887
3002
|
),
|
|
2888
|
-
|
|
2889
|
-
selector=
|
|
3003
|
+
CONF_COMMAND_TEMPLATE: PlatformField(
|
|
3004
|
+
selector=TEMPLATE_SELECTOR,
|
|
2890
3005
|
required=False,
|
|
2891
|
-
|
|
3006
|
+
validator=validate(cv.template),
|
|
3007
|
+
error="invalid_template",
|
|
2892
3008
|
),
|
|
2893
|
-
|
|
3009
|
+
CONF_STATE_TOPIC: PlatformField(
|
|
2894
3010
|
selector=TEXT_SELECTOR,
|
|
2895
3011
|
required=False,
|
|
2896
|
-
|
|
2897
|
-
|
|
3012
|
+
validator=valid_subscribe_topic,
|
|
3013
|
+
error="invalid_subscribe_topic",
|
|
2898
3014
|
),
|
|
2899
|
-
|
|
2900
|
-
selector=
|
|
3015
|
+
CONF_VALUE_TEMPLATE: PlatformField(
|
|
3016
|
+
selector=TEMPLATE_SELECTOR,
|
|
2901
3017
|
required=False,
|
|
2902
|
-
|
|
2903
|
-
|
|
3018
|
+
validator=validate(cv.template),
|
|
3019
|
+
error="invalid_template",
|
|
2904
3020
|
),
|
|
2905
|
-
|
|
3021
|
+
CONF_PAYLOAD_OFF: PlatformField(
|
|
2906
3022
|
selector=TEXT_SELECTOR,
|
|
2907
3023
|
required=False,
|
|
2908
|
-
default=
|
|
2909
|
-
section="lock_payload_settings",
|
|
3024
|
+
default=DEFAULT_PAYLOAD_OFF,
|
|
2910
3025
|
),
|
|
2911
|
-
|
|
3026
|
+
CONF_PAYLOAD_ON: PlatformField(
|
|
2912
3027
|
selector=TEXT_SELECTOR,
|
|
2913
3028
|
required=False,
|
|
2914
|
-
default=
|
|
2915
|
-
section="lock_payload_settings",
|
|
3029
|
+
default=DEFAULT_PAYLOAD_ON,
|
|
2916
3030
|
),
|
|
2917
|
-
|
|
3031
|
+
CONF_STATE_OFF: PlatformField(
|
|
2918
3032
|
selector=TEXT_SELECTOR,
|
|
2919
3033
|
required=False,
|
|
2920
|
-
default=DEFAULT_STATE_UNLOCKING,
|
|
2921
|
-
section="lock_payload_settings",
|
|
2922
3034
|
),
|
|
2923
|
-
|
|
3035
|
+
CONF_STATE_ON: PlatformField(
|
|
2924
3036
|
selector=TEXT_SELECTOR,
|
|
2925
3037
|
required=False,
|
|
2926
|
-
default=DEFAULT_STATE_JAMMED,
|
|
2927
|
-
section="lock_payload_settings",
|
|
2928
3038
|
),
|
|
2929
3039
|
CONF_RETAIN: PlatformField(selector=BOOLEAN_SELECTOR, required=False),
|
|
2930
3040
|
CONF_OPTIMISTIC: PlatformField(selector=BOOLEAN_SELECTOR, required=False),
|
|
2931
3041
|
},
|
|
2932
3042
|
}
|
|
2933
|
-
ENTITY_CONFIG_VALIDATOR: dict[
|
|
2934
|
-
str,
|
|
2935
|
-
Callable[[dict[str, Any]], dict[str, str]] | None,
|
|
2936
|
-
] = {
|
|
2937
|
-
Platform.ALARM_CONTROL_PANEL: None,
|
|
2938
|
-
Platform.BINARY_SENSOR.value: None,
|
|
2939
|
-
Platform.BUTTON.value: None,
|
|
2940
|
-
Platform.CLIMATE.value: validate_climate_platform_config,
|
|
2941
|
-
Platform.COVER.value: validate_cover_platform_config,
|
|
2942
|
-
Platform.FAN.value: validate_fan_platform_config,
|
|
2943
|
-
Platform.LIGHT.value: validate_light_platform_config,
|
|
2944
|
-
Platform.LOCK.value: None,
|
|
2945
|
-
Platform.NOTIFY.value: None,
|
|
2946
|
-
Platform.SENSOR.value: validate_sensor_platform_config,
|
|
2947
|
-
Platform.SWITCH.value: None,
|
|
2948
|
-
}
|
|
2949
|
-
|
|
2950
3043
|
MQTT_DEVICE_PLATFORM_FIELDS = {
|
|
2951
3044
|
ATTR_NAME: PlatformField(selector=TEXT_SELECTOR, required=True),
|
|
2952
3045
|
ATTR_SW_VERSION: PlatformField(
|
|
@@ -2969,54 +3062,6 @@ MQTT_DEVICE_PLATFORM_FIELDS = {
|
|
|
2969
3062
|
),
|
|
2970
3063
|
}
|
|
2971
3064
|
|
|
2972
|
-
REAUTH_SCHEMA = vol.Schema(
|
|
2973
|
-
{
|
|
2974
|
-
vol.Required(CONF_USERNAME): TEXT_SELECTOR,
|
|
2975
|
-
vol.Required(CONF_PASSWORD): PASSWORD_SELECTOR,
|
|
2976
|
-
}
|
|
2977
|
-
)
|
|
2978
|
-
PWD_NOT_CHANGED = "__**password_not_changed**__"
|
|
2979
|
-
|
|
2980
|
-
|
|
2981
|
-
@callback
|
|
2982
|
-
def update_password_from_user_input(
|
|
2983
|
-
entry_password: str | None, user_input: dict[str, Any]
|
|
2984
|
-
) -> dict[str, Any]:
|
|
2985
|
-
"""Update the password if the entry has been updated.
|
|
2986
|
-
|
|
2987
|
-
As we want to avoid reflecting the stored password in the UI,
|
|
2988
|
-
we replace the suggested value in the UI with a sentitel,
|
|
2989
|
-
and we change it back here if it was changed.
|
|
2990
|
-
"""
|
|
2991
|
-
substituted_used_data = dict(user_input)
|
|
2992
|
-
# Take out the password submitted
|
|
2993
|
-
user_password: str | None = substituted_used_data.pop(CONF_PASSWORD, None)
|
|
2994
|
-
# Only add the password if it has changed.
|
|
2995
|
-
# If the sentinel password is submitted, we replace that with our current
|
|
2996
|
-
# password from the config entry data.
|
|
2997
|
-
password_changed = user_password is not None and user_password != PWD_NOT_CHANGED
|
|
2998
|
-
password = user_password if password_changed else entry_password
|
|
2999
|
-
if password is not None:
|
|
3000
|
-
substituted_used_data[CONF_PASSWORD] = password
|
|
3001
|
-
return substituted_used_data
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
@callback
|
|
3005
|
-
def validate_field(
|
|
3006
|
-
field: str,
|
|
3007
|
-
validator: Callable[..., Any],
|
|
3008
|
-
user_input: dict[str, Any] | None,
|
|
3009
|
-
errors: dict[str, str],
|
|
3010
|
-
error: str,
|
|
3011
|
-
) -> None:
|
|
3012
|
-
"""Validate a single field."""
|
|
3013
|
-
if user_input is None or field not in user_input or validator is None:
|
|
3014
|
-
return
|
|
3015
|
-
try:
|
|
3016
|
-
user_input[field] = validator(user_input[field])
|
|
3017
|
-
except (ValueError, vol.Error, vol.Invalid):
|
|
3018
|
-
errors[field] = error
|
|
3019
|
-
|
|
3020
3065
|
|
|
3021
3066
|
@callback
|
|
3022
3067
|
def _check_conditions(
|
|
@@ -3050,49 +3095,6 @@ def calculate_merged_config(
|
|
|
3050
3095
|
} | merged_user_input
|
|
3051
3096
|
|
|
3052
3097
|
|
|
3053
|
-
@callback
|
|
3054
|
-
def validate_user_input(
|
|
3055
|
-
user_input: dict[str, Any],
|
|
3056
|
-
data_schema_fields: dict[str, PlatformField],
|
|
3057
|
-
*,
|
|
3058
|
-
component_data: dict[str, Any] | None = None,
|
|
3059
|
-
config_validator: Callable[[dict[str, Any]], dict[str, str]] | None = None,
|
|
3060
|
-
) -> tuple[dict[str, Any], dict[str, str]]:
|
|
3061
|
-
"""Validate user input."""
|
|
3062
|
-
errors: dict[str, str] = {}
|
|
3063
|
-
# Merge sections
|
|
3064
|
-
merged_user_input: dict[str, Any] = {}
|
|
3065
|
-
for key, value in user_input.items():
|
|
3066
|
-
if isinstance(value, dict):
|
|
3067
|
-
merged_user_input.update(value)
|
|
3068
|
-
else:
|
|
3069
|
-
merged_user_input[key] = value
|
|
3070
|
-
|
|
3071
|
-
for field, value in merged_user_input.items():
|
|
3072
|
-
validator = data_schema_fields[field].validator
|
|
3073
|
-
try:
|
|
3074
|
-
merged_user_input[field] = (
|
|
3075
|
-
validator(value) if validator is not None else value
|
|
3076
|
-
)
|
|
3077
|
-
except (ValueError, vol.Error, vol.Invalid):
|
|
3078
|
-
data_schema_field = data_schema_fields[field]
|
|
3079
|
-
errors[data_schema_field.section or field] = (
|
|
3080
|
-
data_schema_field.error or "invalid_input"
|
|
3081
|
-
)
|
|
3082
|
-
|
|
3083
|
-
if config_validator is not None:
|
|
3084
|
-
if TYPE_CHECKING:
|
|
3085
|
-
assert component_data is not None
|
|
3086
|
-
|
|
3087
|
-
errors |= config_validator(
|
|
3088
|
-
calculate_merged_config(
|
|
3089
|
-
merged_user_input, data_schema_fields, component_data
|
|
3090
|
-
),
|
|
3091
|
-
)
|
|
3092
|
-
|
|
3093
|
-
return merged_user_input, errors
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
3098
|
@callback
|
|
3097
3099
|
def data_schema_from_fields(
|
|
3098
3100
|
data_schema_fields: dict[str, PlatformField],
|
|
@@ -3210,6 +3212,49 @@ def data_schema_from_fields(
|
|
|
3210
3212
|
return vol.Schema(data_schema)
|
|
3211
3213
|
|
|
3212
3214
|
|
|
3215
|
+
@callback
|
|
3216
|
+
def validate_user_input(
|
|
3217
|
+
user_input: dict[str, Any],
|
|
3218
|
+
data_schema_fields: dict[str, PlatformField],
|
|
3219
|
+
*,
|
|
3220
|
+
component_data: dict[str, Any] | None = None,
|
|
3221
|
+
config_validator: Callable[[dict[str, Any]], dict[str, str]] | None = None,
|
|
3222
|
+
) -> tuple[dict[str, Any], dict[str, str]]:
|
|
3223
|
+
"""Validate user input."""
|
|
3224
|
+
errors: dict[str, str] = {}
|
|
3225
|
+
# Merge sections
|
|
3226
|
+
merged_user_input: dict[str, Any] = {}
|
|
3227
|
+
for key, value in user_input.items():
|
|
3228
|
+
if isinstance(value, dict):
|
|
3229
|
+
merged_user_input.update(value)
|
|
3230
|
+
else:
|
|
3231
|
+
merged_user_input[key] = value
|
|
3232
|
+
|
|
3233
|
+
for field, value in merged_user_input.items():
|
|
3234
|
+
validator = data_schema_fields[field].validator
|
|
3235
|
+
try:
|
|
3236
|
+
merged_user_input[field] = (
|
|
3237
|
+
validator(value) if validator is not None else value
|
|
3238
|
+
)
|
|
3239
|
+
except (ValueError, vol.Error, vol.Invalid):
|
|
3240
|
+
data_schema_field = data_schema_fields[field]
|
|
3241
|
+
errors[data_schema_field.section or field] = (
|
|
3242
|
+
data_schema_field.error or "invalid_input"
|
|
3243
|
+
)
|
|
3244
|
+
|
|
3245
|
+
if config_validator is not None:
|
|
3246
|
+
if TYPE_CHECKING:
|
|
3247
|
+
assert component_data is not None
|
|
3248
|
+
|
|
3249
|
+
errors |= config_validator(
|
|
3250
|
+
calculate_merged_config(
|
|
3251
|
+
merged_user_input, data_schema_fields, component_data
|
|
3252
|
+
),
|
|
3253
|
+
)
|
|
3254
|
+
|
|
3255
|
+
return merged_user_input, errors
|
|
3256
|
+
|
|
3257
|
+
|
|
3213
3258
|
@callback
|
|
3214
3259
|
def subentry_schema_default_data_from_fields(
|
|
3215
3260
|
data_schema_fields: dict[str, PlatformField],
|
|
@@ -3227,6 +3272,37 @@ def subentry_schema_default_data_from_fields(
|
|
|
3227
3272
|
}
|
|
3228
3273
|
|
|
3229
3274
|
|
|
3275
|
+
@callback
|
|
3276
|
+
def update_password_from_user_input(
|
|
3277
|
+
entry_password: str | None, user_input: dict[str, Any]
|
|
3278
|
+
) -> dict[str, Any]:
|
|
3279
|
+
"""Update the password if the entry has been updated.
|
|
3280
|
+
|
|
3281
|
+
As we want to avoid reflecting the stored password in the UI,
|
|
3282
|
+
we replace the suggested value in the UI with a sentitel,
|
|
3283
|
+
and we change it back here if it was changed.
|
|
3284
|
+
"""
|
|
3285
|
+
substituted_used_data = dict(user_input)
|
|
3286
|
+
# Take out the password submitted
|
|
3287
|
+
user_password: str | None = substituted_used_data.pop(CONF_PASSWORD, None)
|
|
3288
|
+
# Only add the password if it has changed.
|
|
3289
|
+
# If the sentinel password is submitted, we replace that with our current
|
|
3290
|
+
# password from the config entry data.
|
|
3291
|
+
password_changed = user_password is not None and user_password != PWD_NOT_CHANGED
|
|
3292
|
+
password = user_password if password_changed else entry_password
|
|
3293
|
+
if password is not None:
|
|
3294
|
+
substituted_used_data[CONF_PASSWORD] = password
|
|
3295
|
+
return substituted_used_data
|
|
3296
|
+
|
|
3297
|
+
|
|
3298
|
+
REAUTH_SCHEMA = vol.Schema(
|
|
3299
|
+
{
|
|
3300
|
+
vol.Required(CONF_USERNAME): TEXT_SELECTOR,
|
|
3301
|
+
vol.Required(CONF_PASSWORD): PASSWORD_SELECTOR,
|
|
3302
|
+
}
|
|
3303
|
+
)
|
|
3304
|
+
|
|
3305
|
+
|
|
3230
3306
|
class FlowHandler(ConfigFlow, domain=DOMAIN):
|
|
3231
3307
|
"""Handle a config flow."""
|
|
3232
3308
|
|
|
@@ -4677,7 +4753,7 @@ async def async_get_broker_settings( # noqa: C901
|
|
|
4677
4753
|
CONF_CLIENT_KEY,
|
|
4678
4754
|
description={"suggested_value": user_input_basic.get(CONF_CLIENT_KEY)},
|
|
4679
4755
|
)
|
|
4680
|
-
] =
|
|
4756
|
+
] = CERT_KEY_UPLOAD_SELECTOR
|
|
4681
4757
|
fields[
|
|
4682
4758
|
vol.Optional(
|
|
4683
4759
|
CONF_CLIENT_KEY_PASSWORD,
|