homeassistant 2025.9.0b0__py3-none-any.whl → 2025.9.0b2__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/accuweather/translations/sensor.sr-Latn.json +9 -0
- homeassistant/components/accuweather/translations/sensor.sr.json +9 -0
- homeassistant/components/accuweather/translations/sr-Latn.json +101 -0
- homeassistant/components/accuweather/translations/sr.json +101 -0
- homeassistant/components/ai_task/services.yaml +0 -1
- homeassistant/components/ai_task/translations/cs.json +25 -3
- homeassistant/components/ai_task/translations/el.json +22 -0
- homeassistant/components/ai_task/translations/fr.json +22 -0
- homeassistant/components/ai_task/translations/lt.json +22 -0
- homeassistant/components/ai_task/translations/pt.json +22 -0
- homeassistant/components/ai_task/translations/ru.json +22 -0
- homeassistant/components/ai_task/translations/sk.json +1 -1
- homeassistant/components/airgradient/translations/pt.json +1 -0
- homeassistant/components/airgradient/translations/ru.json +1 -0
- homeassistant/components/airos/manifest.json +1 -1
- homeassistant/components/airos/translations/lt.json +23 -1
- homeassistant/components/aladdin_connect/manifest.json +1 -1
- homeassistant/components/aladdin_connect/translations/ca.json +28 -0
- homeassistant/components/aladdin_connect/translations/cs.json +30 -1
- homeassistant/components/aladdin_connect/translations/el.json +30 -1
- homeassistant/components/aladdin_connect/translations/et.json +30 -1
- homeassistant/components/aladdin_connect/translations/fr.json +10 -0
- homeassistant/components/aladdin_connect/translations/ga.json +30 -1
- homeassistant/components/aladdin_connect/translations/lt.json +30 -1
- homeassistant/components/aladdin_connect/translations/nl.json +28 -0
- homeassistant/components/aladdin_connect/translations/pt.json +30 -1
- homeassistant/components/aladdin_connect/translations/ru.json +30 -1
- homeassistant/components/aladdin_connect/translations/sk.json +30 -1
- homeassistant/components/aladdin_connect/translations/zh-Hans.json +30 -1
- homeassistant/components/aladdin_connect/translations/zh-Hant.json +30 -1
- homeassistant/components/alarm_control_panel/translations/cs.json +3 -3
- homeassistant/components/alexa_devices/__init__.py +1 -1
- homeassistant/components/alexa_devices/const.py +9 -9
- homeassistant/components/alexa_devices/manifest.json +1 -1
- homeassistant/components/alexa_devices/sensor.py +3 -0
- homeassistant/components/alexa_devices/services.py +3 -8
- homeassistant/components/alexa_devices/services.yaml +41 -476
- homeassistant/components/alexa_devices/strings.json +42 -469
- homeassistant/components/alexa_devices/translations/bg.json +0 -8
- homeassistant/components/alexa_devices/translations/cs.json +0 -477
- homeassistant/components/alexa_devices/translations/de.json +42 -469
- homeassistant/components/alexa_devices/translations/en-GB.json +1 -475
- homeassistant/components/alexa_devices/translations/en.json +42 -469
- homeassistant/components/alexa_devices/translations/es.json +0 -307
- homeassistant/components/alexa_devices/translations/et.json +42 -469
- homeassistant/components/alexa_devices/translations/fr.json +0 -9
- homeassistant/components/alexa_devices/translations/ga.json +0 -477
- homeassistant/components/alexa_devices/translations/lt.json +27 -293
- homeassistant/components/alexa_devices/translations/nl.json +0 -15
- homeassistant/components/alexa_devices/translations/pt.json +11 -477
- homeassistant/components/alexa_devices/translations/sk.json +0 -477
- homeassistant/components/alexa_devices/translations/sv.json +0 -8
- homeassistant/components/alexa_devices/translations/zh-Hans.json +0 -387
- homeassistant/components/alexa_devices/translations/zh-Hant.json +42 -469
- homeassistant/components/anthemav/translations/lt.json +2 -1
- homeassistant/components/asuswrt/bridge.py +18 -2
- homeassistant/components/asuswrt/manifest.json +1 -1
- homeassistant/components/august/translations/lt.json +26 -1
- homeassistant/components/august/translations/pt.json +26 -1
- homeassistant/components/backup/manager.py +2 -1
- homeassistant/components/backup/translations/de.json +1 -1
- homeassistant/components/bayesian/strings.json +1 -1
- homeassistant/components/bayesian/translations/cs.json +1 -1
- homeassistant/components/bayesian/translations/de.json +17 -17
- homeassistant/components/bayesian/translations/el.json +102 -0
- homeassistant/components/bayesian/translations/en-GB.json +1 -1
- homeassistant/components/bayesian/translations/en.json +3 -3
- homeassistant/components/bayesian/translations/et.json +1 -1
- homeassistant/components/bayesian/translations/fr.json +41 -0
- homeassistant/components/bayesian/translations/ga.json +48 -6
- homeassistant/components/bayesian/translations/lt.json +218 -0
- homeassistant/components/bayesian/translations/pl.json +7 -0
- homeassistant/components/bayesian/translations/pt.json +257 -0
- homeassistant/components/bayesian/translations/ru.json +257 -0
- homeassistant/components/bayesian/translations/sk.json +5 -5
- homeassistant/components/bayesian/translations/sv.json +11 -0
- homeassistant/components/bayesian/translations/zh-Hans.json +1 -1
- homeassistant/components/bayesian/translations/zh-Hant.json +1 -1
- homeassistant/components/bluetooth/__init__.py +1 -1
- homeassistant/components/bluetooth/manifest.json +3 -3
- homeassistant/components/braviatv/entity.py +10 -4
- homeassistant/components/bring/translations/sk.json +1 -1
- homeassistant/components/buienradar/translations/sr-Latn.json +128 -0
- homeassistant/components/buienradar/translations/sr.json +128 -0
- homeassistant/components/button/translations/ru.json +1 -1
- homeassistant/components/camera/translations/ru.json +2 -2
- homeassistant/components/conversation/manifest.json +1 -1
- homeassistant/components/cover/translations/mk.json +13 -5
- homeassistant/components/cover/translations/pl.json +1 -1
- homeassistant/components/deconz/translations/ga.json +19 -1
- homeassistant/components/device_tracker/translations/ga.json +9 -0
- homeassistant/components/devolo_home_control/translations/lt.json +3 -0
- homeassistant/components/devolo_home_network/translations/lt.json +3 -1
- homeassistant/components/devolo_home_network/translations/ru.json +3 -0
- homeassistant/components/dominos/translations/ru.json +2 -0
- homeassistant/components/downloader/translations/sk.json +1 -1
- homeassistant/components/dsmr/translations/ga.json +8 -0
- homeassistant/components/dsmr_reader/translations/ga.json +34 -0
- homeassistant/components/dwd_weather_warnings/translations/sk.json +1 -1
- homeassistant/components/ecobee/translations/ga.json +20 -1
- homeassistant/components/ecovacs/manifest.json +1 -1
- homeassistant/components/efergy/translations/ga.json +6 -0
- homeassistant/components/elkm1/translations/ga.json +6 -1
- homeassistant/components/emoncms/translations/lt.json +8 -0
- homeassistant/components/enphase_envoy/translations/lt.json +6 -0
- homeassistant/components/environment_canada/translations/sr-Latn.json +9 -0
- homeassistant/components/environment_canada/translations/sr.json +9 -0
- homeassistant/components/eq3btsmart/manifest.json +1 -1
- homeassistant/components/esphome/manifest.json +2 -2
- homeassistant/components/esphome/translations/ga.json +29 -4
- homeassistant/components/esphome/translations/sk.json +1 -1
- homeassistant/components/fan/translations/ga.json +25 -1
- homeassistant/components/filesize/translations/ga.json +12 -0
- homeassistant/components/fireservicerota/translations/ga.json +3 -1
- homeassistant/components/flo/translations/ga.json +16 -0
- homeassistant/components/flume/translations/ga.json +1 -0
- homeassistant/components/flux_led/translations/ga.json +78 -1
- homeassistant/components/flux_led/translations/sk.json +1 -1
- homeassistant/components/foscam/translations/ga.json +13 -0
- homeassistant/components/foscam/translations/lt.json +3 -0
- homeassistant/components/fritz/translations/ga.json +49 -6
- homeassistant/components/fritz/translations/ru.json +3 -0
- homeassistant/components/fritzbox/translations/ca.json +1 -3
- homeassistant/components/fritzbox/translations/cs.json +2 -2
- homeassistant/components/fritzbox/translations/de.json +3 -3
- homeassistant/components/fritzbox/translations/el.json +2 -2
- homeassistant/components/fritzbox/translations/en-GB.json +2 -2
- homeassistant/components/fritzbox/translations/en.json +2 -2
- homeassistant/components/fritzbox/translations/es-419.json +0 -6
- homeassistant/components/fritzbox/translations/es.json +1 -3
- homeassistant/components/fritzbox/translations/et.json +2 -2
- homeassistant/components/fritzbox/translations/fi.json +1 -3
- homeassistant/components/fritzbox/translations/fr.json +1 -3
- homeassistant/components/fritzbox/translations/ga.json +0 -1
- homeassistant/components/fritzbox/translations/hu.json +1 -3
- homeassistant/components/fritzbox/translations/id.json +1 -3
- homeassistant/components/fritzbox/translations/it.json +1 -3
- homeassistant/components/fritzbox/translations/ja.json +1 -3
- homeassistant/components/fritzbox/translations/ko.json +1 -3
- homeassistant/components/fritzbox/translations/lb.json +2 -4
- homeassistant/components/fritzbox/translations/lt.json +1 -3
- homeassistant/components/fritzbox/translations/nb.json +1 -3
- homeassistant/components/fritzbox/translations/nl.json +1 -3
- homeassistant/components/fritzbox/translations/pl.json +1 -3
- homeassistant/components/fritzbox/translations/pt-BR.json +1 -3
- homeassistant/components/fritzbox/translations/pt.json +2 -2
- homeassistant/components/fritzbox/translations/ro.json +1 -3
- homeassistant/components/fritzbox/translations/ru.json +2 -2
- homeassistant/components/fritzbox/translations/sk.json +2 -2
- homeassistant/components/fritzbox/translations/sl.json +1 -3
- homeassistant/components/fritzbox/translations/sv.json +1 -3
- homeassistant/components/fritzbox/translations/tr.json +1 -3
- homeassistant/components/fritzbox/translations/uk.json +1 -3
- homeassistant/components/fritzbox/translations/vi.json +2 -4
- homeassistant/components/fritzbox/translations/zh-Hans.json +2 -2
- homeassistant/components/fritzbox/translations/zh-Hant.json +2 -2
- homeassistant/components/fritzbox_callmonitor/translations/ca.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/cs.json +2 -2
- homeassistant/components/fritzbox_callmonitor/translations/de.json +3 -3
- homeassistant/components/fritzbox_callmonitor/translations/el.json +2 -2
- homeassistant/components/fritzbox_callmonitor/translations/en-GB.json +2 -2
- homeassistant/components/fritzbox_callmonitor/translations/en.json +2 -2
- homeassistant/components/fritzbox_callmonitor/translations/es-419.json +0 -3
- homeassistant/components/fritzbox_callmonitor/translations/es.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/et.json +2 -2
- homeassistant/components/fritzbox_callmonitor/translations/fi.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/fr.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/ga.json +16 -0
- homeassistant/components/fritzbox_callmonitor/translations/hu.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/id.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/it.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/ja.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/ko.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/lt.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/nb.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/nl.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/pl.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/pt-BR.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/pt.json +2 -2
- homeassistant/components/fritzbox_callmonitor/translations/ro.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/ru.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/sk.json +2 -2
- homeassistant/components/fritzbox_callmonitor/translations/sv.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/tr.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/uk.json +0 -1
- homeassistant/components/fritzbox_callmonitor/translations/zh-Hans.json +2 -2
- homeassistant/components/fritzbox_callmonitor/translations/zh-Hant.json +2 -2
- homeassistant/components/fronius/translations/ga.json +69 -0
- homeassistant/components/frontend/manifest.json +1 -1
- homeassistant/components/fully_kiosk/translations/fr.json +5 -0
- homeassistant/components/fully_kiosk/translations/ga.json +26 -0
- homeassistant/components/fully_kiosk/translations/lt.json +3 -0
- homeassistant/components/fully_kiosk/translations/pt.json +3 -0
- homeassistant/components/fyta/translations/fr.json +3 -0
- homeassistant/components/fyta/translations/ga.json +1 -0
- homeassistant/components/fyta/translations/lt.json +64 -2
- homeassistant/components/fyta/translations/pt.json +64 -2
- homeassistant/components/generic/translations/ga.json +36 -0
- homeassistant/components/geofency/translations/ga.json +18 -0
- homeassistant/components/geonetnz_quakes/translations/ga.json +4 -0
- homeassistant/components/gios/translations/ga.json +2 -0
- homeassistant/components/github/translations/ga.json +23 -0
- homeassistant/components/glances/translations/ga.json +10 -0
- homeassistant/components/goalzero/translations/ga.json +3 -0
- homeassistant/components/goalzero/translations/lt.json +3 -0
- homeassistant/components/goodwe/translations/ga.json +16 -0
- homeassistant/components/google/translations/ga.json +7 -0
- homeassistant/components/google_assistant_sdk/translations/sk.json +1 -1
- homeassistant/components/google_generative_ai_conversation/translations/cs.json +3 -3
- homeassistant/components/google_generative_ai_conversation/translations/lt.json +5 -0
- homeassistant/components/google_generative_ai_conversation/translations/sk.json +1 -1
- homeassistant/components/google_mail/translations/ga.json +24 -2
- homeassistant/components/google_mail/translations/sk.json +1 -1
- homeassistant/components/google_photos/translations/sk.json +1 -1
- homeassistant/components/google_sheets/translations/ga.json +6 -0
- homeassistant/components/google_sheets/translations/sk.json +1 -1
- homeassistant/components/google_tasks/translations/sk.json +1 -1
- homeassistant/components/govee_ble/translations/ga.json +18 -0
- homeassistant/components/govee_light_local/__init__.py +16 -3
- homeassistant/components/govee_light_local/config_flow.py +28 -10
- homeassistant/components/govee_light_local/coordinator.py +39 -24
- homeassistant/components/gpslogger/translations/ga.json +1 -0
- homeassistant/components/group/translations/ga.json +31 -2
- homeassistant/components/growatt_server/translations/ga.json +127 -0
- homeassistant/components/habitica/translations/cs.json +3 -3
- homeassistant/components/habitica/translations/ga.json +7 -2
- homeassistant/components/harmony/translations/ga.json +32 -2
- homeassistant/components/hassio/translations/ga.json +51 -1
- homeassistant/components/hassio/translations/lt.json +4 -0
- homeassistant/components/hassio/translations/sk.json +1 -1
- homeassistant/components/here_travel_time/translations/ga.json +11 -0
- homeassistant/components/here_travel_time/translations/lt.json +2 -1
- homeassistant/components/hisense_aehw4a1/translations/ga.json +13 -0
- homeassistant/components/history_stats/translations/ga.json +6 -0
- homeassistant/components/history_stats/translations/sk.json +3 -3
- homeassistant/components/hive/translations/ga.json +7 -0
- homeassistant/components/home_connect/translations/ga.json +5 -1
- homeassistant/components/home_connect/translations/lt.json +21 -11
- homeassistant/components/home_connect/translations/ru.json +9 -6
- homeassistant/components/home_connect/translations/sk.json +1 -1
- homeassistant/components/homeassistant_yellow/translations/ga.json +61 -2
- homeassistant/components/homekit_controller/translations/ga.json +25 -0
- homeassistant/components/homekit_controller/translations/select.mk.json +7 -0
- homeassistant/components/homematic/translations/ga.json +26 -1
- homeassistant/components/honeywell/translations/ga.json +10 -0
- homeassistant/components/huawei_lte/translations/ga.json +16 -1
- homeassistant/components/hue/translations/ga.json +19 -0
- homeassistant/components/humidifier/translations/ga.json +31 -0
- homeassistant/components/husqvarna_automower/manifest.json +1 -1
- homeassistant/components/husqvarna_automower/translations/ca.json +3 -0
- homeassistant/components/husqvarna_automower/translations/mk.json +5 -0
- homeassistant/components/husqvarna_automower_ble/translations/ca.json +35 -0
- homeassistant/components/husqvarna_automower_ble/translations/cs.json +35 -1
- homeassistant/components/husqvarna_automower_ble/translations/el.json +4 -0
- homeassistant/components/husqvarna_automower_ble/translations/ga.json +35 -1
- homeassistant/components/husqvarna_automower_ble/translations/lt.json +35 -1
- homeassistant/components/husqvarna_automower_ble/translations/pt.json +35 -1
- homeassistant/components/hvv_departures/translations/ga.json +2 -1
- homeassistant/components/hydrawise/translations/lt.json +4 -1
- homeassistant/components/hyperion/translations/sk.json +1 -1
- homeassistant/components/iaqualink/__init__.py +10 -0
- homeassistant/components/iaqualink/entity.py +1 -0
- homeassistant/components/icloud/translations/ga.json +60 -1
- homeassistant/components/ifttt/translations/ga.json +2 -0
- homeassistant/components/imap/translations/ga.json +3 -1
- homeassistant/components/imeon_inverter/const.py +1 -0
- homeassistant/components/imeon_inverter/strings.json +1 -0
- homeassistant/components/imeon_inverter/translations/en.json +1 -0
- homeassistant/components/imeon_inverter/translations/lt.json +67 -0
- homeassistant/components/imeon_inverter/translations/pt.json +79 -0
- homeassistant/components/imeon_inverter/translations/ru.json +21 -0
- homeassistant/components/inkbird/translations/ga.json +5 -0
- homeassistant/components/input_boolean/translations/ga.json +20 -1
- homeassistant/components/input_button/translations/ga.json +16 -1
- homeassistant/components/input_datetime/translations/ga.json +37 -1
- homeassistant/components/input_number/translations/ga.json +23 -1
- homeassistant/components/insteon/translations/ga.json +6 -1
- homeassistant/components/insteon/translations/lt.json +1 -0
- homeassistant/components/insteon/translations/ru.json +1 -0
- homeassistant/components/integration/translations/ga.json +22 -2
- homeassistant/components/intellifire/translations/ga.json +15 -1
- homeassistant/components/ios/translations/ga.json +19 -0
- homeassistant/components/iotawatt/translations/ga.json +15 -0
- homeassistant/components/iperf3/translations/ga.json +2 -1
- homeassistant/components/ipma/translations/ga.json +2 -0
- homeassistant/components/iqvia/translations/ga.json +7 -0
- homeassistant/components/izone/translations/ga.json +7 -1
- homeassistant/components/jellyfin/translations/ga.json +13 -0
- homeassistant/components/justnimbus/translations/ga.json +16 -0
- homeassistant/components/jvc_projector/translations/ga.json +1 -0
- homeassistant/components/kaleidescape/translations/ga.json +3 -0
- homeassistant/components/keba/translations/lt.json +1 -0
- homeassistant/components/keba/translations/ru.json +1 -0
- homeassistant/components/kitchen_sink/translations/ga.json +3 -0
- homeassistant/components/kmtronic/translations/ga.json +22 -0
- homeassistant/components/knx/translations/ga.json +100 -2
- homeassistant/components/knx/translations/lt.json +270 -0
- homeassistant/components/knx/translations/pt.json +270 -0
- homeassistant/components/konnected/translations/ga.json +3 -1
- homeassistant/components/kostal_plenticore/translations/ga.json +7 -0
- homeassistant/components/kraken/translations/ga.json +20 -0
- homeassistant/components/kulersky/translations/ga.json +3 -0
- homeassistant/components/lacrosse_view/translations/ga.json +25 -0
- homeassistant/components/lametric/translations/ga.json +1 -0
- homeassistant/components/lametric/translations/lt.json +1 -0
- homeassistant/components/landisgyr_heat_meter/translations/ga.json +15 -0
- homeassistant/components/launch_library/translations/lt.json +7 -0
- homeassistant/components/laundrify/translations/lt.json +2 -1
- homeassistant/components/lawn_mower/translations/ga.json +6 -0
- homeassistant/components/lcn/translations/ga.json +52 -3
- homeassistant/components/lcn/translations/lt.json +2 -0
- homeassistant/components/lcn/translations/ru.json +1 -0
- homeassistant/components/leaone/translations/ru.json +2 -1
- homeassistant/components/lg_thinq/translations/el.json +3 -0
- homeassistant/components/lg_thinq/translations/ga.json +5 -0
- homeassistant/components/lg_thinq/translations/lt.json +7 -0
- homeassistant/components/lg_thinq/translations/pt.json +4 -0
- homeassistant/components/lg_thinq/translations/ru.json +5 -0
- homeassistant/components/lidarr/translations/ga.json +16 -0
- homeassistant/components/lifx/translations/ga.json +1 -0
- homeassistant/components/light/translations/ga.json +132 -1
- homeassistant/components/litterrobot/translations/ga.json +6 -0
- homeassistant/components/litterrobot/translations/sensor.ga.json +14 -1
- homeassistant/components/livisi/translations/ga.json +18 -0
- homeassistant/components/local_calendar/translations/ga.json +5 -2
- homeassistant/components/local_ip/translations/ga.json +9 -0
- homeassistant/components/lock/translations/pl.json +1 -0
- homeassistant/components/logbook/translations/ko.json +2 -1
- homeassistant/components/lookin/translations/ga.json +1 -0
- homeassistant/components/lutron_caseta/translations/ga.json +34 -1
- homeassistant/components/lyric/translations/sk.json +1 -1
- homeassistant/components/mastodon/__init__.py +13 -2
- homeassistant/components/mastodon/config_flow.py +7 -2
- homeassistant/components/mastodon/diagnostics.py +8 -3
- homeassistant/components/matter/translations/ga.json +22 -0
- homeassistant/components/matter/translations/lt.json +45 -0
- homeassistant/components/matter/translations/pt.json +27 -0
- homeassistant/components/matter/translations/sr-Latn.json +15 -0
- homeassistant/components/matter/translations/sr.json +15 -0
- homeassistant/components/meater/translations/ga.json +9 -0
- homeassistant/components/media_extractor/translations/ga.json +14 -0
- homeassistant/components/media_player/services.yaml +1 -3
- homeassistant/components/media_player/translations/cs.json +5 -0
- homeassistant/components/media_player/translations/el.json +5 -0
- homeassistant/components/media_player/translations/fr.json +3 -0
- homeassistant/components/media_player/translations/ga.json +35 -0
- homeassistant/components/media_player/translations/lt.json +6 -1
- homeassistant/components/media_player/translations/pt.json +5 -0
- homeassistant/components/media_player/translations/ru.json +5 -0
- homeassistant/components/media_player/translations/sk.json +1 -0
- homeassistant/components/media_player/translations/zh-Hans.json +1 -0
- homeassistant/components/media_player/translations/zh-Hant.json +1 -0
- homeassistant/components/met/translations/ga.json +34 -0
- homeassistant/components/met_eireann/translations/ga.json +15 -0
- homeassistant/components/meteo_france/const.py +1 -1
- homeassistant/components/metoffice/translations/sk.json +1 -1
- homeassistant/components/metoffice/translations/sr-Latn.json +1 -0
- homeassistant/components/metoffice/translations/sr.json +1 -0
- homeassistant/components/miele/translations/ga.json +2 -1
- homeassistant/components/miele/translations/lt.json +36 -0
- homeassistant/components/miele/translations/pt.json +12 -0
- homeassistant/components/miele/translations/sk.json +8 -8
- homeassistant/components/mill/translations/ga.json +35 -0
- homeassistant/components/minecraft_server/translations/ga.json +12 -0
- homeassistant/components/minio/translations/ga.json +30 -0
- homeassistant/components/mjpeg/translations/lt.json +1 -0
- homeassistant/components/modbus/entity.py +4 -1
- homeassistant/components/modbus/translations/lt.json +2 -0
- homeassistant/components/modbus/translations/ru.json +2 -0
- homeassistant/components/modbus/translations/sk.json +1 -1
- homeassistant/components/modern_forms/translations/ga.json +20 -0
- homeassistant/components/moehlenhoff_alpha2/translations/ga.json +7 -0
- homeassistant/components/moon/translations/ga.json +10 -3
- homeassistant/components/moon/translations/sensor.ga.json +14 -0
- homeassistant/components/mopeka/translations/ga.json +12 -2
- homeassistant/components/motion_blinds/translations/ga.json +3 -0
- homeassistant/components/mqtt/translations/ca.json +11 -0
- homeassistant/components/mqtt/translations/cs.json +52 -0
- homeassistant/components/mqtt/translations/el.json +19 -0
- homeassistant/components/mqtt/translations/fr.json +11 -0
- homeassistant/components/mqtt/translations/ga.json +84 -4
- homeassistant/components/mqtt/translations/lt.json +66 -1
- homeassistant/components/mqtt/translations/nl.json +68 -0
- homeassistant/components/mqtt/translations/pt.json +81 -0
- homeassistant/components/mqtt/translations/ru.json +15 -0
- homeassistant/components/mqtt/translations/sk.json +8 -8
- homeassistant/components/mqtt/translations/zh-Hans.json +1 -0
- homeassistant/components/mysensors/translations/ga.json +17 -0
- homeassistant/components/mystrom/translations/ga.json +2 -1
- homeassistant/components/nam/translations/ga.json +26 -0
- homeassistant/components/nest/translations/ga.json +44 -3
- homeassistant/components/nest/translations/lt.json +3 -0
- homeassistant/components/nest/translations/sk.json +2 -2
- homeassistant/components/netatmo/translations/ga.json +5 -1
- homeassistant/components/netatmo/translations/sr-Latn.json +16 -0
- homeassistant/components/netatmo/translations/sr.json +16 -0
- homeassistant/components/nexia/manifest.json +1 -1
- homeassistant/components/nexia/translations/ga.json +8 -0
- homeassistant/components/nextcloud/translations/ga.json +14 -0
- homeassistant/components/nextcloud/translations/mk.json +13 -0
- homeassistant/components/nextdns/translations/ga.json +107 -0
- homeassistant/components/nextdns/translations/lt.json +3 -0
- homeassistant/components/nextdns/translations/sr.json +11 -0
- homeassistant/components/nfandroidtv/translations/ga.json +13 -1
- homeassistant/components/nibe_heatpump/translations/ga.json +5 -0
- homeassistant/components/nightscout/translations/ga.json +10 -0
- homeassistant/components/niko_home_control/translations/el.json +10 -1
- homeassistant/components/niko_home_control/translations/ga.json +10 -1
- homeassistant/components/niko_home_control/translations/lt.json +10 -1
- homeassistant/components/niko_home_control/translations/pt.json +10 -1
- homeassistant/components/nina/translations/ga.json +38 -2
- homeassistant/components/nissan_leaf/translations/ga.json +7 -0
- homeassistant/components/nobo_hub/translations/ga.json +29 -0
- homeassistant/components/notify/translations/ga.json +7 -1
- homeassistant/components/notion/translations/ga.json +49 -0
- homeassistant/components/nuheat/translations/ga.json +21 -0
- homeassistant/components/number/translations/ga.json +15 -1
- homeassistant/components/nut/translations/ga.json +131 -1
- homeassistant/components/nws/translations/ga.json +11 -0
- homeassistant/components/nws/translations/sr-Latn.json +9 -0
- homeassistant/components/nws/translations/sr.json +9 -0
- homeassistant/components/nx584/translations/ga.json +13 -1
- homeassistant/components/nzbget/translations/ga.json +23 -0
- homeassistant/components/nzbget/translations/lt.json +6 -0
- homeassistant/components/nzbget/translations/ru.json +6 -0
- homeassistant/components/obihai/translations/ga.json +19 -1
- homeassistant/components/octoprint/translations/ga.json +3 -0
- homeassistant/components/ollama/translations/cs.json +3 -3
- homeassistant/components/ollama/translations/lt.json +10 -0
- homeassistant/components/oncue/translations/ru.json +8 -1
- homeassistant/components/ondilo_ico/translations/ga.json +7 -1
- homeassistant/components/onewire/translations/ga.json +57 -1
- homeassistant/components/onewire/translations/lt.json +3 -0
- homeassistant/components/onvif/binary_sensor.py +1 -1
- homeassistant/components/onvif/sensor.py +1 -1
- homeassistant/components/onvif/translations/ga.json +42 -1
- homeassistant/components/open_meteo/translations/ga.json +15 -0
- homeassistant/components/open_router/translations/cs.json +2 -2
- homeassistant/components/open_router/translations/lt.json +7 -1
- homeassistant/components/openai_conversation/translations/cs.json +3 -3
- homeassistant/components/openai_conversation/translations/ga.json +12 -0
- homeassistant/components/openai_conversation/translations/lt.json +5 -0
- homeassistant/components/openhome/translations/ga.json +7 -0
- homeassistant/components/opentherm_gw/translations/ga.json +100 -2
- homeassistant/components/openuv/translations/ga.json +33 -0
- homeassistant/components/openweathermap/translations/ga.json +32 -0
- homeassistant/components/openweathermap/translations/sr-Latn.json +16 -0
- homeassistant/components/openweathermap/translations/sr.json +16 -0
- homeassistant/components/opower/manifest.json +1 -1
- homeassistant/components/opower/translations/ga.json +11 -2
- homeassistant/components/opower/translations/lt.json +7 -1
- homeassistant/components/opower/translations/sk.json +1 -1
- homeassistant/components/overkiz/translations/ga.json +71 -3
- homeassistant/components/overkiz/translations/select.ga.json +1 -0
- homeassistant/components/overkiz/translations/sensor.ga.json +29 -1
- homeassistant/components/ovo_energy/translations/ga.json +14 -1
- homeassistant/components/p1_monitor/translations/ga.json +22 -0
- homeassistant/components/panasonic_viera/translations/ga.json +30 -0
- homeassistant/components/peco/translations/ga.json +2 -0
- homeassistant/components/pegel_online/translations/ga.json +18 -0
- homeassistant/components/person/translations/ga.json +15 -0
- homeassistant/components/pi_hole/translations/ga.json +29 -0
- homeassistant/components/picnic/translations/ga.json +41 -0
- homeassistant/components/plaato/translations/ga.json +13 -0
- homeassistant/components/plant/translations/ga.json +12 -0
- homeassistant/components/playstation_network/__init__.py +4 -1
- homeassistant/components/playstation_network/config_flow.py +4 -13
- homeassistant/components/playstation_network/coordinator.py +55 -8
- homeassistant/components/playstation_network/helpers.py +4 -1
- homeassistant/components/playstation_network/notify.py +52 -27
- homeassistant/components/playstation_network/strings.json +11 -5
- homeassistant/components/playstation_network/translations/bg.json +0 -5
- homeassistant/components/playstation_network/translations/ca.json +7 -0
- homeassistant/components/playstation_network/translations/cs.json +11 -5
- homeassistant/components/playstation_network/translations/de.json +11 -5
- homeassistant/components/playstation_network/translations/el.json +54 -0
- homeassistant/components/playstation_network/translations/en-GB.json +11 -5
- homeassistant/components/playstation_network/translations/en.json +11 -5
- homeassistant/components/playstation_network/translations/es.json +1 -13
- homeassistant/components/playstation_network/translations/et.json +11 -5
- homeassistant/components/playstation_network/translations/fr.json +1 -1
- homeassistant/components/playstation_network/translations/ga.json +6 -17
- homeassistant/components/playstation_network/translations/it.json +1 -1
- homeassistant/components/playstation_network/translations/lt.json +17 -5
- homeassistant/components/playstation_network/translations/pt.json +11 -5
- homeassistant/components/playstation_network/translations/sk.json +11 -5
- homeassistant/components/playstation_network/translations/zh-Hans.json +11 -5
- homeassistant/components/playstation_network/translations/zh-Hant.json +11 -5
- homeassistant/components/plex/translations/ga.json +40 -0
- homeassistant/components/plugwise/translations/ga.json +105 -0
- homeassistant/components/plugwise/translations/select.ga.json +17 -0
- homeassistant/components/plum_lightpad/translations/ga.json +18 -0
- homeassistant/components/point/translations/ga.json +4 -0
- homeassistant/components/pooldose/translations/ca.json +56 -0
- homeassistant/components/pooldose/translations/el.json +48 -0
- homeassistant/components/pooldose/translations/ga.json +32 -0
- homeassistant/components/pooldose/translations/lt.json +102 -0
- homeassistant/components/pooldose/translations/nl.json +7 -2
- homeassistant/components/pooldose/translations/pt.json +102 -0
- homeassistant/components/poolsense/translations/ga.json +16 -0
- homeassistant/components/powerwall/translations/ga.json +35 -0
- homeassistant/components/profiler/translations/cs.json +2 -2
- homeassistant/components/profiler/translations/ga.json +11 -0
- homeassistant/components/progettihwsw/translations/ga.json +24 -1
- homeassistant/components/prosegur/translations/ga.json +39 -0
- homeassistant/components/prusalink/translations/sensor.ga.json +7 -0
- homeassistant/components/ps4/translations/ga.json +40 -0
- homeassistant/components/pure_energie/translations/ga.json +39 -0
- homeassistant/components/purpleair/manifest.json +1 -1
- homeassistant/components/purpleair/translations/ga.json +42 -0
- homeassistant/components/pushbullet/translations/ga.json +44 -0
- homeassistant/components/pushover/translations/ga.json +28 -0
- homeassistant/components/pvoutput/translations/ga.json +46 -0
- homeassistant/components/pvpc_hourly_pricing/translations/ga.json +1 -0
- homeassistant/components/qbus/translations/lt.json +8 -0
- homeassistant/components/radarr/translations/ga.json +40 -0
- homeassistant/components/radio_browser/translations/ga.json +9 -0
- homeassistant/components/radiotherm/translations/ga.json +23 -0
- homeassistant/components/rainbird/translations/ga.json +18 -2
- homeassistant/components/rainbird/translations/lt.json +4 -0
- homeassistant/components/rainbird/translations/ru.json +4 -0
- homeassistant/components/rainmachine/translations/ga.json +99 -4
- homeassistant/components/rainmachine/translations/sr-Latn.json +55 -0
- homeassistant/components/rainmachine/translations/sr.json +55 -0
- homeassistant/components/random/translations/ga.json +1 -0
- homeassistant/components/random/translations/lt.json +1 -0
- homeassistant/components/rapt_ble/translations/ga.json +21 -0
- homeassistant/components/rdw/translations/ga.json +36 -0
- homeassistant/components/recollect_waste/translations/ga.json +38 -0
- homeassistant/components/recorder/translations/cs.json +2 -2
- homeassistant/components/recorder/translations/ga.json +11 -0
- homeassistant/components/remember_the_milk/translations/cs.json +7 -7
- homeassistant/components/renault/translations/ga.json +76 -0
- homeassistant/components/reolink/manifest.json +1 -1
- homeassistant/components/reolink/number.py +3 -4
- homeassistant/components/reolink/select.py +0 -1
- homeassistant/components/reolink/translations/cs.json +14 -14
- homeassistant/components/reolink/translations/fr.json +3 -0
- homeassistant/components/reolink/translations/ga.json +47 -5
- homeassistant/components/reolink/translations/lt.json +9 -0
- homeassistant/components/reolink/translations/pt.json +9 -0
- homeassistant/components/rfxtrx/translations/ga.json +30 -0
- homeassistant/components/roborock/translations/sk.json +9 -9
- homeassistant/components/samsungtv/translations/lt.json +1 -0
- homeassistant/components/sensibo/translations/ga.json +4 -2
- homeassistant/components/sensibo/translations/lt.json +22 -0
- homeassistant/components/sensibo/translations/sensor.ga.json +7 -0
- homeassistant/components/sensor/translations/ga.json +3 -0
- homeassistant/components/sensor/translations/sk.json +1 -1
- homeassistant/components/shopping_list/translations/sr-Latn.json +11 -0
- homeassistant/components/shopping_list/translations/sr.json +11 -0
- homeassistant/components/sleep_as_android/translations/de.json +1 -1
- homeassistant/components/sleepiq/translations/lt.json +1 -0
- homeassistant/components/smartthings/translations/ru.json +9 -0
- homeassistant/components/snapcast/translations/sk.json +2 -2
- homeassistant/components/sonos/translations/lt.json +15 -0
- homeassistant/components/sonos/translations/pt.json +15 -0
- homeassistant/components/sun/translations/sk.json +1 -1
- homeassistant/components/switchbot_cloud/translations/lt.json +16 -0
- homeassistant/components/switchbot_cloud/translations/pt.json +16 -0
- homeassistant/components/tado/translations/sr-Latn.json +9 -0
- homeassistant/components/tado/translations/sr.json +9 -0
- homeassistant/components/tautulli/translations/sk.json +1 -1
- homeassistant/components/tellduslive/translations/ru.json +4 -0
- homeassistant/components/template/translations/el.json +50 -0
- homeassistant/components/template/translations/ga.json +1 -0
- homeassistant/components/template/translations/lt.json +196 -13
- homeassistant/components/template/translations/pl.json +140 -7
- homeassistant/components/template/translations/pt.json +149 -0
- homeassistant/components/template/translations/ru.json +8 -0
- homeassistant/components/template/translations/sk.json +6 -6
- homeassistant/components/template/translations/sv.json +31 -8
- homeassistant/components/tesla_fleet/__init__.py +0 -1
- homeassistant/components/teslemetry/translations/lt.json +4 -0
- homeassistant/components/teslemetry/translations/mk.json +5 -0
- homeassistant/components/togrill/translations/fr.json +4 -0
- homeassistant/components/togrill/translations/lt.json +49 -0
- homeassistant/components/togrill/translations/pt.json +49 -0
- homeassistant/components/tomorrowio/translations/lt.json +5 -1
- homeassistant/components/tplink/translations/lt.json +6 -2
- homeassistant/components/trafikverket_weatherstation/translations/sr-Latn.json +29 -0
- homeassistant/components/trafikverket_weatherstation/translations/sr.json +29 -0
- homeassistant/components/triggercmd/__init__.py +6 -2
- homeassistant/components/triggercmd/config_flow.py +3 -1
- homeassistant/components/triggercmd/manifest.json +1 -1
- homeassistant/components/triggercmd/switch.py +1 -0
- homeassistant/components/tts/translations/cs.json +1 -1
- homeassistant/components/tuya/translations/ga.json +8 -0
- homeassistant/components/tuya/translations/lt.json +1 -0
- homeassistant/components/tuya/translations/pl.json +1 -1
- homeassistant/components/tuya/translations/select.ga.json +4 -0
- homeassistant/components/unifiprotect/translations/ga.json +8 -0
- homeassistant/components/unifiprotect/translations/lt.json +6 -1
- homeassistant/components/vallox/translations/lt.json +5 -0
- homeassistant/components/velux/translations/cs.json +7 -0
- homeassistant/components/velux/translations/lt.json +7 -0
- homeassistant/components/velux/translations/nl.json +7 -0
- homeassistant/components/velux/translations/pt.json +7 -0
- homeassistant/components/volvo/translations/lt.json +173 -1
- homeassistant/components/volvo/translations/pt.json +137 -0
- homeassistant/components/volvo/translations/sk.json +1 -1
- homeassistant/components/wallbox/translations/sk.json +1 -1
- homeassistant/components/waze_travel_time/translations/lt.json +2 -0
- homeassistant/components/weather/translations/ga.json +3 -0
- homeassistant/components/weather/translations/sr-Latn.json +24 -7
- homeassistant/components/weather/translations/sr.json +81 -0
- homeassistant/components/weatherflow_cloud/translations/sr-Latn.json +18 -0
- homeassistant/components/weatherflow_cloud/translations/sr.json +18 -0
- homeassistant/components/webostv/translations/lt.json +11 -4
- homeassistant/components/webostv/translations/ru.json +9 -2
- homeassistant/components/websocket_api/http.py +13 -2
- homeassistant/components/withings/translations/sk.json +1 -1
- homeassistant/components/xiaomi_miio/translations/lt.json +3 -0
- homeassistant/components/yalexs_ble/__init__.py +37 -7
- homeassistant/components/yalexs_ble/config_cache.py +31 -0
- homeassistant/components/yalexs_ble/config_flow.py +80 -35
- homeassistant/components/yalexs_ble/strings.json +10 -5
- homeassistant/components/yalexs_ble/translations/bg.json +1 -7
- homeassistant/components/yalexs_ble/translations/ca.json +2 -12
- homeassistant/components/yalexs_ble/translations/cs.json +2 -12
- homeassistant/components/yalexs_ble/translations/de.json +10 -5
- homeassistant/components/yalexs_ble/translations/el.json +2 -12
- homeassistant/components/yalexs_ble/translations/en-GB.json +9 -4
- homeassistant/components/yalexs_ble/translations/en.json +10 -5
- homeassistant/components/yalexs_ble/translations/es.json +2 -12
- homeassistant/components/yalexs_ble/translations/et.json +2 -12
- homeassistant/components/yalexs_ble/translations/fi.json +2 -12
- homeassistant/components/yalexs_ble/translations/fr.json +1 -2
- homeassistant/components/yalexs_ble/translations/hu.json +2 -12
- homeassistant/components/yalexs_ble/translations/id.json +2 -12
- homeassistant/components/yalexs_ble/translations/it.json +2 -12
- homeassistant/components/yalexs_ble/translations/ja.json +2 -12
- homeassistant/components/yalexs_ble/translations/ko.json +2 -12
- homeassistant/components/yalexs_ble/translations/lt.json +2 -12
- homeassistant/components/yalexs_ble/translations/lv.json +1 -7
- homeassistant/components/yalexs_ble/translations/nb.json +2 -12
- homeassistant/components/yalexs_ble/translations/nl.json +2 -12
- homeassistant/components/yalexs_ble/translations/pl.json +2 -12
- homeassistant/components/yalexs_ble/translations/pt-BR.json +2 -12
- homeassistant/components/yalexs_ble/translations/pt.json +2 -12
- homeassistant/components/yalexs_ble/translations/ro.json +2 -12
- homeassistant/components/yalexs_ble/translations/ru.json +2 -12
- homeassistant/components/yalexs_ble/translations/sk.json +2 -12
- homeassistant/components/yalexs_ble/translations/sv.json +2 -12
- homeassistant/components/yalexs_ble/translations/tr.json +2 -12
- homeassistant/components/yalexs_ble/translations/uk.json +2 -12
- homeassistant/components/yalexs_ble/translations/vi.json +0 -9
- homeassistant/components/yalexs_ble/translations/zh-Hans.json +2 -12
- homeassistant/components/yalexs_ble/translations/zh-Hant.json +10 -5
- homeassistant/components/yolink/translations/lt.json +13 -0
- homeassistant/components/yolink/translations/pt.json +13 -0
- homeassistant/components/zha/translations/fr.json +48 -0
- homeassistant/components/zha/translations/lt.json +69 -0
- homeassistant/components/zha/translations/pl.json +3 -0
- homeassistant/components/zha/translations/pt.json +69 -0
- homeassistant/components/zha/translations/sk.json +3 -3
- homeassistant/components/zwave_js/binary_sensor.py +14 -6
- homeassistant/components/zwave_js/translations/lt.json +10 -0
- homeassistant/components/zwave_js/translations/pt.json +10 -0
- homeassistant/components/zwave_js/translations/ru.json +3 -1
- homeassistant/components/zwave_js/translations/sk.json +2 -2
- homeassistant/components/zwave_me/translations/sk.json +1 -1
- homeassistant/const.py +1 -1
- homeassistant/generated/integrations.json +6 -0
- homeassistant/helpers/device_registry.py +37 -14
- homeassistant/helpers/entity_registry.py +68 -29
- homeassistant/package_constraints.txt +9 -5
- {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b2.dist-info}/METADATA +1 -1
- {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b2.dist-info}/RECORD +674 -602
- {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b2.dist-info}/WHEEL +0 -0
- {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b2.dist-info}/entry_points.txt +0 -0
- {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b2.dist-info}/licenses/LICENSE.md +0 -0
- {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b2.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
- {homeassistant-2025.9.0b0.dist-info → homeassistant-2025.9.0b2.dist-info}/top_level.txt +0 -0
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
"already_configured": "\u042d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0432 Home Assistant",
|
|
5
5
|
"already_in_progress": "\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f",
|
|
6
6
|
"reauth_successful": "\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e",
|
|
7
|
-
"reconfigure_successful": "\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e"
|
|
7
|
+
"reconfigure_successful": "\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e",
|
|
8
|
+
"wrong_device": "\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u043c \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0438\u043c\u0435\u043d\u0438 \u0445\u043e\u0441\u0442\u0430 \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441\u0443."
|
|
8
9
|
},
|
|
9
10
|
"error": {
|
|
10
11
|
"cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043b\u0438 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443.",
|
|
@@ -50,6 +51,9 @@
|
|
|
50
51
|
"device_off": {
|
|
51
52
|
"message": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 {func} \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 {name}: \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0438 \u0438\u043c \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c."
|
|
52
53
|
},
|
|
54
|
+
"invalid_entity_id": {
|
|
55
|
+
"message": "\u041e\u0431\u044a\u0435\u043a\u0442 {entity_id} \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c webOS TV."
|
|
56
|
+
},
|
|
53
57
|
"notify_communication_error": {
|
|
54
58
|
"message": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u0432\u044f\u0437\u0438 \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e {name}: {error}"
|
|
55
59
|
},
|
|
@@ -96,6 +100,7 @@
|
|
|
96
100
|
"name": "\u041a\u043d\u043e\u043f\u043a\u0430"
|
|
97
101
|
},
|
|
98
102
|
"entity_id": {
|
|
103
|
+
"description": "\u0418\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 webOS TV, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434 API.",
|
|
99
104
|
"name": "\u041e\u0431\u044a\u0435\u043a\u0442"
|
|
100
105
|
}
|
|
101
106
|
},
|
|
@@ -109,10 +114,11 @@
|
|
|
109
114
|
"name": "\u041a\u043e\u043c\u0430\u043d\u0434\u0430"
|
|
110
115
|
},
|
|
111
116
|
"entity_id": {
|
|
112
|
-
"description": "\u0418\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432
|
|
117
|
+
"description": "\u0418\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 webOS TV, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434 API.",
|
|
113
118
|
"name": "\u041e\u0431\u044a\u0435\u043a\u0442"
|
|
114
119
|
},
|
|
115
120
|
"payload": {
|
|
121
|
+
"description": "\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u0430\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043f\u0430\u0440\u044b \u043a\u043b\u044e\u0447-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.",
|
|
116
122
|
"name": "\u041f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430"
|
|
117
123
|
}
|
|
118
124
|
},
|
|
@@ -122,6 +128,7 @@
|
|
|
122
128
|
"description": "\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u0430.",
|
|
123
129
|
"fields": {
|
|
124
130
|
"entity_id": {
|
|
131
|
+
"description": "\u0418\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 webOS TV, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u0432\u044b\u0445\u043e\u0434.",
|
|
125
132
|
"name": "\u041e\u0431\u044a\u0435\u043a\u0442"
|
|
126
133
|
},
|
|
127
134
|
"sound_output": {
|
|
@@ -37,6 +37,7 @@ from .messages import message_to_json_bytes
|
|
|
37
37
|
from .util import describe_request
|
|
38
38
|
|
|
39
39
|
CLOSE_MSG_TYPES = {WSMsgType.CLOSE, WSMsgType.CLOSED, WSMsgType.CLOSING}
|
|
40
|
+
AUTH_MESSAGE_TIMEOUT = 10 # seconds
|
|
40
41
|
|
|
41
42
|
if TYPE_CHECKING:
|
|
42
43
|
from .connection import ActiveConnection
|
|
@@ -389,9 +390,11 @@ class WebSocketHandler:
|
|
|
389
390
|
|
|
390
391
|
# Auth Phase
|
|
391
392
|
try:
|
|
392
|
-
msg = await self._wsock.receive(
|
|
393
|
+
msg = await self._wsock.receive(AUTH_MESSAGE_TIMEOUT)
|
|
393
394
|
except TimeoutError as err:
|
|
394
|
-
raise Disconnect(
|
|
395
|
+
raise Disconnect(
|
|
396
|
+
f"Did not receive auth message within {AUTH_MESSAGE_TIMEOUT} seconds"
|
|
397
|
+
) from err
|
|
395
398
|
|
|
396
399
|
if msg.type in (WSMsgType.CLOSE, WSMsgType.CLOSED, WSMsgType.CLOSING):
|
|
397
400
|
raise Disconnect("Received close message during auth phase")
|
|
@@ -538,6 +541,14 @@ class WebSocketHandler:
|
|
|
538
541
|
finally:
|
|
539
542
|
if disconnect_warn is None:
|
|
540
543
|
logger.debug("%s: Disconnected", self.description)
|
|
544
|
+
elif connection is None:
|
|
545
|
+
# Auth phase disconnects (connection is None) should be logged at debug level
|
|
546
|
+
# as they can be from random port scanners or non-legitimate connections
|
|
547
|
+
logger.debug(
|
|
548
|
+
"%s: Disconnected during auth phase: %s",
|
|
549
|
+
self.description,
|
|
550
|
+
disconnect_warn,
|
|
551
|
+
)
|
|
541
552
|
else:
|
|
542
553
|
logger.warning(
|
|
543
554
|
"%s: Disconnected: %s", self.description, disconnect_warn
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"application_credentials": {
|
|
3
|
-
"description": "Aby ste sa mohli prihl\u00e1si\u0165 do syst\u00e9mu Withings, potrebujeme klientske ID a tajomstvo. Ak ich chcete z\u00edska\u0165, postupujte pod\u013ea nasleduj\u00facich krokov.
|
|
3
|
+
"description": "Aby ste sa mohli prihl\u00e1si\u0165 do syst\u00e9mu Withings, potrebujeme klientske ID a tajomstvo. Ak ich chcete z\u00edska\u0165, postupujte pod\u013ea nasleduj\u00facich krokov. \n\n1. Prejdite na [Withings Developer Dashboard]({developer_dashboard_url}) a uistite sa, \u017ee ste vybrali Verejn\u00fd cloud. \n1. Prejdite na [Withings Developer Dashboard]( ). Prihl\u00e1ste sa pomocou svojho \u00fa\u010dtu Withings. \n1. Vyberte polo\u017eku **Vytvori\u0165 aplik\u00e1ciu**. \n1. Vyberte polo\u017eku **Vytvori\u0165 aplik\u00e1ciu**. \n1. Za\u010diarknite pol\u00ed\u010dko **Verejn\u00e1 integr\u00e1cia API**. \n1. Za\u010diarknite pol\u00ed\u010dko **Verejn\u00e1 integr\u00e1cia API**. Ako cie\u013eov\u00e9 prostredie vyberte **V\u00fdvoj**. \n1. Vypl\u0148te n\u00e1zov a popis aplik\u00e1cie pod\u013ea vlastn\u00e9ho v\u00fdberu. \n1. Vypl\u0148te `{redirect_url}` pre registrovan\u00fa adresu URL. Uistite sa, \u017ee nestla\u010d\u00edte tla\u010didlo na testovanie. \n1. Kliknite na tla\u010didlo . Vypl\u0148te ID klienta a tajn\u00e9 \u00fadaje, ktor\u00e9 s\u00fa teraz k dispoz\u00edcii."
|
|
4
4
|
},
|
|
5
5
|
"config": {
|
|
6
6
|
"abort": {
|
|
@@ -19,6 +19,7 @@ from homeassistant.const import CONF_ADDRESS, EVENT_HOMEASSISTANT_STOP, Platform
|
|
|
19
19
|
from homeassistant.core import CALLBACK_TYPE, CoreState, Event, HomeAssistant, callback
|
|
20
20
|
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
|
|
21
21
|
|
|
22
|
+
from .config_cache import async_get_validated_config
|
|
22
23
|
from .const import (
|
|
23
24
|
CONF_ALWAYS_CONNECTED,
|
|
24
25
|
CONF_KEY,
|
|
@@ -96,13 +97,30 @@ async def async_setup_entry(hass: HomeAssistant, entry: YALEXSBLEConfigEntry) ->
|
|
|
96
97
|
)
|
|
97
98
|
|
|
98
99
|
try:
|
|
99
|
-
await push_lock
|
|
100
|
-
except
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
100
|
+
await _async_wait_for_first_update(push_lock, local_name)
|
|
101
|
+
except ConfigEntryAuthFailed:
|
|
102
|
+
# If key has rotated, try to fetch it from the cache
|
|
103
|
+
# and update
|
|
104
|
+
if (validated_config := async_get_validated_config(hass, address)) and (
|
|
105
|
+
validated_config.key != entry.data[CONF_KEY]
|
|
106
|
+
or validated_config.slot != entry.data[CONF_SLOT]
|
|
107
|
+
):
|
|
108
|
+
assert shutdown_callback is not None
|
|
109
|
+
shutdown_callback()
|
|
110
|
+
push_lock.set_lock_key(validated_config.key, validated_config.slot)
|
|
111
|
+
shutdown_callback = await push_lock.start()
|
|
112
|
+
await _async_wait_for_first_update(push_lock, local_name)
|
|
113
|
+
# If we can use the cached key and slot, update the entry.
|
|
114
|
+
hass.config_entries.async_update_entry(
|
|
115
|
+
entry,
|
|
116
|
+
data={
|
|
117
|
+
**entry.data,
|
|
118
|
+
CONF_KEY: validated_config.key,
|
|
119
|
+
CONF_SLOT: validated_config.slot,
|
|
120
|
+
},
|
|
121
|
+
)
|
|
122
|
+
else:
|
|
123
|
+
raise
|
|
106
124
|
|
|
107
125
|
entry.runtime_data = YaleXSBLEData(entry.title, push_lock, always_connected)
|
|
108
126
|
|
|
@@ -147,6 +165,18 @@ async def _async_update_listener(
|
|
|
147
165
|
await hass.config_entries.async_reload(entry.entry_id)
|
|
148
166
|
|
|
149
167
|
|
|
168
|
+
async def _async_wait_for_first_update(push_lock: PushLock, local_name: str) -> None:
|
|
169
|
+
"""Wait for the first update from the push lock."""
|
|
170
|
+
try:
|
|
171
|
+
await push_lock.wait_for_first_update(DEVICE_TIMEOUT)
|
|
172
|
+
except AuthError as ex:
|
|
173
|
+
raise ConfigEntryAuthFailed(str(ex)) from ex
|
|
174
|
+
except (YaleXSBLEError, TimeoutError) as ex:
|
|
175
|
+
raise ConfigEntryNotReady(
|
|
176
|
+
f"{ex}; Try moving the Bluetooth adapter closer to {local_name}"
|
|
177
|
+
) from ex
|
|
178
|
+
|
|
179
|
+
|
|
150
180
|
async def async_unload_entry(hass: HomeAssistant, entry: YALEXSBLEConfigEntry) -> bool:
|
|
151
181
|
"""Unload a config entry."""
|
|
152
182
|
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""The Yale Access Bluetooth integration."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from yalexs_ble import ValidatedLockConfig
|
|
6
|
+
|
|
7
|
+
from homeassistant.core import HomeAssistant, callback
|
|
8
|
+
from homeassistant.util.hass_dict import HassKey
|
|
9
|
+
|
|
10
|
+
CONFIG_CACHE: HassKey[dict[str, ValidatedLockConfig]] = HassKey(
|
|
11
|
+
"yalexs_ble_config_cache"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@callback
|
|
16
|
+
def async_add_validated_config(
|
|
17
|
+
hass: HomeAssistant,
|
|
18
|
+
address: str,
|
|
19
|
+
config: ValidatedLockConfig,
|
|
20
|
+
) -> None:
|
|
21
|
+
"""Add a validated config."""
|
|
22
|
+
hass.data.setdefault(CONFIG_CACHE, {})[address] = config
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@callback
|
|
26
|
+
def async_get_validated_config(
|
|
27
|
+
hass: HomeAssistant,
|
|
28
|
+
address: str,
|
|
29
|
+
) -> ValidatedLockConfig | None:
|
|
30
|
+
"""Get the config for a specific address."""
|
|
31
|
+
return hass.data.get(CONFIG_CACHE, {}).get(address)
|
|
@@ -33,6 +33,7 @@ from homeassistant.core import callback
|
|
|
33
33
|
from homeassistant.data_entry_flow import AbortFlow
|
|
34
34
|
from homeassistant.helpers.typing import DiscoveryInfoType
|
|
35
35
|
|
|
36
|
+
from .config_cache import async_add_validated_config, async_get_validated_config
|
|
36
37
|
from .const import CONF_ALWAYS_CONNECTED, CONF_KEY, CONF_LOCAL_NAME, CONF_SLOT, DOMAIN
|
|
37
38
|
from .util import async_find_existing_service_info, human_readable_name
|
|
38
39
|
|
|
@@ -92,7 +93,10 @@ class YalexsConfigFlow(ConfigFlow, domain=DOMAIN):
|
|
|
92
93
|
None, discovery_info.name, discovery_info.address
|
|
93
94
|
),
|
|
94
95
|
}
|
|
95
|
-
|
|
96
|
+
if lock_cfg := async_get_validated_config(self.hass, discovery_info.address):
|
|
97
|
+
self._lock_cfg = lock_cfg
|
|
98
|
+
return await self.async_step_integration_discovery_confirm()
|
|
99
|
+
return await self.async_step_key_slot()
|
|
96
100
|
|
|
97
101
|
async def async_step_integration_discovery(
|
|
98
102
|
self, discovery_info: DiscoveryInfoType
|
|
@@ -105,6 +109,7 @@ class YalexsConfigFlow(ConfigFlow, domain=DOMAIN):
|
|
|
105
109
|
discovery_info["key"],
|
|
106
110
|
discovery_info["slot"],
|
|
107
111
|
)
|
|
112
|
+
async_add_validated_config(self.hass, lock_cfg.address, lock_cfg)
|
|
108
113
|
|
|
109
114
|
address = lock_cfg.address
|
|
110
115
|
self.local_name = lock_cfg.local_name
|
|
@@ -232,22 +237,28 @@ class YalexsConfigFlow(ConfigFlow, domain=DOMAIN):
|
|
|
232
237
|
errors=errors,
|
|
233
238
|
)
|
|
234
239
|
|
|
235
|
-
async def
|
|
240
|
+
async def async_step_key_slot(
|
|
236
241
|
self, user_input: dict[str, Any] | None = None
|
|
237
242
|
) -> ConfigFlowResult:
|
|
238
|
-
"""Handle the
|
|
243
|
+
"""Handle the key and slot step."""
|
|
239
244
|
errors: dict[str, str] = {}
|
|
245
|
+
discovery_info = self._discovery_info
|
|
246
|
+
assert discovery_info is not None
|
|
247
|
+
address = discovery_info.address
|
|
248
|
+
validated_config = async_get_validated_config(self.hass, address)
|
|
240
249
|
|
|
241
|
-
if user_input is not None:
|
|
242
|
-
self.active = True
|
|
243
|
-
address = user_input[CONF_ADDRESS]
|
|
244
|
-
discovery_info = self._discovered_devices[address]
|
|
250
|
+
if user_input is not None or validated_config:
|
|
245
251
|
local_name = discovery_info.name
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
252
|
+
if validated_config:
|
|
253
|
+
key = validated_config.key
|
|
254
|
+
slot = validated_config.slot
|
|
255
|
+
title = validated_config.name
|
|
256
|
+
else:
|
|
257
|
+
assert user_input is not None
|
|
258
|
+
key = user_input[CONF_KEY]
|
|
259
|
+
slot = user_input[CONF_SLOT]
|
|
260
|
+
title = human_readable_name(None, local_name, address)
|
|
261
|
+
await self.async_set_unique_id(address, raise_on_progress=False)
|
|
251
262
|
self._abort_if_unique_id_configured()
|
|
252
263
|
if not (
|
|
253
264
|
errors := await async_validate_lock_or_error(
|
|
@@ -255,7 +266,7 @@ class YalexsConfigFlow(ConfigFlow, domain=DOMAIN):
|
|
|
255
266
|
)
|
|
256
267
|
):
|
|
257
268
|
return self.async_create_entry(
|
|
258
|
-
title=
|
|
269
|
+
title=title,
|
|
259
270
|
data={
|
|
260
271
|
CONF_LOCAL_NAME: discovery_info.name,
|
|
261
272
|
CONF_ADDRESS: discovery_info.address,
|
|
@@ -264,24 +275,48 @@ class YalexsConfigFlow(ConfigFlow, domain=DOMAIN):
|
|
|
264
275
|
},
|
|
265
276
|
)
|
|
266
277
|
|
|
267
|
-
|
|
278
|
+
return self.async_show_form(
|
|
279
|
+
step_id="key_slot",
|
|
280
|
+
data_schema=vol.Schema(
|
|
281
|
+
{
|
|
282
|
+
vol.Required(CONF_KEY): str,
|
|
283
|
+
vol.Required(CONF_SLOT): int,
|
|
284
|
+
}
|
|
285
|
+
),
|
|
286
|
+
errors=errors,
|
|
287
|
+
description_placeholders={
|
|
288
|
+
"address": address,
|
|
289
|
+
"title": self._async_get_name_from_address(address),
|
|
290
|
+
},
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
async def async_step_user(
|
|
294
|
+
self, user_input: dict[str, Any] | None = None
|
|
295
|
+
) -> ConfigFlowResult:
|
|
296
|
+
"""Handle the user step to pick discovered device."""
|
|
297
|
+
errors: dict[str, str] = {}
|
|
298
|
+
|
|
299
|
+
if user_input is not None:
|
|
300
|
+
self.active = True
|
|
301
|
+
address = user_input[CONF_ADDRESS]
|
|
302
|
+
self._discovery_info = self._discovered_devices[address]
|
|
303
|
+
return await self.async_step_key_slot()
|
|
304
|
+
|
|
305
|
+
current_addresses = self._async_current_ids(include_ignore=False)
|
|
306
|
+
current_unique_names = {
|
|
307
|
+
entry.data.get(CONF_LOCAL_NAME)
|
|
308
|
+
for entry in self._async_current_entries()
|
|
309
|
+
if local_name_is_unique(entry.data.get(CONF_LOCAL_NAME))
|
|
310
|
+
}
|
|
311
|
+
for discovery in async_discovered_service_info(self.hass):
|
|
312
|
+
if (
|
|
313
|
+
discovery.address in current_addresses
|
|
314
|
+
or discovery.name in current_unique_names
|
|
315
|
+
or discovery.address in self._discovered_devices
|
|
316
|
+
or YALE_MFR_ID not in discovery.manufacturer_data
|
|
317
|
+
):
|
|
318
|
+
continue
|
|
268
319
|
self._discovered_devices[discovery.address] = discovery
|
|
269
|
-
else:
|
|
270
|
-
current_addresses = self._async_current_ids(include_ignore=False)
|
|
271
|
-
current_unique_names = {
|
|
272
|
-
entry.data.get(CONF_LOCAL_NAME)
|
|
273
|
-
for entry in self._async_current_entries()
|
|
274
|
-
if local_name_is_unique(entry.data.get(CONF_LOCAL_NAME))
|
|
275
|
-
}
|
|
276
|
-
for discovery in async_discovered_service_info(self.hass):
|
|
277
|
-
if (
|
|
278
|
-
discovery.address in current_addresses
|
|
279
|
-
or discovery.name in current_unique_names
|
|
280
|
-
or discovery.address in self._discovered_devices
|
|
281
|
-
or YALE_MFR_ID not in discovery.manufacturer_data
|
|
282
|
-
):
|
|
283
|
-
continue
|
|
284
|
-
self._discovered_devices[discovery.address] = discovery
|
|
285
320
|
|
|
286
321
|
if not self._discovered_devices:
|
|
287
322
|
return self.async_abort(reason="no_devices_found")
|
|
@@ -290,14 +325,12 @@ class YalexsConfigFlow(ConfigFlow, domain=DOMAIN):
|
|
|
290
325
|
{
|
|
291
326
|
vol.Required(CONF_ADDRESS): vol.In(
|
|
292
327
|
{
|
|
293
|
-
service_info.address: (
|
|
294
|
-
|
|
328
|
+
service_info.address: self._async_get_name_from_address(
|
|
329
|
+
service_info.address
|
|
295
330
|
)
|
|
296
331
|
for service_info in self._discovered_devices.values()
|
|
297
332
|
}
|
|
298
|
-
)
|
|
299
|
-
vol.Required(CONF_KEY): str,
|
|
300
|
-
vol.Required(CONF_SLOT): int,
|
|
333
|
+
)
|
|
301
334
|
}
|
|
302
335
|
)
|
|
303
336
|
return self.async_show_form(
|
|
@@ -306,6 +339,18 @@ class YalexsConfigFlow(ConfigFlow, domain=DOMAIN):
|
|
|
306
339
|
errors=errors,
|
|
307
340
|
)
|
|
308
341
|
|
|
342
|
+
@callback
|
|
343
|
+
def _async_get_name_from_address(self, address: str) -> str:
|
|
344
|
+
"""Get the name of a device from its address."""
|
|
345
|
+
if validated_config := async_get_validated_config(self.hass, address):
|
|
346
|
+
return f"{validated_config.name} ({address})"
|
|
347
|
+
if address in self._discovered_devices:
|
|
348
|
+
service_info = self._discovered_devices[address]
|
|
349
|
+
return f"{service_info.name} ({service_info.address})"
|
|
350
|
+
assert self._discovery_info is not None
|
|
351
|
+
assert self._discovery_info.address == address
|
|
352
|
+
return f"{self._discovery_info.name} ({address})"
|
|
353
|
+
|
|
309
354
|
@staticmethod
|
|
310
355
|
@callback
|
|
311
356
|
def async_get_options_flow(
|
|
@@ -3,18 +3,23 @@
|
|
|
3
3
|
"flow_title": "{name}",
|
|
4
4
|
"step": {
|
|
5
5
|
"user": {
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "Select the device you want to set up over Bluetooth.",
|
|
7
|
+
"data": {
|
|
8
|
+
"address": "Bluetooth address"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"key_slot": {
|
|
12
|
+
"description": "Enter the key for the {title} lock with address {address}. If you are using the August or Yale cloud integration to obtain the key, you may be able to avoid this manual setup by reloading the August or Yale cloud integration while the lock is in Bluetooth range.",
|
|
7
13
|
"data": {
|
|
8
|
-
"address": "Bluetooth address",
|
|
9
14
|
"key": "Offline Key (32-byte hex string)",
|
|
10
15
|
"slot": "Offline Key Slot (Integer between 0 and 255)"
|
|
11
16
|
}
|
|
12
17
|
},
|
|
13
18
|
"reauth_validate": {
|
|
14
|
-
"description": "Enter the updated key for the {title} lock with address {address}. If you are using the August cloud integration to obtain the key, you may be able to avoid manual
|
|
19
|
+
"description": "Enter the updated key for the {title} lock with address {address}. If you are using the August or Yale cloud integration to obtain the key, you may be able to avoid manual re-authentication by reloading the August or Yale cloud integration while the lock is in Bluetooth range.",
|
|
15
20
|
"data": {
|
|
16
|
-
"key": "[%key:component::yalexs_ble::config::step::
|
|
17
|
-
"slot": "[%key:component::yalexs_ble::config::step::
|
|
21
|
+
"key": "[%key:component::yalexs_ble::config::step::key_slot::data::key%]",
|
|
22
|
+
"slot": "[%key:component::yalexs_ble::config::step::key_slot::data::slot%]"
|
|
18
23
|
}
|
|
19
24
|
},
|
|
20
25
|
"integration_discovery_confirm": {
|
|
@@ -17,15 +17,9 @@
|
|
|
17
17
|
"integration_discovery_confirm": {
|
|
18
18
|
"description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 {name} \u043f\u0440\u0435\u0437 Bluetooth \u0441 \u0430\u0434\u0440\u0435\u0441 {address}?"
|
|
19
19
|
},
|
|
20
|
-
"reauth_validate": {
|
|
21
|
-
"data": {
|
|
22
|
-
"key": "\u041e\u0444\u043b\u0430\u0439\u043d \u043a\u043b\u044e\u0447 (32-\u0431\u0430\u0439\u0442\u043e\u0432 hex \u043d\u0438\u0437)"
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
20
|
"user": {
|
|
26
21
|
"data": {
|
|
27
|
-
"address": "Bluetooth \u0430\u0434\u0440\u0435\u0441"
|
|
28
|
-
"key": "\u041e\u0444\u043b\u0430\u0439\u043d \u043a\u043b\u044e\u0447 (32-\u0431\u0430\u0439\u0442\u043e\u0432 hex \u043d\u0438\u0437)"
|
|
22
|
+
"address": "Bluetooth \u0430\u0434\u0440\u0435\u0441"
|
|
29
23
|
}
|
|
30
24
|
}
|
|
31
25
|
}
|
|
@@ -19,20 +19,10 @@
|
|
|
19
19
|
"integration_discovery_confirm": {
|
|
20
20
|
"description": "Vols configurar {name} per Bluetooth amb l'adre\u00e7a {address}?"
|
|
21
21
|
},
|
|
22
|
-
"reauth_validate": {
|
|
23
|
-
"data": {
|
|
24
|
-
"key": "Clau fora de l\u00ednia (cadena hexadecimal de 32 bytes)",
|
|
25
|
-
"slot": "'Slot' de clau fora de l\u00ednia (nombre enter entre 0 i 255)"
|
|
26
|
-
},
|
|
27
|
-
"description": "Introdueix la clau actualitzada del pany {title} amb adre\u00e7a {address}. Si utilitzes la integraci\u00f3 al n\u00favol August per obtenir la clau, \u00e9s possible que puguis evitar la re-autenticaci\u00f3 manual tornant a carregar la integraci\u00f3 August mentre el pany estigui a l'abast del Bluetooth."
|
|
28
|
-
},
|
|
29
22
|
"user": {
|
|
30
23
|
"data": {
|
|
31
|
-
"address": "Adre\u00e7a Bluetooth"
|
|
32
|
-
|
|
33
|
-
"slot": "'Slot' de clau fora de l\u00ednia (nombre enter entre 0 i 255)"
|
|
34
|
-
},
|
|
35
|
-
"description": "Consulta la documentaci\u00f3 per saber com trobar la clau de fora de l\u00ednia. Si est\u00e0s utilitzant la integraci\u00f3 al n\u00favol August per obtenir la clau, \u00e9s possible que hagis de reiniciar la integraci\u00f3 August mentre el pany estigui a l'abast del Bluetooth."
|
|
24
|
+
"address": "Adre\u00e7a Bluetooth"
|
|
25
|
+
}
|
|
36
26
|
}
|
|
37
27
|
}
|
|
38
28
|
},
|
|
@@ -19,20 +19,10 @@
|
|
|
19
19
|
"integration_discovery_confirm": {
|
|
20
20
|
"description": "Chcete nastavit {name} p\u0159es Bluetooth s adresou {address}?"
|
|
21
21
|
},
|
|
22
|
-
"reauth_validate": {
|
|
23
|
-
"data": {
|
|
24
|
-
"key": "Offline kl\u00ed\u010d (32bajtov\u00fd hexadecim\u00e1ln\u00ed \u0159et\u011bzec)",
|
|
25
|
-
"slot": "Offline kl\u00ed\u010dov\u00fd slot (cel\u00e9 \u010d\u00edslo mezi 0 a 255)"
|
|
26
|
-
},
|
|
27
|
-
"description": "Zadejte aktualizovan\u00fd kl\u00ed\u010d pro z\u00e1mek {title} s adresou {address}. Pokud k z\u00edsk\u00e1n\u00ed kl\u00ed\u010de pou\u017e\u00edv\u00e1te srpnovou cloudovou integraci, mo\u017en\u00e1 se budete moci vyhnout ru\u010dn\u00edmu op\u011btovn\u00e9mu ov\u011b\u0159en\u00ed t\u00edm, \u017ee znovu na\u010dtete srpnovou cloudovou integraci, kdy\u017e je z\u00e1mek v dosahu Bluetooth."
|
|
28
|
-
},
|
|
29
22
|
"user": {
|
|
30
23
|
"data": {
|
|
31
|
-
"address": "Adresa Bluetooth"
|
|
32
|
-
|
|
33
|
-
"slot": "Offline kl\u00ed\u010dov\u00fd slot (cel\u00e9 \u010d\u00edslo mezi 0 a 255)"
|
|
34
|
-
},
|
|
35
|
-
"description": "Pod\u00edvejte se do dokumentace, jak naj\u00edt offline kl\u00ed\u010d. Pokud k z\u00edsk\u00e1n\u00ed kl\u00ed\u010de pou\u017e\u00edv\u00e1te srpnovou cloudovou integraci, mo\u017en\u00e1 budete muset znovu na\u010d\u00edst srpnovou cloudovou integraci, kdy\u017e je z\u00e1mek v dosahu Bluetooth."
|
|
24
|
+
"address": "Adresa Bluetooth"
|
|
25
|
+
}
|
|
36
26
|
}
|
|
37
27
|
}
|
|
38
28
|
},
|
|
@@ -19,20 +19,25 @@
|
|
|
19
19
|
"integration_discovery_confirm": {
|
|
20
20
|
"description": "M\u00f6chtest du {name} \u00fcber Bluetooth mit der Adresse {address} einrichten?"
|
|
21
21
|
},
|
|
22
|
-
"
|
|
22
|
+
"key_slot": {
|
|
23
23
|
"data": {
|
|
24
24
|
"key": "Offline-Schl\u00fcssel (32 Byte Hex-Zeichenfolge)",
|
|
25
25
|
"slot": "Offline-Schl\u00fcssel-Slot (Ganzzahl zwischen 0 und 255)"
|
|
26
26
|
},
|
|
27
|
-
"description": "Gib den
|
|
27
|
+
"description": "Gib den Schl\u00fcssel f\u00fcr das {title} Schloss mit der Adresse {address} ein. Wenn du zum Abrufen des Schl\u00fcssels die August- oder Yale-Cloud-Integration verwendest, kannst du m\u00f6glicherweise diese manuelle Einrichtung vermeiden, indem du die August- oder Yale-Cloud-Integration neu l\u00e4dst, w\u00e4hrend sich das Schloss in Bluetooth-Reichweite befindet."
|
|
28
28
|
},
|
|
29
|
-
"
|
|
29
|
+
"reauth_validate": {
|
|
30
30
|
"data": {
|
|
31
|
-
"address": "Bluetooth-Adresse",
|
|
32
31
|
"key": "Offline-Schl\u00fcssel (32 Byte Hex-Zeichenfolge)",
|
|
33
32
|
"slot": "Offline-Schl\u00fcssel-Slot (Ganzzahl zwischen 0 und 255)"
|
|
34
33
|
},
|
|
35
|
-
"description": "
|
|
34
|
+
"description": "Gib den aktualisierten Schl\u00fcssel f\u00fcr das {title} Schloss mit der Adresse {address} ein. Wenn du zum Abrufen des Schl\u00fcssels die August- oder Yale-Cloud-Integration verwendest, kannst du m\u00f6glicherweise eine manuelle Neuauthentifizierung vermeiden, indem du die August- oder Yale-Cloud-Integration neu l\u00e4dst, w\u00e4hrend sich das Schloss in Bluetooth-Reichweite befindet."
|
|
35
|
+
},
|
|
36
|
+
"user": {
|
|
37
|
+
"data": {
|
|
38
|
+
"address": "Bluetooth-Adresse"
|
|
39
|
+
},
|
|
40
|
+
"description": "W\u00e4hle das Ger\u00e4t aus, das du \u00fcber Bluetooth einrichten m\u00f6chtest."
|
|
36
41
|
}
|
|
37
42
|
}
|
|
38
43
|
},
|
|
@@ -19,20 +19,10 @@
|
|
|
19
19
|
"integration_discovery_confirm": {
|
|
20
20
|
"description": "\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf {name} \u03bc\u03ad\u03c3\u03c9 Bluetooth \u03bc\u03b5 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 {address};"
|
|
21
21
|
},
|
|
22
|
-
"reauth_validate": {
|
|
23
|
-
"data": {
|
|
24
|
-
"key": "\u039a\u03bb\u03b5\u03b9\u03b4\u03af \u03b5\u03ba\u03c4\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2 (\u03b4\u03b5\u03ba\u03b1\u03b5\u03be\u03b1\u03b4\u03b9\u03ba\u03ae \u03c3\u03c5\u03bc\u03b2\u03bf\u03bb\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac 32 byte)",
|
|
25
|
-
"slot": "\u03a5\u03c0\u03bf\u03b4\u03bf\u03c7\u03ae \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd \u03b5\u03ba\u03c4\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2 (\u0391\u03ba\u03ad\u03c1\u03b1\u03b9\u03bf\u03c2 \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03bc\u03b5\u03c4\u03b1\u03be\u03cd 0 \u03ba\u03b1\u03b9 255)"
|
|
26
|
-
},
|
|
27
|
-
"description": "\u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03c9\u03bc\u03ad\u03bd\u03bf \u03ba\u03bb\u03b5\u03b9\u03b4\u03af \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03ba\u03bb\u03b5\u03b9\u03b4\u03b1\u03c1\u03b9\u03ac {title} \u03bc\u03b5 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 {address}. \u0395\u03ac\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5 cloud \u03c4\u03b7\u03c2 August \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03bb\u03ac\u03b2\u03b5\u03c4\u03b5 \u03c4\u03bf \u03ba\u03bb\u03b5\u03b9\u03b4\u03af, \u03af\u03c3\u03c9\u03c2 \u03bc\u03c0\u03bf\u03c1\u03ad\u03c3\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03c0\u03bf\u03c6\u03cd\u03b3\u03b5\u03c4\u03b5 \u03c4\u03bf\u03bd \u03b5\u03ba \u03bd\u03ad\u03bf\u03c5 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03c7\u03b5\u03b9\u03c1\u03bf\u03ba\u03af\u03bd\u03b7\u03c4\u03b1, \u03b5\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03c4\u03ce\u03bd\u03bf\u03bd\u03c4\u03b1\u03c2 \u03c4\u03b7\u03bd \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5 cloud \u03c4\u03b7\u03c2 August \u03b5\u03bd\u03ce \u03b7 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b1\u03c1\u03b9\u03ac \u03b2\u03c1\u03af\u03c3\u03ba\u03b5\u03c4\u03b1\u03b9 \u03c3\u03b5 \u03b5\u03bc\u03b2\u03ad\u03bb\u03b5\u03b9\u03b1 Bluetooth."
|
|
28
|
-
},
|
|
29
22
|
"user": {
|
|
30
23
|
"data": {
|
|
31
|
-
"address": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 Bluetooth"
|
|
32
|
-
|
|
33
|
-
"slot": "\u03a5\u03c0\u03bf\u03b4\u03bf\u03c7\u03ae \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd \u03b5\u03ba\u03c4\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2 (\u0391\u03ba\u03ad\u03c1\u03b1\u03b9\u03bf\u03c2 \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03bc\u03b5\u03c4\u03b1\u03be\u03cd 0 \u03ba\u03b1\u03b9 255)"
|
|
34
|
-
},
|
|
35
|
-
"description": "\u0395\u03bb\u03ad\u03b3\u03be\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7 \u03b3\u03b9\u03b1 \u03c4\u03bf\u03bd \u03c4\u03c1\u03cc\u03c0\u03bf \u03b5\u03cd\u03c1\u03b5\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd \u03b5\u03ba\u03c4\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2. \u0395\u03ac\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 cloud \u03c4\u03b7\u03c2 August \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03bb\u03ac\u03b2\u03b5\u03c4\u03b5 \u03c4\u03bf \u03ba\u03bb\u03b5\u03b9\u03b4\u03af, \u03b5\u03bd\u03b4\u03ad\u03c7\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03c7\u03c1\u03b5\u03b9\u03b1\u03c3\u03c4\u03b5\u03af \u03bd\u03b1 \u03b5\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03c4\u03ce\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 cloud \u03c4\u03b7\u03c2 August \u03b5\u03bd\u03ce \u03b7 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b1\u03c1\u03b9\u03ac \u03b2\u03c1\u03af\u03c3\u03ba\u03b5\u03c4\u03b1\u03b9 \u03c3\u03b5 \u03b5\u03bc\u03b2\u03ad\u03bb\u03b5\u03b9\u03b1 Bluetooth."
|
|
24
|
+
"address": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 Bluetooth"
|
|
25
|
+
}
|
|
36
26
|
}
|
|
37
27
|
}
|
|
38
28
|
},
|
|
@@ -19,6 +19,13 @@
|
|
|
19
19
|
"integration_discovery_confirm": {
|
|
20
20
|
"description": "Do you want to set up {name} over Bluetooth with address {address}?"
|
|
21
21
|
},
|
|
22
|
+
"key_slot": {
|
|
23
|
+
"data": {
|
|
24
|
+
"key": "Offline Key (32-byte hex string)",
|
|
25
|
+
"slot": "Offline Key Slot (Integer between 0 and 255)"
|
|
26
|
+
},
|
|
27
|
+
"description": "Enter the key for the {title} lock with address {address}. If you are using the August or Yale cloud integration to obtain the key, you may be able to avoid this manual setup by reloading the August or Yale cloud integration while the lock is in Bluetooth range."
|
|
28
|
+
},
|
|
22
29
|
"reauth_validate": {
|
|
23
30
|
"data": {
|
|
24
31
|
"key": "Offline Key (32-byte hex string)",
|
|
@@ -28,11 +35,9 @@
|
|
|
28
35
|
},
|
|
29
36
|
"user": {
|
|
30
37
|
"data": {
|
|
31
|
-
"address": "Bluetooth address"
|
|
32
|
-
"key": "Offline Key (32-byte hex string)",
|
|
33
|
-
"slot": "Offline Key Slot (Integer between 0 and 255)"
|
|
38
|
+
"address": "Bluetooth address"
|
|
34
39
|
},
|
|
35
|
-
"description": "
|
|
40
|
+
"description": "Select the device you want to set up over Bluetooth."
|
|
36
41
|
}
|
|
37
42
|
}
|
|
38
43
|
},
|
|
@@ -19,20 +19,25 @@
|
|
|
19
19
|
"integration_discovery_confirm": {
|
|
20
20
|
"description": "Do you want to set up {name} over Bluetooth with address {address}?"
|
|
21
21
|
},
|
|
22
|
-
"
|
|
22
|
+
"key_slot": {
|
|
23
23
|
"data": {
|
|
24
24
|
"key": "Offline Key (32-byte hex string)",
|
|
25
25
|
"slot": "Offline Key Slot (Integer between 0 and 255)"
|
|
26
26
|
},
|
|
27
|
-
"description": "Enter the
|
|
27
|
+
"description": "Enter the key for the {title} lock with address {address}. If you are using the August or Yale cloud integration to obtain the key, you may be able to avoid this manual setup by reloading the August or Yale cloud integration while the lock is in Bluetooth range."
|
|
28
28
|
},
|
|
29
|
-
"
|
|
29
|
+
"reauth_validate": {
|
|
30
30
|
"data": {
|
|
31
|
-
"address": "Bluetooth address",
|
|
32
31
|
"key": "Offline Key (32-byte hex string)",
|
|
33
32
|
"slot": "Offline Key Slot (Integer between 0 and 255)"
|
|
34
33
|
},
|
|
35
|
-
"description": "
|
|
34
|
+
"description": "Enter the updated key for the {title} lock with address {address}. If you are using the August or Yale cloud integration to obtain the key, you may be able to avoid manual re-authentication by reloading the August or Yale cloud integration while the lock is in Bluetooth range."
|
|
35
|
+
},
|
|
36
|
+
"user": {
|
|
37
|
+
"data": {
|
|
38
|
+
"address": "Bluetooth address"
|
|
39
|
+
},
|
|
40
|
+
"description": "Select the device you want to set up over Bluetooth."
|
|
36
41
|
}
|
|
37
42
|
}
|
|
38
43
|
},
|
|
@@ -19,20 +19,10 @@
|
|
|
19
19
|
"integration_discovery_confirm": {
|
|
20
20
|
"description": "\u00bfQuieres configurar {name} a trav\u00e9s de Bluetooth con la direcci\u00f3n {address}?"
|
|
21
21
|
},
|
|
22
|
-
"reauth_validate": {
|
|
23
|
-
"data": {
|
|
24
|
-
"key": "Clave sin conexi\u00f3n (cadena hexadecimal de 32 bytes)",
|
|
25
|
-
"slot": "Ranura de clave sin conexi\u00f3n (entero entre 0 y 255)"
|
|
26
|
-
},
|
|
27
|
-
"description": "Introduce la clave actualizada para la cerradura {title} con la direcci\u00f3n {address}. Si est\u00e1s utilizando la integraci\u00f3n de la nube de August para obtener la clave, es posible que puedas evitar volver a autenticar manualmente recargando la integraci\u00f3n de la nube de August mientras la cerradura est\u00e1 dentro del alcance Bluetooth."
|
|
28
|
-
},
|
|
29
22
|
"user": {
|
|
30
23
|
"data": {
|
|
31
|
-
"address": "Direcci\u00f3n Bluetooth"
|
|
32
|
-
|
|
33
|
-
"slot": "Ranura de clave sin conexi\u00f3n (entero entre 0 y 255)"
|
|
34
|
-
},
|
|
35
|
-
"description": "Consulta la documentaci\u00f3n para saber c\u00f3mo encontrar la clave sin conexi\u00f3n. Si est\u00e1s utilizando la integraci\u00f3n de la nube de August para obtener la clave, es posible que debas volver a cargar la integraci\u00f3n mientras la cerradura est\u00e1 dentro del alcance Bluetooth."
|
|
24
|
+
"address": "Direcci\u00f3n Bluetooth"
|
|
25
|
+
}
|
|
36
26
|
}
|
|
37
27
|
}
|
|
38
28
|
},
|