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.
Files changed (207) hide show
  1. homeassistant/components/ai_task/translations/nl.json +3 -0
  2. homeassistant/components/alexa_devices/manifest.json +1 -1
  3. homeassistant/components/alexa_devices/translations/de.json +2 -1
  4. homeassistant/components/alexa_devices/translations/es.json +2 -1
  5. homeassistant/components/alexa_devices/translations/et.json +2 -1
  6. homeassistant/components/alexa_devices/translations/ga.json +11 -0
  7. homeassistant/components/alexa_devices/translations/lt.json +29 -2
  8. homeassistant/components/alexa_devices/translations/mk.json +8 -0
  9. homeassistant/components/alexa_devices/translations/sk.json +2 -1
  10. homeassistant/components/alexa_devices/translations/zh-Hant.json +2 -1
  11. homeassistant/components/assist_satellite/translations/nl.json +7 -0
  12. homeassistant/components/devolo_home_control/translations/lt.json +10 -0
  13. homeassistant/components/ecovacs/manifest.json +1 -1
  14. homeassistant/components/emoncms/translations/ga.json +1 -0
  15. homeassistant/components/enphase_envoy/translations/et.json +1 -0
  16. homeassistant/components/enphase_envoy/translations/lt.json +1 -0
  17. homeassistant/components/enphase_envoy/translations/nl.json +2 -1
  18. homeassistant/components/ezviz/translations/lt.json +10 -0
  19. homeassistant/components/frontend/manifest.json +1 -1
  20. homeassistant/components/google_generative_ai_conversation/translations/lt.json +28 -0
  21. homeassistant/components/google_travel_time/translations/it.json +7 -0
  22. homeassistant/components/hassio/ingress.py +6 -2
  23. homeassistant/components/home_connect/translations/it.json +3 -0
  24. homeassistant/components/homeassistant/translations/it.json +24 -0
  25. homeassistant/components/homeassistant_hardware/translations/et.json +1 -0
  26. homeassistant/components/homeassistant_hardware/translations/ga.json +4 -0
  27. homeassistant/components/homeassistant_hardware/translations/lt.json +2 -0
  28. homeassistant/components/homeassistant_hardware/translations/mk.json +3 -0
  29. homeassistant/components/homeassistant_sky_connect/translations/et.json +2 -0
  30. homeassistant/components/homeassistant_sky_connect/translations/ga.json +8 -0
  31. homeassistant/components/homeassistant_sky_connect/translations/lt.json +4 -0
  32. homeassistant/components/homeassistant_yellow/translations/et.json +1 -0
  33. homeassistant/components/homeassistant_yellow/translations/ga.json +4 -0
  34. homeassistant/components/homeassistant_yellow/translations/lt.json +3 -0
  35. homeassistant/components/immich/translations/nl.json +5 -0
  36. homeassistant/components/lcn/translations/cs.json +0 -3
  37. homeassistant/components/lcn/translations/de.json +1 -1
  38. homeassistant/components/lcn/translations/el.json +0 -3
  39. homeassistant/components/lcn/translations/en-GB.json +0 -3
  40. homeassistant/components/lcn/translations/en.json +1 -1
  41. homeassistant/components/lcn/translations/es.json +1 -1
  42. homeassistant/components/lcn/translations/et.json +0 -3
  43. homeassistant/components/lcn/translations/hu.json +0 -3
  44. homeassistant/components/lcn/translations/ja.json +0 -3
  45. homeassistant/components/lcn/translations/lt.json +0 -3
  46. homeassistant/components/lcn/translations/pt-BR.json +0 -3
  47. homeassistant/components/lcn/translations/pt.json +0 -3
  48. homeassistant/components/lcn/translations/ru.json +0 -3
  49. homeassistant/components/lcn/translations/sk.json +0 -3
  50. homeassistant/components/lcn/translations/sv.json +0 -3
  51. homeassistant/components/lcn/translations/tr.json +0 -3
  52. homeassistant/components/lcn/translations/zh-Hans.json +0 -3
  53. homeassistant/components/lcn/translations/zh-Hant.json +0 -3
  54. homeassistant/components/lg_thinq/translations/et.json +3 -1
  55. homeassistant/components/lg_thinq/translations/lt.json +3 -1
  56. homeassistant/components/litterrobot/translations/et.json +1 -0
  57. homeassistant/components/litterrobot/translations/lt.json +1 -0
  58. homeassistant/components/litterrobot/translations/sk.json +1 -0
  59. homeassistant/components/lyric/translations/it.json +3 -0
  60. homeassistant/components/miele/translations/it.json +3 -0
  61. homeassistant/components/miele/translations/sk.json +1 -0
  62. homeassistant/components/mqtt/translations/bg.json +10 -0
  63. homeassistant/components/mqtt/translations/ga.json +10 -0
  64. homeassistant/components/mqtt/translations/it.json +7 -1
  65. homeassistant/components/mqtt/translations/lt.json +37 -0
  66. homeassistant/components/mqtt/translations/mk.json +9 -0
  67. homeassistant/components/nordpool/coordinator.py +3 -0
  68. homeassistant/components/ollama/__init__.py +30 -4
  69. homeassistant/components/ollama/config_flow.py +164 -135
  70. homeassistant/components/ollama/conversation.py +8 -243
  71. homeassistant/components/ollama/entity.py +261 -0
  72. homeassistant/components/ollama/strings.json +12 -10
  73. homeassistant/components/ollama/translations/bg.json +0 -1
  74. homeassistant/components/ollama/translations/ca.json +0 -10
  75. homeassistant/components/ollama/translations/cs.json +1 -10
  76. homeassistant/components/ollama/translations/de.json +1 -10
  77. homeassistant/components/ollama/translations/el.json +1 -10
  78. homeassistant/components/ollama/translations/en-GB.json +0 -10
  79. homeassistant/components/ollama/translations/en.json +12 -10
  80. homeassistant/components/ollama/translations/es.json +1 -10
  81. homeassistant/components/ollama/translations/et.json +1 -10
  82. homeassistant/components/ollama/translations/fi.json +0 -7
  83. homeassistant/components/ollama/translations/fr.json +1 -10
  84. homeassistant/components/ollama/translations/ga.json +0 -3
  85. homeassistant/components/ollama/translations/hu.json +1 -10
  86. homeassistant/components/ollama/translations/it.json +0 -8
  87. homeassistant/components/ollama/translations/ja.json +1 -10
  88. homeassistant/components/ollama/translations/lt.json +1 -10
  89. homeassistant/components/ollama/translations/pt-BR.json +0 -3
  90. homeassistant/components/ollama/translations/pt.json +1 -10
  91. homeassistant/components/ollama/translations/ru.json +1 -10
  92. homeassistant/components/ollama/translations/sk.json +1 -10
  93. homeassistant/components/ollama/translations/sv.json +1 -10
  94. homeassistant/components/ollama/translations/tr.json +0 -10
  95. homeassistant/components/ollama/translations/zh-Hans.json +1 -10
  96. homeassistant/components/ollama/translations/zh-Hant.json +1 -10
  97. homeassistant/components/opentherm_gw/translations/bg.json +3 -0
  98. homeassistant/components/opentherm_gw/translations/et.json +3 -0
  99. homeassistant/components/opentherm_gw/translations/ga.json +3 -0
  100. homeassistant/components/opentherm_gw/translations/lt.json +3 -0
  101. homeassistant/components/opentherm_gw/translations/mk.json +7 -0
  102. homeassistant/components/overkiz/translations/et.json +1 -0
  103. homeassistant/components/overkiz/translations/lt.json +1 -0
  104. homeassistant/components/pegel_online/translations/lt.json +2 -1
  105. homeassistant/components/playstation_network/translations/cs.json +0 -3
  106. homeassistant/components/playstation_network/translations/el.json +0 -3
  107. homeassistant/components/playstation_network/translations/en.json +1 -1
  108. homeassistant/components/playstation_network/translations/et.json +1 -1
  109. homeassistant/components/playstation_network/translations/ga.json +0 -3
  110. homeassistant/components/playstation_network/translations/hu.json +0 -3
  111. homeassistant/components/playstation_network/translations/it.json +0 -3
  112. homeassistant/components/playstation_network/translations/lt.json +29 -0
  113. homeassistant/components/playstation_network/translations/mk.json +0 -3
  114. homeassistant/components/playstation_network/translations/nl.json +0 -3
  115. homeassistant/components/playstation_network/translations/pl.json +0 -3
  116. homeassistant/components/playstation_network/translations/pt.json +0 -3
  117. homeassistant/components/playstation_network/translations/sk.json +1 -1
  118. homeassistant/components/playstation_network/translations/sv.json +0 -3
  119. homeassistant/components/playstation_network/translations/zh-Hans.json +0 -3
  120. homeassistant/components/playstation_network/translations/zh-Hant.json +1 -1
  121. homeassistant/components/proximity/translations/lt.json +25 -1
  122. homeassistant/components/proximity/translations/nl.json +3 -0
  123. homeassistant/components/reolink/translations/it.json +3 -0
  124. homeassistant/components/russound_rio/translations/nl.json +7 -0
  125. homeassistant/components/scrape/translations/it.json +1 -0
  126. homeassistant/components/sensibo/translations/pt-BR.json +4 -1
  127. homeassistant/components/sensibo/translations/sv.json +3 -3
  128. homeassistant/components/sensor/translations/it.json +1 -0
  129. homeassistant/components/shelly/__init__.py +8 -1
  130. homeassistant/components/shelly/const.py +3 -0
  131. homeassistant/components/shelly/repairs.py +87 -4
  132. homeassistant/components/shelly/strings.json +14 -0
  133. homeassistant/components/shelly/translations/bg.json +7 -0
  134. homeassistant/components/shelly/translations/de.json +14 -0
  135. homeassistant/components/shelly/translations/en.json +14 -0
  136. homeassistant/components/shelly/translations/es.json +14 -0
  137. homeassistant/components/shelly/translations/et.json +11 -0
  138. homeassistant/components/sma/config_flow.py +30 -1
  139. homeassistant/components/smarla/translations/it.json +9 -0
  140. homeassistant/components/sonos/translations/lt.json +9 -0
  141. homeassistant/components/sql/translations/it.json +1 -0
  142. homeassistant/components/squeezebox/translations/it.json +5 -0
  143. homeassistant/components/subaru/translations/lt.json +2 -0
  144. homeassistant/components/subaru/translations/mk.json +12 -0
  145. homeassistant/components/switchbot/translations/et.json +1 -0
  146. homeassistant/components/switchbot/translations/ga.json +13 -0
  147. homeassistant/components/switchbot/translations/lt.json +54 -0
  148. homeassistant/components/switchbot/translations/nl.json +1 -0
  149. homeassistant/components/switchbot/translations/sk.json +1 -0
  150. homeassistant/components/switchbot/translations/zh-Hant.json +1 -0
  151. homeassistant/components/telegram_bot/translations/bg.json +10 -0
  152. homeassistant/components/telegram_bot/translations/ga.json +28 -0
  153. homeassistant/components/telegram_bot/translations/it.json +12 -0
  154. homeassistant/components/telegram_bot/translations/lt.json +30 -0
  155. homeassistant/components/telegram_bot/translations/mk.json +5 -0
  156. homeassistant/components/template/translations/it.json +1 -0
  157. homeassistant/components/tesla_fleet/translations/et.json +3 -0
  158. homeassistant/components/tesla_fleet/translations/lt.json +3 -0
  159. homeassistant/components/tesla_fleet/translations/mk.json +3 -0
  160. homeassistant/components/tesla_fleet/translations/nl.json +3 -0
  161. homeassistant/components/thermopro/manifest.json +1 -1
  162. homeassistant/components/thermopro/translations/lt.json +7 -0
  163. homeassistant/components/tuya/translations/it.json +13 -0
  164. homeassistant/components/unifiprotect/config_flow.py +1 -1
  165. homeassistant/components/uptimerobot/translations/it.json +5 -0
  166. homeassistant/components/weatherflow_cloud/translations/ga.json +1 -0
  167. homeassistant/components/webdav/translations/et.json +1 -0
  168. homeassistant/components/webdav/translations/ga.json +1 -0
  169. homeassistant/components/webdav/translations/lt.json +1 -0
  170. homeassistant/components/webdav/translations/mk.json +7 -0
  171. homeassistant/components/whirlpool/translations/et.json +1 -0
  172. homeassistant/components/whirlpool/translations/lt.json +1 -0
  173. homeassistant/components/withings/translations/it.json +3 -0
  174. homeassistant/components/zha/translations/it.json +10 -2
  175. homeassistant/components/zha/translations/lt.json +50 -0
  176. homeassistant/components/zwave_js/strings.json +11 -11
  177. homeassistant/components/zwave_js/translations/bg.json +6 -20
  178. homeassistant/components/zwave_js/translations/cs.json +0 -22
  179. homeassistant/components/zwave_js/translations/de.json +0 -23
  180. homeassistant/components/zwave_js/translations/el.json +0 -23
  181. homeassistant/components/zwave_js/translations/en-GB.json +0 -23
  182. homeassistant/components/zwave_js/translations/en.json +11 -11
  183. homeassistant/components/zwave_js/translations/es.json +0 -23
  184. homeassistant/components/zwave_js/translations/et.json +0 -23
  185. homeassistant/components/zwave_js/translations/fi.json +0 -11
  186. homeassistant/components/zwave_js/translations/ga.json +16 -22
  187. homeassistant/components/zwave_js/translations/hu.json +0 -23
  188. homeassistant/components/zwave_js/translations/it.json +0 -12
  189. homeassistant/components/zwave_js/translations/lt.json +32 -22
  190. homeassistant/components/zwave_js/translations/mk.json +16 -7
  191. homeassistant/components/zwave_js/translations/pt.json +0 -23
  192. homeassistant/components/zwave_js/translations/ru.json +0 -21
  193. homeassistant/components/zwave_js/translations/sk.json +0 -23
  194. homeassistant/components/zwave_js/translations/sv.json +0 -23
  195. homeassistant/components/zwave_js/translations/tr.json +0 -13
  196. homeassistant/components/zwave_js/translations/zh-Hans.json +0 -23
  197. homeassistant/components/zwave_js/translations/zh-Hant.json +0 -23
  198. homeassistant/const.py +1 -1
  199. homeassistant/package_constraints.txt +1 -1
  200. {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/METADATA +1 -1
  201. {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/RECORD +206 -201
  202. homeassistant/components/zwave_js/translations/sq.json +0 -7
  203. {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/WHEEL +0 -0
  204. {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/entry_points.txt +0 -0
  205. {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/licenses/LICENSE.md +0 -0
  206. {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  207. {homeassistant-2025.7.0b8.dist-info → homeassistant-2025.7.0b9.dist-info}/top_level.txt +0 -0
@@ -355,6 +355,9 @@
355
355
  }
356
356
  },
357
357
  "exceptions": {
358
+ "change_hvac_mode_not_supported": {
359
+ "message": "HVAC-re\u017eiimi muutmist ei toetata."
360
+ },
358
361
  "invalid_gateway_id": {
359
362
  "message": "L\u00fc\u00fcsi {gw_id} ei leitud v\u00f5i see pole laaditud!"
360
363
  }
@@ -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
  }
@@ -355,6 +355,9 @@
355
355
  }
356
356
  },
357
357
  "exceptions": {
358
+ "change_hvac_mode_not_supported": {
359
+ "message": "HVAC re\u017eimo keitimas nepalaikomas."
360
+ },
358
361
  "invalid_gateway_id": {
359
362
  "message": "\u0160liuzas {gw_id} nerastas arba ne\u012fkeltas!"
360
363
  }
@@ -0,0 +1,7 @@
1
+ {
2
+ "exceptions": {
3
+ "change_hvac_mode_not_supported": {
4
+ "message": "\u041f\u0440\u043e\u043c\u0435\u043d\u0430 \u043d\u0430 HVAC \u0440\u0435\u0436\u0438\u043c\u043e\u0442 \u043d\u0435 \u0435 \u043f\u043e\u0434\u0434\u0440\u0436\u0430\u043d\u0430."
5
+ }
6
+ }
7
+ }
@@ -124,6 +124,7 @@
124
124
  "battery": {
125
125
  "state": {
126
126
  "critical": "Kriitiline",
127
+ "full": "T\u00e4ielik",
127
128
  "good": "Hea",
128
129
  "low": "Madal",
129
130
  "medium": "Keskmine",
@@ -124,6 +124,7 @@
124
124
  "battery": {
125
125
  "state": {
126
126
  "critical": "Kritinis",
127
+ "full": "Pilnas",
127
128
  "good": "Gerai",
128
129
  "low": "\u017demas",
129
130
  "medium": "Vidutinis",
@@ -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": "St\u0159\u00edbrn\u00e9 trofeje",
52
52
  "unit_of_measurement": "trofej\u00ed"
53
53
  },
54
- "online_id": {
55
- "name": "Online ID"
56
- },
57
54
  "trophy_level": {
58
55
  "name": "\u00darove\u0148 trofeje"
59
56
  },
@@ -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
  },
@@ -52,7 +52,7 @@
52
52
  "unit_of_measurement": "trophies"
53
53
  },
54
54
  "online_id": {
55
- "name": "Online-ID"
55
+ "name": "Online ID"
56
56
  },
57
57
  "trophy_level": {
58
58
  "name": "Trophy level"
@@ -52,7 +52,7 @@
52
52
  "unit_of_measurement": "karikaid"
53
53
  },
54
54
  "online_id": {
55
- "name": "Online-ID"
55
+ "name": "Veebip\u00f5hine ID"
56
56
  },
57
57
  "trophy_level": {
58
58
  "name": "Karika tase"
@@ -17,9 +17,6 @@
17
17
  "name": "Tr\u00f3faithe airgid",
18
18
  "unit_of_measurement": "tr\u00f3faithe"
19
19
  },
20
- "online_id": {
21
- "name": "Aitheantas Ar L\u00edne"
22
- },
23
20
  "trophy_level": {
24
21
  "name": "Leibh\u00e9al tr\u00f3fa\u00ed"
25
22
  },
@@ -51,9 +51,6 @@
51
51
  "name": "Ez\u00fcst tr\u00f3fe\u00e1k",
52
52
  "unit_of_measurement": "tr\u00f3fea"
53
53
  },
54
- "online_id": {
55
- "name": "Online-azonos\u00edt\u00f3"
56
- },
57
54
  "trophy_level": {
58
55
  "name": "Tr\u00f3feaszint"
59
56
  },
@@ -51,9 +51,6 @@
51
51
  "name": "Trofei d'argento",
52
52
  "unit_of_measurement": "trofei"
53
53
  },
54
- "online_id": {
55
- "name": "ID online"
56
- },
57
54
  "trophy_level": {
58
55
  "name": "Livello del trofeo"
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
  },
@@ -29,9 +29,6 @@
29
29
  "name": "Zilveren trofee\u00ebn",
30
30
  "unit_of_measurement": "trofee\u00ebn"
31
31
  },
32
- "online_id": {
33
- "name": "Online-ID"
34
- },
35
32
  "trophy_level": {
36
33
  "name": "Trofee niveau"
37
34
  },
@@ -51,9 +51,6 @@
51
51
  "name": "Srebro",
52
52
  "unit_of_measurement": "trofea"
53
53
  },
54
- "online_id": {
55
- "name": "Identyfikator online"
56
- },
57
54
  "trophy_level": {
58
55
  "name": "Poziom trofe\u00f3w"
59
56
  },
@@ -51,9 +51,6 @@
51
51
  "name": "Trof\u00e9us de prata",
52
52
  "unit_of_measurement": "trof\u00e9us"
53
53
  },
54
- "online_id": {
55
- "name": "ID online"
56
- },
57
54
  "trophy_level": {
58
55
  "name": "N\u00edvel do trof\u00e9u"
59
56
  },
@@ -52,7 +52,7 @@
52
52
  "unit_of_measurement": "trofeje"
53
53
  },
54
54
  "online_id": {
55
- "name": "Online-ID"
55
+ "name": "Online ID"
56
56
  },
57
57
  "trophy_level": {
58
58
  "name": "\u00darove\u0148 trofeje"
@@ -48,9 +48,6 @@
48
48
  "name": "Silvertrof\u00e9er",
49
49
  "unit_of_measurement": "trof\u00e9er"
50
50
  },
51
- "online_id": {
52
- "name": "Online-ID"
53
- },
54
51
  "trophy_level": {
55
52
  "name": "Trof\u00e9niv\u00e5"
56
53
  },
@@ -51,9 +51,6 @@
51
51
  "name": "\u94f6\u5956\u676f",
52
52
  "unit_of_measurement": "\u5956\u676f"
53
53
  },
54
- "online_id": {
55
- "name": "\u5728\u7ebf ID"
56
- },
57
54
  "trophy_level": {
58
55
  "name": "\u5956\u676f\u7ea7\u522b"
59
56
  },
@@ -52,7 +52,7 @@
52
52
  "unit_of_measurement": "\u734e\u76c3"
53
53
  },
54
54
  "online_id": {
55
- "name": "Online-ID"
55
+ "name": "Online ID"
56
56
  },
57
57
  "trophy_level": {
58
58
  "name": "\u734e\u76c3\u7b49\u7d1a"
@@ -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
  }
@@ -15,6 +15,9 @@
15
15
  "towards": "Richting"
16
16
  }
17
17
  },
18
+ "dist_to_zone": {
19
+ "name": "{tracked_entity} afstand"
20
+ },
18
21
  "nearest_dir_of_travel": {
19
22
  "state": {
20
23
  "arrived": "Aangekomen",
@@ -547,6 +547,9 @@
547
547
  "ftp_upload": {
548
548
  "name": "Caricamento FTP"
549
549
  },
550
+ "hardwired_chime_enabled": {
551
+ "name": "Campanello cablato attivato"
552
+ },
550
553
  "hdr": {
551
554
  "name": "HDR"
552
555
  },
@@ -36,5 +36,12 @@
36
36
  }
37
37
  }
38
38
  }
39
+ },
40
+ "entity": {
41
+ "number": {
42
+ "bass": {
43
+ "name": "Bas"
44
+ }
45
+ }
39
46
  }
40
47
  }
@@ -174,6 +174,7 @@
174
174
  "state_class": {
175
175
  "options": {
176
176
  "measurement": "Misurazione",
177
+ "measurement_angle": "Angolo di misura",
177
178
  "total": "Totale",
178
179
  "total_increasing": "Aumento in totale"
179
180
  }
@@ -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-nyckel"
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-nyckel"
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-nyckel"
37
+ "api_key": "F\u00f6lj [dokumentationen]({url}) f\u00f6r att f\u00e5 tillg\u00e5ng till din API nyckel"
38
38
  }
39
39
  }
40
40
  }
@@ -118,6 +118,7 @@
118
118
  "name": "Classe di stato",
119
119
  "state": {
120
120
  "measurement": "Misurazione",
121
+ "measurement_angle": "Angolo di misura",
121
122
  "total": "Totale",
122
123
  "total_increasing": "Aumento in totale"
123
124
  }
@@ -56,7 +56,10 @@ from .coordinator import (
56
56
  ShellyRpcCoordinator,
57
57
  ShellyRpcPollingCoordinator,
58
58
  )
59
- from .repairs import async_manage_ble_scanner_firmware_unsupported_issue
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
- class BleScannerFirmwareUpdateFlow(RepairsFlow):
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.async_step_update_firmware()
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
- return BleScannerFirmwareUpdateFlow(device)
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}"