homeassistant 2025.12.0b5__py3-none-any.whl → 2025.12.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- homeassistant/components/airobot/translations/el.json +5 -1
- homeassistant/components/airobot/translations/en-GB.json +5 -1
- homeassistant/components/airobot/translations/he.json +25 -0
- homeassistant/components/airobot/translations/lt.json +5 -1
- homeassistant/components/airobot/translations/pt.json +5 -1
- homeassistant/components/airobot/translations/sk.json +5 -1
- homeassistant/components/alarm_control_panel/translations/cs.json +21 -7
- homeassistant/components/alarm_control_panel/translations/de.json +1 -1
- homeassistant/components/alarm_control_panel/translations/en-GB.json +21 -7
- homeassistant/components/alarm_control_panel/translations/es.json +13 -7
- homeassistant/components/alarm_control_panel/translations/he.json +86 -1
- homeassistant/components/alarm_control_panel/translations/lt.json +21 -7
- homeassistant/components/alarm_control_panel/translations/pt.json +21 -7
- homeassistant/components/alarm_control_panel/translations/sk.json +21 -7
- homeassistant/components/alarm_control_panel/translations/zh-Hans.json +4 -2
- homeassistant/components/alert/translations/he.json +1 -1
- homeassistant/components/anglian_water/config_flow.py +4 -18
- homeassistant/components/anglian_water/manifest.json +1 -0
- homeassistant/components/anglian_water/translations/en-GB.json +2 -1
- homeassistant/components/anglian_water/translations/he.json +20 -0
- homeassistant/components/anglian_water/translations/lt.json +2 -1
- homeassistant/components/anglian_water/translations/pt.json +2 -1
- homeassistant/components/anglian_water/translations/sk.json +2 -1
- homeassistant/components/anglian_water/translations/sv.json +8 -2
- homeassistant/components/anova/translations/he.json +1 -1
- homeassistant/components/anthropic/translations/he.json +31 -0
- homeassistant/components/apcupsd/translations/sk.json +5 -5
- homeassistant/components/aprilaire/translations/he.json +4 -4
- homeassistant/components/assist_satellite/manifest.json +1 -1
- homeassistant/components/assist_satellite/translations/cs.json +12 -4
- homeassistant/components/assist_satellite/translations/en-GB.json +12 -4
- homeassistant/components/assist_satellite/translations/es.json +12 -4
- homeassistant/components/assist_satellite/translations/he.json +55 -2
- homeassistant/components/assist_satellite/translations/lt.json +12 -4
- homeassistant/components/assist_satellite/translations/pt.json +12 -4
- homeassistant/components/assist_satellite/translations/sk.json +12 -4
- homeassistant/components/assist_satellite/translations/zh-Hans.json +4 -2
- homeassistant/components/automation/manifest.json +2 -0
- homeassistant/components/automation/translations/cs.json +8 -0
- homeassistant/components/automation/translations/en-GB.json +8 -0
- homeassistant/components/automation/translations/es.json +8 -0
- homeassistant/components/automation/translations/fr.json +8 -0
- homeassistant/components/automation/translations/lt.json +8 -0
- homeassistant/components/automation/translations/pt.json +8 -0
- homeassistant/components/automation/translations/sk.json +8 -0
- homeassistant/components/automation/translations/sr-Latn.json +1 -1
- homeassistant/components/backup/translations/he.json +1 -1
- homeassistant/components/bang_olufsen/translations/he.json +901 -0
- homeassistant/components/bayesian/translations/sk.json +3 -3
- homeassistant/components/binary_sensor/strings.json +4 -4
- homeassistant/components/binary_sensor/translations/cs.json +36 -1
- homeassistant/components/binary_sensor/translations/de.json +3 -3
- homeassistant/components/binary_sensor/translations/en-GB.json +36 -1
- homeassistant/components/binary_sensor/translations/en.json +4 -4
- homeassistant/components/binary_sensor/translations/es.json +36 -1
- homeassistant/components/binary_sensor/translations/et.json +1 -1
- homeassistant/components/binary_sensor/translations/ga.json +36 -1
- homeassistant/components/binary_sensor/translations/he.json +36 -1
- homeassistant/components/binary_sensor/translations/lt.json +36 -1
- homeassistant/components/binary_sensor/translations/pt.json +36 -1
- homeassistant/components/binary_sensor/translations/ru.json +36 -1
- homeassistant/components/binary_sensor/translations/sk.json +4 -4
- homeassistant/components/binary_sensor/translations/sv.json +23 -1
- homeassistant/components/binary_sensor/translations/zh-Hans.json +29 -1
- homeassistant/components/binary_sensor/translations/zh-Hant.json +3 -3
- homeassistant/components/binary_sensor/triggers.yaml +2 -2
- homeassistant/components/blebox/translations/sr-Latn.json +1 -0
- homeassistant/components/bsblan/translations/sr-Latn.json +4 -0
- homeassistant/components/camera/__init__.py +1 -1
- homeassistant/components/camera/translations/he.json +1 -1
- homeassistant/components/climate/translations/cs.json +15 -5
- homeassistant/components/climate/translations/en-GB.json +15 -5
- homeassistant/components/climate/translations/es.json +11 -5
- homeassistant/components/climate/translations/he.json +65 -2
- homeassistant/components/climate/translations/lt.json +15 -5
- homeassistant/components/climate/translations/pt.json +15 -5
- homeassistant/components/climate/translations/ru.json +21 -11
- homeassistant/components/climate/translations/sk.json +15 -5
- homeassistant/components/cloud/client.py +9 -5
- homeassistant/components/cloud/entity.py +1 -1
- homeassistant/components/cloud/http_api.py +21 -0
- homeassistant/components/cloud/manifest.json +1 -1
- homeassistant/components/cloud/translations/he.json +7 -0
- homeassistant/components/conversation/manifest.json +1 -1
- homeassistant/components/deluge/translations/he.json +1 -1
- homeassistant/components/derivative/translations/he.json +5 -0
- homeassistant/components/doorbird/device.py +11 -7
- homeassistant/components/duckdns/translations/he.json +10 -0
- homeassistant/components/duckdns/translations/ru.json +12 -0
- homeassistant/components/ecovacs/manifest.json +1 -1
- homeassistant/components/ecovacs/translations/he.json +1 -1
- homeassistant/components/energyid/translations/he.json +11 -0
- homeassistant/components/energyid/translations/sv.json +2 -1
- homeassistant/components/enphase_envoy/translations/he.json +1 -1
- homeassistant/components/esphome/translations/he.json +1 -0
- homeassistant/components/esphome/translations/lt.json +1 -0
- homeassistant/components/essent/translations/he.json +9 -0
- homeassistant/components/essent/translations/nl.json +32 -0
- homeassistant/components/evohome/manifest.json +1 -1
- homeassistant/components/fan/translations/cs.json +6 -2
- homeassistant/components/fan/translations/en-GB.json +6 -2
- homeassistant/components/fan/translations/es.json +2 -1
- homeassistant/components/fan/translations/he.json +34 -1
- homeassistant/components/fan/translations/lt.json +6 -2
- homeassistant/components/fan/translations/nl.json +6 -1
- homeassistant/components/fan/translations/pt.json +6 -2
- homeassistant/components/fan/translations/ru.json +37 -1
- homeassistant/components/fan/translations/sk.json +6 -2
- homeassistant/components/forked_daapd/translations/sr-Latn.json +8 -0
- homeassistant/components/fritzbox_callmonitor/translations/he.json +1 -1
- homeassistant/components/fronius/translations/he.json +1 -1
- homeassistant/components/frontend/manifest.json +1 -1
- homeassistant/components/frontend/translations/cs.json +2 -2
- homeassistant/components/frontend/translations/de.json +2 -2
- homeassistant/components/frontend/translations/he.json +8 -0
- homeassistant/components/google_air_quality/strings.json +7 -2
- homeassistant/components/google_air_quality/translations/bg.json +3 -2
- homeassistant/components/google_air_quality/translations/cs.json +7 -2
- homeassistant/components/google_air_quality/translations/de.json +7 -2
- homeassistant/components/google_air_quality/translations/el.json +3 -2
- homeassistant/components/google_air_quality/translations/en-GB.json +161 -3
- homeassistant/components/google_air_quality/translations/en.json +7 -2
- homeassistant/components/google_air_quality/translations/es.json +7 -2
- homeassistant/components/google_air_quality/translations/et.json +7 -2
- homeassistant/components/google_air_quality/translations/fr.json +14 -0
- homeassistant/components/google_air_quality/translations/ga.json +7 -2
- homeassistant/components/google_air_quality/translations/he.json +239 -0
- homeassistant/components/google_air_quality/translations/lt.json +0 -9
- homeassistant/components/google_air_quality/translations/nl.json +42 -2
- homeassistant/components/google_air_quality/translations/pt.json +7 -2
- homeassistant/components/google_air_quality/translations/ru.json +2 -9
- homeassistant/components/google_air_quality/translations/sk.json +7 -2
- homeassistant/components/google_air_quality/translations/sv.json +11 -4
- homeassistant/components/google_air_quality/translations/tr.json +0 -9
- homeassistant/components/google_air_quality/translations/zh-Hans.json +7 -4
- homeassistant/components/google_air_quality/translations/zh-Hant.json +7 -2
- homeassistant/components/google_assistant/translations/sr-Latn.json +1 -1
- homeassistant/components/google_generative_ai_conversation/__init__.py +1 -0
- homeassistant/components/google_generative_ai_conversation/const.py +1 -1
- homeassistant/components/google_generative_ai_conversation/strings.json +1 -1
- homeassistant/components/google_generative_ai_conversation/translations/bg.json +0 -3
- homeassistant/components/google_generative_ai_conversation/translations/cs.json +1 -1
- homeassistant/components/google_generative_ai_conversation/translations/de.json +1 -1
- homeassistant/components/google_generative_ai_conversation/translations/el.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/en-GB.json +1 -1
- homeassistant/components/google_generative_ai_conversation/translations/en.json +1 -1
- homeassistant/components/google_generative_ai_conversation/translations/es.json +1 -1
- homeassistant/components/google_generative_ai_conversation/translations/et.json +1 -1
- homeassistant/components/google_generative_ai_conversation/translations/fr.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/ga.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/he.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/hu.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/lt.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/nl.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/pt-BR.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/pt.json +1 -1
- homeassistant/components/google_generative_ai_conversation/translations/ru.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/sk.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/sl.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/sv.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/tr.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/uk.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/zh-Hans.json +0 -1
- homeassistant/components/google_generative_ai_conversation/translations/zh-Hant.json +0 -1
- homeassistant/components/google_photos/services.py +1 -0
- homeassistant/components/google_photos/strings.json +1 -1
- homeassistant/components/google_photos/translations/bg.json +0 -1
- homeassistant/components/google_photos/translations/ca.json +0 -1
- homeassistant/components/google_photos/translations/cs.json +1 -1
- homeassistant/components/google_photos/translations/de.json +1 -1
- homeassistant/components/google_photos/translations/el.json +0 -1
- homeassistant/components/google_photos/translations/en-GB.json +1 -1
- homeassistant/components/google_photos/translations/en.json +1 -1
- homeassistant/components/google_photos/translations/es.json +1 -1
- homeassistant/components/google_photos/translations/et.json +1 -1
- homeassistant/components/google_photos/translations/fr.json +0 -1
- homeassistant/components/google_photos/translations/ga.json +0 -1
- homeassistant/components/google_photos/translations/he.json +0 -1
- homeassistant/components/google_photos/translations/hu.json +0 -1
- homeassistant/components/google_photos/translations/id.json +0 -1
- homeassistant/components/google_photos/translations/it.json +0 -1
- homeassistant/components/google_photos/translations/ja.json +0 -1
- homeassistant/components/google_photos/translations/lt.json +0 -1
- homeassistant/components/google_photos/translations/nl.json +0 -1
- homeassistant/components/google_photos/translations/pt-BR.json +0 -1
- homeassistant/components/google_photos/translations/pt.json +1 -1
- homeassistant/components/google_photos/translations/ru.json +0 -1
- homeassistant/components/google_photos/translations/sk.json +0 -1
- homeassistant/components/google_photos/translations/sv.json +0 -1
- homeassistant/components/google_photos/translations/tr.json +0 -1
- homeassistant/components/google_photos/translations/uk.json +0 -1
- homeassistant/components/google_photos/translations/zh-Hans.json +0 -1
- homeassistant/components/google_photos/translations/zh-Hant.json +0 -1
- homeassistant/components/google_weather/translations/he.json +102 -0
- homeassistant/components/group/notify.py +28 -5
- homeassistant/components/hanna/translations/he.json +20 -0
- homeassistant/components/hassio/const.py +1 -0
- homeassistant/components/hassio/strings.json +1 -1
- homeassistant/components/hassio/translations/cs.json +1 -1
- homeassistant/components/hassio/translations/de.json +1 -1
- homeassistant/components/hassio/translations/el.json +0 -1
- homeassistant/components/hassio/translations/en-GB.json +1 -1
- homeassistant/components/hassio/translations/en.json +1 -1
- homeassistant/components/hassio/translations/es.json +1 -1
- homeassistant/components/hassio/translations/et.json +1 -1
- homeassistant/components/hassio/translations/fr.json +0 -1
- homeassistant/components/hassio/translations/fy.json +0 -3
- homeassistant/components/hassio/translations/ga.json +0 -1
- homeassistant/components/hassio/translations/he.json +0 -1
- homeassistant/components/hassio/translations/id.json +0 -1
- homeassistant/components/hassio/translations/lt.json +1 -1
- homeassistant/components/hassio/translations/mk.json +0 -1
- homeassistant/components/hassio/translations/nl.json +0 -1
- homeassistant/components/hassio/translations/pt.json +1 -1
- homeassistant/components/hassio/translations/ru.json +0 -1
- homeassistant/components/hassio/translations/sk.json +1 -1
- homeassistant/components/hassio/translations/sv.json +0 -1
- homeassistant/components/hassio/translations/tr.json +0 -1
- homeassistant/components/hassio/translations/zh-Hans.json +0 -1
- homeassistant/components/hassio/translations/zh-Hant.json +1 -1
- homeassistant/components/home_connect/translations/de.json +2 -2
- homeassistant/components/home_connect/translations/he.json +3 -0
- homeassistant/components/homeassistant_connect_zbt2/config_flow.py +0 -17
- homeassistant/components/homeassistant_connect_zbt2/const.py +0 -58
- homeassistant/components/homeassistant_hardware/firmware_config_flow.py +0 -5
- homeassistant/components/homekit_controller/translations/he.json +1 -1
- homeassistant/components/hue_ble/translations/en-GB.json +2 -1
- homeassistant/components/hue_ble/translations/he.json +11 -0
- homeassistant/components/hue_ble/translations/lt.json +2 -1
- homeassistant/components/hue_ble/translations/nl.json +3 -0
- homeassistant/components/hue_ble/translations/pt.json +2 -1
- homeassistant/components/hue_ble/translations/sk.json +2 -1
- homeassistant/components/hue_ble/translations/sv.json +8 -0
- homeassistant/components/humidifier/translations/he.json +1 -1
- homeassistant/components/integration/translations/pl.json +1 -1
- homeassistant/components/iometer/manifest.json +1 -1
- homeassistant/components/ipp/translations/he.json +1 -1
- homeassistant/components/iron_os/translations/he.json +1 -1
- homeassistant/components/kitchen_sink/translations/cs.json +2 -2
- homeassistant/components/kitchen_sink/translations/de.json +4 -4
- homeassistant/components/kitchen_sink/translations/el.json +5 -0
- homeassistant/components/kitchen_sink/translations/en-GB.json +2 -2
- homeassistant/components/kitchen_sink/translations/en.json +2 -2
- homeassistant/components/kitchen_sink/translations/es.json +2 -2
- homeassistant/components/kitchen_sink/translations/et.json +1 -1
- homeassistant/components/kitchen_sink/translations/ga.json +0 -2
- homeassistant/components/kitchen_sink/translations/it.json +0 -2
- homeassistant/components/kitchen_sink/translations/lt.json +0 -2
- homeassistant/components/kitchen_sink/translations/nl.json +4 -0
- homeassistant/components/kitchen_sink/translations/pt.json +2 -2
- homeassistant/components/kitchen_sink/translations/sk.json +2 -2
- homeassistant/components/kitchen_sink/translations/tr.json +0 -2
- homeassistant/components/kitchen_sink/translations/zh-Hans.json +0 -2
- homeassistant/components/labs/__init__.py +2 -54
- homeassistant/components/labs/helpers.py +63 -0
- homeassistant/components/labs/websocket_api.py +51 -0
- homeassistant/components/lametric/services.py +1 -0
- homeassistant/components/lametric/strings.json +1 -1
- homeassistant/components/lametric/translations/ca.json +0 -3
- homeassistant/components/lametric/translations/cs.json +1 -1
- homeassistant/components/lametric/translations/de.json +1 -1
- homeassistant/components/lametric/translations/el.json +0 -1
- homeassistant/components/lametric/translations/en-GB.json +1 -1
- homeassistant/components/lametric/translations/en.json +1 -1
- homeassistant/components/lametric/translations/es.json +1 -1
- homeassistant/components/lametric/translations/et.json +0 -1
- homeassistant/components/lametric/translations/fi.json +0 -3
- homeassistant/components/lametric/translations/ga.json +0 -1
- homeassistant/components/lametric/translations/gl.json +0 -3
- homeassistant/components/lametric/translations/hu.json +0 -1
- homeassistant/components/lametric/translations/it.json +0 -3
- homeassistant/components/lametric/translations/ja.json +0 -1
- homeassistant/components/lametric/translations/ko.json +0 -3
- homeassistant/components/lametric/translations/lt.json +0 -1
- homeassistant/components/lametric/translations/nl.json +0 -3
- homeassistant/components/lametric/translations/pt-BR.json +0 -3
- homeassistant/components/lametric/translations/pt.json +0 -1
- homeassistant/components/lametric/translations/ru.json +0 -1
- homeassistant/components/lametric/translations/sk.json +0 -1
- homeassistant/components/lametric/translations/sv.json +0 -1
- homeassistant/components/lametric/translations/tr.json +0 -1
- homeassistant/components/lametric/translations/vi.json +0 -3
- homeassistant/components/lametric/translations/zh-Hans.json +0 -1
- homeassistant/components/lametric/translations/zh-Hant.json +0 -1
- homeassistant/components/lawn_mower/translations/cs.json +12 -4
- homeassistant/components/lawn_mower/translations/en-GB.json +12 -4
- homeassistant/components/lawn_mower/translations/es.json +4 -4
- homeassistant/components/lawn_mower/translations/he.json +38 -0
- homeassistant/components/lawn_mower/translations/lt.json +12 -4
- homeassistant/components/lawn_mower/translations/pt.json +20 -12
- homeassistant/components/lawn_mower/translations/ru.json +56 -1
- homeassistant/components/lawn_mower/translations/sk.json +12 -4
- homeassistant/components/letpot/manifest.json +1 -1
- homeassistant/components/libre_hardware_monitor/coordinator.py +26 -18
- homeassistant/components/light/translations/cs.json +6 -2
- homeassistant/components/light/translations/en-GB.json +6 -2
- homeassistant/components/light/translations/es.json +2 -2
- homeassistant/components/light/translations/he.json +69 -2
- homeassistant/components/light/translations/lt.json +6 -2
- homeassistant/components/light/translations/nl.json +6 -1
- homeassistant/components/light/translations/pt.json +6 -2
- homeassistant/components/light/translations/ru.json +15 -11
- homeassistant/components/light/translations/sk.json +6 -2
- homeassistant/components/matter/translations/he.json +56 -2
- homeassistant/components/media_player/translations/cs.json +3 -1
- homeassistant/components/media_player/translations/en-GB.json +3 -1
- homeassistant/components/media_player/translations/es.json +1 -1
- homeassistant/components/media_player/translations/he.json +27 -4
- homeassistant/components/media_player/translations/lt.json +3 -1
- homeassistant/components/media_player/translations/pt.json +3 -1
- homeassistant/components/media_player/translations/ru.json +24 -1
- homeassistant/components/media_player/translations/sk.json +3 -1
- homeassistant/components/miele/translations/en-GB.json +1 -0
- homeassistant/components/miele/translations/ga.json +1 -0
- homeassistant/components/miele/translations/he.json +4 -1
- homeassistant/components/miele/translations/it.json +15 -1
- homeassistant/components/miele/translations/lt.json +1 -0
- homeassistant/components/miele/translations/pt.json +1 -0
- homeassistant/components/miele/translations/zh-Hans.json +1 -0
- homeassistant/components/mqtt/translations/cs.json +3 -1
- homeassistant/components/mqtt/translations/en-GB.json +3 -1
- homeassistant/components/mqtt/translations/es.json +1 -1
- homeassistant/components/mqtt/translations/he.json +35 -1
- homeassistant/components/mqtt/translations/lt.json +5 -1
- homeassistant/components/mqtt/translations/pt.json +3 -1
- homeassistant/components/mqtt/translations/sk.json +3 -1
- homeassistant/components/music_assistant/__init__.py +2 -1
- homeassistant/components/music_assistant/config_flow.py +23 -5
- homeassistant/components/music_assistant/translations/he.json +8 -1
- homeassistant/components/myuplink/translations/he.json +5 -0
- homeassistant/components/neato/translations/he.json +5 -0
- homeassistant/components/nest/manifest.json +1 -1
- homeassistant/components/netatmo/translations/he.json +5 -0
- homeassistant/components/niko_home_control/translations/he.json +3 -1
- homeassistant/components/nina/translations/he.json +12 -1
- homeassistant/components/nordpool/manifest.json +1 -1
- homeassistant/components/ntfy/translations/cs.json +1 -1
- homeassistant/components/ntfy/translations/de.json +1 -1
- homeassistant/components/ntfy/translations/el.json +0 -3
- homeassistant/components/ntfy/translations/en-GB.json +1 -1
- homeassistant/components/ntfy/translations/en.json +1 -1
- homeassistant/components/ntfy/translations/es.json +1 -1
- homeassistant/components/ntfy/translations/et.json +1 -1
- homeassistant/components/ntfy/translations/lt.json +0 -1
- homeassistant/components/ntfy/translations/pt.json +1 -1
- homeassistant/components/ntfy/translations/ru.json +0 -1
- homeassistant/components/ntfy/translations/sk.json +1 -1
- homeassistant/components/ntfy/translations/sv.json +0 -1
- homeassistant/components/ntfy/translations/tr.json +0 -1
- homeassistant/components/ntfy/translations/zh-Hans.json +0 -1
- homeassistant/components/ntfy/translations/zh-Hant.json +1 -1
- homeassistant/components/onedrive/services.py +1 -0
- homeassistant/components/onedrive/strings.json +1 -1
- homeassistant/components/onedrive/translations/cs.json +1 -1
- homeassistant/components/onedrive/translations/de.json +1 -1
- homeassistant/components/onedrive/translations/el.json +0 -1
- homeassistant/components/onedrive/translations/en-GB.json +1 -1
- homeassistant/components/onedrive/translations/en.json +1 -1
- homeassistant/components/onedrive/translations/es.json +1 -1
- homeassistant/components/onedrive/translations/et.json +1 -1
- homeassistant/components/onedrive/translations/ga.json +0 -1
- homeassistant/components/onedrive/translations/he.json +3 -1
- homeassistant/components/onedrive/translations/hu.json +0 -1
- homeassistant/components/onedrive/translations/it.json +0 -1
- homeassistant/components/onedrive/translations/ja.json +0 -1
- homeassistant/components/onedrive/translations/lt.json +0 -1
- homeassistant/components/onedrive/translations/nl.json +0 -1
- homeassistant/components/onedrive/translations/pt.json +1 -1
- homeassistant/components/onedrive/translations/ru.json +0 -1
- homeassistant/components/onedrive/translations/sk.json +0 -1
- homeassistant/components/onedrive/translations/sl.json +0 -1
- homeassistant/components/onedrive/translations/sv.json +0 -1
- homeassistant/components/onedrive/translations/tr.json +0 -1
- homeassistant/components/onedrive/translations/zh-Hans.json +0 -1
- homeassistant/components/onedrive/translations/zh-Hant.json +0 -1
- homeassistant/components/oralb/manifest.json +2 -1
- homeassistant/components/oralb/translations/he.json +1 -1
- homeassistant/components/pilight/__init__.py +13 -1
- homeassistant/components/pilight/strings.json +1 -1
- homeassistant/components/pilight/translations/cs.json +1 -1
- homeassistant/components/pilight/translations/de.json +1 -1
- homeassistant/components/pilight/translations/el.json +0 -1
- homeassistant/components/pilight/translations/en-GB.json +1 -1
- homeassistant/components/pilight/translations/en.json +1 -1
- homeassistant/components/pilight/translations/es.json +1 -1
- homeassistant/components/pilight/translations/et.json +1 -1
- homeassistant/components/pilight/translations/fi.json +0 -1
- homeassistant/components/pilight/translations/ga.json +0 -1
- homeassistant/components/pilight/translations/hu.json +0 -1
- homeassistant/components/pilight/translations/it.json +0 -1
- homeassistant/components/pilight/translations/ja.json +0 -1
- homeassistant/components/pilight/translations/ko.json +0 -1
- homeassistant/components/pilight/translations/lt.json +0 -1
- homeassistant/components/pilight/translations/pt.json +1 -1
- homeassistant/components/pilight/translations/ru.json +0 -1
- homeassistant/components/pilight/translations/sk.json +1 -1
- homeassistant/components/pilight/translations/sv.json +0 -1
- homeassistant/components/pilight/translations/tr.json +0 -1
- homeassistant/components/pilight/translations/zh-Hans.json +0 -1
- homeassistant/components/pilight/translations/zh-Hant.json +1 -1
- homeassistant/components/ping/helpers.py +1 -1
- homeassistant/components/playstation_network/coordinator.py +14 -7
- homeassistant/components/plugwise/translations/en-GB.json +1 -1
- homeassistant/components/plugwise/translations/he.json +26 -0
- homeassistant/components/plugwise/translations/ru.json +12 -0
- homeassistant/components/point/translations/he.json +5 -0
- homeassistant/components/pooldose/translations/he.json +11 -0
- homeassistant/components/prusalink/translations/he.json +1 -1
- homeassistant/components/qbittorrent/translations/he.json +1 -1
- homeassistant/components/rainmachine/__init__.py +13 -2
- homeassistant/components/rainmachine/strings.json +1 -1
- homeassistant/components/rainmachine/translations/cs.json +1 -1
- homeassistant/components/rainmachine/translations/de.json +1 -1
- homeassistant/components/rainmachine/translations/en-GB.json +1 -1
- homeassistant/components/rainmachine/translations/en.json +1 -1
- homeassistant/components/rainmachine/translations/es.json +1 -1
- homeassistant/components/rainmachine/translations/et.json +1 -1
- homeassistant/components/rainmachine/translations/lt.json +0 -1
- homeassistant/components/rainmachine/translations/pt.json +1 -1
- homeassistant/components/rainmachine/translations/ru.json +1 -0
- homeassistant/components/rainmachine/translations/sk.json +1 -1
- homeassistant/components/rainmachine/translations/zh-Hans.json +0 -1
- homeassistant/components/rainmachine/translations/zh-Hant.json +1 -1
- homeassistant/components/reolink/host.py +4 -0
- homeassistant/components/reolink/manifest.json +1 -1
- homeassistant/components/reolink/strings.json +2 -2
- homeassistant/components/reolink/translations/ca.json +0 -2
- homeassistant/components/reolink/translations/cs.json +2 -2
- homeassistant/components/reolink/translations/de.json +2 -2
- homeassistant/components/reolink/translations/el.json +0 -2
- homeassistant/components/reolink/translations/en-GB.json +2 -2
- homeassistant/components/reolink/translations/en.json +2 -2
- homeassistant/components/reolink/translations/es.json +0 -2
- homeassistant/components/reolink/translations/et.json +2 -2
- homeassistant/components/reolink/translations/fi.json +0 -2
- homeassistant/components/reolink/translations/fr.json +0 -2
- homeassistant/components/reolink/translations/ga.json +0 -2
- homeassistant/components/reolink/translations/hr.json +0 -5
- homeassistant/components/reolink/translations/hu.json +0 -2
- homeassistant/components/reolink/translations/id.json +0 -2
- homeassistant/components/reolink/translations/it.json +0 -2
- homeassistant/components/reolink/translations/ja.json +0 -2
- homeassistant/components/reolink/translations/ko.json +0 -2
- homeassistant/components/reolink/translations/lt.json +0 -2
- homeassistant/components/reolink/translations/nb.json +0 -1
- homeassistant/components/reolink/translations/nl.json +0 -2
- homeassistant/components/reolink/translations/pl.json +0 -1
- homeassistant/components/reolink/translations/pt-BR.json +0 -2
- homeassistant/components/reolink/translations/pt.json +2 -2
- homeassistant/components/reolink/translations/ro.json +0 -2
- homeassistant/components/reolink/translations/ru.json +0 -2
- homeassistant/components/reolink/translations/sk.json +2 -2
- homeassistant/components/reolink/translations/sv.json +0 -2
- homeassistant/components/reolink/translations/tr.json +0 -2
- homeassistant/components/reolink/translations/uk.json +0 -2
- homeassistant/components/reolink/translations/zh-Hans.json +0 -2
- homeassistant/components/reolink/translations/zh-Hant.json +2 -2
- homeassistant/components/rituals_perfume_genie/__init__.py +47 -7
- homeassistant/components/rituals_perfume_genie/config_flow.py +79 -32
- homeassistant/components/rituals_perfume_genie/const.py +1 -0
- homeassistant/components/rituals_perfume_genie/coordinator.py +39 -4
- homeassistant/components/rituals_perfume_genie/manifest.json +2 -2
- homeassistant/components/rituals_perfume_genie/strings.json +8 -1
- homeassistant/components/rituals_perfume_genie/translations/bg.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/ca.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/cs.json +8 -1
- homeassistant/components/rituals_perfume_genie/translations/da.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/de.json +8 -1
- homeassistant/components/rituals_perfume_genie/translations/el.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/en-GB.json +8 -1
- homeassistant/components/rituals_perfume_genie/translations/en.json +8 -1
- homeassistant/components/rituals_perfume_genie/translations/es.json +8 -1
- homeassistant/components/rituals_perfume_genie/translations/et.json +7 -1
- homeassistant/components/rituals_perfume_genie/translations/fi.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/fr.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/ga.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/he.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/hu.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/id.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/it.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/ja.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/ko.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/lt.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/lv.json +0 -5
- homeassistant/components/rituals_perfume_genie/translations/nb.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/nl.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/pl.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/pt-BR.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/pt.json +8 -1
- homeassistant/components/rituals_perfume_genie/translations/ro.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/ru.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/sk.json +8 -1
- homeassistant/components/rituals_perfume_genie/translations/sl.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/sv.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/tr.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/uk.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/zh-Hans.json +0 -3
- homeassistant/components/rituals_perfume_genie/translations/zh-Hant.json +0 -3
- homeassistant/components/roborock/__init__.py +20 -1
- homeassistant/components/roborock/manifest.json +1 -1
- homeassistant/components/roborock/roborock_storage.py +29 -10
- homeassistant/components/roborock/translations/he.json +1 -1
- homeassistant/components/saunum/translations/he.json +31 -0
- homeassistant/components/scene/translations/cs.json +3 -3
- homeassistant/components/senz/translations/he.json +11 -1
- homeassistant/components/sfr_box/translations/he.json +1 -1
- homeassistant/components/sharkiq/manifest.json +1 -1
- homeassistant/components/shelly/button.py +11 -2
- homeassistant/components/shelly/translations/ga.json +8 -0
- homeassistant/components/shelly/translations/he.json +132 -0
- homeassistant/components/sleep_as_android/translations/es.json +3 -0
- homeassistant/components/smartthings/translations/he.json +19 -1
- homeassistant/components/spotify/translations/he.json +5 -0
- homeassistant/components/starlink/coordinator.py +0 -1
- homeassistant/components/starlink/sensor.py +6 -3
- homeassistant/components/switchbot/translations/he.json +12 -0
- homeassistant/components/tedee/manifest.json +1 -0
- homeassistant/components/telegram_bot/__init__.py +3 -0
- homeassistant/components/telegram_bot/config_flow.py +9 -5
- homeassistant/components/telegram_bot/strings.json +9 -9
- homeassistant/components/telegram_bot/translations/bg.json +0 -7
- homeassistant/components/telegram_bot/translations/ca.json +0 -12
- homeassistant/components/telegram_bot/translations/cs.json +15 -15
- homeassistant/components/telegram_bot/translations/de.json +15 -15
- homeassistant/components/telegram_bot/translations/el.json +0 -18
- homeassistant/components/telegram_bot/translations/en-GB.json +15 -15
- homeassistant/components/telegram_bot/translations/en.json +15 -15
- homeassistant/components/telegram_bot/translations/es.json +2 -15
- homeassistant/components/telegram_bot/translations/et.json +15 -15
- homeassistant/components/telegram_bot/translations/fi.json +0 -12
- homeassistant/components/telegram_bot/translations/ga.json +0 -19
- homeassistant/components/telegram_bot/translations/gl.json +0 -3
- homeassistant/components/telegram_bot/translations/he.json +0 -12
- homeassistant/components/telegram_bot/translations/hu.json +0 -18
- homeassistant/components/telegram_bot/translations/it.json +0 -18
- homeassistant/components/telegram_bot/translations/ja.json +0 -18
- homeassistant/components/telegram_bot/translations/ko.json +0 -12
- homeassistant/components/telegram_bot/translations/lt.json +0 -19
- homeassistant/components/telegram_bot/translations/mk.json +0 -1
- homeassistant/components/telegram_bot/translations/nb.json +0 -12
- homeassistant/components/telegram_bot/translations/nl.json +0 -18
- homeassistant/components/telegram_bot/translations/pt.json +15 -15
- homeassistant/components/telegram_bot/translations/ru.json +13 -19
- homeassistant/components/telegram_bot/translations/sk.json +15 -15
- homeassistant/components/telegram_bot/translations/sr-Latn.json +0 -12
- homeassistant/components/telegram_bot/translations/sv.json +0 -19
- homeassistant/components/telegram_bot/translations/tr.json +0 -13
- homeassistant/components/telegram_bot/translations/zh-Hans.json +0 -19
- homeassistant/components/telegram_bot/translations/zh-Hant.json +13 -19
- homeassistant/components/template/helpers.py +20 -10
- homeassistant/components/template/light.py +12 -18
- homeassistant/components/template/strings.json +1 -1
- homeassistant/components/template/translations/cs.json +1 -1
- homeassistant/components/template/translations/de.json +1 -1
- homeassistant/components/template/translations/el.json +0 -1
- homeassistant/components/template/translations/en-GB.json +1 -1
- homeassistant/components/template/translations/en.json +1 -1
- homeassistant/components/template/translations/es.json +0 -1
- homeassistant/components/template/translations/et.json +1 -1
- homeassistant/components/template/translations/ga.json +0 -1
- homeassistant/components/template/translations/he.json +3 -0
- homeassistant/components/template/translations/it.json +0 -1
- homeassistant/components/template/translations/lt.json +0 -1
- homeassistant/components/template/translations/pl.json +0 -1
- homeassistant/components/template/translations/pt.json +1 -1
- homeassistant/components/template/translations/sk.json +1 -1
- homeassistant/components/template/translations/sr-Latn.json +0 -1
- homeassistant/components/template/translations/tr.json +0 -1
- homeassistant/components/template/translations/zh-Hans.json +0 -1
- homeassistant/components/template/translations/zh-Hant.json +0 -1
- homeassistant/components/tesla_fleet/translations/he.json +5 -0
- homeassistant/components/teslemetry/services.py +3 -0
- homeassistant/components/teslemetry/strings.json +1 -1
- homeassistant/components/teslemetry/translations/bg.json +0 -1
- homeassistant/components/teslemetry/translations/cs.json +1 -1
- homeassistant/components/teslemetry/translations/de.json +1 -1
- homeassistant/components/teslemetry/translations/el.json +0 -1
- homeassistant/components/teslemetry/translations/en-GB.json +1 -1
- homeassistant/components/teslemetry/translations/en.json +1 -1
- homeassistant/components/teslemetry/translations/es.json +1 -1
- homeassistant/components/teslemetry/translations/et.json +1 -1
- homeassistant/components/teslemetry/translations/ga.json +0 -1
- homeassistant/components/teslemetry/translations/he.json +2 -2
- homeassistant/components/teslemetry/translations/hr.json +0 -1
- homeassistant/components/teslemetry/translations/hu.json +0 -1
- homeassistant/components/teslemetry/translations/ja.json +0 -1
- homeassistant/components/teslemetry/translations/lt.json +0 -1
- homeassistant/components/teslemetry/translations/pt.json +1 -1
- homeassistant/components/teslemetry/translations/ru.json +1 -1
- homeassistant/components/teslemetry/translations/sk.json +1 -1
- homeassistant/components/teslemetry/translations/sv.json +0 -1
- homeassistant/components/teslemetry/translations/tr.json +0 -1
- homeassistant/components/teslemetry/translations/zh-Hans.json +0 -1
- homeassistant/components/teslemetry/translations/zh-Hant.json +1 -1
- homeassistant/components/text/translations/cs.json +7 -1
- homeassistant/components/text/translations/en-GB.json +7 -1
- homeassistant/components/text/translations/es.json +1 -1
- homeassistant/components/text/translations/he.json +7 -1
- homeassistant/components/text/translations/lt.json +7 -1
- homeassistant/components/text/translations/pt.json +7 -1
- homeassistant/components/text/translations/ru.json +7 -1
- homeassistant/components/text/translations/sk.json +7 -1
- homeassistant/components/timer/translations/he.json +1 -1
- homeassistant/components/toon/translations/he.json +5 -0
- homeassistant/components/transmission/translations/he.json +1 -1
- homeassistant/components/tuya/climate.py +12 -0
- homeassistant/components/tuya/translations/he.json +10 -0
- homeassistant/components/twitch/translations/he.json +5 -0
- homeassistant/components/unifiprotect/manifest.json +1 -1
- homeassistant/components/unifiprotect/translations/el.json +6 -0
- homeassistant/components/unifiprotect/translations/lt.json +10 -0
- homeassistant/components/unifiprotect/translations/pt.json +10 -0
- homeassistant/components/unifiprotect/translations/zh-Hans.json +2 -1
- homeassistant/components/vacuum/translations/cs.json +12 -4
- homeassistant/components/vacuum/translations/en-GB.json +12 -4
- homeassistant/components/vacuum/translations/es.json +3 -3
- homeassistant/components/vacuum/translations/he.json +57 -2
- homeassistant/components/vacuum/translations/lt.json +12 -4
- homeassistant/components/vacuum/translations/pt.json +12 -4
- homeassistant/components/vacuum/translations/ru.json +20 -12
- homeassistant/components/vacuum/translations/sk.json +12 -4
- homeassistant/components/vacuum/translations/sv.json +14 -0
- homeassistant/components/venstar/translations/he.json +1 -1
- homeassistant/components/vesync/binary_sensor.py +1 -1
- homeassistant/components/vicare/translations/he.json +10 -0
- homeassistant/components/victron_ble/translations/he.json +17 -0
- homeassistant/components/volvo/translations/he.json +6 -1
- homeassistant/components/weheat/translations/he.json +5 -0
- homeassistant/components/withings/translations/he.json +5 -0
- homeassistant/components/wled/config_flow.py +5 -1
- homeassistant/components/wled/coordinator.py +9 -0
- homeassistant/components/wled/strings.json +10 -2
- homeassistant/components/wled/translations/cs.json +10 -2
- homeassistant/components/wled/translations/de.json +10 -2
- homeassistant/components/wled/translations/en-GB.json +10 -2
- homeassistant/components/wled/translations/en.json +10 -2
- homeassistant/components/wled/translations/es.json +10 -2
- homeassistant/components/wled/translations/et.json +10 -2
- homeassistant/components/wled/translations/ga.json +10 -2
- homeassistant/components/wled/translations/he.json +8 -2
- homeassistant/components/wled/translations/lt.json +10 -2
- homeassistant/components/wled/translations/pt.json +10 -2
- homeassistant/components/wled/translations/ru.json +10 -2
- homeassistant/components/wled/translations/sk.json +10 -2
- homeassistant/components/wled/translations/zh-Hans.json +10 -2
- homeassistant/components/wled/translations/zh-Hant.json +10 -2
- homeassistant/components/wled/update.py +1 -1
- homeassistant/components/xbox/browse_media.py +3 -1
- homeassistant/components/xbox/entity.py +10 -6
- homeassistant/components/xbox/media_source.py +2 -1
- homeassistant/components/xbox/sensor.py +3 -2
- homeassistant/components/xbox/translations/de.json +1 -1
- homeassistant/components/xbox/translations/he.json +10 -1
- homeassistant/components/xiaomi_aqara/config_flow.py +19 -3
- homeassistant/components/xiaomi_aqara/strings.json +2 -2
- homeassistant/components/xiaomi_aqara/translations/ca.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/cs.json +2 -2
- homeassistant/components/xiaomi_aqara/translations/da.json +0 -4
- homeassistant/components/xiaomi_aqara/translations/de.json +2 -2
- homeassistant/components/xiaomi_aqara/translations/el.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/en-GB.json +2 -2
- homeassistant/components/xiaomi_aqara/translations/en.json +2 -2
- homeassistant/components/xiaomi_aqara/translations/es.json +2 -2
- homeassistant/components/xiaomi_aqara/translations/et.json +2 -2
- homeassistant/components/xiaomi_aqara/translations/fi.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/fr.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/ga.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/gl.json +1 -2
- homeassistant/components/xiaomi_aqara/translations/he.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/hu.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/id.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/it.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/ja.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/ko.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/lb.json +1 -2
- homeassistant/components/xiaomi_aqara/translations/lt.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/nb.json +0 -1
- homeassistant/components/xiaomi_aqara/translations/nl.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/pl.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/pt-BR.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/pt.json +2 -2
- homeassistant/components/xiaomi_aqara/translations/ro.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/ru.json +2 -2
- homeassistant/components/xiaomi_aqara/translations/sk.json +2 -2
- homeassistant/components/xiaomi_aqara/translations/sl.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/sr-Latn.json +6 -0
- homeassistant/components/xiaomi_aqara/translations/sv.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/tr.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/uk.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/vi.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/zh-Hans.json +0 -2
- homeassistant/components/xiaomi_aqara/translations/zh-Hant.json +2 -2
- homeassistant/components/yeelight/light.py +9 -1
- homeassistant/components/yeelight/strings.json +2 -2
- homeassistant/components/yeelight/translations/cs.json +3 -3
- homeassistant/components/yeelight/translations/de.json +3 -3
- homeassistant/components/yeelight/translations/el.json +0 -3
- homeassistant/components/yeelight/translations/en-GB.json +3 -3
- homeassistant/components/yeelight/translations/en.json +3 -3
- homeassistant/components/yeelight/translations/es.json +3 -3
- homeassistant/components/yeelight/translations/et.json +3 -3
- homeassistant/components/yeelight/translations/fi.json +0 -2
- homeassistant/components/yeelight/translations/fr.json +0 -3
- homeassistant/components/yeelight/translations/ga.json +0 -3
- homeassistant/components/yeelight/translations/gl.json +0 -2
- homeassistant/components/yeelight/translations/he.json +0 -3
- homeassistant/components/yeelight/translations/hu.json +0 -3
- homeassistant/components/yeelight/translations/it.json +0 -2
- homeassistant/components/yeelight/translations/ja.json +0 -3
- homeassistant/components/yeelight/translations/ko.json +0 -2
- homeassistant/components/yeelight/translations/lt.json +0 -3
- homeassistant/components/yeelight/translations/pt.json +3 -3
- homeassistant/components/yeelight/translations/ru.json +0 -3
- homeassistant/components/yeelight/translations/sk.json +3 -3
- homeassistant/components/yeelight/translations/sv.json +0 -3
- homeassistant/components/yeelight/translations/tr.json +0 -3
- homeassistant/components/yeelight/translations/vi.json +0 -2
- homeassistant/components/yeelight/translations/zh-Hans.json +0 -3
- homeassistant/components/yeelight/translations/zh-Hant.json +3 -3
- homeassistant/components/yolink/translations/he.json +5 -0
- homeassistant/components/youtube/translations/he.json +5 -0
- homeassistant/components/zha/config_flow.py +9 -6
- homeassistant/components/zha/radio_manager.py +2 -2
- homeassistant/components/zha/strings.json +5 -3
- homeassistant/components/zha/translations/cs.json +6 -4
- homeassistant/components/zha/translations/de.json +6 -4
- homeassistant/components/zha/translations/el.json +0 -8
- homeassistant/components/zha/translations/en-GB.json +6 -4
- homeassistant/components/zha/translations/en.json +6 -4
- homeassistant/components/zha/translations/es.json +6 -4
- homeassistant/components/zha/translations/et.json +6 -4
- homeassistant/components/zha/translations/fr.json +0 -3
- homeassistant/components/zha/translations/ga.json +2 -0
- homeassistant/components/zha/translations/he.json +1 -1
- homeassistant/components/zha/translations/hu.json +0 -3
- homeassistant/components/zha/translations/lt.json +0 -8
- homeassistant/components/zha/translations/nl.json +8 -0
- homeassistant/components/zha/translations/pt.json +6 -4
- homeassistant/components/zha/translations/ru.json +46 -8
- homeassistant/components/zha/translations/sk.json +6 -4
- homeassistant/components/zha/translations/sv.json +2 -0
- homeassistant/components/zha/translations/zh-Hans.json +2 -8
- homeassistant/components/zha/translations/zh-Hant.json +2 -8
- homeassistant/components/zwave_js/services.py +3 -0
- homeassistant/components/zwave_js/strings.json +2 -2
- homeassistant/components/zwave_js/translations/cs.json +2 -2
- homeassistant/components/zwave_js/translations/de.json +2 -2
- homeassistant/components/zwave_js/translations/el.json +0 -2
- homeassistant/components/zwave_js/translations/en-GB.json +2 -2
- homeassistant/components/zwave_js/translations/en.json +2 -2
- homeassistant/components/zwave_js/translations/es.json +2 -2
- homeassistant/components/zwave_js/translations/et.json +2 -2
- homeassistant/components/zwave_js/translations/ga.json +0 -2
- homeassistant/components/zwave_js/translations/hu.json +0 -2
- homeassistant/components/zwave_js/translations/ja.json +0 -2
- homeassistant/components/zwave_js/translations/lt.json +0 -2
- homeassistant/components/zwave_js/translations/pt.json +2 -2
- homeassistant/components/zwave_js/translations/ru.json +0 -2
- homeassistant/components/zwave_js/translations/sk.json +2 -2
- homeassistant/components/zwave_js/translations/sv.json +0 -2
- homeassistant/components/zwave_js/translations/tr.json +0 -2
- homeassistant/components/zwave_js/translations/vi.json +0 -2
- homeassistant/components/zwave_js/translations/zh-Hans.json +0 -2
- homeassistant/components/zwave_js/translations/zh-Hant.json +2 -2
- homeassistant/const.py +1 -1
- homeassistant/generated/integrations.json +2 -2
- homeassistant/generated/labs.py +2 -2
- homeassistant/loader.py +6 -0
- homeassistant/package_constraints.txt +3 -3
- {homeassistant-2025.12.0b5.dist-info → homeassistant-2025.12.1.dist-info}/METADATA +2 -2
- {homeassistant-2025.12.0b5.dist-info → homeassistant-2025.12.1.dist-info}/RECORD +776 -761
- {homeassistant-2025.12.0b5.dist-info → homeassistant-2025.12.1.dist-info}/WHEEL +0 -0
- {homeassistant-2025.12.0b5.dist-info → homeassistant-2025.12.1.dist-info}/entry_points.txt +0 -0
- {homeassistant-2025.12.0b5.dist-info → homeassistant-2025.12.1.dist-info}/licenses/LICENSE.md +0 -0
- {homeassistant-2025.12.0b5.dist-info → homeassistant-2025.12.1.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
- {homeassistant-2025.12.0b5.dist-info → homeassistant-2025.12.1.dist-info}/top_level.txt +0 -0
|
@@ -341,7 +341,6 @@
|
|
|
341
341
|
"title": "Reolink \ud38c\uc6e8\uc5b4 \uc5c5\ub370\uc774\ud2b8 \ud544\uc694"
|
|
342
342
|
},
|
|
343
343
|
"https_webhook": {
|
|
344
|
-
"description": "Reolink \uc81c\ud488\uc740 \ubaa8\uc158 \uc774\ubca4\ud2b8\ub97c HTTPS \uc8fc\uc18c(SSL)\ub85c \ud478\uc2dc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. [\ub124\ud2b8\uc6cc\ud06c \uc124\uc815]( {network_link} )\uc758 \"Home Assistant URL\"\uc5d0\uc11c (\ub85c\uceec) HTTP \uc8fc\uc18c\ub97c \uad6c\uc131\ud558\uc138\uc694. \ud604\uc7ac(\ub85c\uceec) \uc8fc\uc18c\ub294 {base_url} \uc785\ub2c8\ub2e4. \uc720\ud6a8\ud55c \uc8fc\uc18c\ub294 \uc608\ub97c \ub4e4\uc5b4 http://192.168.1.10:8123 \uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc11c 192.168.1.10 \uc740 Home Assistant \uc7a5\uce58\uc758 IP\uc785\ub2c8\ub2e4.",
|
|
345
344
|
"title": "Reolink \uc6f9\ud6c5 URL\uc740 HTTPS(SSL)\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."
|
|
346
345
|
},
|
|
347
346
|
"ssl": {
|
|
@@ -349,7 +348,6 @@
|
|
|
349
348
|
"title": "\uae00\ub85c\ubc8c SSL \uc778\uc99d\uc11c\uc640 \ud638\ud658\ub418\uc9c0 \uc54a\ub294 Reolink"
|
|
350
349
|
},
|
|
351
350
|
"webhook_url": {
|
|
352
|
-
"description": "{name} \uc73c\ub85c\ubd80\ud130 \ucd08\uae30 ONVIF \uc0c1\ud0dc\ub97c \uc218\uc2e0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub300\ubd80\ubd84 Reolink \uce74\uba54\ub77c\ub294 \ud604\uc7ac(\ub85c\uceec) \ud648\uc5b4\uc2dc\uc2a4\ud134\ud2b8 URL ` {base_url} `\uc5d0 \ub3c4\ub2ec\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. [\ub124\ud2b8\uc6cc\ud06c \uc124\uc815]( {network_link} )\uc5d0\uc11c \"\ud648 \uc5b4\uc2dc\uc2a4\ud134\ud2b8 URL\" \uc544\ub798\uc5d0 (\ub85c\uceec) HTTP \uc8fc\uc18c\ub97c \uad6c\uc131\ud558\uc2ed\uc2dc\uc624. \ud648\uc5b4\uc2dc\uc2a4\ud134\ud2b8\uc5d0\uac8c. \uc608\ub97c \ub4e4\uc5b4 `http://192.168.1.10:8123` \uc5ec\uae30\uc11c `192.168.1.10`\uc740 \ud648\uc5b4\uc2dc\uc2a4\ud134\ud2b8 \uc7a5\uce58\uc758 IP\uc785\ub2c8\ub2e4. \ub610\ud55c Reolink \uce74\uba54\ub77c\uac00 \ud574\ub2f9 URL\uc5d0 \ub3c4\ub2ec\ud560 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud558\uc138\uc694. \uccab \ubc88\uc9f8 ONVIF \ud478\uc2dc\uac00 \uc218\uc2e0\ub420 \ub54c\uae4c\uc9c0 \ube60\ub978 \ub3d9\uc791/AI \uc0c1\ud0dc \ud3f4\ub9c1\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.",
|
|
353
351
|
"title": "Reolink \uc6f9\ud6c5 URL\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc74c"
|
|
354
352
|
}
|
|
355
353
|
},
|
|
@@ -1004,7 +1004,6 @@
|
|
|
1004
1004
|
"title": "Reikalingas \u201eReolink\u201c programin\u0117s-technin\u0117s \u012frangos atnaujinimas"
|
|
1005
1005
|
},
|
|
1006
1006
|
"https_webhook": {
|
|
1007
|
-
"description": "\u201eReolink\u201c produktai negali perkelti jud\u0117jimo \u012fvyki\u0173 \u012f HTTPS adres\u0105 (SSL). Konfig\u016bruokite (vietin\u012f) HTTP adres\u0105 skiltyje \u201eHome Assistant URL\u201c [tinklo nustatymuose] ({network_link}). Dabartinis (vietinis) adresas yra: \u201e{base_url}\u201c, tinkamas adresas gali b\u016bti, pavyzd\u017eiui, \u201ehttp://192.168.1.10:8123\u201c, kur \u201e192.168.1.10\u201c yra \u201eHome Assistant\u201c prietaiso IP.",
|
|
1008
1007
|
"title": "\u201eReolink Webhook\u201c URL naudoja HTTPS (SSL)"
|
|
1009
1008
|
},
|
|
1010
1009
|
"password_too_long": {
|
|
@@ -1016,7 +1015,6 @@
|
|
|
1016
1015
|
"title": "Reolink nesuderinamas su visuotiniu SSL sertifikatu"
|
|
1017
1016
|
},
|
|
1018
1017
|
"webhook_url": {
|
|
1019
|
-
"description": "Negauta pradin\u0117 ONVIF b\u016bsena i\u0161 {name} . Labiausiai tik\u0117tina, kad \u201eReolink\u201c kamera negali pasiekti dabartinio (vietinio) \u201eHome Assistant\u201c URL \u201e{base_url}\u201c, sukonfig\u016bruokite (vietin\u012f) HTTP adres\u0105, esant\u012f [tinklo nustatym\u0173] ({network_link}) skiltyje \u201eHome Assistant URL\u201c \u012f \u201eHome Assistant\u201c. Pavyzd\u017eiui, \u201ehttp://192.168.1.10:8123\u201c, kur \u201e192.168.1.10\u201c yra \u201eHome Assistant\u201c prietaiso IP. Taip pat \u012fsitikinkite, kad \u201eReolink\u201c kamera gali pasiekti t\u0105 URL. Naudojant greito judesio / AI b\u016bsenos apklaus\u0105, kol bus gautas pirmasis ONVIF paspaudimas.",
|
|
1020
1018
|
"title": "Reolink webhook URL nepasiekiamas"
|
|
1021
1019
|
}
|
|
1022
1020
|
},
|
|
@@ -85,7 +85,6 @@
|
|
|
85
85
|
"title": "Reolink-fastvareoppdatering kreves"
|
|
86
86
|
},
|
|
87
87
|
"https_webhook": {
|
|
88
|
-
"description": "Reolink-produkter kan ikke sende bevegelseshendelser til en HTTPS-adresse (SSL), vennligst konfigurer en (lokal) HTTP-adresse under \"Home Assistant URL\" i [nettverksinnstillingene]( {network_link} ). Den n\u00e5v\u00e6rende (lokale) adressen er: ` {base_url} `, en gyldig adresse kan for eksempel v\u00e6re `http://192.168.1.10:8123` der `192.168.1.10` er IP-en til Home Assistant-enheten",
|
|
89
88
|
"title": "Reolink webhook-URL bruker HTTPS (SSL)"
|
|
90
89
|
},
|
|
91
90
|
"webhook_url": {
|
|
@@ -843,7 +843,6 @@
|
|
|
843
843
|
"title": "Reolink firmware-update vereist"
|
|
844
844
|
},
|
|
845
845
|
"https_webhook": {
|
|
846
|
-
"description": "Reolink-producten kunnen geen bewegingsgebeurtenissen naar een HTTPS-adres (SSL) sturen. Configureer daarom een (lokaal) HTTP-adres onder \"Home Assistant URL\" in de [netwerkinstellingen]({network_link}). Het huidige (lokale) adres is: `{base_url}`, een geldig adres zou bijvoorbeeld `http://192.168.1.10:8123` kunnen zijn waarbij `192.168.1.10` het IP adres van Home Assistant is.",
|
|
847
846
|
"title": "Reolink webhook-URL gebruikt HTTPS (SSL)"
|
|
848
847
|
},
|
|
849
848
|
"password_too_long": {
|
|
@@ -855,7 +854,6 @@
|
|
|
855
854
|
"title": "Reolink niet compatibel met globaal SSL-certificaat"
|
|
856
855
|
},
|
|
857
856
|
"webhook_url": {
|
|
858
|
-
"description": "Geen initi\u00eble ONVIF-status ontvangen van {name}. Waarschijnlijk kan de Reolink camera de huidige (lokale) Home Assistant URL `{base_url}` niet bereiken. Configureer een (lokaal) HTTP-adres onder \"Home Assistant URL\" in de [netwerkinstellingen]({network_link}) dat verwijst naar Home Assistant. Bijvoorbeeld `http://192.168.1.10:8123` waarbij `192.168.1.10` het IP-adres is van je Home Assistant-instantie. Zorg er ook voor dat de Reolink camera die URL kan bereiken. Gebruik fast motion/AI state polling totdat de eerste ONVIF push is ontvangen.",
|
|
859
857
|
"title": "Reolink webhook-URL is niet bereikbaar"
|
|
860
858
|
}
|
|
861
859
|
},
|
|
@@ -834,7 +834,6 @@
|
|
|
834
834
|
"title": "Wymagana jest aktualizacja oprogramowania Reolink"
|
|
835
835
|
},
|
|
836
836
|
"https_webhook": {
|
|
837
|
-
"description": "Produkty Reolink nie mog\u0105 przekazywa\u0107 zdarze\u0144 ruchu na adres HTTPS (SSL). Skonfiguruj (lokalny) adres HTTP w \u201eAdres URL Home Assistanta\u201d w [ustawieniach sieci]({network_link}). Bie\u017c\u0105cy (lokalny) adres to: `{base_url}', prawid\u0142owym adresem mo\u017ce by\u0107 na przyk\u0142ad 'http://192.168.1.10:8123', gdzie '192.168.1.10' to adres IP urz\u0105dzenia Home Assistant.",
|
|
838
837
|
"title": "Adres URL webhooka u\u017cywa protoko\u0142u HTTPS (SSL)"
|
|
839
838
|
},
|
|
840
839
|
"ssl": {
|
|
@@ -314,7 +314,6 @@
|
|
|
314
314
|
"title": "Atualiza\u00e7\u00e3o de firmware Reolink necess\u00e1ria"
|
|
315
315
|
},
|
|
316
316
|
"https_webhook": {
|
|
317
|
-
"description": "Os produtos Reolink n\u00e3o podem enviar eventos de movimento para um endere\u00e7o HTTPS (SSL), configure um endere\u00e7o HTTP (local) em \"URL do Home Assistant\" nas [configura\u00e7\u00f5es de rede] ({network_link}). O endere\u00e7o (local) atual \u00e9: `{base_url}`, um endere\u00e7o v\u00e1lido pode, por exemplo, ser `http://192.168.1.10:8123` onde `192.168.1.10` \u00e9 o IP do dispositivo Home Assistant",
|
|
318
317
|
"title": "Reolink webhook URL usa HTTPS (SSL)"
|
|
319
318
|
},
|
|
320
319
|
"ssl": {
|
|
@@ -322,7 +321,6 @@
|
|
|
322
321
|
"title": "Reolink incompat\u00edvel com o certificado SSL global"
|
|
323
322
|
},
|
|
324
323
|
"webhook_url": {
|
|
325
|
-
"description": "N\u00e3o recebeu o estado ONVIF inicial de {name}. Muito provavelmente, a c\u00e2mera Reolink n\u00e3o pode acessar o URL atual (local) do Home Assistant `{base_url}`, configure um endere\u00e7o HTTP (local) em \"Home Assistant URL\" nas [configura\u00e7\u00f5es de rede] ({network_link}) que aponta para Home Assistant. Por exemplo `http://192.168.1.10:8123` onde `192.168.1.10` \u00e9 o IP do dispositivo Home Assistant. Al\u00e9m disso, verifique se a c\u00e2mera Reolink pode acessar esse URL. Usando sondagem de estado de movimento r\u00e1pido/AI at\u00e9 que o primeiro push ONVIF seja recebido.",
|
|
326
324
|
"title": "URL do webhook Reolink inacess\u00edvel"
|
|
327
325
|
}
|
|
328
326
|
},
|
|
@@ -1004,7 +1004,7 @@
|
|
|
1004
1004
|
"title": "\u00c9 necess\u00e1rio atualizar o firmware Reolink"
|
|
1005
1005
|
},
|
|
1006
1006
|
"https_webhook": {
|
|
1007
|
-
"description": "Os produtos Reolink n\u00e3o podem enviar eventos de movimento para um endere\u00e7o HTTPS (SSL).
|
|
1007
|
+
"description": "Os produtos Reolink n\u00e3o podem enviar eventos de movimento para um endere\u00e7o HTTPS (SSL). Por favor, configure um endere\u00e7o HTTP (local) em \"URL do Home Assistant URL\" nas [defini\u00e7\u00f5es de rede]({network_link}). O endere\u00e7o (local) atual \u00e9: `{base_url}`, um endere\u00e7o v\u00e1lido poderia, por exemplo, ser `{example_url}` em que `{example_ip}` \u00e9 o IP do dispositivo do Home Assistant",
|
|
1008
1008
|
"title": "Reolink webhook URL usa HTTPS (SSL)"
|
|
1009
1009
|
},
|
|
1010
1010
|
"password_too_long": {
|
|
@@ -1016,7 +1016,7 @@
|
|
|
1016
1016
|
"title": "Reolink incompat\u00edvel com o certificado SSL global"
|
|
1017
1017
|
},
|
|
1018
1018
|
"webhook_url": {
|
|
1019
|
-
"description": "N\u00e3o
|
|
1019
|
+
"description": "N\u00e3o recebeu o estado ONVIF inicial de {name}. Muito provavelmente, a c\u00e2mara Reolink n\u00e3o consegue aceder ao URL atual (local) do Home Assistant `{base_url}`. Por favor, configure um endere\u00e7o HTTP (local) em \"URL do Home Assistant URL\" nas [defini\u00e7\u00f5es de rede]({network_link}) que aponte para o Home Assistant. Por exemplo, `{example_url}` em que `{example_ip}` \u00e9 o IP do dispositivo do Home Assistant. Certifique-se ainda de que a c\u00e2mara Reolink consegue aceder a esse URL. Utilizar a pesquisa de estado de movimento r\u00e1pido/AI at\u00e9 ser recebido o primeiro impulso ONVIF.",
|
|
1020
1020
|
"title": "URL do webhook do Reolink inacess\u00edvel"
|
|
1021
1021
|
}
|
|
1022
1022
|
},
|
|
@@ -56,11 +56,9 @@
|
|
|
56
56
|
"title": "Este necesar\u0103 actualizarea firmware-ului Reolink"
|
|
57
57
|
},
|
|
58
58
|
"https_webhook": {
|
|
59
|
-
"description": "Produsele Reolink nu pot trimite evenimentele de mi\u0219care la o adres\u0103 HTTPS (SSL), te rug\u0103m s\u0103 configurezi o adres\u0103 HTTP (local\u0103) sub \"URL-ul Home Assistant\" \u00een [set\u0103rile de re\u021bea]({network_link}). Adresa curent\u0103 (local\u0103) este: `{base_url}`, o adres\u0103 valid\u0103 ar putea fi, de exemplu, `http://192.168.1.10:8123` unde `192.168.1.10` este IP-ul dispozitivului Home Assistant",
|
|
60
59
|
"title": "URL-ul webhook Reolink folose\u0219te HTTPS (SSL)"
|
|
61
60
|
},
|
|
62
61
|
"webhook_url": {
|
|
63
|
-
"description": "Nu s-a primit starea ini\u021bial\u0103 ONVIF de la {name}. Cel mai probabil, camera Reolink nu poate accesa adresa URL curent\u0103 (local\u0103) a Home Assistant `{base_url}`, configureaz\u0103 o adres\u0103 HTTP (local\u0103) \u00een dreptul \"URL-ul Home Assistant\" din [set\u0103rile de re\u021bea]({network_link}) care indic\u0103 spre Home Assistant. De exemplu, `http://192.168.1.10:8123` unde `192.168.1.10` este IP-ul dispozitivului Home Assistant. De asemenea, asigur\u0103-te c\u0103 poate ajunge la acea adres\u0103 URL camera Reolink. Se va folosi sondajul rapid pentru starea de mi\u0219care/IA p\u00e2n\u0103 la primirea primului mesaj push ONVIF.",
|
|
64
62
|
"title": "URL webhook Reolink inaccesibil"
|
|
65
63
|
}
|
|
66
64
|
},
|
|
@@ -889,7 +889,6 @@
|
|
|
889
889
|
"title": "\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 Reolink"
|
|
890
890
|
},
|
|
891
891
|
"https_webhook": {
|
|
892
|
-
"description": "\u041f\u0440\u043e\u0434\u0443\u043a\u0442\u044b Reolink \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0430 HTTPS-\u0430\u0434\u0440\u0435\u0441 (SSL). \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439) HTTP-\u0430\u0434\u0440\u0435\u0441 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \"URL-\u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\" \u0432 [\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0441\u0435\u0442\u0438]({network_link}). \u0422\u0435\u043a\u0443\u0449\u0438\u0439 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439) \u0430\u0434\u0440\u0435\u0441: `{base_url}`, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, `http://192.168.1.10:8123`, \u0433\u0434\u0435 `192.168.1.10` \u2014 \u044d\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Home Assistant.",
|
|
893
892
|
"title": "URL-\u0430\u0434\u0440\u0435\u0441 webhook Reolink \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 HTTPS (SSL)"
|
|
894
893
|
},
|
|
895
894
|
"password_too_long": {
|
|
@@ -901,7 +900,6 @@
|
|
|
901
900
|
"title": "Reolink \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u043c SSL"
|
|
902
901
|
},
|
|
903
902
|
"webhook_url": {
|
|
904
|
-
"description": "\u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 ONVIF \u043e\u0442 {name}. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043a\u0430\u043c\u0435\u0440\u0430 Reolink \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443) URL-\u0430\u0434\u0440\u0435\u0441\u0443 Home Assistant `{base_url}`. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439) HTTP-\u0430\u0434\u0440\u0435\u0441 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \"URL-\u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\" \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a [\u0421\u0435\u0442\u044c]({network_link}). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, `http://192.168.1.10:8123`, \u0433\u0434\u0435 `192.168.1.10` \u2014 \u044d\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Home Assistant. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043a\u0430\u043c\u0435\u0440\u0430 Reolink \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u0442\u043e\u043c\u0443 URL-\u0430\u0434\u0440\u0435\u0441\u0443. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0440\u043e\u0441\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f Fast Motion/AI \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d push ONVIF.",
|
|
905
903
|
"title": "Reolink webhook URL \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d"
|
|
906
904
|
}
|
|
907
905
|
},
|
|
@@ -1004,7 +1004,7 @@
|
|
|
1004
1004
|
"title": "Vy\u017eaduje sa aktualiz\u00e1cia firmv\u00e9ru Reolink"
|
|
1005
1005
|
},
|
|
1006
1006
|
"https_webhook": {
|
|
1007
|
-
"description": "Produkty Reolink nem\u00f4\u017eu
|
|
1007
|
+
"description": "Produkty Reolink nem\u00f4\u017eu odosiela\u0165 udalosti pohybu na adresu HTTPS (SSL), nakonfigurujte (miestnu) adresu HTTP v \u010dasti \"Home Assistant URL\" v [sie\u0165ov\u00e9 nastavenia]({network_link}). Aktu\u00e1lna (miestna) adresa je:{base_url}`, platn\u00e1 adresa by mohla by\u0165 napr\u00edklad `{example_url}`, kde `{example_ip}` je IP adresa zariadenia Home Assistant\u201c",
|
|
1008
1008
|
"title": "Webov\u00e1 adresa webhooku na op\u00e4tovn\u00e9 prepojenie pou\u017e\u00edva protokol HTTPS (SSL)"
|
|
1009
1009
|
},
|
|
1010
1010
|
"password_too_long": {
|
|
@@ -1016,7 +1016,7 @@
|
|
|
1016
1016
|
"title": "Reolink nekompatibiln\u00fd s glob\u00e1lnym certifik\u00e1tom SSL"
|
|
1017
1017
|
},
|
|
1018
1018
|
"webhook_url": {
|
|
1019
|
-
"description": "
|
|
1019
|
+
"description": "Neobdr\u017eal po\u010diato\u010dn\u00fd stav ONVIF zo str\u00e1nky {name}. S najv\u00e4\u010d\u0161ou pravdepodobnos\u0165ou kamera Reolink nedosahuje aktu\u00e1lnu (miestnu) adresu URL Home Assistant `{base_url}`, nakonfigurujte (miestnu) adresu HTTP v polo\u017eke \"Home Assistant URL\" v [sie\u0165ov\u00fdch nastaveniach]({network_link}), ktor\u00e1 ukazuje na Home Assistant. Napr\u00edklad `{example_url}`, kde `{example_ip}` je IP adresa zariadenia Home Assistant. Tie\u017e sa uistite, \u017ee kamera Reolink m\u00f4\u017ee dosiahnu\u0165 t\u00fato adresu URL. Pou\u017e\u00edvanie r\u00fdchleho opytovania stavu pohybu/AI a\u017e do prijatia prv\u00e9ho tla\u010didla ONVIF.",
|
|
1020
1020
|
"title": "Adresa URL webhooku Reolink je nedostupn\u00e1"
|
|
1021
1021
|
}
|
|
1022
1022
|
},
|
|
@@ -983,7 +983,6 @@
|
|
|
983
983
|
"title": "Reolink firmware-uppdatering kr\u00e4vs"
|
|
984
984
|
},
|
|
985
985
|
"https_webhook": {
|
|
986
|
-
"description": "Reolink-produkter kan inte skicka r\u00f6relseh\u00e4ndelser till en HTTPS-adress (SSL), konfigurera en (lokal) HTTP-adress under \"[%key_id:158946755%]\" i [n\u00e4tverksinst\u00e4llningarna]({network_link}). Den aktuella (lokala) adressen \u00e4r: `{base_url}`, en giltig adress kan till exempel vara `http://192.168.1.10:8123` d\u00e4r `192.168.1.10` \u00e4r IP-adressen f\u00f6r Home Assistant-enheten",
|
|
987
986
|
"title": "Reolink webhook-URL anv\u00e4nder HTTPS (SSL)"
|
|
988
987
|
},
|
|
989
988
|
"password_too_long": {
|
|
@@ -995,7 +994,6 @@
|
|
|
995
994
|
"title": "Reolink \u00e4r inkompatibelt med globalt SSL-certifikat"
|
|
996
995
|
},
|
|
997
996
|
"webhook_url": {
|
|
998
|
-
"description": "Tog inte emot initialt ONVIF-tillst\u00e5nd fr\u00e5n {name}. Troligtvis kan Reolink-kameran inte n\u00e5 den aktuella (lokala) Home Assistant-adressen `{base_url}`, konfigurera en (lokal) HTTP-adress under \"[%key_id:158946755%]\" i [n\u00e4tverksinst\u00e4llningarna]({network_link}) som pekar till Home Assistant. Till exempel `http://192.168.1.10:8123` d\u00e4r `192.168.1.10` \u00e4r IP-adressen f\u00f6r Home Assistant-enheten. Se ocks\u00e5 till att Reolink-kameran kan n\u00e5 den adressen. Anv\u00e4nder snabbpollning av r\u00f6relse-/AI-tillst\u00e5nd tills det f\u00f6rsta ONVIF-pushmeddelandet tas emot.",
|
|
999
997
|
"title": "Reolink webhook-URL kan inte n\u00e5s"
|
|
1000
998
|
}
|
|
1001
999
|
},
|
|
@@ -880,7 +880,6 @@
|
|
|
880
880
|
"title": "Reolink \u00fcretici yaz\u0131l\u0131m\u0131 g\u00fcncellemesi gerekli"
|
|
881
881
|
},
|
|
882
882
|
"https_webhook": {
|
|
883
|
-
"description": "Reolink \u00fcr\u00fcnleri, hareket olaylar\u0131n\u0131 bir HTTPS adresine (SSL) aktaramaz, l\u00fctfen [a\u011f ayarlar\u0131nda]( {network_link} ) \"Ev Asistan\u0131 URL'si\" alt\u0131nda bir (yerel) HTTP adresi yap\u0131land\u0131r\u0131n. Ge\u00e7erli (yerel) adres: ` {base_url} `, ge\u00e7erli bir adres, \u00f6rne\u011fin, `http://192.168.1.10:8123` olabilir; burada `192.168.1.10`, Home Assistant cihaz\u0131n\u0131n IP'sidir",
|
|
884
883
|
"title": "Reolink webhook URL'si HTTPS (SSL) kullan\u0131r"
|
|
885
884
|
},
|
|
886
885
|
"ssl": {
|
|
@@ -888,7 +887,6 @@
|
|
|
888
887
|
"title": "Reolink, k\u00fcresel SSL sertifikas\u0131yla uyumsuz"
|
|
889
888
|
},
|
|
890
889
|
"webhook_url": {
|
|
891
|
-
"description": "{name} adl\u0131 ki\u015fiden ilk ONVIF durumu al\u0131nmad\u0131. B\u00fcy\u00fck olas\u0131l\u0131kla, Reolink kameras\u0131 mevcut (yerel) Ev Yard\u0131mc\u0131s\u0131 URL'si ` {base_url} `a ula\u015fam\u0131yor, l\u00fctfen [a\u011f ayarlar\u0131nda]( {network_link} ) \"Ev Asistan\u0131 URL'si\" alt\u0131nda bu noktay\u0131 i\u015faret eden bir (yerel) HTTP adresi yap\u0131land\u0131r\u0131n Ev Asistan\u0131'na. \u00d6rne\u011fin, \"http://192.168.1.10:8123\" burada \"192.168.1.10\" Ev Asistan\u0131 cihaz\u0131n\u0131n IP'sidir. Ayr\u0131ca, Reolink kameras\u0131n\u0131n bu URL'ye eri\u015febildi\u011finden emin olun. \u0130lk ONVIF g\u00f6nderimi al\u0131nana kadar h\u0131zl\u0131 hareket/AI durum yoklamas\u0131 kullan\u0131l\u0131yor.",
|
|
892
890
|
"title": "Reolink webhook URL'sine ula\u015f\u0131lam\u0131yor"
|
|
893
891
|
}
|
|
894
892
|
},
|
|
@@ -54,11 +54,9 @@
|
|
|
54
54
|
"title": "\u041f\u043e\u0442\u0440\u0456\u0431\u043d\u0435 \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 Reolink"
|
|
55
55
|
},
|
|
56
56
|
"https_webhook": {
|
|
57
|
-
"description": "\u041f\u0440\u043e\u0434\u0443\u043a\u0442\u0438 Reolink \u043d\u0435 \u043c\u043e\u0436\u0443\u0442\u044c \u043d\u0430\u0434\u0441\u0438\u043b\u0430\u0442\u0438 \u043f\u043e\u0434\u0456\u0457 \u0440\u0443\u0445\u0443 \u043d\u0430 HTTPS-\u0430\u0434\u0440\u0435\u0441\u0443 (SSL), \u0431\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0439\u0442\u0435 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443) HTTP-\u0430\u0434\u0440\u0435\u0441\u0443 \u0432 \u0440\u043e\u0437\u0434\u0456\u043b\u0456 \"URL-\u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043e\u043c\u0430\u0448\u043d\u044c\u043e\u0433\u043e \u043f\u043e\u043c\u0456\u0447\u043d\u0438\u043a\u0430\" \u0443 [\u043c\u0435\u0440\u0435\u0436\u0435\u0432\u0438\u0445 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f\u0445] ({network_link}). \u041f\u043e\u0442\u043e\u0447\u043d\u0430 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430) \u0430\u0434\u0440\u0435\u0441\u0430 \u0442\u0430\u043a\u0430: `{base_url}`, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u044e \u0430\u0434\u0440\u0435\u0441\u043e\u044e \u043c\u043e\u0436\u0435 \u0431\u0443\u0442\u0438, \u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, `http://192.168.1.10:8123`, \u0434\u0435 `192.168.1.10` - \u0446\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u044e Home Assistant",
|
|
58
57
|
"title": "URL-\u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u0435\u0431-\u0445\u0443\u043a\u0430 Reolink \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 HTTPS (SSL)"
|
|
59
58
|
},
|
|
60
59
|
"webhook_url": {
|
|
61
|
-
"description": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u043f\u043e\u0447\u0430\u0442\u043a\u043e\u0432\u0438\u0439 \u0441\u0442\u0430\u043d ONVIF \u0432\u0456\u0434 {name}. \u041d\u0430\u0439\u0456\u043c\u043e\u0432\u0456\u0440\u043d\u0456\u0448\u0435, \u043a\u0430\u043c\u0435\u0440\u0430 Reolink \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u043e\u0441\u044f\u0433\u0442\u0438 \u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0457 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0457) URL-\u0430\u0434\u0440\u0435\u0441\u0438 Home Assistant `{base_url}`, \u0431\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0439\u0442\u0435 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443) HTTP-\u0430\u0434\u0440\u0435\u0441\u0443 \u0432 \u0440\u043e\u0437\u0434\u0456\u043b\u0456 \"URL-\u0430\u0434\u0440\u0435\u0441\u0430 Home Assistant\" \u0443 [\u043c\u0435\u0440\u0435\u0436\u0435\u0432\u0438\u0445 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f\u0445]({network_link}), \u044f\u043a\u0430 \u0432\u043a\u0430\u0437\u0443\u0454 \u043d\u0430 Home Assistant. \u041d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, `http://192.168.1.10:8123`, \u0434\u0435 `192.168.1.10` - \u0446\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u044e Home Assistant. \u0422\u0430\u043a\u043e\u0436 \u043f\u0435\u0440\u0435\u043a\u043e\u043d\u0430\u0439\u0442\u0435\u0441\u044f, \u0449\u043e \u043a\u0430\u043c\u0435\u0440\u0430 Reolink \u043c\u043e\u0436\u0435 \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0446\u0456\u0454\u0457 \u0430\u0434\u0440\u0435\u0441\u0438. \u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u0448\u0432\u0438\u0434\u043a\u0438\u0439 \u0440\u0443\u0445/\u043e\u043f\u0438\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0441\u0442\u0430\u043d\u0443 \u0428\u0406, \u043f\u043e\u043a\u0438 \u043d\u0435 \u043e\u0442\u0440\u0438\u043c\u0430\u0454\u0442\u0435 \u043f\u0435\u0440\u0448\u0438\u0439 \u043f\u043e\u0448\u0442\u043e\u0432\u0445 ONVIF.",
|
|
62
60
|
"title": "URL-\u0430\u0434\u0440\u0435\u0441\u0430 Reolink \u0432\u0435\u0431\u0445\u0443\u043a\u0443 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430"
|
|
63
61
|
}
|
|
64
62
|
},
|
|
@@ -1004,7 +1004,6 @@
|
|
|
1004
1004
|
"title": "Reolink \u56fa\u4ef6\u9700\u8981\u66f4\u65b0"
|
|
1005
1005
|
},
|
|
1006
1006
|
"https_webhook": {
|
|
1007
|
-
"description": "Reolink \u4ea7\u54c1\u65e0\u6cd5\u5c06\u8fd0\u52a8\u4e8b\u4ef6\u63a8\u9001\u5230 HTTPS \u5730\u5740 (SSL) \uff0c\u8bf7\u5728[\u7f51\u7edc\u8bbe\u7f6e]({network_link})\u4e2d\u7684\u201cHome Assistant \u7f51\u5740\u201d\u4e0b\u914d\u7f6e\uff08\u672c\u5730\uff09HTTP \u5730\u5740\u3002\u5f53\u524d\uff08\u672c\u5730\uff09\u5730\u5740\u4e3a\uff1a`{base_url}` \u3002\u4f8b\u5982\uff0c\u6709\u6548\u5730\u5740\u7c7b\u4f3c `http://192.168.1.10:8123` \uff0c\u5176\u4e2d `192.168.1.10` \u662f Home Assistant \u8bbe\u5907\u7684 IP \u5730\u5740",
|
|
1008
1007
|
"title": "Reolink webhook URL \u4f7f\u7528 HTTPS (SSL)"
|
|
1009
1008
|
},
|
|
1010
1009
|
"password_too_long": {
|
|
@@ -1016,7 +1015,6 @@
|
|
|
1016
1015
|
"title": "Reolink \u4e0e\u5168\u5c40 SSL \u8bc1\u4e66\u4e0d\u517c\u5bb9"
|
|
1017
1016
|
},
|
|
1018
1017
|
"webhook_url": {
|
|
1019
|
-
"description": "\u672a\u4ece\u201c{name}\u201d\u63a5\u6536\u521d\u59cb ONVIF \u72b6\u6001\u3002\u6700\u6709\u53ef\u80fd\u7684\u662f\uff0cReolink \u6444\u50cf\u5934\u65e0\u6cd5\u8bbf\u95ee\u5f53\u524d\uff08\u672c\u5730\uff09Home Assistant \u7f51\u5740 {base_url} \uff0c\u8bf7\u5728[\u7f51\u7edc\u8bbe\u7f6e]({network_link})\u4e2d\u7684 \u201cHome Assistant \u7f51\u5740\u201d\u4e0b\u914d\u7f6e\u6307\u5411 Home Assistant \u7684\uff08\u672c\u5730\uff09HTTP \u5730\u5740\u3002\u4f8b\u5982 `http://192.168.1.10:8123` \uff0c\u5176\u4e2d `192.168.1.10` \u662f Home Assistant \u8bbe\u5907\u7684 IP \u5730\u5740\u3002\u6b64\u5916\uff0c\u8bf7\u786e\u4fdd Reolink \u6444\u50cf\u5934\u53ef\u4ee5\u8bbf\u95ee\u6b64\u7f51\u5740\u3002\u4f7f\u7528\u5feb\u901f\u8fd0\u52a8/AI \u72b6\u6001\u8f6e\u8be2\uff0c\u76f4\u5230\u6536\u5230\u7b2c\u4e00\u4e2a ONVIF \u63a8\u9001\u3002",
|
|
1020
1018
|
"title": "Reolink webhook \u7f51\u5740\u65e0\u6cd5\u8bbf\u95ee"
|
|
1021
1019
|
}
|
|
1022
1020
|
},
|
|
@@ -1004,7 +1004,7 @@
|
|
|
1004
1004
|
"title": "\u9700\u8981\u66f4\u65b0 Reolink \u97cc\u9ad4"
|
|
1005
1005
|
},
|
|
1006
1006
|
"https_webhook": {
|
|
1007
|
-
"description": "Reolink \u7522\u54c1\u7121\u6cd5\u63a8\u9001\u4e8b\u4ef6\u81f3 HTTPS \u4f4d\u5740\uff08SSL\uff09\u3001\u8acb\u65bc [\u7db2\u8def\u8a2d\u5b9a]({network_link}) \u5167\u7684 \"Home Assistant URL\" \u8a2d\u5b9a\u4e00\u7d44\uff08\u672c\u5730\uff09HTTP \u4f4d\u5740\u3002\u76ee\u524d\uff08\u672c\u5730\uff09\u4f4d\u5740\u70ba\uff1a`{base_url}`\u3001\u6709\u6548\u7684\u4f4d\u5740\u61c9\u8a72\u70ba\u985e\u4f3c `
|
|
1007
|
+
"description": "Reolink \u7522\u54c1\u7121\u6cd5\u63a8\u9001\u4e8b\u4ef6\u81f3 HTTPS \u4f4d\u5740\uff08SSL\uff09\u3001\u8acb\u65bc [\u7db2\u8def\u8a2d\u5b9a]({network_link}) \u5167\u7684 \"Home Assistant URL\" \u8a2d\u5b9a\u4e00\u7d44\uff08\u672c\u5730\uff09HTTP \u4f4d\u5740\u3002\u76ee\u524d\uff08\u672c\u5730\uff09\u4f4d\u5740\u70ba\uff1a`{base_url}`\u3001\u6709\u6548\u7684\u4f4d\u5740\u61c9\u8a72\u70ba\u985e\u4f3c `{example_url}`\u3002\u5176\u4e2d `{example_ip}` \u70ba Home Assistant \u88dd\u7f6e\u7684 IP \u4f4d\u5740",
|
|
1008
1008
|
"title": "Reolink webhook URL \u4f7f\u7528 HTTPS (SSL)"
|
|
1009
1009
|
},
|
|
1010
1010
|
"password_too_long": {
|
|
@@ -1016,7 +1016,7 @@
|
|
|
1016
1016
|
"title": "Reolink \u8207\u5168\u57df SSL \u6191\u8b49\u4e0d\u76f8\u5bb9"
|
|
1017
1017
|
},
|
|
1018
1018
|
"webhook_url": {
|
|
1019
|
-
"description": "\u672a\u6536\u5230 {name} \u521d\u59cb ONVIF \u72c0\u614b\u3002Reolink \u651d\u5f71\u6a5f\u5f88\u53ef\u80fd\u7121\u6cd5\u8a2a\u554f\u76ee\u524d\uff08\u672c\u5730\uff09\u7684 Home Assistant URL `{base_url}`\u3001\u8acb\u65bc [\u7db2\u8def\u8a2d\u5b9a]({network_link}) \u5167\u7684 \"Home Assistant URL\" \u4e2d\u8a2d\u5b9a\uff08\u672c\u5730\uff09\u6307\u5b9a HTTP \u4f4d\u5740\u3002\u4f8b\u5982\uff1a`
|
|
1019
|
+
"description": "\u672a\u6536\u5230 {name} \u521d\u59cb ONVIF \u72c0\u614b\u3002Reolink \u651d\u5f71\u6a5f\u5f88\u53ef\u80fd\u7121\u6cd5\u8a2a\u554f\u76ee\u524d\uff08\u672c\u5730\uff09\u7684 Home Assistant URL `{base_url}`\u3001\u8acb\u65bc [\u7db2\u8def\u8a2d\u5b9a]({network_link}) \u5167\u7684 \"Home Assistant URL\" \u4e2d\u8a2d\u5b9a\uff08\u672c\u5730\uff09\u6307\u5b9a HTTP \u4f4d\u5740\u3002\u4f8b\u5982\uff1a`{example_url}`\u3001\u5176\u4e2d `{example_ip}` \u70ba Home Assistant \u88dd\u7f6e\u7684 IP \u4f4d\u5740\u3002\u540c\u6642\u78ba\u5b9a Reolink \u651d\u5f71\u6a5f\u53ef\u4ee5\u9020\u8a2a\u8a72 URL\u3002\u4f7f\u7528\u5feb\u901f\u52d5\u4f5c/AI \u72c0\u614b\u8f2a\u8a62\u76f4\u5230\u6536\u5230\u7b2c\u4e00\u6b21 ONVIF \u63a8\u9001\u3002",
|
|
1020
1020
|
"title": "Reolink webhook URL \u7121\u6cd5\u8a2a\u554f"
|
|
1021
1021
|
}
|
|
1022
1022
|
},
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
"""The Rituals Perfume Genie integration."""
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
+
import logging
|
|
4
5
|
|
|
5
|
-
import
|
|
6
|
-
from pyrituals import Account, Diffuser
|
|
6
|
+
from aiohttp import ClientError, ClientResponseError
|
|
7
|
+
from pyrituals import Account, AuthenticationException, Diffuser
|
|
7
8
|
|
|
8
9
|
from homeassistant.config_entries import ConfigEntry
|
|
9
|
-
from homeassistant.const import Platform
|
|
10
|
+
from homeassistant.const import CONF_EMAIL, CONF_PASSWORD, Platform
|
|
10
11
|
from homeassistant.core import HomeAssistant, callback
|
|
11
|
-
from homeassistant.exceptions import ConfigEntryNotReady
|
|
12
|
+
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
|
|
12
13
|
from homeassistant.helpers import entity_registry as er
|
|
13
14
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
|
14
15
|
|
|
15
16
|
from .const import ACCOUNT_HASH, DOMAIN, UPDATE_INTERVAL
|
|
16
17
|
from .coordinator import RitualsDataUpdateCoordinator
|
|
17
18
|
|
|
19
|
+
_LOGGER = logging.getLogger(__name__)
|
|
20
|
+
|
|
18
21
|
PLATFORMS = [
|
|
19
22
|
Platform.BINARY_SENSOR,
|
|
20
23
|
Platform.NUMBER,
|
|
@@ -26,12 +29,38 @@ PLATFORMS = [
|
|
|
26
29
|
|
|
27
30
|
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|
28
31
|
"""Set up Rituals Perfume Genie from a config entry."""
|
|
32
|
+
# Initiate reauth for old config entries which don't have username / password in the entry data
|
|
33
|
+
if CONF_EMAIL not in entry.data or CONF_PASSWORD not in entry.data:
|
|
34
|
+
raise ConfigEntryAuthFailed("Missing credentials")
|
|
35
|
+
|
|
29
36
|
session = async_get_clientsession(hass)
|
|
30
|
-
|
|
37
|
+
|
|
38
|
+
account = Account(
|
|
39
|
+
email=entry.data[CONF_EMAIL],
|
|
40
|
+
password=entry.data[CONF_PASSWORD],
|
|
41
|
+
session=session,
|
|
42
|
+
)
|
|
31
43
|
|
|
32
44
|
try:
|
|
45
|
+
# Authenticate first so API token/cookies are available for subsequent calls
|
|
46
|
+
await account.authenticate()
|
|
33
47
|
account_devices = await account.get_devices()
|
|
34
|
-
|
|
48
|
+
|
|
49
|
+
except AuthenticationException as err:
|
|
50
|
+
# Credentials invalid/expired -> raise AuthFailed to trigger reauth flow
|
|
51
|
+
|
|
52
|
+
raise ConfigEntryAuthFailed(err) from err
|
|
53
|
+
|
|
54
|
+
except ClientResponseError as err:
|
|
55
|
+
_LOGGER.debug(
|
|
56
|
+
"HTTP error during Rituals setup: status=%s, url=%s, headers=%s",
|
|
57
|
+
err.status,
|
|
58
|
+
err.request_info,
|
|
59
|
+
dict(err.headers or {}),
|
|
60
|
+
)
|
|
61
|
+
raise ConfigEntryNotReady from err
|
|
62
|
+
|
|
63
|
+
except ClientError as err:
|
|
35
64
|
raise ConfigEntryNotReady from err
|
|
36
65
|
|
|
37
66
|
# Migrate old unique_ids to the new format
|
|
@@ -45,7 +74,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|
|
45
74
|
# Create a coordinator for each diffuser
|
|
46
75
|
coordinators = {
|
|
47
76
|
diffuser.hublot: RitualsDataUpdateCoordinator(
|
|
48
|
-
hass, entry, diffuser, update_interval
|
|
77
|
+
hass, entry, account, diffuser, update_interval
|
|
49
78
|
)
|
|
50
79
|
for diffuser in account_devices
|
|
51
80
|
}
|
|
@@ -106,3 +135,14 @@ def async_migrate_entities_unique_ids(
|
|
|
106
135
|
registry_entry.entity_id,
|
|
107
136
|
new_unique_id=f"{diffuser.hublot}-{new_unique_id}",
|
|
108
137
|
)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
# Migration helpers for API v2
|
|
141
|
+
async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|
142
|
+
"""Migrate config entry to version 2: drop legacy ACCOUNT_HASH and bump version."""
|
|
143
|
+
if entry.version < 2:
|
|
144
|
+
data = dict(entry.data)
|
|
145
|
+
data.pop(ACCOUNT_HASH, None)
|
|
146
|
+
hass.config_entries.async_update_entry(entry, data=data, version=2)
|
|
147
|
+
return True
|
|
148
|
+
return True
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import
|
|
6
|
-
from typing import Any
|
|
5
|
+
from collections.abc import Mapping
|
|
6
|
+
from typing import TYPE_CHECKING, Any
|
|
7
7
|
|
|
8
|
-
from aiohttp import
|
|
8
|
+
from aiohttp import ClientError
|
|
9
9
|
from pyrituals import Account, AuthenticationException
|
|
10
10
|
import voluptuous as vol
|
|
11
11
|
|
|
@@ -13,9 +13,7 @@ from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
|
|
|
13
13
|
from homeassistant.const import CONF_EMAIL, CONF_PASSWORD
|
|
14
14
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
|
15
15
|
|
|
16
|
-
from .const import
|
|
17
|
-
|
|
18
|
-
_LOGGER = logging.getLogger(__name__)
|
|
16
|
+
from .const import DOMAIN
|
|
19
17
|
|
|
20
18
|
DATA_SCHEMA = vol.Schema(
|
|
21
19
|
{
|
|
@@ -28,39 +26,88 @@ DATA_SCHEMA = vol.Schema(
|
|
|
28
26
|
class RitualsPerfumeGenieConfigFlow(ConfigFlow, domain=DOMAIN):
|
|
29
27
|
"""Handle a config flow for Rituals Perfume Genie."""
|
|
30
28
|
|
|
31
|
-
VERSION =
|
|
29
|
+
VERSION = 2
|
|
32
30
|
|
|
33
31
|
async def async_step_user(
|
|
34
32
|
self, user_input: dict[str, Any] | None = None
|
|
35
33
|
) -> ConfigFlowResult:
|
|
36
34
|
"""Handle the initial step."""
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
try:
|
|
46
|
-
await account.authenticate()
|
|
47
|
-
except ClientResponseError:
|
|
48
|
-
_LOGGER.exception("Unexpected response")
|
|
49
|
-
errors["base"] = "cannot_connect"
|
|
50
|
-
except AuthenticationException:
|
|
51
|
-
errors["base"] = "invalid_auth"
|
|
52
|
-
except Exception:
|
|
53
|
-
_LOGGER.exception("Unexpected exception")
|
|
54
|
-
errors["base"] = "unknown"
|
|
55
|
-
else:
|
|
56
|
-
await self.async_set_unique_id(account.email)
|
|
57
|
-
self._abort_if_unique_id_configured()
|
|
58
|
-
|
|
59
|
-
return self.async_create_entry(
|
|
60
|
-
title=account.email,
|
|
61
|
-
data={ACCOUNT_HASH: account.account_hash},
|
|
35
|
+
errors: dict[str, str] = {}
|
|
36
|
+
if user_input is not None:
|
|
37
|
+
session = async_get_clientsession(self.hass)
|
|
38
|
+
account = Account(
|
|
39
|
+
email=user_input[CONF_EMAIL],
|
|
40
|
+
password=user_input[CONF_PASSWORD],
|
|
41
|
+
session=session,
|
|
62
42
|
)
|
|
63
43
|
|
|
44
|
+
try:
|
|
45
|
+
await account.authenticate()
|
|
46
|
+
except AuthenticationException:
|
|
47
|
+
errors["base"] = "invalid_auth"
|
|
48
|
+
except ClientError:
|
|
49
|
+
errors["base"] = "cannot_connect"
|
|
50
|
+
else:
|
|
51
|
+
await self.async_set_unique_id(user_input[CONF_EMAIL])
|
|
52
|
+
self._abort_if_unique_id_configured()
|
|
53
|
+
return self.async_create_entry(
|
|
54
|
+
title=user_input[CONF_EMAIL],
|
|
55
|
+
data=user_input,
|
|
56
|
+
)
|
|
57
|
+
|
|
64
58
|
return self.async_show_form(
|
|
65
59
|
step_id="user", data_schema=DATA_SCHEMA, errors=errors
|
|
66
60
|
)
|
|
61
|
+
|
|
62
|
+
async def async_step_reauth(
|
|
63
|
+
self, entry_data: Mapping[str, Any]
|
|
64
|
+
) -> ConfigFlowResult:
|
|
65
|
+
"""Handle re-authentication with Rituals."""
|
|
66
|
+
return await self.async_step_reauth_confirm()
|
|
67
|
+
|
|
68
|
+
async def async_step_reauth_confirm(
|
|
69
|
+
self, user_input: dict[str, Any] | None = None
|
|
70
|
+
) -> ConfigFlowResult:
|
|
71
|
+
"""Form to log in again."""
|
|
72
|
+
errors: dict[str, str] = {}
|
|
73
|
+
|
|
74
|
+
reauth_entry = self._get_reauth_entry()
|
|
75
|
+
|
|
76
|
+
if TYPE_CHECKING:
|
|
77
|
+
assert reauth_entry.unique_id is not None
|
|
78
|
+
|
|
79
|
+
if user_input:
|
|
80
|
+
session = async_get_clientsession(self.hass)
|
|
81
|
+
account = Account(
|
|
82
|
+
email=reauth_entry.unique_id,
|
|
83
|
+
password=user_input[CONF_PASSWORD],
|
|
84
|
+
session=session,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
try:
|
|
88
|
+
await account.authenticate()
|
|
89
|
+
except AuthenticationException:
|
|
90
|
+
errors["base"] = "invalid_auth"
|
|
91
|
+
except ClientError:
|
|
92
|
+
errors["base"] = "cannot_connect"
|
|
93
|
+
else:
|
|
94
|
+
return self.async_update_reload_and_abort(
|
|
95
|
+
reauth_entry,
|
|
96
|
+
data={
|
|
97
|
+
CONF_EMAIL: reauth_entry.unique_id,
|
|
98
|
+
CONF_PASSWORD: user_input[CONF_PASSWORD],
|
|
99
|
+
},
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
return self.async_show_form(
|
|
103
|
+
step_id="reauth_confirm",
|
|
104
|
+
data_schema=self.add_suggested_values_to_schema(
|
|
105
|
+
vol.Schema(
|
|
106
|
+
{
|
|
107
|
+
vol.Required(CONF_PASSWORD): str,
|
|
108
|
+
}
|
|
109
|
+
),
|
|
110
|
+
reauth_entry.data,
|
|
111
|
+
),
|
|
112
|
+
errors=errors,
|
|
113
|
+
)
|
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
from datetime import timedelta
|
|
4
4
|
import logging
|
|
5
5
|
|
|
6
|
-
from
|
|
6
|
+
from aiohttp import ClientError, ClientResponseError
|
|
7
|
+
from pyrituals import Account, AuthenticationException, Diffuser
|
|
7
8
|
|
|
8
9
|
from homeassistant.config_entries import ConfigEntry
|
|
9
10
|
from homeassistant.core import HomeAssistant
|
|
10
|
-
from homeassistant.
|
|
11
|
+
from homeassistant.exceptions import ConfigEntryAuthFailed
|
|
12
|
+
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
|
11
13
|
|
|
12
14
|
from .const import DOMAIN
|
|
13
15
|
|
|
@@ -23,10 +25,12 @@ class RitualsDataUpdateCoordinator(DataUpdateCoordinator[None]):
|
|
|
23
25
|
self,
|
|
24
26
|
hass: HomeAssistant,
|
|
25
27
|
config_entry: ConfigEntry,
|
|
28
|
+
account: Account,
|
|
26
29
|
diffuser: Diffuser,
|
|
27
30
|
update_interval: timedelta,
|
|
28
31
|
) -> None:
|
|
29
32
|
"""Initialize global Rituals Perfume Genie data updater."""
|
|
33
|
+
self.account = account
|
|
30
34
|
self.diffuser = diffuser
|
|
31
35
|
super().__init__(
|
|
32
36
|
hass,
|
|
@@ -37,5 +41,36 @@ class RitualsDataUpdateCoordinator(DataUpdateCoordinator[None]):
|
|
|
37
41
|
)
|
|
38
42
|
|
|
39
43
|
async def _async_update_data(self) -> None:
|
|
40
|
-
"""Fetch data from Rituals.
|
|
41
|
-
|
|
44
|
+
"""Fetch data from Rituals, with one silent re-auth on 401.
|
|
45
|
+
|
|
46
|
+
If silent re-auth also fails, raise ConfigEntryAuthFailed to trigger reauth flow.
|
|
47
|
+
Other HTTP/network errors are wrapped in UpdateFailed so HA can retry.
|
|
48
|
+
"""
|
|
49
|
+
try:
|
|
50
|
+
await self.diffuser.update_data()
|
|
51
|
+
except (AuthenticationException, ClientResponseError) as err:
|
|
52
|
+
# Treat 401/403 like AuthenticationException → one silent re-auth, single retry
|
|
53
|
+
if isinstance(err, ClientResponseError) and (status := err.status) not in (
|
|
54
|
+
401,
|
|
55
|
+
403,
|
|
56
|
+
):
|
|
57
|
+
# Non-auth HTTP error → let HA retry
|
|
58
|
+
raise UpdateFailed(f"HTTP {status}") from err
|
|
59
|
+
|
|
60
|
+
self.logger.debug(
|
|
61
|
+
"Auth issue detected (%r). Attempting silent re-auth.", err
|
|
62
|
+
)
|
|
63
|
+
try:
|
|
64
|
+
await self.account.authenticate()
|
|
65
|
+
await self.diffuser.update_data()
|
|
66
|
+
except AuthenticationException as err2:
|
|
67
|
+
# Credentials invalid → trigger HA reauth
|
|
68
|
+
raise ConfigEntryAuthFailed from err2
|
|
69
|
+
except ClientResponseError as err2:
|
|
70
|
+
# Still HTTP auth errors after refresh → trigger HA reauth
|
|
71
|
+
if err2.status in (401, 403):
|
|
72
|
+
raise ConfigEntryAuthFailed from err2
|
|
73
|
+
raise UpdateFailed(f"HTTP {err2.status}") from err2
|
|
74
|
+
except ClientError as err:
|
|
75
|
+
# Network issues (timeouts, DNS, etc.)
|
|
76
|
+
raise UpdateFailed(f"Network error: {err!r}") from err
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"domain": "rituals_perfume_genie",
|
|
3
3
|
"name": "Rituals Perfume Genie",
|
|
4
|
-
"codeowners": ["@milanmeu", "@frenck"],
|
|
4
|
+
"codeowners": ["@milanmeu", "@frenck", "@quebulm"],
|
|
5
5
|
"config_flow": true,
|
|
6
6
|
"documentation": "https://www.home-assistant.io/integrations/rituals_perfume_genie",
|
|
7
7
|
"iot_class": "cloud_polling",
|
|
8
8
|
"loggers": ["pyrituals"],
|
|
9
|
-
"requirements": ["pyrituals==0.0.
|
|
9
|
+
"requirements": ["pyrituals==0.0.7"]
|
|
10
10
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"config": {
|
|
3
3
|
"abort": {
|
|
4
|
-
"already_configured": "[%key:common::config_flow::abort::
|
|
4
|
+
"already_configured": "[%key:common::config_flow::abort::already_configured_account%]",
|
|
5
|
+
"reauth_successful": "Re-authentication was successful"
|
|
5
6
|
},
|
|
6
7
|
"error": {
|
|
7
8
|
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
|
|
@@ -9,6 +10,12 @@
|
|
|
9
10
|
"unknown": "[%key:common::config_flow::error::unknown%]"
|
|
10
11
|
},
|
|
11
12
|
"step": {
|
|
13
|
+
"reauth_confirm": {
|
|
14
|
+
"data": {
|
|
15
|
+
"password": "[%key:common::config_flow::data::password%]"
|
|
16
|
+
},
|
|
17
|
+
"description": "Please enter the correct password."
|
|
18
|
+
},
|
|
12
19
|
"user": {
|
|
13
20
|
"data": {
|
|
14
21
|
"email": "[%key:common::config_flow::data::email%]",
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"config": {
|
|
3
|
-
"abort": {
|
|
4
|
-
"already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e"
|
|
5
|
-
},
|
|
6
3
|
"error": {
|
|
7
4
|
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435",
|
|
8
5
|
"invalid_auth": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430 \u0430\u0432\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f",
|