homeassistant 2025.12.0b8__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/he.json +25 -0
- homeassistant/components/airobot/translations/pt.json +5 -1
- homeassistant/components/alarm_control_panel/translations/cs.json +18 -6
- homeassistant/components/alarm_control_panel/translations/he.json +86 -1
- homeassistant/components/alarm_control_panel/translations/pt.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/he.json +20 -0
- homeassistant/components/anglian_water/translations/pt.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/translations/cs.json +12 -4
- homeassistant/components/assist_satellite/translations/he.json +55 -2
- homeassistant/components/assist_satellite/translations/pt.json +12 -4
- homeassistant/components/assist_satellite/translations/zh-Hans.json +4 -2
- homeassistant/components/automation/translations/cs.json +8 -0
- homeassistant/components/automation/translations/pt.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/translations/cs.json +36 -1
- homeassistant/components/binary_sensor/translations/et.json +4 -0
- homeassistant/components/binary_sensor/translations/ga.json +36 -1
- homeassistant/components/binary_sensor/translations/he.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/sv.json +23 -1
- homeassistant/components/binary_sensor/translations/zh-Hans.json +29 -1
- homeassistant/components/blebox/translations/sr-Latn.json +1 -0
- homeassistant/components/bsblan/translations/sr-Latn.json +4 -0
- homeassistant/components/camera/translations/he.json +1 -1
- homeassistant/components/climate/translations/cs.json +15 -5
- homeassistant/components/climate/translations/he.json +65 -2
- homeassistant/components/climate/translations/pt.json +15 -5
- homeassistant/components/climate/translations/ru.json +21 -11
- homeassistant/components/cloud/entity.py +1 -1
- homeassistant/components/cloud/manifest.json +1 -1
- homeassistant/components/cloud/translations/he.json +7 -0
- 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/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/he.json +34 -1
- 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/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 +7 -2
- 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/hanna/translations/he.json +20 -0
- homeassistant/components/hassio/translations/cs.json +1 -0
- homeassistant/components/hassio/translations/et.json +1 -0
- homeassistant/components/hassio/translations/pt.json +1 -0
- homeassistant/components/home_connect/translations/de.json +2 -2
- homeassistant/components/home_connect/translations/he.json +3 -0
- homeassistant/components/homekit_controller/translations/he.json +1 -1
- homeassistant/components/hue_ble/translations/he.json +11 -0
- homeassistant/components/hue_ble/translations/nl.json +3 -0
- homeassistant/components/hue_ble/translations/pt.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/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/he.json +38 -0
- homeassistant/components/lawn_mower/translations/pt.json +20 -12
- homeassistant/components/lawn_mower/translations/ru.json +56 -1
- homeassistant/components/light/translations/cs.json +6 -2
- homeassistant/components/light/translations/he.json +69 -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/matter/translations/he.json +56 -2
- homeassistant/components/media_player/translations/cs.json +3 -1
- homeassistant/components/media_player/translations/he.json +27 -4
- homeassistant/components/media_player/translations/pt.json +3 -1
- homeassistant/components/media_player/translations/ru.json +24 -1
- 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/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/he.json +35 -1
- homeassistant/components/mqtt/translations/pt.json +3 -1
- 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/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/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 +1 -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/playstation_network/coordinator.py +14 -7
- 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/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/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/he.json +7 -1
- homeassistant/components/text/translations/pt.json +7 -1
- homeassistant/components/text/translations/ru.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/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/he.json +57 -2
- homeassistant/components/vacuum/translations/pt.json +12 -4
- homeassistant/components/vacuum/translations/ru.json +20 -12
- 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/translations/cs.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/pt.json +10 -2
- homeassistant/components/wled/translations/ru.json +10 -2
- homeassistant/components/wled/translations/zh-Hans.json +10 -2
- 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 +7 -0
- 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/loader.py +6 -0
- homeassistant/package_constraints.txt +2 -2
- {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/METADATA +2 -2
- {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/RECORD +650 -635
- {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/WHEEL +0 -0
- {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/entry_points.txt +0 -0
- {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/licenses/LICENSE.md +0 -0
- {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
- {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/top_level.txt +0 -0
|
@@ -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",
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"config": {
|
|
3
3
|
"abort": {
|
|
4
|
-
"already_configured": "
|
|
4
|
+
"already_configured": "\u00da\u010det je ji\u017e nastaven",
|
|
5
|
+
"reauth_successful": "Op\u011btovn\u00e9 ov\u011b\u0159en\u00ed bylo \u00fasp\u011b\u0161n\u00e9"
|
|
5
6
|
},
|
|
6
7
|
"error": {
|
|
7
8
|
"cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit",
|
|
@@ -9,6 +10,12 @@
|
|
|
9
10
|
"unknown": "Neo\u010dek\u00e1van\u00e1 chyba"
|
|
10
11
|
},
|
|
11
12
|
"step": {
|
|
13
|
+
"reauth_confirm": {
|
|
14
|
+
"data": {
|
|
15
|
+
"password": "Heslo"
|
|
16
|
+
},
|
|
17
|
+
"description": "Zadejte spr\u00e1vn\u00e9 heslo."
|
|
18
|
+
},
|
|
12
19
|
"user": {
|
|
13
20
|
"data": {
|
|
14
21
|
"email": "E-mail",
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"config": {
|
|
3
3
|
"abort": {
|
|
4
|
-
"already_configured": "
|
|
4
|
+
"already_configured": "Konto ist bereits konfiguriert",
|
|
5
|
+
"reauth_successful": "Die erneute Authentifizierung war erfolgreich"
|
|
5
6
|
},
|
|
6
7
|
"error": {
|
|
7
8
|
"cannot_connect": "Verbindung fehlgeschlagen",
|
|
@@ -9,6 +10,12 @@
|
|
|
9
10
|
"unknown": "Unerwarteter Fehler"
|
|
10
11
|
},
|
|
11
12
|
"step": {
|
|
13
|
+
"reauth_confirm": {
|
|
14
|
+
"data": {
|
|
15
|
+
"password": "Passwort"
|
|
16
|
+
},
|
|
17
|
+
"description": "Bitte gib das richtige Passwort ein."
|
|
18
|
+
},
|
|
12
19
|
"user": {
|
|
13
20
|
"data": {
|
|
14
21
|
"email": "E-Mail",
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"config": {
|
|
3
|
-
"abort": {
|
|
4
|
-
"already_configured": "\u0397 \u03c3\u03c5\u03c3\u03ba\u03b5\u03c5\u03ae \u03ad\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7 \u03b4\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03b8\u03b5\u03af"
|
|
5
|
-
},
|
|
6
3
|
"error": {
|
|
7
4
|
"cannot_connect": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2",
|
|
8
5
|
"invalid_auth": "\u039c\u03b7 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf\u03c2 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2",
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"config": {
|
|
3
3
|
"abort": {
|
|
4
|
-
"already_configured": "
|
|
4
|
+
"already_configured": "Account is already configured",
|
|
5
|
+
"reauth_successful": "Re-authentication was successful"
|
|
5
6
|
},
|
|
6
7
|
"error": {
|
|
7
8
|
"cannot_connect": "Failed to connect",
|
|
@@ -9,6 +10,12 @@
|
|
|
9
10
|
"unknown": "Unexpected error"
|
|
10
11
|
},
|
|
11
12
|
"step": {
|
|
13
|
+
"reauth_confirm": {
|
|
14
|
+
"data": {
|
|
15
|
+
"password": "Password"
|
|
16
|
+
},
|
|
17
|
+
"description": "Please enter the correct password."
|
|
18
|
+
},
|
|
12
19
|
"user": {
|
|
13
20
|
"data": {
|
|
14
21
|
"email": "Email",
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"config": {
|
|
3
3
|
"abort": {
|
|
4
|
-
"already_configured": "
|
|
4
|
+
"already_configured": "Account is already configured",
|
|
5
|
+
"reauth_successful": "Re-authentication was successful"
|
|
5
6
|
},
|
|
6
7
|
"error": {
|
|
7
8
|
"cannot_connect": "Failed to connect",
|
|
@@ -9,6 +10,12 @@
|
|
|
9
10
|
"unknown": "Unexpected error"
|
|
10
11
|
},
|
|
11
12
|
"step": {
|
|
13
|
+
"reauth_confirm": {
|
|
14
|
+
"data": {
|
|
15
|
+
"password": "Password"
|
|
16
|
+
},
|
|
17
|
+
"description": "Please enter the correct password."
|
|
18
|
+
},
|
|
12
19
|
"user": {
|
|
13
20
|
"data": {
|
|
14
21
|
"email": "Email",
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"config": {
|
|
3
3
|
"abort": {
|
|
4
|
-
"already_configured": "
|
|
4
|
+
"already_configured": "La cuenta ya est\u00e1 configurada",
|
|
5
|
+
"reauth_successful": "La autenticaci\u00f3n se volvi\u00f3 a realizar correctamente"
|
|
5
6
|
},
|
|
6
7
|
"error": {
|
|
7
8
|
"cannot_connect": "No se pudo conectar",
|
|
@@ -9,6 +10,12 @@
|
|
|
9
10
|
"unknown": "Error inesperado"
|
|
10
11
|
},
|
|
11
12
|
"step": {
|
|
13
|
+
"reauth_confirm": {
|
|
14
|
+
"data": {
|
|
15
|
+
"password": "Contrase\u00f1a"
|
|
16
|
+
},
|
|
17
|
+
"description": "Por favor, introduce la contrase\u00f1a correcta."
|
|
18
|
+
},
|
|
12
19
|
"user": {
|
|
13
20
|
"data": {
|
|
14
21
|
"email": "Correo electr\u00f3nico",
|