homeassistant 2025.10.0b7__py3-none-any.whl → 2025.10.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.
Potentially problematic release.
This version of homeassistant might be problematic. Click here for more details.
- homeassistant/components/accuweather/translations/el.json +7 -1
- homeassistant/components/accuweather/translations/fy.json +12 -0
- homeassistant/components/airos/manifest.json +1 -1
- homeassistant/components/airos/translations/el.json +7 -0
- homeassistant/components/airos/translations/fy.json +7 -0
- homeassistant/components/airos/translations/nl.json +28 -1
- homeassistant/components/airtouch4/__init__.py +2 -5
- homeassistant/components/airtouch4/coordinator.py +9 -1
- homeassistant/components/aladdin_connect/translations/sk.json +1 -0
- homeassistant/components/aladdin_connect/translations/zh-Hans.json +1 -0
- homeassistant/components/aladdin_connect/translations/zh-Hant.json +1 -0
- homeassistant/components/alexa_devices/translations/en-GB.json +7 -0
- homeassistant/components/anova/translations/nl.json +2 -0
- homeassistant/components/aosmith/translations/fr.json +9 -0
- homeassistant/components/assist_pipeline/translations/pl.json +1 -1
- homeassistant/components/asuswrt/translations/nl.json +9 -0
- homeassistant/components/bayesian/translations/nl.json +7 -0
- homeassistant/components/blue_current/translations/ar.json +9 -0
- homeassistant/components/blue_current/translations/nl.json +10 -0
- homeassistant/components/bring/translations/ar.json +9 -0
- homeassistant/components/climate/translations/ar.json +1 -0
- homeassistant/components/compit/translations/el.json +25 -0
- homeassistant/components/compit/translations/fr.json +25 -0
- homeassistant/components/cookidoo/translations/ar.json +9 -0
- homeassistant/components/cover/translations/nl.json +2 -1
- homeassistant/components/cync/translations/el.json +20 -0
- homeassistant/components/ecobee/translations/ru.json +5 -1
- homeassistant/components/ecobee/translations/sk.json +5 -1
- homeassistant/components/ecobee/translations/zh-Hans.json +5 -1
- homeassistant/components/ecobee/translations/zh-Hant.json +5 -1
- homeassistant/components/ecovacs/translations/nl.json +1 -0
- homeassistant/components/ekeybionyx/translations/el.json +24 -0
- homeassistant/components/enphase_envoy/translations/nl.json +2 -1
- homeassistant/components/esphome/translations/pl.json +6 -2
- homeassistant/components/ezviz/translations/nl.json +5 -0
- homeassistant/components/generic_thermostat/translations/ar.json +2 -0
- homeassistant/components/google_generative_ai_conversation/entity.py +8 -1
- homeassistant/components/growatt_server/translations/bg.json +0 -3
- homeassistant/components/growatt_server/translations/ca.json +1 -5
- homeassistant/components/growatt_server/translations/cs.json +2 -2
- homeassistant/components/growatt_server/translations/da.json +0 -3
- homeassistant/components/growatt_server/translations/de.json +2 -2
- homeassistant/components/growatt_server/translations/el.json +2 -3
- homeassistant/components/growatt_server/translations/en-GB.json +2 -2
- homeassistant/components/growatt_server/translations/en.json +2 -2
- homeassistant/components/growatt_server/translations/es.json +1 -5
- homeassistant/components/growatt_server/translations/et.json +2 -3
- homeassistant/components/growatt_server/translations/fi.json +1 -5
- homeassistant/components/growatt_server/translations/fr.json +1 -5
- homeassistant/components/growatt_server/translations/ga.json +1 -5
- homeassistant/components/growatt_server/translations/he.json +0 -3
- homeassistant/components/growatt_server/translations/hu.json +1 -5
- homeassistant/components/growatt_server/translations/id.json +1 -5
- homeassistant/components/growatt_server/translations/it.json +1 -5
- homeassistant/components/growatt_server/translations/ja.json +1 -5
- homeassistant/components/growatt_server/translations/ko.json +1 -5
- homeassistant/components/growatt_server/translations/lt.json +1 -5
- homeassistant/components/growatt_server/translations/nb.json +1 -5
- homeassistant/components/growatt_server/translations/nl.json +1 -5
- homeassistant/components/growatt_server/translations/pl.json +1 -5
- homeassistant/components/growatt_server/translations/pt-BR.json +1 -5
- homeassistant/components/growatt_server/translations/pt.json +1 -5
- homeassistant/components/growatt_server/translations/ro.json +1 -5
- homeassistant/components/growatt_server/translations/ru.json +1 -5
- homeassistant/components/growatt_server/translations/sk.json +2 -2
- homeassistant/components/growatt_server/translations/sl.json +0 -3
- homeassistant/components/growatt_server/translations/sv.json +1 -5
- homeassistant/components/growatt_server/translations/tr.json +1 -5
- homeassistant/components/growatt_server/translations/uk.json +1 -5
- homeassistant/components/growatt_server/translations/zh-Hans.json +2 -2
- homeassistant/components/growatt_server/translations/zh-Hant.json +2 -2
- homeassistant/components/habitica/translations/nl.json +7 -0
- homeassistant/components/hassio/manifest.json +1 -1
- homeassistant/components/home_connect/translations/nl.json +36 -0
- homeassistant/components/homeassistant_connect_zbt2/config_flow.py +1 -5
- homeassistant/components/homeassistant_connect_zbt2/translations/zh-Hans.json +24 -8
- homeassistant/components/homeassistant_connect_zbt2/update.py +1 -1
- homeassistant/components/homeassistant_hardware/manifest.json +1 -1
- homeassistant/components/homeassistant_hardware/translations/sv.json +4 -1
- homeassistant/components/homeassistant_hardware/translations/zh-Hans.json +17 -0
- homeassistant/components/homeassistant_sky_connect/translations/sv.json +4 -4
- homeassistant/components/homeassistant_sky_connect/translations/zh-Hans.json +24 -8
- homeassistant/components/homeassistant_yellow/translations/ru.json +6 -0
- homeassistant/components/homeassistant_yellow/translations/sv.json +2 -2
- homeassistant/components/homeassistant_yellow/translations/zh-Hans.json +12 -4
- homeassistant/components/homekit_controller/manifest.json +1 -1
- homeassistant/components/huawei_lte/translations/nl.json +6 -0
- homeassistant/components/humidifier/translations/nl.json +2 -1
- homeassistant/components/icloud/translations/fr.json +2 -1
- homeassistant/components/icloud/translations/nl.json +1 -0
- homeassistant/components/idasen_desk/coordinator.py +24 -2
- homeassistant/components/idasen_desk/translations/nl.json +10 -0
- homeassistant/components/irm_kmi/translations/el.json +28 -0
- homeassistant/components/irm_kmi/translations/fr.json +28 -0
- homeassistant/components/irm_kmi/translations/fy.json +11 -0
- homeassistant/components/konnected/translations/zh-Hans.json +6 -0
- homeassistant/components/lcn/translations/nl.json +7 -0
- homeassistant/components/litterrobot/translations/fr.json +14 -0
- homeassistant/components/logbook/translations/ar.json +3 -0
- homeassistant/components/matter/translations/nl.json +3 -0
- homeassistant/components/mcp/translations/el.json +8 -1
- homeassistant/components/mcp/translations/fy.json +5 -1
- homeassistant/components/mcp/translations/nl.json +8 -1
- homeassistant/components/mcp/translations/zh-Hans.json +20 -1
- homeassistant/components/media_source/models.py +5 -1
- homeassistant/components/media_source/strings.json +3 -0
- homeassistant/components/media_source/translations/cs.json +3 -0
- homeassistant/components/media_source/translations/de.json +3 -0
- homeassistant/components/media_source/translations/en-GB.json +3 -0
- homeassistant/components/media_source/translations/en.json +3 -0
- homeassistant/components/media_source/translations/et.json +3 -0
- homeassistant/components/media_source/translations/ru.json +3 -0
- homeassistant/components/media_source/translations/sk.json +3 -0
- homeassistant/components/media_source/translations/zh-Hans.json +3 -0
- homeassistant/components/media_source/translations/zh-Hant.json +3 -0
- homeassistant/components/modbus/entity.py +1 -1
- homeassistant/components/motionmount/translations/nl.json +2 -1
- homeassistant/components/mqtt/translations/el.json +2 -0
- homeassistant/components/mqtt/translations/zh-Hans.json +2 -0
- homeassistant/components/nederlandse_spoorwegen/translations/fr.json +7 -0
- homeassistant/components/nordpool/__init__.py +1 -0
- homeassistant/components/nordpool/coordinator.py +32 -9
- homeassistant/components/ntfy/strings.json +1 -1
- homeassistant/components/ntfy/translations/cs.json +1 -1
- homeassistant/components/ntfy/translations/de.json +1 -1
- homeassistant/components/ntfy/translations/en-GB.json +1 -1
- homeassistant/components/ntfy/translations/en.json +1 -1
- homeassistant/components/ntfy/translations/es.json +0 -1
- homeassistant/components/ntfy/translations/et.json +1 -1
- homeassistant/components/ntfy/translations/ga.json +0 -1
- homeassistant/components/ntfy/translations/lt.json +0 -1
- homeassistant/components/ntfy/translations/pt.json +0 -1
- homeassistant/components/ntfy/translations/ru.json +1 -1
- homeassistant/components/ntfy/translations/sk.json +1 -1
- homeassistant/components/ntfy/translations/zh-Hans.json +1 -1
- homeassistant/components/ntfy/translations/zh-Hant.json +1 -1
- homeassistant/components/number/translations/nl.json +3 -0
- homeassistant/components/number/translations/zh-Hans.json +3 -0
- homeassistant/components/ohme/translations/nl.json +8 -1
- homeassistant/components/onedrive/backup.py +5 -2
- homeassistant/components/ovo_energy/manifest.json +1 -1
- homeassistant/components/paperless_ngx/translations/nl.json +1 -0
- homeassistant/components/pooldose/translations/el.json +2 -1
- homeassistant/components/pooldose/translations/fr.json +7 -0
- homeassistant/components/portainer/manifest.json +1 -1
- homeassistant/components/portainer/translations/el.json +9 -0
- homeassistant/components/portainer/translations/fy.json +12 -0
- homeassistant/components/portainer/translations/nl.json +9 -0
- homeassistant/components/proxmoxve/__init__.py +1 -0
- homeassistant/components/pushover/const.py +0 -1
- homeassistant/components/pushover/notify.py +1 -1
- homeassistant/components/random/translations/nl.json +1 -0
- homeassistant/components/random/translations/zh-Hans.json +1 -0
- homeassistant/components/remote/translations/ar.json +11 -0
- homeassistant/components/reolink/manifest.json +1 -1
- homeassistant/components/reolink/translations/af.json +1 -0
- homeassistant/components/roborock/manifest.json +1 -1
- homeassistant/components/roborock/strings.json +2 -0
- homeassistant/components/roborock/translations/cs.json +3 -1
- homeassistant/components/roborock/translations/de.json +3 -1
- homeassistant/components/roborock/translations/en-GB.json +3 -1
- homeassistant/components/roborock/translations/en.json +3 -1
- homeassistant/components/roborock/translations/es.json +3 -1
- homeassistant/components/roborock/translations/et.json +3 -1
- homeassistant/components/roborock/translations/fi.json +47 -0
- homeassistant/components/roborock/translations/nl.json +1 -0
- homeassistant/components/roborock/translations/sk.json +3 -1
- homeassistant/components/roborock/translations/zh-Hans.json +3 -1
- homeassistant/components/roborock/translations/zh-Hant.json +3 -1
- homeassistant/components/roomba/translations/ru.json +4 -2
- homeassistant/components/roomba/translations/sk.json +4 -2
- homeassistant/components/roomba/translations/zh-Hans.json +4 -2
- homeassistant/components/roomba/translations/zh-Hant.json +4 -2
- homeassistant/components/route_b_smart_meter/translations/el.json +24 -0
- homeassistant/components/satel_integra/binary_sensor.py +4 -2
- homeassistant/components/satel_integra/translations/fr.json +25 -0
- homeassistant/components/satel_integra/translations/fy.json +63 -0
- homeassistant/components/scrape/translations/el.json +1 -0
- homeassistant/components/scrape/translations/nl.json +2 -0
- homeassistant/components/scrape/translations/zh-Hans.json +2 -0
- homeassistant/components/sensor/translations/zh-Hans.json +3 -0
- homeassistant/components/shelly/translations/el.json +15 -0
- homeassistant/components/shelly/translations/fr.json +6 -0
- homeassistant/components/shelly/translations/fy.json +14 -0
- homeassistant/components/shelly/translations/nl.json +7 -0
- homeassistant/components/shelly/translations/zh-Hans.json +12 -0
- homeassistant/components/slack/strings.json +2 -2
- homeassistant/components/slack/translations/bg.json +0 -1
- homeassistant/components/slack/translations/ca.json +0 -2
- homeassistant/components/slack/translations/de.json +3 -3
- homeassistant/components/slack/translations/el.json +0 -2
- homeassistant/components/slack/translations/en-GB.json +2 -2
- homeassistant/components/slack/translations/en.json +2 -2
- homeassistant/components/slack/translations/es.json +0 -2
- homeassistant/components/slack/translations/et.json +0 -2
- homeassistant/components/slack/translations/fi.json +0 -2
- homeassistant/components/slack/translations/fr.json +0 -2
- homeassistant/components/slack/translations/ga.json +0 -2
- homeassistant/components/slack/translations/hu.json +0 -2
- homeassistant/components/slack/translations/id.json +0 -2
- homeassistant/components/slack/translations/it.json +0 -2
- homeassistant/components/slack/translations/ja.json +0 -2
- homeassistant/components/slack/translations/ko.json +0 -2
- homeassistant/components/slack/translations/lt.json +0 -2
- homeassistant/components/slack/translations/nb.json +0 -2
- homeassistant/components/slack/translations/nl.json +0 -2
- homeassistant/components/slack/translations/pl.json +0 -2
- homeassistant/components/slack/translations/pt-BR.json +0 -2
- homeassistant/components/slack/translations/pt.json +0 -2
- homeassistant/components/slack/translations/ro.json +0 -2
- homeassistant/components/slack/translations/sk.json +1 -1
- homeassistant/components/slack/translations/sv.json +0 -2
- homeassistant/components/slack/translations/tr.json +0 -2
- homeassistant/components/slack/translations/uk.json +0 -2
- homeassistant/components/slack/translations/zh-Hans.json +1 -1
- homeassistant/components/smarla/translations/ar.json +9 -0
- homeassistant/components/smartthings/icons.json +11 -0
- homeassistant/components/smartthings/sensor.py +5 -2
- homeassistant/components/smartthings/strings.json +5 -0
- homeassistant/components/smartthings/translations/cs.json +5 -0
- homeassistant/components/smartthings/translations/de.json +5 -0
- homeassistant/components/smartthings/translations/el.json +3 -0
- homeassistant/components/smartthings/translations/en-GB.json +5 -0
- homeassistant/components/smartthings/translations/en.json +5 -0
- homeassistant/components/smartthings/translations/et.json +5 -0
- homeassistant/components/smartthings/translations/sk.json +5 -0
- homeassistant/components/smartthings/translations/zh-Hans.json +5 -0
- homeassistant/components/smartthings/translations/zh-Hant.json +5 -0
- homeassistant/components/sql/translations/nl.json +1 -0
- homeassistant/components/sql/translations/zh-Hans.json +1 -0
- homeassistant/components/starline/translations/nl.json +3 -0
- homeassistant/components/steamist/translations/nl.json +7 -0
- homeassistant/components/switchbot/translations/fr.json +5 -0
- homeassistant/components/switchbot/translations/nl.json +2 -0
- homeassistant/components/telegram_bot/translations/de.json +1 -1
- homeassistant/components/template/translations/nl.json +17 -0
- homeassistant/components/template/translations/zh-Hans.json +1 -0
- homeassistant/components/tessie/translations/nl.json +6 -0
- homeassistant/components/tibber/manifest.json +1 -1
- homeassistant/components/togrill/coordinator.py +17 -5
- homeassistant/components/tolo/translations/el.json +2 -1
- homeassistant/components/tolo/translations/fy.json +7 -0
- homeassistant/components/tplink/translations/nl.json +3 -0
- homeassistant/components/traccar_server/translations/nl.json +1 -0
- homeassistant/components/tractive/translations/ar.json +9 -0
- homeassistant/components/tuya/translations/nl.json +8 -0
- homeassistant/components/twinkly/translations/nl.json +3 -0
- homeassistant/components/valve/translations/nl.json +18 -0
- homeassistant/components/vesync/fan.py +2 -1
- homeassistant/components/vicare/translations/nl.json +2 -1
- homeassistant/components/victron_remote_monitoring/translations/el.json +25 -0
- homeassistant/components/victron_remote_monitoring/translations/fi.json +9 -0
- homeassistant/components/victron_remote_monitoring/translations/fr.json +102 -0
- homeassistant/components/victron_remote_monitoring/translations/fy.json +11 -0
- homeassistant/components/voip/translations/pl.json +1 -1
- homeassistant/components/volvo/translations/nl.json +2 -0
- homeassistant/components/workday/calendar.py +6 -4
- homeassistant/components/wyoming/translations/pl.json +1 -1
- homeassistant/components/zha/config_flow.py +22 -20
- homeassistant/components/zha/strings.json +2 -5
- homeassistant/components/zha/translations/cs.json +41 -16
- homeassistant/components/zha/translations/de.json +1 -4
- homeassistant/components/zha/translations/el.json +13 -3
- homeassistant/components/zha/translations/en-GB.json +1 -4
- homeassistant/components/zha/translations/en.json +1 -4
- homeassistant/components/zha/translations/es.json +41 -16
- homeassistant/components/zha/translations/et.json +1 -4
- homeassistant/components/zha/translations/fr.json +1 -0
- homeassistant/components/zha/translations/lt.json +0 -4
- homeassistant/components/zha/translations/pl.json +0 -4
- homeassistant/components/zha/translations/pt.json +41 -16
- homeassistant/components/zha/translations/ru.json +75 -13
- homeassistant/components/zha/translations/sk.json +41 -16
- homeassistant/components/zha/translations/zh-Hans.json +53 -11
- homeassistant/components/zha/translations/zh-Hant.json +41 -16
- homeassistant/components/zwave_js/config_flow.py +43 -5
- homeassistant/components/zwave_js/light.py +9 -8
- homeassistant/components/zwave_js/translations/nl.json +6 -0
- homeassistant/components/zwave_js/translations/ru.json +9 -0
- homeassistant/const.py +1 -1
- homeassistant/package_constraints.txt +1 -1
- {homeassistant-2025.10.0b7.dist-info → homeassistant-2025.10.1.dist-info}/METADATA +2 -2
- {homeassistant-2025.10.0b7.dist-info → homeassistant-2025.10.1.dist-info}/RECORD +288 -263
- {homeassistant-2025.10.0b7.dist-info → homeassistant-2025.10.1.dist-info}/WHEEL +0 -0
- {homeassistant-2025.10.0b7.dist-info → homeassistant-2025.10.1.dist-info}/entry_points.txt +0 -0
- {homeassistant-2025.10.0b7.dist-info → homeassistant-2025.10.1.dist-info}/licenses/LICENSE.md +0 -0
- {homeassistant-2025.10.0b7.dist-info → homeassistant-2025.10.1.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
- {homeassistant-2025.10.0b7.dist-info → homeassistant-2025.10.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"config": {
|
|
3
|
+
"abort": {
|
|
4
|
+
"already_configured": "\u0397 \u03c4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7 \u03b4\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03b8\u03b5\u03af",
|
|
5
|
+
"api_error": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2",
|
|
6
|
+
"unknown": "\u039c\u03b7 \u03b1\u03bd\u03b1\u03bc\u03b5\u03bd\u03cc\u03bc\u03b5\u03bd\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1"
|
|
7
|
+
},
|
|
8
|
+
"step": {
|
|
9
|
+
"user": {
|
|
10
|
+
"data": {
|
|
11
|
+
"location": "\u03a4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\u03b1"
|
|
12
|
+
},
|
|
13
|
+
"data_description": {
|
|
14
|
+
"location": "\u03a4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\u03b1"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"options": {
|
|
20
|
+
"step": {
|
|
21
|
+
"init": {
|
|
22
|
+
"data": {
|
|
23
|
+
"language_override": "\u0393\u03bb\u03ce\u03c3\u03c3\u03b1"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"config": {
|
|
3
|
+
"abort": {
|
|
4
|
+
"already_configured": "L'emplacement est d\u00e9j\u00e0 configur\u00e9",
|
|
5
|
+
"api_error": "\u00c9chec de connexion",
|
|
6
|
+
"unknown": "Erreur inattendue"
|
|
7
|
+
},
|
|
8
|
+
"step": {
|
|
9
|
+
"user": {
|
|
10
|
+
"data": {
|
|
11
|
+
"location": "Emplacement"
|
|
12
|
+
},
|
|
13
|
+
"data_description": {
|
|
14
|
+
"location": "Emplacement"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"options": {
|
|
20
|
+
"step": {
|
|
21
|
+
"init": {
|
|
22
|
+
"data": {
|
|
23
|
+
"language_override": "Langue"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -28,6 +28,12 @@
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
|
+
"issues": {
|
|
32
|
+
"deprecated_firmware": {
|
|
33
|
+
"description": "Konnected \u7684\u96c6\u6210\u5df2\u5f03\u7528\uff0cKonnected \u5f3a\u70c8\u5efa\u8bae\u60a8\u6309\u7167 {kb_page_url} \u4e0a\u7684\u6307\u5357\u8fc1\u79fb\u5230\u57fa\u4e8e ESPHome \u7684\u56fa\u4ef6\u5e76\u8fdb\u884c\u96c6\u6210\u3002\u8fc1\u79fb\u5b8c\u6210\u540e\uff0c\u8bf7\u786e\u4fdd\u60a8\u7684 configuration.yaml \u6587\u4ef6\u4e2d\u5df2\u79fb\u9664\u4efb\u4f55 Konnected YAML \u914d\u7f6e\uff0c\u5e76\u4ece Home Assistant \u4e2d\u79fb\u9664\u6b64\u96c6\u6210\u3002",
|
|
34
|
+
"title": "Konnected \u56fa\u4ef6\u5df2\u5f03\u7528"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
31
37
|
"options": {
|
|
32
38
|
"abort": {
|
|
33
39
|
"not_konn_panel": "\u4e0d\u662f\u53ef\u8bc6\u522b\u7684 Konnected.io \u8bbe\u5907"
|
|
@@ -53,6 +53,20 @@
|
|
|
53
53
|
"low": "Faible",
|
|
54
54
|
"medium": "Moyen"
|
|
55
55
|
}
|
|
56
|
+
},
|
|
57
|
+
"globe_brightness": {
|
|
58
|
+
"state": {
|
|
59
|
+
"high": "\u00c9lev\u00e9",
|
|
60
|
+
"low": "Faible",
|
|
61
|
+
"medium": "Moyen"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"globe_light": {
|
|
65
|
+
"state": {
|
|
66
|
+
"auto": "Auto",
|
|
67
|
+
"off": "D\u00e9sactiv\u00e9",
|
|
68
|
+
"on": "Activ\u00e9"
|
|
69
|
+
}
|
|
56
70
|
}
|
|
57
71
|
},
|
|
58
72
|
"sensor": {
|
|
@@ -2,14 +2,21 @@
|
|
|
2
2
|
"config": {
|
|
3
3
|
"abort": {
|
|
4
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
|
+
"authorize_url_timeout": "\u039b\u03ae\u03be\u03b7 \u03c7\u03c1\u03bf\u03bd\u03b9\u03ba\u03bf\u03cd \u03bf\u03c1\u03af\u03bf\u03c5 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7\u03c2 URL \u03b5\u03be\u03bf\u03c5\u03c3\u03b9\u03bf\u03b4\u03cc\u03c4\u03b7\u03c3\u03b7\u03c2.",
|
|
5
6
|
"cannot_connect": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2",
|
|
6
7
|
"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",
|
|
7
8
|
"missing_capabilities": "\u039f MCP server \u03b4\u03b5\u03bd \u03c5\u03c0\u03bf\u03c3\u03c4\u03b7\u03c1\u03af\u03b6\u03b5\u03b9 \u03bc\u03b9\u03b1 \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7 \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 (\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1)",
|
|
8
9
|
"missing_credentials": "\u0397 \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 \u03b1\u03c0\u03b1\u03b9\u03c4\u03b5\u03af \u03b4\u03b9\u03b1\u03c0\u03b9\u03c3\u03c4\u03b5\u03c5\u03c4\u03ae\u03c1\u03b9\u03b1 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2.",
|
|
10
|
+
"no_url_available": "\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL. \u0393\u03b9\u03b1 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1, [\u03b5\u03bb\u03ad\u03b3\u03be\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b5\u03bd\u03cc\u03c4\u03b7\u03c4\u03b1 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1\u03c2]({docs_url})",
|
|
11
|
+
"oauth_error": "\u039b\u03ae\u03c6\u03b8\u03b7\u03ba\u03b1\u03bd \u03bc\u03b7 \u03ad\u03b3\u03ba\u03c5\u03c1\u03b1 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 token.",
|
|
12
|
+
"oauth_failed": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7 \u03bb\u03ae\u03c8\u03b7 \u03c4\u03bf\u03c5 token \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2.",
|
|
13
|
+
"oauth_timeout": "\u03a7\u03c1\u03bf\u03bd\u03b9\u03ba\u03cc \u03cc\u03c1\u03b9\u03bf \u03b5\u03c0\u03af\u03bb\u03c5\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 OAuth token.",
|
|
14
|
+
"oauth_unauthorized": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1 \u03b5\u03be\u03bf\u03c5\u03c3\u03b9\u03bf\u03b4\u03cc\u03c4\u03b7\u03c3\u03b7\u03c2 OAuth \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7 \u03bb\u03ae\u03c8\u03b7 \u03c4\u03bf\u03c5 token \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2.",
|
|
9
15
|
"reauth_account_mismatch": "\u039f \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf\u03c2 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7\u03c2 \u03b4\u03b5\u03bd \u03c4\u03b1\u03b9\u03c1\u03b9\u03ac\u03b6\u03b5\u03b9 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03c4\u03bf\u03c5 MCP Server \u03c0\u03bf\u03c5 \u03c7\u03c1\u03b5\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03b5\u03ba \u03bd\u03ad\u03bf\u03c5 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2.",
|
|
10
16
|
"reauth_successful": "\u039f \u03b5\u03ba \u03bd\u03ad\u03bf\u03c5 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03ae\u03c4\u03b1\u03bd \u03b5\u03c0\u03b9\u03c4\u03c5\u03c7\u03ae\u03c2",
|
|
11
17
|
"timeout_connect": "\u03a7\u03c1\u03bf\u03bd\u03b9\u03ba\u03cc \u03cc\u03c1\u03b9\u03bf \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2",
|
|
12
|
-
"unknown": "\u039c\u03b7 \u03b1\u03bd\u03b1\u03bc\u03b5\u03bd\u03cc\u03bc\u03b5\u03bd\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1"
|
|
18
|
+
"unknown": "\u039c\u03b7 \u03b1\u03bd\u03b1\u03bc\u03b5\u03bd\u03cc\u03bc\u03b5\u03bd\u03bf \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1",
|
|
19
|
+
"user_rejected_authorize": "\u0397 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd \u03b1\u03c0\u03bf\u03c1\u03c1\u03af\u03c6\u03b8\u03b7\u03ba\u03b5: {error}"
|
|
13
20
|
},
|
|
14
21
|
"error": {
|
|
15
22
|
"cannot_connect": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2",
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"config": {
|
|
3
3
|
"abort": {
|
|
4
|
+
"authorize_url_timeout": "Time-out by it generearjen fan autorisaasje-URL.",
|
|
4
5
|
"cannot_connect": "Kin gjin ferbining meitsje",
|
|
5
6
|
"missing_credentials": "Foar dy yntegraasje binne applikaasje oanmeld gegevens fereaske.",
|
|
7
|
+
"no_url_available": "Gjin URL beskikber. Foar ynformaasje oer dizze flater, [rieplachtsje de dokumintaasje] ({docs_url})",
|
|
8
|
+
"oauth_error": "Unjildige tokengegevens \u00fbntfongen.",
|
|
6
9
|
"reauth_successful": "Herautentikaasje slagge",
|
|
7
10
|
"timeout_connect": "Time-out by it meitsjen fan ferbining",
|
|
8
|
-
"unknown": "Net ferwachte flater"
|
|
11
|
+
"unknown": "Net ferwachte flater",
|
|
12
|
+
"user_rejected_authorize": "Akkountkeppeling wegere: {error}"
|
|
9
13
|
},
|
|
10
14
|
"step": {
|
|
11
15
|
"pick_implementation": {
|
|
@@ -2,13 +2,20 @@
|
|
|
2
2
|
"config": {
|
|
3
3
|
"abort": {
|
|
4
4
|
"already_configured": "Apparaat is al geconfigureerd",
|
|
5
|
+
"authorize_url_timeout": "Time-out bij het genereren van autorisatie-URL.",
|
|
5
6
|
"cannot_connect": "Kan geen verbinding maken",
|
|
6
7
|
"invalid_auth": "Ongeldige authenticatie",
|
|
7
8
|
"missing_capabilities": "De MCP-server ondersteunt een vereiste mogelijkheid niet (Tools)",
|
|
8
9
|
"missing_credentials": "Voor deze integratie zijn applicatie inloggegevens vereist.",
|
|
10
|
+
"no_url_available": "Geen URL beschikbaar. Voor informatie over deze fout, [raadpleeg de documentatie]({docs_url})",
|
|
11
|
+
"oauth_error": "Ongeldige tokengegevens ontvangen.",
|
|
12
|
+
"oauth_failed": "Fout bij het verkrijgen van toegangstoken.",
|
|
13
|
+
"oauth_timeout": "Time-out bij het verkrijgen OAuth token.",
|
|
14
|
+
"oauth_unauthorized": "OAuth autorisatiefout tijdens het verkrijgen van een toegangstoken.",
|
|
9
15
|
"reauth_successful": "Herauthenticatie geslaagd",
|
|
10
16
|
"timeout_connect": "Time-out bij het maken van verbinding",
|
|
11
|
-
"unknown": "Onverwachte fout"
|
|
17
|
+
"unknown": "Onverwachte fout",
|
|
18
|
+
"user_rejected_authorize": "Accountkoppeling geweigerd: {error}"
|
|
12
19
|
},
|
|
13
20
|
"error": {
|
|
14
21
|
"cannot_connect": "Kan geen verbinding maken",
|
|
@@ -2,14 +2,21 @@
|
|
|
2
2
|
"config": {
|
|
3
3
|
"abort": {
|
|
4
4
|
"already_configured": "\u8bbe\u5907\u5df2\u914d\u7f6e",
|
|
5
|
+
"authorize_url_timeout": "\u751f\u6210\u6388\u6743\u7f51\u5740\u8d85\u65f6\u3002",
|
|
5
6
|
"cannot_connect": "\u8fde\u63a5\u5931\u8d25",
|
|
6
7
|
"invalid_auth": "\u8eab\u4efd\u9a8c\u8bc1\u65e0\u6548",
|
|
7
8
|
"missing_capabilities": "MCP \u670d\u52a1\u5668\u4e0d\u652f\u6301\u6240\u9700\u529f\u80fd\uff08\u5de5\u5177\uff09",
|
|
8
9
|
"missing_credentials": "\u6b64\u96c6\u6210\u9700\u8981\u5e94\u7528\u51ed\u636e\u3002",
|
|
10
|
+
"no_url_available": "\u6ca1\u6709\u53ef\u7528\u7684\u7f51\u5740\u3002\u6709\u5173\u6b64\u9519\u8bef\u7684\u4fe1\u606f\uff0c\u8bf7[\u68c0\u67e5\u5e2e\u52a9\u7ae0\u8282]({docs_url})",
|
|
11
|
+
"oauth_error": "\u6536\u5230\u65e0\u6548\u7684\u4ee4\u724c\u6570\u636e\u3002",
|
|
12
|
+
"oauth_failed": "\u83b7\u53d6\u8bbf\u95ee\u4ee4\u724c\u65f6\u51fa\u9519\u3002",
|
|
13
|
+
"oauth_timeout": "\u89e3\u6790 OAuth \u4ee4\u724c\u8d85\u65f6\u3002",
|
|
14
|
+
"oauth_unauthorized": "\u83b7\u53d6\u8bbf\u95ee\u4ee4\u724c\u65f6\u51fa\u73b0 OAuth \u6388\u6743\u9519\u8bef\u3002",
|
|
9
15
|
"reauth_account_mismatch": "\u5df2\u8ba4\u8bc1\u7528\u6237\u4e0e\u9700\u8981\u91cd\u65b0\u8ba4\u8bc1\u7684 MCP \u670d\u52a1\u5668\u7528\u6237\u4e0d\u5339\u914d\u3002",
|
|
10
16
|
"reauth_successful": "\u91cd\u65b0\u8ba4\u8bc1\u6210\u529f",
|
|
11
17
|
"timeout_connect": "\u5efa\u7acb\u8fde\u63a5\u8d85\u65f6",
|
|
12
|
-
"unknown": "\u610f\u5916\u9519\u8bef"
|
|
18
|
+
"unknown": "\u610f\u5916\u9519\u8bef",
|
|
19
|
+
"user_rejected_authorize": "\u8d26\u6237\u94fe\u63a5\u88ab\u62d2\u7edd\uff1a{error}"
|
|
13
20
|
},
|
|
14
21
|
"error": {
|
|
15
22
|
"cannot_connect": "\u8fde\u63a5\u5931\u8d25",
|
|
@@ -18,6 +25,18 @@
|
|
|
18
25
|
"unknown": "\u610f\u5916\u9519\u8bef"
|
|
19
26
|
},
|
|
20
27
|
"step": {
|
|
28
|
+
"credentials_choice": {
|
|
29
|
+
"description": "\u60a8\u53ef\u4ee5\u4f7f\u7528\u6765\u81ea\u53e6\u4e00\u4e2a\u96c6\u6210\u7684\u73b0\u6709\u51ed\u636e\u6216\u8bbe\u7f6e\u65b0\u7684\u51ed\u636e\u3002",
|
|
30
|
+
"menu_option_descriptions": {
|
|
31
|
+
"new_credentials": "\u60a8\u5c06\u88ab\u5f15\u5bfc\u8bbe\u7f6e\u65b0\u7684 OAuth \u5ba2\u6237\u7aef ID \u548c\u5bc6\u94a5\u3002",
|
|
32
|
+
"pick_implementation": "\u60a8\u53ef\u4ee5\u4f7f\u7528\u4e4b\u524d\u8f93\u5165\u7684 OAuth \u51ed\u636e\u3002"
|
|
33
|
+
},
|
|
34
|
+
"menu_options": {
|
|
35
|
+
"new_credentials": "\u8bbe\u7f6e\u65b0\u51ed\u636e",
|
|
36
|
+
"pick_implementation": "\u4f7f\u7528\u73b0\u6709\u51ed\u636e"
|
|
37
|
+
},
|
|
38
|
+
"title": "\u9009\u62e9\u5982\u4f55\u4e0e MCP \u670d\u52a1\u5668\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1"
|
|
39
|
+
},
|
|
21
40
|
"pick_implementation": {
|
|
22
41
|
"data": {
|
|
23
42
|
"implementation": "\u5e94\u7528\u7a0b\u5e8f\u51ed\u636e"
|
|
@@ -7,6 +7,7 @@ from typing import TYPE_CHECKING, Any
|
|
|
7
7
|
|
|
8
8
|
from homeassistant.components.media_player import BrowseMedia, MediaClass, MediaType
|
|
9
9
|
from homeassistant.core import HomeAssistant, callback
|
|
10
|
+
from homeassistant.helpers.translation import async_get_cached_translations
|
|
10
11
|
|
|
11
12
|
from .const import MEDIA_SOURCE_DATA, URI_SCHEME, URI_SCHEME_REGEX
|
|
12
13
|
|
|
@@ -62,12 +63,15 @@ class MediaSourceItem:
|
|
|
62
63
|
async def async_browse(self) -> BrowseMediaSource:
|
|
63
64
|
"""Browse this item."""
|
|
64
65
|
if self.domain is None:
|
|
66
|
+
title = async_get_cached_translations(
|
|
67
|
+
self.hass, self.hass.config.language, "common", "media_source"
|
|
68
|
+
).get("component.media_source.common.sources_default", "Media Sources")
|
|
65
69
|
base = BrowseMediaSource(
|
|
66
70
|
domain=None,
|
|
67
71
|
identifier=None,
|
|
68
72
|
media_class=MediaClass.APP,
|
|
69
73
|
media_content_type=MediaType.APPS,
|
|
70
|
-
title=
|
|
74
|
+
title=title,
|
|
71
75
|
can_play=False,
|
|
72
76
|
can_expand=True,
|
|
73
77
|
children_media_class=MediaClass.APP,
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
+
"common": {
|
|
3
|
+
"sources_default": "\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u043c\u0435\u0434\u0438\u0430"
|
|
4
|
+
},
|
|
2
5
|
"exceptions": {
|
|
3
6
|
"browse_media_failed": {
|
|
4
7
|
"message": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043c\u0435\u0434\u0438\u0430 \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 {media_content_id}: {error}"
|
|
@@ -208,7 +208,7 @@ class ModbusStructEntity(ModbusBaseEntity, RestoreEntity):
|
|
|
208
208
|
|
|
209
209
|
def __process_raw_value(self, entry: float | str | bytes) -> str | None:
|
|
210
210
|
"""Process value from sensor with NaN handling, scaling, offset, min/max etc."""
|
|
211
|
-
if self._nan_value and entry in (self._nan_value, -self._nan_value):
|
|
211
|
+
if self._nan_value is not None and entry in (self._nan_value, -self._nan_value):
|
|
212
212
|
return None
|
|
213
213
|
if isinstance(entry, bytes):
|
|
214
214
|
return entry.decode()
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
"already_in_progress": "De configuratie is momenteel al bezig",
|
|
9
9
|
"cannot_connect": "Kan geen verbinding maken",
|
|
10
10
|
"not_connected": "Kan geen verbinding maken",
|
|
11
|
-
"reauth_successful": "Herauthenticatie geslaagd"
|
|
11
|
+
"reauth_successful": "Herauthenticatie geslaagd",
|
|
12
|
+
"time_out": "Time-out bij het maken van verbinding"
|
|
12
13
|
},
|
|
13
14
|
"error": {
|
|
14
15
|
"pin": "PIN is niet juist"
|
|
@@ -721,6 +721,7 @@
|
|
|
721
721
|
"precipitation": "\u0392\u03c1\u03bf\u03c7\u03cc\u03c0\u03c4\u03c9\u03c3\u03b7",
|
|
722
722
|
"precipitation_intensity": "\u0395\u03bd\u03c4\u03b1\u03c3\u03b7 \u03b2\u03c1\u03bf\u03c7\u03cc\u03c0\u03c4\u03c9\u03c3\u03b7\u03c2",
|
|
723
723
|
"pressure": "\u03a0\u03af\u03b5\u03c3\u03b7",
|
|
724
|
+
"reactive_energy": "\u0391\u03b5\u03c1\u03b3\u03b7 \u03b5\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1",
|
|
724
725
|
"reactive_power": "\u0391\u03b5\u03c1\u03b3\u03b7 \u03b9\u03c3\u03c7\u03cd\u03c2",
|
|
725
726
|
"signal_strength": "\u0399\u03c3\u03c7\u03cd\u03c2 \u03c3\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2",
|
|
726
727
|
"sound_pressure": "\u0397\u03c7\u03b7\u03c4\u03b9\u03ba\u03ae \u03c0\u03af\u03b5\u03c3\u03b7",
|
|
@@ -765,6 +766,7 @@
|
|
|
765
766
|
"climate": "\u039a\u03bb\u03af\u03bc\u03b1",
|
|
766
767
|
"cover": "\u03a1\u03bf\u03bb\u03cc",
|
|
767
768
|
"fan": "\u0391\u03bd\u03b5\u03bc\u03b9\u03c3\u03c4\u03ae\u03c1\u03b1\u03c2",
|
|
769
|
+
"image": "\u0395\u03b9\u03ba\u03cc\u03bd\u03b1",
|
|
768
770
|
"light": "\u03a6\u03c9\u03c2",
|
|
769
771
|
"lock": "\u039a\u03bb\u03b5\u03af\u03b4\u03c9\u03bc\u03b1",
|
|
770
772
|
"notify": "\u0395\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2",
|
|
@@ -1269,11 +1269,13 @@
|
|
|
1269
1269
|
"pm1": "PM1",
|
|
1270
1270
|
"pm10": "PM10",
|
|
1271
1271
|
"pm25": "PM2.5",
|
|
1272
|
+
"pm4": "PM4",
|
|
1272
1273
|
"power": "\u7535\u6e90",
|
|
1273
1274
|
"power_factor": "\u529f\u7387\u56e0\u6570",
|
|
1274
1275
|
"precipitation": "\u964d\u6c34\u91cf",
|
|
1275
1276
|
"precipitation_intensity": "\u964d\u6c34\u5f3a\u5ea6",
|
|
1276
1277
|
"pressure": "\u538b\u529b",
|
|
1278
|
+
"reactive_energy": "\u65e0\u529f\u7535\u80fd",
|
|
1277
1279
|
"reactive_power": "\u65e0\u529f\u529f\u7387",
|
|
1278
1280
|
"signal_strength": "\u4fe1\u53f7\u5f3a\u5ea6",
|
|
1279
1281
|
"sound_pressure": "\u58f0\u538b",
|
|
@@ -34,6 +34,7 @@ async def async_setup_entry(
|
|
|
34
34
|
|
|
35
35
|
coordinator = NordPoolDataUpdateCoordinator(hass, config_entry)
|
|
36
36
|
await coordinator.fetch_data(dt_util.utcnow(), True)
|
|
37
|
+
await coordinator.update_listeners(dt_util.utcnow())
|
|
37
38
|
if not coordinator.last_update_success:
|
|
38
39
|
raise ConfigEntryNotReady(
|
|
39
40
|
translation_domain=DOMAIN,
|
|
@@ -44,9 +44,10 @@ class NordPoolDataUpdateCoordinator(DataUpdateCoordinator[DeliveryPeriodsData]):
|
|
|
44
44
|
name=DOMAIN,
|
|
45
45
|
)
|
|
46
46
|
self.client = NordPoolClient(session=async_get_clientsession(hass))
|
|
47
|
-
self.
|
|
47
|
+
self.data_unsub: Callable[[], None] | None = None
|
|
48
|
+
self.listener_unsub: Callable[[], None] | None = None
|
|
48
49
|
|
|
49
|
-
def
|
|
50
|
+
def get_next_data_interval(self, now: datetime) -> datetime:
|
|
50
51
|
"""Compute next time an update should occur."""
|
|
51
52
|
next_hour = dt_util.utcnow() + timedelta(hours=1)
|
|
52
53
|
next_run = datetime(
|
|
@@ -56,23 +57,45 @@ class NordPoolDataUpdateCoordinator(DataUpdateCoordinator[DeliveryPeriodsData]):
|
|
|
56
57
|
next_hour.hour,
|
|
57
58
|
tzinfo=dt_util.UTC,
|
|
58
59
|
)
|
|
59
|
-
LOGGER.debug("Next update at %s", next_run)
|
|
60
|
+
LOGGER.debug("Next data update at %s", next_run)
|
|
61
|
+
return next_run
|
|
62
|
+
|
|
63
|
+
def get_next_15_interval(self, now: datetime) -> datetime:
|
|
64
|
+
"""Compute next time we need to notify listeners."""
|
|
65
|
+
next_run = dt_util.utcnow() + timedelta(minutes=15)
|
|
66
|
+
next_minute = next_run.minute // 15 * 15
|
|
67
|
+
next_run = next_run.replace(
|
|
68
|
+
minute=next_minute, second=0, microsecond=0, tzinfo=dt_util.UTC
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
LOGGER.debug("Next listener update at %s", next_run)
|
|
60
72
|
return next_run
|
|
61
73
|
|
|
62
74
|
async def async_shutdown(self) -> None:
|
|
63
75
|
"""Cancel any scheduled call, and ignore new runs."""
|
|
64
76
|
await super().async_shutdown()
|
|
65
|
-
if self.
|
|
66
|
-
self.
|
|
67
|
-
self.
|
|
77
|
+
if self.data_unsub:
|
|
78
|
+
self.data_unsub()
|
|
79
|
+
self.data_unsub = None
|
|
80
|
+
if self.listener_unsub:
|
|
81
|
+
self.listener_unsub()
|
|
82
|
+
self.listener_unsub = None
|
|
83
|
+
|
|
84
|
+
async def update_listeners(self, now: datetime) -> None:
|
|
85
|
+
"""Update entity listeners."""
|
|
86
|
+
self.listener_unsub = async_track_point_in_utc_time(
|
|
87
|
+
self.hass,
|
|
88
|
+
self.update_listeners,
|
|
89
|
+
self.get_next_15_interval(dt_util.utcnow()),
|
|
90
|
+
)
|
|
91
|
+
self.async_update_listeners()
|
|
68
92
|
|
|
69
93
|
async def fetch_data(self, now: datetime, initial: bool = False) -> None:
|
|
70
94
|
"""Fetch data from Nord Pool."""
|
|
71
|
-
self.
|
|
72
|
-
self.hass, self.fetch_data, self.
|
|
95
|
+
self.data_unsub = async_track_point_in_utc_time(
|
|
96
|
+
self.hass, self.fetch_data, self.get_next_data_interval(dt_util.utcnow())
|
|
73
97
|
)
|
|
74
98
|
if self.config_entry.pref_disable_polling and not initial:
|
|
75
|
-
self.async_update_listeners()
|
|
76
99
|
return
|
|
77
100
|
try:
|
|
78
101
|
data = await self.handle_data(initial)
|
|
@@ -307,7 +307,7 @@
|
|
|
307
307
|
},
|
|
308
308
|
"markdown": {
|
|
309
309
|
"name": "Format as Markdown",
|
|
310
|
-
"description": "Enable Markdown formatting for the message body
|
|
310
|
+
"description": "Enable Markdown formatting for the message body. See the Markdown guide for syntax details: https://www.markdownguide.org/basic-syntax/."
|
|
311
311
|
},
|
|
312
312
|
"tags": {
|
|
313
313
|
"name": "Tags/Emojis",
|
|
@@ -366,7 +366,7 @@
|
|
|
366
366
|
"name": "Adresa URL ikony"
|
|
367
367
|
},
|
|
368
368
|
"markdown": {
|
|
369
|
-
"description": "Povolte form\u00e1tov\u00e1n\u00ed Markdown pro t\u011blo zpr\u00e1vy
|
|
369
|
+
"description": "Povolte form\u00e1tov\u00e1n\u00ed Markdown pro t\u011blo zpr\u00e1vy. Podrobnosti o syntaxi naleznete v pr\u016fvodci Markdown: https://www.markdownguide.org/basic-syntax/",
|
|
370
370
|
"name": "Form\u00e1tovat jako Markdown"
|
|
371
371
|
},
|
|
372
372
|
"message": {
|
|
@@ -366,7 +366,7 @@
|
|
|
366
366
|
"name": "Icon-URL"
|
|
367
367
|
},
|
|
368
368
|
"markdown": {
|
|
369
|
-
"description": "Markdown-Formatierung f\u00fcr den Nachrichtentext aktivieren
|
|
369
|
+
"description": "Markdown-Formatierung f\u00fcr den Nachrichtentext aktivieren. Weitere Informationen zur Syntax finden sich in der Markdown-Anleitung: https://www.markdownguide.org/basic-syntax/.",
|
|
370
370
|
"name": "Als Markdown formatieren"
|
|
371
371
|
},
|
|
372
372
|
"message": {
|
|
@@ -366,7 +366,7 @@
|
|
|
366
366
|
"name": "Icon URL"
|
|
367
367
|
},
|
|
368
368
|
"markdown": {
|
|
369
|
-
"description": "Enable Markdown formatting for the message body
|
|
369
|
+
"description": "Enable Markdown formatting for the message body. See the Markdown guide for syntax details: https://www.markdownguide.org/basic-syntax/.",
|
|
370
370
|
"name": "Format as Markdown"
|
|
371
371
|
},
|
|
372
372
|
"message": {
|
|
@@ -366,7 +366,7 @@
|
|
|
366
366
|
"name": "Icon URL"
|
|
367
367
|
},
|
|
368
368
|
"markdown": {
|
|
369
|
-
"description": "Enable Markdown formatting for the message body
|
|
369
|
+
"description": "Enable Markdown formatting for the message body. See the Markdown guide for syntax details: https://www.markdownguide.org/basic-syntax/.",
|
|
370
370
|
"name": "Format as Markdown"
|
|
371
371
|
},
|
|
372
372
|
"message": {
|
|
@@ -366,7 +366,6 @@
|
|
|
366
366
|
"name": "URL del icono"
|
|
367
367
|
},
|
|
368
368
|
"markdown": {
|
|
369
|
-
"description": "Habilitar el formato Markdown para el cuerpo del mensaje (s\u00f3lo aplicaci\u00f3n web). Consulta la gu\u00eda de Markdown para obtener informaci\u00f3n sobre la sintaxis: https://www.markdownguide.org/basic-syntax/.",
|
|
370
369
|
"name": "Formatear como Markdown"
|
|
371
370
|
},
|
|
372
371
|
"message": {
|
|
@@ -366,7 +366,7 @@
|
|
|
366
366
|
"name": "Ikooni URL"
|
|
367
367
|
},
|
|
368
368
|
"markdown": {
|
|
369
|
-
"description": "Luba s\u00f5numi sisu jaoks Markdowni vorming
|
|
369
|
+
"description": "Luba s\u00f5numi sisu jaoks Markdowni vorming. S\u00fcntaksi \u00fcksikasjade saamiseks vaata Markdowni juhendit: https://www.markdownguide.org/basic-syntax/.",
|
|
370
370
|
"name": "Vorminda Markdownina"
|
|
371
371
|
},
|
|
372
372
|
"message": {
|
|
@@ -363,7 +363,6 @@
|
|
|
363
363
|
"name": "URL Deilbh\u00edn"
|
|
364
364
|
},
|
|
365
365
|
"markdown": {
|
|
366
|
-
"description": "Cumasaigh form\u00e1idi\u00fa Markdown do chorp an teachtaireachta (aip ghr\u00e9as\u00e1in amh\u00e1in). F\u00e9ach ar an treoir Markdown le haghaidh sonra\u00ed comhr\u00e9ir: https://www.markdownguide.org/basic-syntax/.",
|
|
367
366
|
"name": "Form\u00e1idigh mar Mharc\u00e1il anuas"
|
|
368
367
|
},
|
|
369
368
|
"message": {
|
|
@@ -366,7 +366,6 @@
|
|
|
366
366
|
"name": "Piktogramos URL"
|
|
367
367
|
},
|
|
368
368
|
"markdown": {
|
|
369
|
-
"description": "\u012egalinkite Markdown formatavim\u0105 prane\u0161imo turiniui (tik \u017einiatinklio programai). Sintaks\u0117s informacij\u0105 rasite Markdown vadove: https://www.markdownguide.org/basic-syntax/.",
|
|
370
369
|
"name": "Formatuoti kaip Markdown"
|
|
371
370
|
},
|
|
372
371
|
"message": {
|
|
@@ -366,7 +366,6 @@
|
|
|
366
366
|
"name": "URL do \u00edcone"
|
|
367
367
|
},
|
|
368
368
|
"markdown": {
|
|
369
|
-
"description": "Ativar a formata\u00e7\u00e3o Markdown para o corpo da mensagem (apenas aplica\u00e7\u00e3o Web). Consulte o guia Markdown para obter detalhes de sintaxe: https://www.markdownguide.org/basic-syntax/.",
|
|
370
369
|
"name": "Formatar como Markdown"
|
|
371
370
|
},
|
|
372
371
|
"message": {
|
|
@@ -363,7 +363,7 @@
|
|
|
363
363
|
"name": "URL-\u0430\u0434\u0440\u0435\u0441 \u0438\u043a\u043e\u043d\u043a\u0438"
|
|
364
364
|
},
|
|
365
365
|
"markdown": {
|
|
366
|
-
"description": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Markdown \u0434\u043b\u044f \u0442\u0435\u043b\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f
|
|
366
|
+
"description": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Markdown \u0434\u043b\u044f \u0442\u0435\u043b\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0421\u043c. \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e Markdown \u0434\u043b\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430: https://www.markdownguide.org/basic-syntax/.",
|
|
367
367
|
"name": "\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a Markdown"
|
|
368
368
|
},
|
|
369
369
|
"message": {
|