homeassistant 2025.7.0b8__py3-none-any.whl → 2025.7.0b9__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/ai_task/translations/nl.json +3 -0
- homeassistant/components/alexa_devices/manifest.json +1 -1
- homeassistant/components/alexa_devices/translations/de.json +2 -1
- homeassistant/components/alexa_devices/translations/es.json +2 -1
- homeassistant/components/alexa_devices/translations/et.json +2 -1
- homeassistant/components/alexa_devices/translations/ga.json +11 -0
- homeassistant/components/alexa_devices/translations/lt.json +29 -2
- homeassistant/components/alexa_devices/translations/mk.json +8 -0
- homeassistant/components/alexa_devices/translations/sk.json +2 -1
- homeassistant/components/alexa_devices/translations/zh-Hant.json +2 -1
- homeassistant/components/assist_satellite/translations/nl.json +7 -0
- homeassistant/components/devolo_home_control/translations/lt.json +10 -0
- homeassistant/components/ecovacs/manifest.json +1 -1
- homeassistant/components/emoncms/translations/ga.json +1 -0
- homeassistant/components/enphase_envoy/translations/et.json +1 -0
- homeassistant/components/enphase_envoy/translations/lt.json +1 -0
- homeassistant/components/enphase_envoy/translations/nl.json +2 -1
- homeassistant/components/ezviz/translations/lt.json +10 -0
- homeassistant/components/frontend/manifest.json +1 -1
- homeassistant/components/google_generative_ai_conversation/translations/lt.json +28 -0
- homeassistant/components/google_travel_time/translations/it.json +7 -0
- homeassistant/components/hassio/ingress.py +6 -2
- homeassistant/components/home_connect/translations/it.json +3 -0
- homeassistant/components/homeassistant/translations/it.json +24 -0
- homeassistant/components/homeassistant_hardware/translations/et.json +1 -0
- homeassistant/components/homeassistant_hardware/translations/ga.json +4 -0
- homeassistant/components/homeassistant_hardware/translations/lt.json +2 -0
- homeassistant/components/homeassistant_hardware/translations/mk.json +3 -0
- homeassistant/components/homeassistant_sky_connect/translations/et.json +2 -0
- homeassistant/components/homeassistant_sky_connect/translations/ga.json +8 -0
- homeassistant/components/homeassistant_sky_connect/translations/lt.json +4 -0
- homeassistant/components/homeassistant_yellow/translations/et.json +1 -0
- homeassistant/components/homeassistant_yellow/translations/ga.json +4 -0
- homeassistant/components/homeassistant_yellow/translations/lt.json +3 -0
- homeassistant/components/immich/translations/nl.json +5 -0
- homeassistant/components/lcn/translations/cs.json +0 -3
- homeassistant/components/lcn/translations/de.json +1 -1
- homeassistant/components/lcn/translations/el.json +0 -3
- homeassistant/components/lcn/translations/en-GB.json +0 -3
- homeassistant/components/lcn/translations/en.json +1 -1
- homeassistant/components/lcn/translations/es.json +1 -1
- homeassistant/components/lcn/translations/et.json +0 -3
- homeassistant/components/lcn/translations/hu.json +0 -3
- homeassistant/components/lcn/translations/ja.json +0 -3
- homeassistant/components/lcn/translations/lt.json +0 -3
- homeassistant/components/lcn/translations/pt-BR.json +0 -3
- homeassistant/components/lcn/translations/pt.json +0 -3
- homeassistant/components/lcn/translations/ru.json +0 -3
- homeassistant/components/lcn/translations/sk.json +0 -3
- homeassistant/components/lcn/translations/sv.json +0 -3
- homeassistant/components/lcn/translations/tr.json +0 -3
- homeassistant/components/lcn/translations/zh-Hans.json +0 -3
- homeassistant/components/lcn/translations/zh-Hant.json +0 -3
- homeassistant/components/lg_thinq/translations/et.json +3 -1
- homeassistant/components/lg_thinq/translations/lt.json +3 -1
- homeassistant/components/litterrobot/translations/et.json +1 -0
- homeassistant/components/litterrobot/translations/lt.json +1 -0
- homeassistant/components/litterrobot/translations/sk.json +1 -0
- homeassistant/components/lyric/translations/it.json +3 -0
- homeassistant/components/miele/translations/it.json +3 -0
- homeassistant/components/miele/translations/sk.json +1 -0
- homeassistant/components/mqtt/translations/bg.json +10 -0
- homeassistant/components/mqtt/translations/ga.json +10 -0
- homeassistant/components/mqtt/translations/it.json +7 -1
- homeassistant/components/mqtt/translations/lt.json +37 -0
- homeassistant/components/mqtt/translations/mk.json +9 -0
- homeassistant/components/nordpool/coordinator.py +3 -0
- homeassistant/components/ollama/__init__.py +30 -4
- homeassistant/components/ollama/config_flow.py +164 -135
- homeassistant/components/ollama/conversation.py +8 -243
- homeassistant/components/ollama/entity.py +261 -0
- homeassistant/components/ollama/strings.json +12 -10
- homeassistant/components/ollama/translations/bg.json +0 -1
- homeassistant/components/ollama/translations/ca.json +0 -10
- homeassistant/components/ollama/translations/cs.json +1 -10
- homeassistant/components/ollama/translations/de.json +1 -10
- homeassistant/components/ollama/translations/el.json +1 -10
- homeassistant/components/ollama/translations/en-GB.json +0 -10
- homeassistant/components/ollama/translations/en.json +12 -10
- homeassistant/components/ollama/translations/es.json +1 -10
- homeassistant/components/ollama/translations/et.json +1 -10
- homeassistant/components/ollama/translations/fi.json +0 -7
- homeassistant/components/ollama/translations/fr.json +1 -10
- homeassistant/components/ollama/translations/ga.json +0 -3
- homeassistant/components/ollama/translations/hu.json +1 -10
- homeassistant/components/ollama/translations/it.json +0 -8
- homeassistant/components/ollama/translations/ja.json +1 -10
- homeassistant/components/ollama/translations/lt.json +1 -10
- homeassistant/components/ollama/translations/pt-BR.json +0 -3
- homeassistant/components/ollama/translations/pt.json +1 -10
- homeassistant/components/ollama/translations/ru.json +1 -10
- homeassistant/components/ollama/translations/sk.json +1 -10
- homeassistant/components/ollama/translations/sv.json +1 -10
- homeassistant/components/ollama/translations/tr.json +0 -10
- homeassistant/components/ollama/translations/zh-Hans.json +1 -10
- homeassistant/components/ollama/translations/zh-Hant.json +1 -10
- homeassistant/components/opentherm_gw/translations/bg.json +3 -0
- homeassistant/components/opentherm_gw/translations/et.json +3 -0
- homeassistant/components/opentherm_gw/translations/ga.json +3 -0
- homeassistant/components/opentherm_gw/translations/lt.json +3 -0
- homeassistant/components/opentherm_gw/translations/mk.json +7 -0
- homeassistant/components/overkiz/translations/et.json +1 -0
- homeassistant/components/overkiz/translations/lt.json +1 -0
- homeassistant/components/pegel_online/translations/lt.json +2 -1
- homeassistant/components/playstation_network/translations/cs.json +0 -3
- homeassistant/components/playstation_network/translations/el.json +0 -3
- homeassistant/components/playstation_network/translations/en.json +1 -1
- homeassistant/components/playstation_network/translations/et.json +1 -1
- homeassistant/components/playstation_network/translations/ga.json +0 -3
- homeassistant/components/playstation_network/translations/hu.json +0 -3
- homeassistant/components/playstation_network/translations/it.json +0 -3
- homeassistant/components/playstation_network/translations/lt.json +29 -0
- homeassistant/components/playstation_network/translations/mk.json +0 -3
- homeassistant/components/playstation_network/translations/nl.json +0 -3
- homeassistant/components/playstation_network/translations/pl.json +0 -3
- homeassistant/components/playstation_network/translations/pt.json +0 -3
- homeassistant/components/playstation_network/translations/sk.json +1 -1
- homeassistant/components/playstation_network/translations/sv.json +0 -3
- homeassistant/components/playstation_network/translations/zh-Hans.json +0 -3
- homeassistant/components/playstation_network/translations/zh-Hant.json +1 -1
- homeassistant/components/proximity/translations/lt.json +25 -1
- homeassistant/components/proximity/translations/nl.json +3 -0
- homeassistant/components/reolink/translations/it.json +3 -0
- homeassistant/components/russound_rio/translations/nl.json +7 -0
- homeassistant/components/scrape/translations/it.json +1 -0
- homeassistant/components/sensibo/translations/pt-BR.json +4 -1
- homeassistant/components/sensibo/translations/sv.json +3 -3
- homeassistant/components/sensor/translations/it.json +1 -0
- homeassistant/components/shelly/__init__.py +8 -1
- homeassistant/components/shelly/const.py +3 -0
- homeassistant/components/shelly/repairs.py +87 -4
- homeassistant/components/shelly/strings.json +14 -0
- homeassistant/components/shelly/translations/bg.json +7 -0
- homeassistant/components/shelly/translations/de.json +14 -0
- homeassistant/components/shelly/translations/en.json +14 -0
- homeassistant/components/shelly/translations/es.json +14 -0
- homeassistant/components/shelly/translations/et.json +11 -0
- homeassistant/components/sma/config_flow.py +30 -1
- homeassistant/components/smarla/translations/it.json +9 -0
- homeassistant/components/sonos/translations/lt.json +9 -0
- homeassistant/components/sql/translations/it.json +1 -0
- homeassistant/components/squeezebox/translations/it.json +5 -0
- homeassistant/components/subaru/translations/lt.json +2 -0
- homeassistant/components/subaru/translations/mk.json +12 -0
- homeassistant/components/switchbot/translations/et.json +1 -0
- homeassistant/components/switchbot/translations/ga.json +13 -0
- homeassistant/components/switchbot/translations/lt.json +54 -0
- homeassistant/components/switchbot/translations/nl.json +1 -0
- homeassistant/components/switchbot/translations/sk.json +1 -0
- homeassistant/components/switchbot/translations/zh-Hant.json +1 -0
- homeassistant/components/telegram_bot/translations/bg.json +10 -0
- homeassistant/components/telegram_bot/translations/ga.json +28 -0
- homeassistant/components/telegram_bot/translations/it.json +12 -0
- homeassistant/components/telegram_bot/translations/lt.json +30 -0
- homeassistant/components/telegram_bot/translations/mk.json +5 -0
- homeassistant/components/template/translations/it.json +1 -0
- homeassistant/components/tesla_fleet/translations/et.json +3 -0
- homeassistant/components/tesla_fleet/translations/lt.json +3 -0
- homeassistant/components/tesla_fleet/translations/mk.json +3 -0
- homeassistant/components/tesla_fleet/translations/nl.json +3 -0
- homeassistant/components/thermopro/manifest.json +1 -1
- homeassistant/components/thermopro/translations/lt.json +7 -0
- homeassistant/components/tuya/translations/it.json +13 -0
- homeassistant/components/unifiprotect/config_flow.py +1 -1
- homeassistant/components/uptimerobot/translations/it.json +5 -0
- homeassistant/components/weatherflow_cloud/translations/ga.json +1 -0
- homeassistant/components/webdav/translations/et.json +1 -0
- homeassistant/components/webdav/translations/ga.json +1 -0
- homeassistant/components/webdav/translations/lt.json +1 -0
- homeassistant/components/webdav/translations/mk.json +7 -0
- homeassistant/components/whirlpool/translations/et.json +1 -0
- homeassistant/components/whirlpool/translations/lt.json +1 -0
- homeassistant/components/withings/translations/it.json +3 -0
- homeassistant/components/zha/translations/it.json +10 -2
- homeassistant/components/zha/translations/lt.json +50 -0
- homeassistant/components/zwave_js/strings.json +11 -11
- homeassistant/components/zwave_js/translations/bg.json +6 -20
- homeassistant/components/zwave_js/translations/cs.json +0 -22
- homeassistant/components/zwave_js/translations/de.json +0 -23
- homeassistant/components/zwave_js/translations/el.json +0 -23
- homeassistant/components/zwave_js/translations/en-GB.json +0 -23
- homeassistant/components/zwave_js/translations/en.json +11 -11
- homeassistant/components/zwave_js/translations/es.json +0 -23
- homeassistant/components/zwave_js/translations/et.json +0 -23
- homeassistant/components/zwave_js/translations/fi.json +0 -11
- homeassistant/components/zwave_js/translations/ga.json +16 -22
- homeassistant/components/zwave_js/translations/hu.json +0 -23
- homeassistant/components/zwave_js/translations/it.json +0 -12
- homeassistant/components/zwave_js/translations/lt.json +32 -22
- homeassistant/components/zwave_js/translations/mk.json +16 -7
- homeassistant/components/zwave_js/translations/pt.json +0 -23
- homeassistant/components/zwave_js/translations/ru.json +0 -21
- homeassistant/components/zwave_js/translations/sk.json +0 -23
- homeassistant/components/zwave_js/translations/sv.json +0 -23
- homeassistant/components/zwave_js/translations/tr.json +0 -13
- homeassistant/components/zwave_js/translations/zh-Hans.json +0 -23
- homeassistant/components/zwave_js/translations/zh-Hant.json +0 -23
- homeassistant/const.py +1 -1
- homeassistant/package_constraints.txt +1 -1
- {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/METADATA +1 -1
- {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/RECORD +206 -201
- homeassistant/components/zwave_js/translations/sq.json +0 -7
- {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/WHEEL +0 -0
- {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/entry_points.txt +0 -0
- {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/licenses/LICENSE.md +0 -0
- {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
- {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/top_level.txt +0 -0
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
}
|
|
8
8
|
},
|
|
9
9
|
"exceptions": {
|
|
10
|
+
"change_hvac_mode_not_supported": {
|
|
11
|
+
"message": "N\u00ed thaca\u00edtear le modh HVAC a athr\u00fa."
|
|
12
|
+
},
|
|
10
13
|
"invalid_gateway_id": {
|
|
11
14
|
"message": "N\u00edor aims\u00edodh n\u00f3 n\u00edor l\u00f3d\u00e1ileadh an geata {gw_id}!"
|
|
12
15
|
}
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
"data": {
|
|
13
13
|
"station": "Stotis"
|
|
14
14
|
},
|
|
15
|
-
"description": "Rasta {stations_count} sto\u010di\u0173 spinduliu"
|
|
15
|
+
"description": "Rasta {stations_count} sto\u010di\u0173 spinduliu",
|
|
16
|
+
"title": "Pasirinkite stot\u012f, kuri\u0105 norite prid\u0117ti"
|
|
16
17
|
},
|
|
17
18
|
"user": {
|
|
18
19
|
"data": {
|
|
@@ -51,9 +51,6 @@
|
|
|
51
51
|
"name": "\u0391\u03c3\u03b7\u03bc\u03ad\u03bd\u03b9\u03b1 \u03c4\u03c1\u03cc\u03c0\u03b1\u03b9\u03b1",
|
|
52
52
|
"unit_of_measurement": "\u03c4\u03c1\u03cc\u03c0\u03b1\u03b9\u03b1"
|
|
53
53
|
},
|
|
54
|
-
"online_id": {
|
|
55
|
-
"name": "Online-ID"
|
|
56
|
-
},
|
|
57
54
|
"trophy_level": {
|
|
58
55
|
"name": "\u0395\u03c0\u03af\u03c0\u03b5\u03b4\u03bf \u03c4\u03c1\u03bf\u03c0\u03b1\u03af\u03bf\u03c5"
|
|
59
56
|
},
|
|
@@ -33,6 +33,35 @@
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
|
+
"entity": {
|
|
37
|
+
"sensor": {
|
|
38
|
+
"earned_trophies_bronze": {
|
|
39
|
+
"name": "Bronziniai trof\u0117jai",
|
|
40
|
+
"unit_of_measurement": "trof\u0117jai"
|
|
41
|
+
},
|
|
42
|
+
"earned_trophies_gold": {
|
|
43
|
+
"name": "Auksiniai trof\u0117jai",
|
|
44
|
+
"unit_of_measurement": "trof\u0117jai"
|
|
45
|
+
},
|
|
46
|
+
"earned_trophies_platinum": {
|
|
47
|
+
"name": "Platininiai trof\u0117jai",
|
|
48
|
+
"unit_of_measurement": "trof\u0117jai"
|
|
49
|
+
},
|
|
50
|
+
"earned_trophies_silver": {
|
|
51
|
+
"name": "Sidabriniai trof\u0117jai",
|
|
52
|
+
"unit_of_measurement": "trof\u0117jai"
|
|
53
|
+
},
|
|
54
|
+
"online_id": {
|
|
55
|
+
"name": "Internetinis ID"
|
|
56
|
+
},
|
|
57
|
+
"trophy_level": {
|
|
58
|
+
"name": "Trof\u0117j\u0173 lygis"
|
|
59
|
+
},
|
|
60
|
+
"trophy_level_progress": {
|
|
61
|
+
"name": "Kitas lygis"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
},
|
|
36
65
|
"exceptions": {
|
|
37
66
|
"not_ready": {
|
|
38
67
|
"message": "Autenti\u0161kumo nustatymas PlayStation Network tinkle nepavyko."
|
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
"earned_trophies_silver": {
|
|
5
5
|
"name": "\u0421\u0440\u0435\u0431\u0440\u0435\u043d\u0438 \u0442\u0440\u043e\u0444\u0435\u0438"
|
|
6
6
|
},
|
|
7
|
-
"online_id": {
|
|
8
|
-
"name": "\u041e\u043d\u043b\u0430\u0458\u043d-ID"
|
|
9
|
-
},
|
|
10
7
|
"trophy_level": {
|
|
11
8
|
"name": "\u041d\u0438\u0432\u043e \u043d\u0430 \u0442\u0440\u043e\u0444\u0435\u0458"
|
|
12
9
|
},
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
"already_configured": "Prietaisas jau sukonfig\u016bruotas",
|
|
5
5
|
"success": "Pakeitimai i\u0161saugoti"
|
|
6
6
|
},
|
|
7
|
+
"flow_title": "Artumas",
|
|
7
8
|
"step": {
|
|
8
9
|
"user": {
|
|
9
10
|
"data": {
|
|
10
11
|
"ignored_zones": "Zonos, kuri\u0173 reikia ignoruoti",
|
|
11
12
|
"tolerance": "Tolerancijos atstumas",
|
|
13
|
+
"tracked_entities": "\u012erenginiai arba asmenys, kuriuos reikia sekti",
|
|
12
14
|
"zone": "Zona, iki kurios reikia sekti atstum\u0105"
|
|
13
15
|
}
|
|
14
16
|
}
|
|
@@ -17,6 +19,7 @@
|
|
|
17
19
|
"entity": {
|
|
18
20
|
"sensor": {
|
|
19
21
|
"dir_of_travel": {
|
|
22
|
+
"name": "{tracked_entity} kelion\u0117s kryptis",
|
|
20
23
|
"state": {
|
|
21
24
|
"arrived": "Atvyko",
|
|
22
25
|
"away_from": "Toliau nuo",
|
|
@@ -24,11 +27,20 @@
|
|
|
24
27
|
"towards": "Link"
|
|
25
28
|
}
|
|
26
29
|
},
|
|
30
|
+
"dist_to_zone": {
|
|
31
|
+
"name": "{tracked_entity} atstumas"
|
|
32
|
+
},
|
|
27
33
|
"nearest": {
|
|
28
34
|
"name": "Artimiausias prietaisas"
|
|
29
35
|
},
|
|
30
36
|
"nearest_dir_of_travel": {
|
|
31
|
-
"name": "Artimiausia kelion\u0117s kryptis"
|
|
37
|
+
"name": "Artimiausia kelion\u0117s kryptis",
|
|
38
|
+
"state": {
|
|
39
|
+
"arrived": "Atvyko",
|
|
40
|
+
"away_from": "Toliau nuo",
|
|
41
|
+
"stationary": "Stacionarus",
|
|
42
|
+
"towards": "Link"
|
|
43
|
+
}
|
|
32
44
|
},
|
|
33
45
|
"nearest_dist_to_zone": {
|
|
34
46
|
"name": "Artimiausias atstumas"
|
|
@@ -48,5 +60,17 @@
|
|
|
48
60
|
"title": "Stebimas subjektas pa\u0161alintas"
|
|
49
61
|
}
|
|
50
62
|
},
|
|
63
|
+
"options": {
|
|
64
|
+
"step": {
|
|
65
|
+
"init": {
|
|
66
|
+
"data": {
|
|
67
|
+
"ignored_zones": "Zonos, kuri\u0173 reikia ignoruoti",
|
|
68
|
+
"tolerance": "Tolerancijos atstumas",
|
|
69
|
+
"tracked_entities": "\u012erenginiai arba asmenys, kuriuos reikia sekti",
|
|
70
|
+
"zone": "Zona, iki kurios reikia sekti atstum\u0105"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
51
75
|
"title": "Artumas"
|
|
52
76
|
}
|
|
@@ -14,12 +14,15 @@
|
|
|
14
14
|
"api_key": "Chave da API"
|
|
15
15
|
},
|
|
16
16
|
"data_description": {
|
|
17
|
-
"api_key": "Siga a documenta\u00e7\u00e3o para obter sua chave de API"
|
|
17
|
+
"api_key": "Siga a [documenta\u00e7\u00e3o]]({url}) para obter sua chave de API"
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"user": {
|
|
21
21
|
"data": {
|
|
22
22
|
"api_key": "Chave da API"
|
|
23
|
+
},
|
|
24
|
+
"data_description": {
|
|
25
|
+
"api_key": "Siga a [documenta\u00e7\u00e3o]]({url}) para obter sua chave de API"
|
|
23
26
|
}
|
|
24
27
|
}
|
|
25
28
|
}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"api_key": "API-nyckel"
|
|
19
19
|
},
|
|
20
20
|
"data_description": {
|
|
21
|
-
"api_key": "F\u00f6lj [dokumentationen]({url}) f\u00f6r att f\u00e5 tillg\u00e5ng till din API
|
|
21
|
+
"api_key": "F\u00f6lj [dokumentationen]({url}) f\u00f6r att f\u00e5 tillg\u00e5ng till din API nyckel"
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"reconfigure": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"api_key": "API-nyckel"
|
|
27
27
|
},
|
|
28
28
|
"data_description": {
|
|
29
|
-
"api_key": "F\u00f6lj [dokumentationen]({url}) f\u00f6r att f\u00e5 tillg\u00e5ng till din API
|
|
29
|
+
"api_key": "F\u00f6lj [dokumentationen]({url}) f\u00f6r att f\u00e5 tillg\u00e5ng till din API nyckel"
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
32
|
"user": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"api_key": "API-nyckel"
|
|
35
35
|
},
|
|
36
36
|
"data_description": {
|
|
37
|
-
"api_key": "F\u00f6lj [dokumentationen]({url}) f\u00f6r att f\u00e5 tillg\u00e5ng till din API
|
|
37
|
+
"api_key": "F\u00f6lj [dokumentationen]({url}) f\u00f6r att f\u00e5 tillg\u00e5ng till din API nyckel"
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
}
|
|
@@ -56,7 +56,10 @@ from .coordinator import (
|
|
|
56
56
|
ShellyRpcCoordinator,
|
|
57
57
|
ShellyRpcPollingCoordinator,
|
|
58
58
|
)
|
|
59
|
-
from .repairs import
|
|
59
|
+
from .repairs import (
|
|
60
|
+
async_manage_ble_scanner_firmware_unsupported_issue,
|
|
61
|
+
async_manage_outbound_websocket_incorrectly_enabled_issue,
|
|
62
|
+
)
|
|
60
63
|
from .utils import (
|
|
61
64
|
async_create_issue_unsupported_firmware,
|
|
62
65
|
get_coap_context,
|
|
@@ -327,6 +330,10 @@ async def _async_setup_rpc_entry(hass: HomeAssistant, entry: ShellyConfigEntry)
|
|
|
327
330
|
hass,
|
|
328
331
|
entry,
|
|
329
332
|
)
|
|
333
|
+
async_manage_outbound_websocket_incorrectly_enabled_issue(
|
|
334
|
+
hass,
|
|
335
|
+
entry,
|
|
336
|
+
)
|
|
330
337
|
elif (
|
|
331
338
|
sleep_period is None
|
|
332
339
|
or device_entry is None
|
|
@@ -237,6 +237,9 @@ NOT_CALIBRATED_ISSUE_ID = "not_calibrated_{unique}"
|
|
|
237
237
|
FIRMWARE_UNSUPPORTED_ISSUE_ID = "firmware_unsupported_{unique}"
|
|
238
238
|
|
|
239
239
|
BLE_SCANNER_FIRMWARE_UNSUPPORTED_ISSUE_ID = "ble_scanner_firmware_unsupported_{unique}"
|
|
240
|
+
OUTBOUND_WEBSOCKET_INCORRECTLY_ENABLED_ISSUE_ID = (
|
|
241
|
+
"outbound_websocket_incorrectly_enabled_{unique}"
|
|
242
|
+
)
|
|
240
243
|
|
|
241
244
|
GAS_VALVE_OPEN_STATES = ("opening", "opened")
|
|
242
245
|
|
|
@@ -11,7 +11,7 @@ from awesomeversion import AwesomeVersion
|
|
|
11
11
|
import voluptuous as vol
|
|
12
12
|
|
|
13
13
|
from homeassistant import data_entry_flow
|
|
14
|
-
from homeassistant.components.repairs import RepairsFlow
|
|
14
|
+
from homeassistant.components.repairs import ConfirmRepairFlow, RepairsFlow
|
|
15
15
|
from homeassistant.core import HomeAssistant, callback
|
|
16
16
|
from homeassistant.helpers import issue_registry as ir
|
|
17
17
|
|
|
@@ -20,9 +20,11 @@ from .const import (
|
|
|
20
20
|
BLE_SCANNER_MIN_FIRMWARE,
|
|
21
21
|
CONF_BLE_SCANNER_MODE,
|
|
22
22
|
DOMAIN,
|
|
23
|
+
OUTBOUND_WEBSOCKET_INCORRECTLY_ENABLED_ISSUE_ID,
|
|
23
24
|
BLEScannerMode,
|
|
24
25
|
)
|
|
25
26
|
from .coordinator import ShellyConfigEntry
|
|
27
|
+
from .utils import get_rpc_ws_url
|
|
26
28
|
|
|
27
29
|
|
|
28
30
|
@callback
|
|
@@ -65,7 +67,46 @@ def async_manage_ble_scanner_firmware_unsupported_issue(
|
|
|
65
67
|
ir.async_delete_issue(hass, DOMAIN, issue_id)
|
|
66
68
|
|
|
67
69
|
|
|
68
|
-
|
|
70
|
+
@callback
|
|
71
|
+
def async_manage_outbound_websocket_incorrectly_enabled_issue(
|
|
72
|
+
hass: HomeAssistant,
|
|
73
|
+
entry: ShellyConfigEntry,
|
|
74
|
+
) -> None:
|
|
75
|
+
"""Manage the Outbound WebSocket incorrectly enabled issue."""
|
|
76
|
+
issue_id = OUTBOUND_WEBSOCKET_INCORRECTLY_ENABLED_ISSUE_ID.format(
|
|
77
|
+
unique=entry.unique_id
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
if TYPE_CHECKING:
|
|
81
|
+
assert entry.runtime_data.rpc is not None
|
|
82
|
+
|
|
83
|
+
device = entry.runtime_data.rpc.device
|
|
84
|
+
|
|
85
|
+
if (
|
|
86
|
+
(ws_config := device.config.get("ws"))
|
|
87
|
+
and ws_config["enable"]
|
|
88
|
+
and ws_config["server"] == get_rpc_ws_url(hass)
|
|
89
|
+
):
|
|
90
|
+
ir.async_create_issue(
|
|
91
|
+
hass,
|
|
92
|
+
DOMAIN,
|
|
93
|
+
issue_id,
|
|
94
|
+
is_fixable=True,
|
|
95
|
+
is_persistent=True,
|
|
96
|
+
severity=ir.IssueSeverity.WARNING,
|
|
97
|
+
translation_key="outbound_websocket_incorrectly_enabled",
|
|
98
|
+
translation_placeholders={
|
|
99
|
+
"device_name": device.name,
|
|
100
|
+
"ip_address": device.ip_address,
|
|
101
|
+
},
|
|
102
|
+
data={"entry_id": entry.entry_id},
|
|
103
|
+
)
|
|
104
|
+
return
|
|
105
|
+
|
|
106
|
+
ir.async_delete_issue(hass, DOMAIN, issue_id)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class ShellyRpcRepairsFlow(RepairsFlow):
|
|
69
110
|
"""Handler for an issue fixing flow."""
|
|
70
111
|
|
|
71
112
|
def __init__(self, device: RpcDevice) -> None:
|
|
@@ -83,7 +124,7 @@ class BleScannerFirmwareUpdateFlow(RepairsFlow):
|
|
|
83
124
|
) -> data_entry_flow.FlowResult:
|
|
84
125
|
"""Handle the confirm step of a fix flow."""
|
|
85
126
|
if user_input is not None:
|
|
86
|
-
return await self.
|
|
127
|
+
return await self._async_step_confirm()
|
|
87
128
|
|
|
88
129
|
issue_registry = ir.async_get(self.hass)
|
|
89
130
|
description_placeholders = None
|
|
@@ -96,6 +137,18 @@ class BleScannerFirmwareUpdateFlow(RepairsFlow):
|
|
|
96
137
|
description_placeholders=description_placeholders,
|
|
97
138
|
)
|
|
98
139
|
|
|
140
|
+
async def _async_step_confirm(self) -> data_entry_flow.FlowResult:
|
|
141
|
+
"""Handle the confirm step of a fix flow."""
|
|
142
|
+
raise NotImplementedError
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
class BleScannerFirmwareUpdateFlow(ShellyRpcRepairsFlow):
|
|
146
|
+
"""Handler for BLE Scanner Firmware Update flow."""
|
|
147
|
+
|
|
148
|
+
async def _async_step_confirm(self) -> data_entry_flow.FlowResult:
|
|
149
|
+
"""Handle the confirm step of a fix flow."""
|
|
150
|
+
return await self.async_step_update_firmware()
|
|
151
|
+
|
|
99
152
|
async def async_step_update_firmware(
|
|
100
153
|
self, user_input: dict[str, str] | None = None
|
|
101
154
|
) -> data_entry_flow.FlowResult:
|
|
@@ -110,6 +163,29 @@ class BleScannerFirmwareUpdateFlow(RepairsFlow):
|
|
|
110
163
|
return self.async_create_entry(title="", data={})
|
|
111
164
|
|
|
112
165
|
|
|
166
|
+
class DisableOutboundWebSocketFlow(ShellyRpcRepairsFlow):
|
|
167
|
+
"""Handler for Disable Outbound WebSocket flow."""
|
|
168
|
+
|
|
169
|
+
async def _async_step_confirm(self) -> data_entry_flow.FlowResult:
|
|
170
|
+
"""Handle the confirm step of a fix flow."""
|
|
171
|
+
return await self.async_step_disable_outbound_websocket()
|
|
172
|
+
|
|
173
|
+
async def async_step_disable_outbound_websocket(
|
|
174
|
+
self, user_input: dict[str, str] | None = None
|
|
175
|
+
) -> data_entry_flow.FlowResult:
|
|
176
|
+
"""Handle the confirm step of a fix flow."""
|
|
177
|
+
try:
|
|
178
|
+
result = await self._device.ws_setconfig(
|
|
179
|
+
False, self._device.config["ws"]["server"]
|
|
180
|
+
)
|
|
181
|
+
if result["restart_required"]:
|
|
182
|
+
await self._device.trigger_reboot()
|
|
183
|
+
except (DeviceConnectionError, RpcCallError):
|
|
184
|
+
return self.async_abort(reason="cannot_connect")
|
|
185
|
+
|
|
186
|
+
return self.async_create_entry(title="", data={})
|
|
187
|
+
|
|
188
|
+
|
|
113
189
|
async def async_create_fix_flow(
|
|
114
190
|
hass: HomeAssistant, issue_id: str, data: dict[str, str] | None
|
|
115
191
|
) -> RepairsFlow:
|
|
@@ -124,4 +200,11 @@ async def async_create_fix_flow(
|
|
|
124
200
|
assert entry is not None
|
|
125
201
|
|
|
126
202
|
device = entry.runtime_data.rpc.device
|
|
127
|
-
|
|
203
|
+
|
|
204
|
+
if "ble_scanner_firmware_unsupported" in issue_id:
|
|
205
|
+
return BleScannerFirmwareUpdateFlow(device)
|
|
206
|
+
|
|
207
|
+
if "outbound_websocket_incorrectly_enabled" in issue_id:
|
|
208
|
+
return DisableOutboundWebSocketFlow(device)
|
|
209
|
+
|
|
210
|
+
return ConfirmRepairFlow()
|
|
@@ -288,6 +288,20 @@
|
|
|
288
288
|
"unsupported_firmware": {
|
|
289
289
|
"title": "Unsupported firmware for device {device_name}",
|
|
290
290
|
"description": "Your Shelly device {device_name} with IP address {ip_address} is running an unsupported firmware. Please update the firmware.\n\nIf the device does not offer an update, check internet connectivity (gateway, DNS, time) and restart the device."
|
|
291
|
+
},
|
|
292
|
+
"outbound_websocket_incorrectly_enabled": {
|
|
293
|
+
"title": "Outbound WebSocket is enabled for {device_name}",
|
|
294
|
+
"fix_flow": {
|
|
295
|
+
"step": {
|
|
296
|
+
"confirm": {
|
|
297
|
+
"title": "Outbound WebSocket is enabled for {device_name}",
|
|
298
|
+
"description": "Your Shelly device {device_name} with IP address {ip_address} is a non-sleeping device and Outbound WebSocket should be disabled in its configuration.\n\nSelect **Submit** button to disable Outbound WebSocket."
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
"abort": {
|
|
302
|
+
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]"
|
|
303
|
+
}
|
|
304
|
+
}
|
|
291
305
|
}
|
|
292
306
|
}
|
|
293
307
|
}
|
|
@@ -138,6 +138,13 @@
|
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
140
|
},
|
|
141
|
+
"outbound_websocket_incorrectly_enabled": {
|
|
142
|
+
"fix_flow": {
|
|
143
|
+
"abort": {
|
|
144
|
+
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435"
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
},
|
|
141
148
|
"unsupported_firmware": {
|
|
142
149
|
"description": "\u0412\u0430\u0448\u0435\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Shelly {device_name} \u0441 IP \u0430\u0434\u0440\u0435\u0441 {ip_address} \u0440\u0430\u0431\u043e\u0442\u0438 \u0441 \u043d\u0435\u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430\u043d \u0444\u044a\u0440\u043c\u0443\u0435\u0440. \u041c\u043e\u043b\u044f, \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u0439\u0442\u0435 \u0444\u044a\u0440\u043c\u0443\u0435\u0440\u0430.\n\n\u0410\u043a\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 (\u0448\u043b\u044e\u0437, DNS, \u0432\u0440\u0435\u043c\u0435) \u0438 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0439\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e.",
|
|
143
150
|
"title": "\u041d\u0435\u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430\u043d \u0444\u044a\u0440\u043c\u0443\u0435\u0440 \u0437\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e {device_name}"
|