homeassistant 2025.7.0b7__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 (283) hide show
  1. homeassistant/components/ai_task/translations/nl.json +3 -0
  2. homeassistant/components/alexa_devices/config_flow.py +3 -1
  3. homeassistant/components/alexa_devices/manifest.json +1 -1
  4. homeassistant/components/alexa_devices/strings.json +1 -0
  5. homeassistant/components/alexa_devices/translations/de.json +2 -1
  6. homeassistant/components/alexa_devices/translations/en.json +2 -1
  7. homeassistant/components/alexa_devices/translations/es.json +2 -1
  8. homeassistant/components/alexa_devices/translations/et.json +2 -1
  9. homeassistant/components/alexa_devices/translations/ga.json +11 -0
  10. homeassistant/components/alexa_devices/translations/lt.json +29 -2
  11. homeassistant/components/alexa_devices/translations/mk.json +8 -0
  12. homeassistant/components/alexa_devices/translations/sk.json +2 -1
  13. homeassistant/components/alexa_devices/translations/zh-Hant.json +2 -1
  14. homeassistant/components/androidtv_remote/translations/ko.json +1 -1
  15. homeassistant/components/aosmith/translations/ko.json +1 -1
  16. homeassistant/components/assist_satellite/translations/nl.json +7 -0
  17. homeassistant/components/aussie_broadband/translations/ko.json +1 -1
  18. homeassistant/components/bluetooth/manifest.json +1 -1
  19. homeassistant/components/bosch_shc/translations/ko.json +1 -1
  20. homeassistant/components/brunt/translations/ko.json +1 -1
  21. homeassistant/components/caldav/translations/ko.json +1 -1
  22. homeassistant/components/devolo_home_control/translations/lt.json +10 -0
  23. homeassistant/components/ecovacs/manifest.json +1 -1
  24. homeassistant/components/electric_kiwi/translations/ko.json +1 -1
  25. homeassistant/components/emoncms/translations/ga.json +1 -0
  26. homeassistant/components/enphase_envoy/translations/et.json +1 -0
  27. homeassistant/components/enphase_envoy/translations/lt.json +1 -0
  28. homeassistant/components/enphase_envoy/translations/nl.json +2 -1
  29. homeassistant/components/ezviz/translations/lt.json +10 -0
  30. homeassistant/components/fibaro/translations/ko.json +1 -1
  31. homeassistant/components/fitbit/translations/ko.json +1 -1
  32. homeassistant/components/frontend/manifest.json +1 -1
  33. homeassistant/components/geocaching/translations/ko.json +1 -1
  34. homeassistant/components/google/translations/ko.json +1 -1
  35. homeassistant/components/google_generative_ai_conversation/config_flow.py +5 -4
  36. homeassistant/components/google_generative_ai_conversation/translations/lt.json +28 -0
  37. homeassistant/components/google_photos/translations/ko.json +1 -1
  38. homeassistant/components/google_sheets/translations/ko.json +1 -1
  39. homeassistant/components/google_tasks/translations/ko.json +1 -1
  40. homeassistant/components/google_travel_time/translations/it.json +7 -0
  41. homeassistant/components/hassio/ingress.py +6 -2
  42. homeassistant/components/home_connect/translations/it.json +3 -0
  43. homeassistant/components/homeassistant/translations/it.json +24 -0
  44. homeassistant/components/homeassistant_hardware/translations/et.json +1 -0
  45. homeassistant/components/homeassistant_hardware/translations/ga.json +4 -0
  46. homeassistant/components/homeassistant_hardware/translations/lt.json +2 -0
  47. homeassistant/components/homeassistant_hardware/translations/mk.json +3 -0
  48. homeassistant/components/homeassistant_sky_connect/translations/et.json +2 -0
  49. homeassistant/components/homeassistant_sky_connect/translations/ga.json +8 -0
  50. homeassistant/components/homeassistant_sky_connect/translations/lt.json +4 -0
  51. homeassistant/components/homeassistant_yellow/translations/et.json +1 -0
  52. homeassistant/components/homeassistant_yellow/translations/ga.json +4 -0
  53. homeassistant/components/homeassistant_yellow/translations/lt.json +3 -0
  54. homeassistant/components/huawei_lte/translations/ko.json +1 -1
  55. homeassistant/components/icloud/translations/ko.json +1 -1
  56. homeassistant/components/immich/translations/nl.json +5 -0
  57. homeassistant/components/jellyfin/translations/ko.json +1 -1
  58. homeassistant/components/jvc_projector/translations/ko.json +1 -1
  59. homeassistant/components/laundrify/translations/ko.json +1 -1
  60. homeassistant/components/lcn/translations/cs.json +0 -3
  61. homeassistant/components/lcn/translations/de.json +1 -1
  62. homeassistant/components/lcn/translations/el.json +0 -3
  63. homeassistant/components/lcn/translations/en-GB.json +0 -3
  64. homeassistant/components/lcn/translations/en.json +1 -1
  65. homeassistant/components/lcn/translations/es.json +1 -1
  66. homeassistant/components/lcn/translations/et.json +0 -3
  67. homeassistant/components/lcn/translations/hu.json +0 -3
  68. homeassistant/components/lcn/translations/ja.json +0 -3
  69. homeassistant/components/lcn/translations/lt.json +0 -3
  70. homeassistant/components/lcn/translations/pt-BR.json +0 -3
  71. homeassistant/components/lcn/translations/pt.json +0 -3
  72. homeassistant/components/lcn/translations/ru.json +0 -3
  73. homeassistant/components/lcn/translations/sk.json +0 -3
  74. homeassistant/components/lcn/translations/sv.json +0 -3
  75. homeassistant/components/lcn/translations/tr.json +0 -3
  76. homeassistant/components/lcn/translations/zh-Hans.json +0 -3
  77. homeassistant/components/lcn/translations/zh-Hant.json +0 -3
  78. homeassistant/components/ld2410_ble/manifest.json +1 -1
  79. homeassistant/components/led_ble/manifest.json +1 -1
  80. homeassistant/components/lg_thinq/translations/et.json +3 -1
  81. homeassistant/components/lg_thinq/translations/lt.json +3 -1
  82. homeassistant/components/lidarr/translations/ko.json +1 -1
  83. homeassistant/components/litterrobot/translations/en-GB.json +1 -0
  84. homeassistant/components/litterrobot/translations/et.json +1 -0
  85. homeassistant/components/litterrobot/translations/ko.json +1 -1
  86. homeassistant/components/litterrobot/translations/lt.json +1 -0
  87. homeassistant/components/litterrobot/translations/sk.json +1 -0
  88. homeassistant/components/litterrobot/translations/zh-Hans.json +1 -0
  89. homeassistant/components/lyric/translations/it.json +3 -0
  90. homeassistant/components/lyric/translations/ko.json +1 -1
  91. homeassistant/components/melcloud/translations/ko.json +1 -1
  92. homeassistant/components/miele/translations/it.json +3 -0
  93. homeassistant/components/miele/translations/sk.json +1 -0
  94. homeassistant/components/mikrotik/translations/ko.json +1 -1
  95. homeassistant/components/mqtt/translations/bg.json +10 -0
  96. homeassistant/components/mqtt/translations/ga.json +10 -0
  97. homeassistant/components/mqtt/translations/it.json +7 -1
  98. homeassistant/components/mqtt/translations/lt.json +37 -0
  99. homeassistant/components/mqtt/translations/mk.json +9 -0
  100. homeassistant/components/nest/translations/ko.json +1 -1
  101. homeassistant/components/netatmo/translations/ko.json +1 -1
  102. homeassistant/components/nordpool/coordinator.py +3 -0
  103. homeassistant/components/notion/translations/ko.json +1 -1
  104. homeassistant/components/nuki/translations/ko.json +1 -1
  105. homeassistant/components/ollama/__init__.py +30 -4
  106. homeassistant/components/ollama/config_flow.py +164 -135
  107. homeassistant/components/ollama/conversation.py +8 -243
  108. homeassistant/components/ollama/entity.py +261 -0
  109. homeassistant/components/ollama/strings.json +12 -10
  110. homeassistant/components/ollama/translations/bg.json +0 -1
  111. homeassistant/components/ollama/translations/ca.json +0 -10
  112. homeassistant/components/ollama/translations/cs.json +1 -10
  113. homeassistant/components/ollama/translations/de.json +1 -10
  114. homeassistant/components/ollama/translations/el.json +1 -10
  115. homeassistant/components/ollama/translations/en-GB.json +0 -10
  116. homeassistant/components/ollama/translations/en.json +12 -10
  117. homeassistant/components/ollama/translations/es.json +1 -10
  118. homeassistant/components/ollama/translations/et.json +1 -10
  119. homeassistant/components/ollama/translations/fi.json +0 -7
  120. homeassistant/components/ollama/translations/fr.json +1 -10
  121. homeassistant/components/ollama/translations/ga.json +0 -3
  122. homeassistant/components/ollama/translations/hu.json +1 -10
  123. homeassistant/components/ollama/translations/it.json +0 -8
  124. homeassistant/components/ollama/translations/ja.json +1 -10
  125. homeassistant/components/ollama/translations/lt.json +1 -10
  126. homeassistant/components/ollama/translations/pt-BR.json +0 -3
  127. homeassistant/components/ollama/translations/pt.json +1 -10
  128. homeassistant/components/ollama/translations/ru.json +1 -10
  129. homeassistant/components/ollama/translations/sk.json +1 -10
  130. homeassistant/components/ollama/translations/sv.json +1 -10
  131. homeassistant/components/ollama/translations/tr.json +0 -10
  132. homeassistant/components/ollama/translations/zh-Hans.json +1 -10
  133. homeassistant/components/ollama/translations/zh-Hant.json +1 -10
  134. homeassistant/components/opentherm_gw/translations/bg.json +3 -0
  135. homeassistant/components/opentherm_gw/translations/et.json +3 -0
  136. homeassistant/components/opentherm_gw/translations/ga.json +3 -0
  137. homeassistant/components/opentherm_gw/translations/lt.json +3 -0
  138. homeassistant/components/opentherm_gw/translations/mk.json +7 -0
  139. homeassistant/components/openuv/translations/ko.json +1 -1
  140. homeassistant/components/opower/translations/ko.json +1 -1
  141. homeassistant/components/overkiz/translations/et.json +1 -0
  142. homeassistant/components/overkiz/translations/lt.json +1 -0
  143. homeassistant/components/overkiz/translations/zh-Hans.json +1 -0
  144. homeassistant/components/pegel_online/translations/lt.json +2 -1
  145. homeassistant/components/playstation_network/translations/cs.json +0 -3
  146. homeassistant/components/playstation_network/translations/el.json +0 -3
  147. homeassistant/components/playstation_network/translations/en.json +1 -1
  148. homeassistant/components/playstation_network/translations/et.json +1 -1
  149. homeassistant/components/playstation_network/translations/ga.json +0 -3
  150. homeassistant/components/playstation_network/translations/hu.json +0 -3
  151. homeassistant/components/playstation_network/translations/it.json +0 -3
  152. homeassistant/components/playstation_network/translations/lt.json +29 -0
  153. homeassistant/components/playstation_network/translations/mk.json +0 -3
  154. homeassistant/components/playstation_network/translations/nl.json +0 -3
  155. homeassistant/components/playstation_network/translations/pl.json +0 -3
  156. homeassistant/components/playstation_network/translations/pt.json +0 -3
  157. homeassistant/components/playstation_network/translations/sk.json +1 -1
  158. homeassistant/components/playstation_network/translations/sv.json +0 -3
  159. homeassistant/components/playstation_network/translations/zh-Hans.json +0 -3
  160. homeassistant/components/playstation_network/translations/zh-Hant.json +1 -1
  161. homeassistant/components/private_ble_device/manifest.json +1 -1
  162. homeassistant/components/proximity/translations/lt.json +25 -1
  163. homeassistant/components/proximity/translations/nl.json +3 -0
  164. homeassistant/components/pushover/translations/ko.json +1 -1
  165. homeassistant/components/radarr/translations/ko.json +1 -1
  166. homeassistant/components/renault/translations/ko.json +1 -1
  167. homeassistant/components/reolink/translations/it.json +3 -0
  168. homeassistant/components/reolink/translations/pl.json +2 -1
  169. homeassistant/components/ridwell/translations/ko.json +1 -1
  170. homeassistant/components/ring/translations/ko.json +1 -1
  171. homeassistant/components/roborock/translations/ko.json +1 -1
  172. homeassistant/components/russound_rio/translations/nl.json +7 -0
  173. homeassistant/components/schlage/translations/ko.json +1 -1
  174. homeassistant/components/scrape/translations/it.json +1 -0
  175. homeassistant/components/sense/translations/ko.json +1 -1
  176. homeassistant/components/sensibo/translations/pt-BR.json +4 -1
  177. homeassistant/components/sensibo/translations/sv.json +3 -3
  178. homeassistant/components/sensor/translations/it.json +1 -0
  179. homeassistant/components/shelly/__init__.py +8 -1
  180. homeassistant/components/shelly/const.py +3 -0
  181. homeassistant/components/shelly/repairs.py +87 -4
  182. homeassistant/components/shelly/strings.json +14 -0
  183. homeassistant/components/shelly/translations/bg.json +7 -0
  184. homeassistant/components/shelly/translations/de.json +14 -0
  185. homeassistant/components/shelly/translations/en.json +14 -0
  186. homeassistant/components/shelly/translations/es.json +14 -0
  187. homeassistant/components/shelly/translations/et.json +11 -0
  188. homeassistant/components/shelly/translations/ko.json +1 -1
  189. homeassistant/components/skybell/translations/ko.json +1 -1
  190. homeassistant/components/sleepiq/translations/ko.json +1 -1
  191. homeassistant/components/sma/config_flow.py +30 -1
  192. homeassistant/components/smarla/translations/it.json +9 -0
  193. homeassistant/components/smarttub/translations/ko.json +1 -1
  194. homeassistant/components/sonarr/translations/ko.json +1 -1
  195. homeassistant/components/sonos/translations/lt.json +9 -0
  196. homeassistant/components/spotify/translations/ko.json +1 -1
  197. homeassistant/components/sql/translations/it.json +1 -0
  198. homeassistant/components/squeezebox/translations/it.json +5 -0
  199. homeassistant/components/steam_online/translations/ko.json +1 -1
  200. homeassistant/components/subaru/translations/lt.json +2 -0
  201. homeassistant/components/subaru/translations/mk.json +12 -0
  202. homeassistant/components/surepetcare/translations/ko.json +1 -1
  203. homeassistant/components/switchbot/translations/en-GB.json +5 -0
  204. homeassistant/components/switchbot/translations/es.json +1 -0
  205. homeassistant/components/switchbot/translations/et.json +1 -0
  206. homeassistant/components/switchbot/translations/ga.json +13 -0
  207. homeassistant/components/switchbot/translations/lt.json +54 -0
  208. homeassistant/components/switchbot/translations/nl.json +1 -0
  209. homeassistant/components/switchbot/translations/sk.json +1 -0
  210. homeassistant/components/switchbot/translations/zh-Hans.json +1 -0
  211. homeassistant/components/switchbot/translations/zh-Hant.json +1 -0
  212. homeassistant/components/telegram_bot/translations/bg.json +10 -0
  213. homeassistant/components/telegram_bot/translations/ga.json +28 -0
  214. homeassistant/components/telegram_bot/translations/it.json +12 -0
  215. homeassistant/components/telegram_bot/translations/lt.json +30 -0
  216. homeassistant/components/telegram_bot/translations/mk.json +5 -0
  217. homeassistant/components/template/translations/it.json +1 -0
  218. homeassistant/components/tesla_fleet/translations/en-GB.json +3 -0
  219. homeassistant/components/tesla_fleet/translations/et.json +3 -0
  220. homeassistant/components/tesla_fleet/translations/lt.json +3 -0
  221. homeassistant/components/tesla_fleet/translations/mk.json +3 -0
  222. homeassistant/components/tesla_fleet/translations/nl.json +3 -0
  223. homeassistant/components/tesla_fleet/translations/zh-Hans.json +3 -0
  224. homeassistant/components/tessie/translations/ko.json +1 -1
  225. homeassistant/components/thermopro/manifest.json +1 -1
  226. homeassistant/components/thermopro/translations/lt.json +7 -0
  227. homeassistant/components/timer/translations/ko.json +2 -1
  228. homeassistant/components/totalconnect/translations/ko.json +1 -1
  229. homeassistant/components/transmission/translations/ko.json +1 -1
  230. homeassistant/components/tuya/translations/it.json +13 -0
  231. homeassistant/components/twitch/translations/ko.json +1 -1
  232. homeassistant/components/unifiprotect/config_flow.py +1 -1
  233. homeassistant/components/uptimerobot/translations/it.json +5 -0
  234. homeassistant/components/uptimerobot/translations/ko.json +1 -1
  235. homeassistant/components/watttime/translations/ko.json +1 -1
  236. homeassistant/components/weatherflow_cloud/translations/ga.json +1 -0
  237. homeassistant/components/webdav/translations/et.json +1 -0
  238. homeassistant/components/webdav/translations/ga.json +1 -0
  239. homeassistant/components/webdav/translations/lt.json +1 -0
  240. homeassistant/components/webdav/translations/mk.json +7 -0
  241. homeassistant/components/webdav/translations/zh-Hans.json +1 -0
  242. homeassistant/components/whirlpool/translations/et.json +1 -0
  243. homeassistant/components/whirlpool/translations/lt.json +1 -0
  244. homeassistant/components/whirlpool/translations/zh-Hans.json +1 -0
  245. homeassistant/components/withings/translations/it.json +3 -0
  246. homeassistant/components/withings/translations/ko.json +1 -1
  247. homeassistant/components/xiaomi_miio/translations/ko.json +1 -1
  248. homeassistant/components/yolink/translations/ko.json +1 -1
  249. homeassistant/components/youtube/translations/ko.json +1 -1
  250. homeassistant/components/zha/translations/it.json +10 -2
  251. homeassistant/components/zha/translations/lt.json +50 -0
  252. homeassistant/components/zwave_js/strings.json +11 -11
  253. homeassistant/components/zwave_js/translations/bg.json +6 -20
  254. homeassistant/components/zwave_js/translations/cs.json +0 -22
  255. homeassistant/components/zwave_js/translations/de.json +0 -23
  256. homeassistant/components/zwave_js/translations/el.json +0 -23
  257. homeassistant/components/zwave_js/translations/en-GB.json +0 -23
  258. homeassistant/components/zwave_js/translations/en.json +11 -11
  259. homeassistant/components/zwave_js/translations/es.json +0 -23
  260. homeassistant/components/zwave_js/translations/et.json +0 -23
  261. homeassistant/components/zwave_js/translations/fi.json +0 -11
  262. homeassistant/components/zwave_js/translations/ga.json +16 -22
  263. homeassistant/components/zwave_js/translations/hu.json +0 -23
  264. homeassistant/components/zwave_js/translations/it.json +0 -12
  265. homeassistant/components/zwave_js/translations/lt.json +32 -22
  266. homeassistant/components/zwave_js/translations/mk.json +16 -7
  267. homeassistant/components/zwave_js/translations/pt.json +0 -23
  268. homeassistant/components/zwave_js/translations/ru.json +0 -21
  269. homeassistant/components/zwave_js/translations/sk.json +0 -23
  270. homeassistant/components/zwave_js/translations/sv.json +0 -23
  271. homeassistant/components/zwave_js/translations/tr.json +0 -13
  272. homeassistant/components/zwave_js/translations/zh-Hans.json +0 -23
  273. homeassistant/components/zwave_js/translations/zh-Hant.json +0 -23
  274. homeassistant/const.py +1 -1
  275. homeassistant/package_constraints.txt +2 -2
  276. {homeassistant-2025.7.0b7.dist-info → homeassistant-2025.7.0b9.dist-info}/METADATA +1 -1
  277. {homeassistant-2025.7.0b7.dist-info → homeassistant-2025.7.0b9.dist-info}/RECORD +282 -277
  278. homeassistant/components/zwave_js/translations/sq.json +0 -7
  279. {homeassistant-2025.7.0b7.dist-info → homeassistant-2025.7.0b9.dist-info}/WHEEL +0 -0
  280. {homeassistant-2025.7.0b7.dist-info → homeassistant-2025.7.0b9.dist-info}/entry_points.txt +0 -0
  281. {homeassistant-2025.7.0b7.dist-info → homeassistant-2025.7.0b9.dist-info}/licenses/LICENSE.md +0 -0
  282. {homeassistant-2025.7.0b7.dist-info → homeassistant-2025.7.0b9.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  283. {homeassistant-2025.7.0b7.dist-info → homeassistant-2025.7.0b9.dist-info}/top_level.txt +0 -0
@@ -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}"
@@ -254,6 +254,20 @@
254
254
  "description": "Das Shelly-Ger\u00e4t {device_name} mit der IP-Adresse {ip_address} erfordert eine Kalibrierung. Um das Ger\u00e4t zu kalibrieren, muss es nach ordnungsgem\u00e4\u00dfer Installation am Ventil neu gestartet werden. Du kannst das Ger\u00e4t in seiner Weboberfl\u00e4che neu starten. Gehe dazu zu \u201eSettings\u201c \u2192 \u201eDevice Reboot\u201c.",
255
255
  "title": "Das Shelly-Ger\u00e4t {device_name} ist nicht kalibriert"
256
256
  },
257
+ "outbound_websocket_incorrectly_enabled": {
258
+ "fix_flow": {
259
+ "abort": {
260
+ "cannot_connect": "Verbindung fehlgeschlagen"
261
+ },
262
+ "step": {
263
+ "confirm": {
264
+ "description": "Dein Shelly-Ger\u00e4t {device_name} mit der IP-Adresse {ip_address} ist ein nicht-schlafendes Ger\u00e4t, und Outbound WebSocket sollte in seiner Konfiguration deaktiviert sein. \n \nDr\u00fccke **OK**, um Outbound WebSocket zu deaktivieren.",
265
+ "title": "F\u00fcr {device_name} ist Outbound WebSocket aktiviert"
266
+ }
267
+ }
268
+ },
269
+ "title": "F\u00fcr {device_name} ist Outbound WebSocket aktiviert"
270
+ },
257
271
  "push_update_failure": {
258
272
  "description": "Home Assistant empf\u00e4ngt keine Push-Updates vom Shelly-Ger\u00e4t {device_name} mit der IP-Adresse {ip_address}. \u00dcberpr\u00fcfe die CoIoT-Konfiguration in der Weboberfl\u00e4che des Ger\u00e4ts und deine Netzwerkkonfiguration.",
259
273
  "title": "Shelly-Ger\u00e4t {device_name} Push-Update fehlgeschlagen"
@@ -254,6 +254,20 @@
254
254
  "description": "Shelly device {device_name} with IP address {ip_address} requires calibration. To calibrate the device, it must be rebooted after proper installation on the valve. You can reboot the device in its web panel, go to 'Settings' > 'Device Reboot'.",
255
255
  "title": "Shelly device {device_name} is not calibrated"
256
256
  },
257
+ "outbound_websocket_incorrectly_enabled": {
258
+ "fix_flow": {
259
+ "abort": {
260
+ "cannot_connect": "Failed to connect"
261
+ },
262
+ "step": {
263
+ "confirm": {
264
+ "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.",
265
+ "title": "Outbound WebSocket is enabled for {device_name}"
266
+ }
267
+ }
268
+ },
269
+ "title": "Outbound WebSocket is enabled for {device_name}"
270
+ },
257
271
  "push_update_failure": {
258
272
  "description": "Home Assistant is not receiving push updates from the Shelly device {device_name} with IP address {ip_address}. Check the CoIoT configuration in the web panel of the device and your network configuration.",
259
273
  "title": "Shelly device {device_name} push update failure"
@@ -254,6 +254,20 @@
254
254
  "description": "El dispositivo Shelly {device_name} con direcci\u00f3n IP {ip_address} requiere calibraci\u00f3n. Para calibrar el dispositivo, debe reiniciarse despu\u00e9s de la instalaci\u00f3n adecuada en la v\u00e1lvula. Puedes reiniciar el dispositivo en su panel web, ve a 'Configuraci\u00f3n' > 'Reinicio del dispositivo'.",
255
255
  "title": "El dispositivo Shelly {device_name} no est\u00e1 calibrado"
256
256
  },
257
+ "outbound_websocket_incorrectly_enabled": {
258
+ "fix_flow": {
259
+ "abort": {
260
+ "cannot_connect": "No se pudo conectar"
261
+ },
262
+ "step": {
263
+ "confirm": {
264
+ "description": "Tu dispositivo Shelly {device_name} con direcci\u00f3n IP {ip_address} es un dispositivo que no est\u00e1 inactivo y el WebSocket de salida debe estar deshabilitado en su configuraci\u00f3n. \n \nSelecciona el bot\u00f3n **Enviar** para deshabilitar el WebSocket de salida.",
265
+ "title": "El WebSocket de salida est\u00e1 habilitado para {device_name}"
266
+ }
267
+ }
268
+ },
269
+ "title": "El WebSocket de salida est\u00e1 habilitado para {device_name}"
270
+ },
257
271
  "push_update_failure": {
258
272
  "description": "Home Assistant no est\u00e1 recibiendo actualizaciones autom\u00e1ticas del dispositivo Shelly {device_name} con direcci\u00f3n IP {ip_address}. Consulta la configuraci\u00f3n de CoIoT en el panel web del dispositivo y tu configuraci\u00f3n de red.",
259
273
  "title": "Fallo en la actualizaci\u00f3n push del dispositivo {device_name} de Shelly"
@@ -254,6 +254,17 @@
254
254
  "description": "Shelly seade {device_name} IP-aadressiga {ip_address} n\u00f5uab kalibreerimist. Seadme kalibreerimiseks tuleb see p\u00e4rast klapile n\u00f5uetekohast paigaldamist taask\u00e4ivitada. Saad seadme taask\u00e4ivitada selle veebipaneelil, mine jaotisse \"Seaded\" > \"Seadme taask\u00e4ivitamine\".",
255
255
  "title": "Shelly seade {device_name} ei ole kalibreeritud"
256
256
  },
257
+ "outbound_websocket_incorrectly_enabled": {
258
+ "fix_flow": {
259
+ "step": {
260
+ "confirm": {
261
+ "description": "Shelly seade {device_name} IP-aadressiga {ip_address} on mitteunere\u017eiimis olev seade ja v\u00e4ljaminev WebSocket tuleks selle konfiguratsioonis keelata.\n\nVali nupp **Esita**, et keelata v\u00e4ljaminev WebSocket.",
262
+ "title": "V\u00e4ljaminev WebSocket on seadmel {device_name} lubatud"
263
+ }
264
+ }
265
+ },
266
+ "title": "V\u00e4ljaminev WebSocket on seadmel {device_name} lubatud"
267
+ },
257
268
  "push_update_failure": {
258
269
  "description": "Home Assistant ei saa t\u00f5ukev\u00e4rskendusi Shelly seadmest {device_name} IP-aadressiga {ip_address}. Kontrolli CoIoT konfiguratsiooni seadme veebipaneelil ja oma v\u00f5rgu konfiguratsiooni.",
259
270
  "title": "Shelly seadme {device_name} t\u00f5ukev\u00e4rskenduse t\u00f5rge"
@@ -115,7 +115,7 @@
115
115
  },
116
116
  "issues": {
117
117
  "device_not_calibrated": {
118
- "description": "IP \uc8fc\uc18c\uac00 {ip_address} \uc778 Shelly \uae30\uae30 {device_name} }\uc740 \ubcf4\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uae30\uae30\ub97c \ubcf4\uc815\ud558\ub824\uba74 \ubc38\ube0c\uc5d0 \uc62c\ubc14\ub974\uac8c \uc124\uce58\ud55c \ud6c4 \uc7ac\ubd80\ud305\ud574\uc57c \ud569\ub2c8\ub2e4. \uc6f9 \ud328\ub110\uc5d0\uc11c '\uc124\uc815' > '\uae30\uae30 \uc7ac\ubd80\ud305'\uc73c\ub85c \uc774\ub3d9\ud558\uc5ec \uae30\uae30\ub97c \uc7ac\ubd80\ud305\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",
118
+ "description": "IP \uc8fc\uc18c\uac00 {ip_address} \uc778 Shelly \uae30\uae30 {device_name}\uc740 \ubcf4\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uae30\uae30\ub97c \ubcf4\uc815\ud558\ub824\uba74 \ubc38\ube0c\uc5d0 \uc62c\ubc14\ub974\uac8c \uc124\uce58\ud55c \ud6c4 \uc7ac\ubd80\ud305\ud574\uc57c \ud569\ub2c8\ub2e4. \uc6f9 \ud328\ub110\uc5d0\uc11c '\uc124\uc815' > '\uae30\uae30 \uc7ac\ubd80\ud305'\uc73c\ub85c \uc774\ub3d9\ud558\uc5ec \uae30\uae30\ub97c \uc7ac\ubd80\ud305\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",
119
119
  "title": "Shelly \uae30\uae30 {device_name} \ubcf4\uc815\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4."
120
120
  },
121
121
  "push_update_failure": {
@@ -15,7 +15,7 @@
15
15
  "password": "\uc554\ud638"
16
16
  },
17
17
  "description": "{email}\uc758 \uc554\ud638\ub97c \uc5c5\ub370\uc774\ud2b8\ud558\uc138\uc694.",
18
- "title": "\ud1b5\ud569\uad6c\uc131\uc694\uc18c \uc7ac\uc778\uc99d\ud558\uae30"
18
+ "title": "{name}\uc758 \uc778\uc99d\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4"
19
19
  },
20
20
  "user": {
21
21
  "data": {
@@ -14,7 +14,7 @@
14
14
  "password": "\uc554\ud638"
15
15
  },
16
16
  "description": "SleepIQ \ud1b5\ud569\uad6c\uc131\uc694\uc18c\ub294 {username} \uacc4\uc815\uc744 \ub2e4\uc2dc \uc778\uc99d\ud574\uc57c \ud569\ub2c8\ub2e4.",
17
- "title": "\ud1b5\ud569\uad6c\uc131\uc694\uc18c \uc7ac\uc778\uc99d\ud558\uae30"
17
+ "title": "{name}\uc758 \uc778\uc99d\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4"
18
18
  },
19
19
  "user": {
20
20
  "data": {
@@ -184,7 +184,36 @@ class SmaConfigFlow(ConfigFlow, domain=DOMAIN):
184
184
  self._data[CONF_HOST] = discovery_info.ip
185
185
  self._data[CONF_MAC] = format_mac(self._discovery_data[CONF_MAC])
186
186
 
187
- await self.async_set_unique_id(discovery_info.hostname.replace("SMA", ""))
187
+ _LOGGER.debug(
188
+ "DHCP discovery detected SMA device: %s, IP: %s, MAC: %s",
189
+ self._discovery_data[CONF_NAME],
190
+ self._discovery_data[CONF_HOST],
191
+ self._discovery_data[CONF_MAC],
192
+ )
193
+
194
+ existing_entries_with_host = [
195
+ entry
196
+ for entry in self._async_current_entries(include_ignore=False)
197
+ if entry.data.get(CONF_HOST) == self._data[CONF_HOST]
198
+ and not entry.data.get(CONF_MAC)
199
+ ]
200
+
201
+ # If we have an existing entry with the same host but no MAC address,
202
+ # we update the entry with the MAC address and reload it.
203
+ if existing_entries_with_host:
204
+ entry = existing_entries_with_host[0]
205
+ self.async_update_reload_and_abort(
206
+ entry, data_updates={CONF_MAC: self._data[CONF_MAC]}
207
+ )
208
+
209
+ # Finally, check if the hostname (which represents the SMA serial number) is unique
210
+ serial_number = discovery_info.hostname.lower()
211
+ # Example hostname: sma12345678-01
212
+ # Remove 'sma' prefix and strip everything after the dash (including the dash)
213
+ if serial_number.startswith("sma"):
214
+ serial_number = serial_number.removeprefix("sma")
215
+ serial_number = serial_number.split("-", 1)[0]
216
+ await self.async_set_unique_id(serial_number)
188
217
  self._abort_if_unique_id_configured()
189
218
 
190
219
  return await self.async_step_discovery_confirm()
@@ -1,4 +1,13 @@
1
1
  {
2
+ "config": {
3
+ "abort": {
4
+ "already_configured": "Il dispositivo \u00e8 gi\u00e0 configurato"
5
+ },
6
+ "error": {
7
+ "invalid_auth": "Autenticazione non valida",
8
+ "malformed_token": "Token di accesso non valido"
9
+ }
10
+ },
2
11
  "entity": {
3
12
  "number": {
4
13
  "intensity": {
@@ -10,7 +10,7 @@
10
10
  "step": {
11
11
  "reauth_confirm": {
12
12
  "description": "SmartTub \ud1b5\ud569\uad6c\uc131\uc694\uc18c\ub294 \uacc4\uc815\uc744 \ub2e4\uc2dc \uc778\uc99d\ud574\uc57c \ud569\ub2c8\ub2e4.",
13
- "title": "\ud1b5\ud569\uad6c\uc131\uc694\uc18c \uc7ac\uc778\uc99d\ud558\uae30"
13
+ "title": "{name}\uc758 \uc778\uc99d\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4"
14
14
  },
15
15
  "user": {
16
16
  "data": {
@@ -13,7 +13,7 @@
13
13
  "step": {
14
14
  "reauth_confirm": {
15
15
  "description": "Sonarr \ud1b5\ud569\uad6c\uc131\uc694\uc18c\ub294 {url}\uc5d0\uc11c \ud638\uc2a4\ud305\ub418\ub294 Sonarr API\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc218\ub3d9\uc73c\ub85c \ub2e4\uc2dc \uc778\uc99d\ud574\uc57c \ud569\ub2c8\ub2e4.",
16
- "title": "\ud1b5\ud569\uad6c\uc131\uc694\uc18c \uc7ac\uc778\uc99d\ud558\uae30"
16
+ "title": "{name}\uc758 \uc778\uc99d\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4"
17
17
  },
18
18
  "user": {
19
19
  "data": {
@@ -83,6 +83,9 @@
83
83
  "announce_media_error": {
84
84
  "message": "Nepavyko paskelbti klipo {media_id} {response}"
85
85
  },
86
+ "entity_not_found": {
87
+ "message": "Objektas {entity_id} nerastas."
88
+ },
86
89
  "invalid_content_type": {
87
90
  "message": "\u201eSonos\u201c nepalaiko medijos turinio tipo: {media_type}"
88
91
  },
@@ -94,6 +97,12 @@
94
97
  },
95
98
  "invalid_sonos_playlist": {
96
99
  "message": "Nepavyko rasti \u201eSonos\u201c grojara\u0161\u010dio: {name}"
100
+ },
101
+ "speaker_not_found": {
102
+ "message": "{entity_id} n\u0117ra \u017einomas Sonos garsiakalbis."
103
+ },
104
+ "timeout_join": {
105
+ "message": "Laukiant, kol Sonos grotuvas prisijungs prie grup\u0117s {group_description} baig\u0117si skirtasis laikas."
97
106
  }
98
107
  },
99
108
  "issues": {
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "reauth_confirm": {
20
20
  "description": "Spotify \ud1b5\ud569\uad6c\uc131\uc694\uc18c\ub294 {account} \uacc4\uc815\uc5d0 \ub300\ud574 Spotify\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub2e4\uc2dc \uc778\uc99d\ud574\uc57c \ud569\ub2c8\ub2e4.",
21
- "title": "\ud1b5\ud569\uad6c\uc131\uc694\uc18c \uc7ac\uc778\uc99d\ud558\uae30"
21
+ "title": "{name}\uc758 \uc778\uc99d\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4"
22
22
  }
23
23
  }
24
24
  },
@@ -117,6 +117,7 @@
117
117
  "state_class": {
118
118
  "options": {
119
119
  "measurement": "Misurazione",
120
+ "measurement_angle": "Angolo di misura",
120
121
  "total": "Totale",
121
122
  "total_increasing": "Aumento in totale"
122
123
  }
@@ -47,6 +47,11 @@
47
47
  "player_count": {
48
48
  "unit_of_measurement": "giocatori"
49
49
  }
50
+ },
51
+ "switch": {
52
+ "alarms_enabled": {
53
+ "name": "Allarmi attivati"
54
+ }
50
55
  }
51
56
  },
52
57
  "services": {
@@ -13,7 +13,7 @@
13
13
  "step": {
14
14
  "reauth_confirm": {
15
15
  "description": "Steam \ud1b5\ud569\uad6c\uc131\uc694\uc18c\ub294 \uacc4\uc815\uc744 \ub2e4\uc2dc \uc778\uc99d\ud574\uc57c\ud569\ub2c8\ub2e4.\n\n\uc5ec\uae30\uc5d0\uc11c \ud0a4\ub97c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4: {api_key_url}",
16
- "title": "\ud1b5\ud569\uad6c\uc131\uc694\uc18c \uc7ac\uc778\uc99d\ud558\uae30"
16
+ "title": "{name}\uc758 \uc778\uc99d\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4"
17
17
  },
18
18
  "user": {
19
19
  "data": {
@@ -101,8 +101,10 @@
101
101
  },
102
102
  "services": {
103
103
  "unlock_specific_door": {
104
+ "description": "Atrakina vairuotojo duris, visas duris arba baga\u017ein\u0117s dangt\u012f.",
104
105
  "fields": {
105
106
  "door": {
107
+ "description": "Konkre\u010dios durys, kurias reikia atrakinti.",
106
108
  "name": "Durys"
107
109
  }
108
110
  },
@@ -0,0 +1,12 @@
1
+ {
2
+ "services": {
3
+ "unlock_specific_door": {
4
+ "description": "\u0408\u0430 \u043e\u0442\u043a\u043b\u0443\u0447\u0443\u0432\u0430 \u0432\u0440\u0430\u0442\u0430\u0442\u0430 \u043d\u0430 \u0432\u043e\u0437\u0430\u0447\u043e\u0442, \u0441\u0438\u0442\u0435 \u0432\u0440\u0430\u0442\u0438 \u0438\u043b\u0438 \u0437\u0430\u0434\u043d\u0430\u0442\u0430 \u0432\u0440\u0430\u0442\u0430.",
5
+ "fields": {
6
+ "door": {
7
+ "description": "\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430\u0442\u0430(\u0438\u0442\u0435) \u0432\u0440\u0430\u0442\u0430(\u0438) \u0448\u0442\u043e \u0442\u0440\u0435\u0431\u0430 \u0434\u0430 \u0441\u0435 \u043e\u0442\u043a\u043b\u0443\u0447\u0430\u0442."
8
+ }
9
+ }
10
+ }
11
+ }
12
+ }
@@ -14,7 +14,7 @@
14
14
  "password": "\uc554\ud638"
15
15
  },
16
16
  "description": "{username}\uc5d0 \ub300\ud55c \uc554\ud638\ub97c \uc785\ub825\ud558\uc5ec \ub2e4\uc2dc \uc778\uc99d\ud569\ub2c8\ub2e4.",
17
- "title": "\ud1b5\ud569\uad6c\uc131\uc694\uc18c \uc7ac\uc778\uc99d\ud558\uae30"
17
+ "title": "{name}\uc758 \uc778\uc99d\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4"
18
18
  },
19
19
  "user": {
20
20
  "data": {
@@ -174,6 +174,11 @@
174
174
  "light_level": {
175
175
  "name": "Light level"
176
176
  },
177
+ "water_level": {
178
+ "state": {
179
+ "empty": "Empty"
180
+ }
181
+ },
177
182
  "wifi_signal": {
178
183
  "name": "Wi-Fi signal"
179
184
  }
@@ -222,6 +222,7 @@
222
222
  "water_level": {
223
223
  "name": "Nivel de agua",
224
224
  "state": {
225
+ "empty": "Vac\u00eda",
225
226
  "high": "Alto",
226
227
  "low": "Bajo",
227
228
  "medium": "Medio"
@@ -222,6 +222,7 @@
222
222
  "water_level": {
223
223
  "name": "Veetase",
224
224
  "state": {
225
+ "empty": "T\u00fchi",
225
226
  "high": "K\u00f5rge",
226
227
  "low": "Madal",
227
228
  "medium": "Keskmine"
@@ -81,6 +81,13 @@
81
81
  "cool": "Fionnuar",
82
82
  "fade": "C\u00e9imni\u00fa",
83
83
  "flashing": "Ag splancadh",
84
+ "modern": "Nua-Aimseartha",
85
+ "ocean": "Aig\u00e9an",
86
+ "relax": "Sc\u00edth a ligean",
87
+ "rose": "R\u00f3s",
88
+ "smooth": "R\u00e9idh",
89
+ "strobe": "Strob",
90
+ "sunset": "Lu\u00ed na gr\u00e9ine",
84
91
  "vitality": "Beocht"
85
92
  }
86
93
  }
@@ -96,6 +103,12 @@
96
103
  "moderate": "Measartha",
97
104
  "unhealthy": "M\u00edshl\u00e1inti\u00fail"
98
105
  }
106
+ },
107
+ "water_level": {
108
+ "state": {
109
+ "empty": "Folamh",
110
+ "high": "Ard"
111
+ }
99
112
  }
100
113
  }
101
114
  },
@@ -135,6 +135,22 @@
135
135
  }
136
136
  },
137
137
  "humidifier": {
138
+ "evaporative_humidifier": {
139
+ "state_attributes": {
140
+ "mode": {
141
+ "state": {
142
+ "auto": "Automatinis",
143
+ "drying_filter": "D\u017eiovinimo filtras",
144
+ "high": "Auk\u0161tas",
145
+ "low": "\u017demas",
146
+ "medium": "Vidutinis",
147
+ "quiet": "Tyliai",
148
+ "sleep": "Miegas",
149
+ "target_humidity": "Tikslin\u0117 dr\u0117gm\u0117"
150
+ }
151
+ }
152
+ }
153
+ },
138
154
  "humidifier": {
139
155
  "state_attributes": {
140
156
  "last_run_success": {
@@ -146,6 +162,35 @@
146
162
  }
147
163
  }
148
164
  },
165
+ "light": {
166
+ "light": {
167
+ "state_attributes": {
168
+ "effect": {
169
+ "state": {
170
+ "autumn": "Ruduo",
171
+ "breathing": "Kv\u0117pavimas",
172
+ "christmas": "Kal\u0117dos",
173
+ "colorful": "Spalvingas",
174
+ "cool": "\u0160aunu",
175
+ "fade": "I\u0161blukimas",
176
+ "flashing": "Mirksintis",
177
+ "flickering": "Mirg\u0117jimas",
178
+ "flow": "Srautas",
179
+ "forest": "Mi\u0161kas",
180
+ "halloween": "Helovinas",
181
+ "modern": "\u0160iuolaikinis",
182
+ "ocean": "Vandenynas",
183
+ "relax": "Atsipalaiduokite",
184
+ "rose": "Ro\u017e\u0117",
185
+ "smooth": "Sklandus",
186
+ "strobe": "Stroboskopas",
187
+ "sunset": "Saul\u0117lydis",
188
+ "vitality": "Gyvybingumas"
189
+ }
190
+ }
191
+ }
192
+ }
193
+ },
149
194
  "lock": {
150
195
  "lock": {
151
196
  "state_attributes": {
@@ -174,6 +219,15 @@
174
219
  "light_level": {
175
220
  "name": "\u0160viesos lygis"
176
221
  },
222
+ "water_level": {
223
+ "name": "Vandens lygis",
224
+ "state": {
225
+ "empty": "Tu\u0161\u010dias",
226
+ "high": "Auk\u0161tas",
227
+ "low": "\u017demas",
228
+ "medium": "Vidutinis"
229
+ }
230
+ },
177
231
  "wifi_signal": {
178
232
  "name": "Wi-Fi signalas"
179
233
  }
@@ -154,6 +154,7 @@
154
154
  "fade": "Vervagen",
155
155
  "flashing": "Knipperend",
156
156
  "flickering": "Flikkerend",
157
+ "halloween": "Halloween",
157
158
  "sunset": "Zonsondergang"
158
159
  }
159
160
  }
@@ -222,6 +222,7 @@
222
222
  "water_level": {
223
223
  "name": "Hladina vody",
224
224
  "state": {
225
+ "empty": "Pr\u00e1zdny",
225
226
  "high": "Vysok\u00e1",
226
227
  "low": "N\u00edzka",
227
228
  "medium": "Stredn\u00e1"
@@ -222,6 +222,7 @@
222
222
  "water_level": {
223
223
  "name": "\u6c34\u4f4d",
224
224
  "state": {
225
+ "empty": "\u7a7a",
225
226
  "high": "\u9ad8",
226
227
  "low": "\u4f4e",
227
228
  "medium": "\u4e2d"