homeassistant 2025.12.0b8__py3-none-any.whl → 2025.12.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (650) hide show
  1. homeassistant/components/airobot/translations/he.json +25 -0
  2. homeassistant/components/airobot/translations/pt.json +5 -1
  3. homeassistant/components/alarm_control_panel/translations/cs.json +18 -6
  4. homeassistant/components/alarm_control_panel/translations/he.json +86 -1
  5. homeassistant/components/alarm_control_panel/translations/pt.json +21 -7
  6. homeassistant/components/alarm_control_panel/translations/zh-Hans.json +4 -2
  7. homeassistant/components/alert/translations/he.json +1 -1
  8. homeassistant/components/anglian_water/config_flow.py +4 -18
  9. homeassistant/components/anglian_water/manifest.json +1 -0
  10. homeassistant/components/anglian_water/translations/he.json +20 -0
  11. homeassistant/components/anglian_water/translations/pt.json +2 -1
  12. homeassistant/components/anglian_water/translations/sv.json +8 -2
  13. homeassistant/components/anova/translations/he.json +1 -1
  14. homeassistant/components/anthropic/translations/he.json +31 -0
  15. homeassistant/components/apcupsd/translations/sk.json +5 -5
  16. homeassistant/components/aprilaire/translations/he.json +4 -4
  17. homeassistant/components/assist_satellite/translations/cs.json +12 -4
  18. homeassistant/components/assist_satellite/translations/he.json +55 -2
  19. homeassistant/components/assist_satellite/translations/pt.json +12 -4
  20. homeassistant/components/assist_satellite/translations/zh-Hans.json +4 -2
  21. homeassistant/components/automation/translations/cs.json +8 -0
  22. homeassistant/components/automation/translations/pt.json +8 -0
  23. homeassistant/components/automation/translations/sr-Latn.json +1 -1
  24. homeassistant/components/backup/translations/he.json +1 -1
  25. homeassistant/components/bang_olufsen/translations/he.json +901 -0
  26. homeassistant/components/bayesian/translations/sk.json +3 -3
  27. homeassistant/components/binary_sensor/translations/cs.json +36 -1
  28. homeassistant/components/binary_sensor/translations/et.json +4 -0
  29. homeassistant/components/binary_sensor/translations/ga.json +36 -1
  30. homeassistant/components/binary_sensor/translations/he.json +36 -1
  31. homeassistant/components/binary_sensor/translations/pt.json +36 -1
  32. homeassistant/components/binary_sensor/translations/ru.json +36 -1
  33. homeassistant/components/binary_sensor/translations/sv.json +23 -1
  34. homeassistant/components/binary_sensor/translations/zh-Hans.json +29 -1
  35. homeassistant/components/blebox/translations/sr-Latn.json +1 -0
  36. homeassistant/components/bsblan/translations/sr-Latn.json +4 -0
  37. homeassistant/components/camera/translations/he.json +1 -1
  38. homeassistant/components/climate/translations/cs.json +15 -5
  39. homeassistant/components/climate/translations/he.json +65 -2
  40. homeassistant/components/climate/translations/pt.json +15 -5
  41. homeassistant/components/climate/translations/ru.json +21 -11
  42. homeassistant/components/cloud/entity.py +1 -1
  43. homeassistant/components/cloud/manifest.json +1 -1
  44. homeassistant/components/cloud/translations/he.json +7 -0
  45. homeassistant/components/deluge/translations/he.json +1 -1
  46. homeassistant/components/derivative/translations/he.json +5 -0
  47. homeassistant/components/doorbird/device.py +11 -7
  48. homeassistant/components/duckdns/translations/he.json +10 -0
  49. homeassistant/components/duckdns/translations/ru.json +12 -0
  50. homeassistant/components/ecovacs/manifest.json +1 -1
  51. homeassistant/components/ecovacs/translations/he.json +1 -1
  52. homeassistant/components/energyid/translations/he.json +11 -0
  53. homeassistant/components/energyid/translations/sv.json +2 -1
  54. homeassistant/components/enphase_envoy/translations/he.json +1 -1
  55. homeassistant/components/esphome/translations/he.json +1 -0
  56. homeassistant/components/essent/translations/he.json +9 -0
  57. homeassistant/components/essent/translations/nl.json +32 -0
  58. homeassistant/components/evohome/manifest.json +1 -1
  59. homeassistant/components/fan/translations/cs.json +6 -2
  60. homeassistant/components/fan/translations/he.json +34 -1
  61. homeassistant/components/fan/translations/nl.json +6 -1
  62. homeassistant/components/fan/translations/pt.json +6 -2
  63. homeassistant/components/fan/translations/ru.json +37 -1
  64. homeassistant/components/forked_daapd/translations/sr-Latn.json +8 -0
  65. homeassistant/components/fritzbox_callmonitor/translations/he.json +1 -1
  66. homeassistant/components/fronius/translations/he.json +1 -1
  67. homeassistant/components/frontend/manifest.json +1 -1
  68. homeassistant/components/frontend/translations/cs.json +2 -2
  69. homeassistant/components/frontend/translations/de.json +2 -2
  70. homeassistant/components/frontend/translations/he.json +8 -0
  71. homeassistant/components/google_air_quality/strings.json +7 -2
  72. homeassistant/components/google_air_quality/translations/bg.json +3 -2
  73. homeassistant/components/google_air_quality/translations/cs.json +7 -2
  74. homeassistant/components/google_air_quality/translations/de.json +7 -2
  75. homeassistant/components/google_air_quality/translations/el.json +3 -2
  76. homeassistant/components/google_air_quality/translations/en-GB.json +7 -2
  77. homeassistant/components/google_air_quality/translations/en.json +7 -2
  78. homeassistant/components/google_air_quality/translations/es.json +7 -2
  79. homeassistant/components/google_air_quality/translations/et.json +7 -2
  80. homeassistant/components/google_air_quality/translations/fr.json +14 -0
  81. homeassistant/components/google_air_quality/translations/ga.json +7 -2
  82. homeassistant/components/google_air_quality/translations/he.json +239 -0
  83. homeassistant/components/google_air_quality/translations/lt.json +0 -9
  84. homeassistant/components/google_air_quality/translations/nl.json +42 -2
  85. homeassistant/components/google_air_quality/translations/pt.json +7 -2
  86. homeassistant/components/google_air_quality/translations/ru.json +2 -9
  87. homeassistant/components/google_air_quality/translations/sk.json +7 -2
  88. homeassistant/components/google_air_quality/translations/sv.json +11 -4
  89. homeassistant/components/google_air_quality/translations/tr.json +0 -9
  90. homeassistant/components/google_air_quality/translations/zh-Hans.json +7 -4
  91. homeassistant/components/google_air_quality/translations/zh-Hant.json +7 -2
  92. homeassistant/components/google_assistant/translations/sr-Latn.json +1 -1
  93. homeassistant/components/google_generative_ai_conversation/__init__.py +1 -0
  94. homeassistant/components/google_generative_ai_conversation/const.py +1 -1
  95. homeassistant/components/google_generative_ai_conversation/strings.json +1 -1
  96. homeassistant/components/google_generative_ai_conversation/translations/bg.json +0 -3
  97. homeassistant/components/google_generative_ai_conversation/translations/cs.json +1 -1
  98. homeassistant/components/google_generative_ai_conversation/translations/de.json +1 -1
  99. homeassistant/components/google_generative_ai_conversation/translations/el.json +0 -1
  100. homeassistant/components/google_generative_ai_conversation/translations/en-GB.json +1 -1
  101. homeassistant/components/google_generative_ai_conversation/translations/en.json +1 -1
  102. homeassistant/components/google_generative_ai_conversation/translations/es.json +1 -1
  103. homeassistant/components/google_generative_ai_conversation/translations/et.json +1 -1
  104. homeassistant/components/google_generative_ai_conversation/translations/fr.json +0 -1
  105. homeassistant/components/google_generative_ai_conversation/translations/ga.json +0 -1
  106. homeassistant/components/google_generative_ai_conversation/translations/he.json +0 -1
  107. homeassistant/components/google_generative_ai_conversation/translations/hu.json +0 -1
  108. homeassistant/components/google_generative_ai_conversation/translations/lt.json +0 -1
  109. homeassistant/components/google_generative_ai_conversation/translations/nl.json +0 -1
  110. homeassistant/components/google_generative_ai_conversation/translations/pt-BR.json +0 -1
  111. homeassistant/components/google_generative_ai_conversation/translations/pt.json +1 -1
  112. homeassistant/components/google_generative_ai_conversation/translations/ru.json +0 -1
  113. homeassistant/components/google_generative_ai_conversation/translations/sk.json +0 -1
  114. homeassistant/components/google_generative_ai_conversation/translations/sl.json +0 -1
  115. homeassistant/components/google_generative_ai_conversation/translations/sv.json +0 -1
  116. homeassistant/components/google_generative_ai_conversation/translations/tr.json +0 -1
  117. homeassistant/components/google_generative_ai_conversation/translations/uk.json +0 -1
  118. homeassistant/components/google_generative_ai_conversation/translations/zh-Hans.json +0 -1
  119. homeassistant/components/google_generative_ai_conversation/translations/zh-Hant.json +0 -1
  120. homeassistant/components/google_photos/services.py +1 -0
  121. homeassistant/components/google_photos/strings.json +1 -1
  122. homeassistant/components/google_photos/translations/bg.json +0 -1
  123. homeassistant/components/google_photos/translations/ca.json +0 -1
  124. homeassistant/components/google_photos/translations/cs.json +1 -1
  125. homeassistant/components/google_photos/translations/de.json +1 -1
  126. homeassistant/components/google_photos/translations/el.json +0 -1
  127. homeassistant/components/google_photos/translations/en-GB.json +1 -1
  128. homeassistant/components/google_photos/translations/en.json +1 -1
  129. homeassistant/components/google_photos/translations/es.json +1 -1
  130. homeassistant/components/google_photos/translations/et.json +1 -1
  131. homeassistant/components/google_photos/translations/fr.json +0 -1
  132. homeassistant/components/google_photos/translations/ga.json +0 -1
  133. homeassistant/components/google_photos/translations/he.json +0 -1
  134. homeassistant/components/google_photos/translations/hu.json +0 -1
  135. homeassistant/components/google_photos/translations/id.json +0 -1
  136. homeassistant/components/google_photos/translations/it.json +0 -1
  137. homeassistant/components/google_photos/translations/ja.json +0 -1
  138. homeassistant/components/google_photos/translations/lt.json +0 -1
  139. homeassistant/components/google_photos/translations/nl.json +0 -1
  140. homeassistant/components/google_photos/translations/pt-BR.json +0 -1
  141. homeassistant/components/google_photos/translations/pt.json +1 -1
  142. homeassistant/components/google_photos/translations/ru.json +0 -1
  143. homeassistant/components/google_photos/translations/sk.json +0 -1
  144. homeassistant/components/google_photos/translations/sv.json +0 -1
  145. homeassistant/components/google_photos/translations/tr.json +0 -1
  146. homeassistant/components/google_photos/translations/uk.json +0 -1
  147. homeassistant/components/google_photos/translations/zh-Hans.json +0 -1
  148. homeassistant/components/google_photos/translations/zh-Hant.json +0 -1
  149. homeassistant/components/google_weather/translations/he.json +102 -0
  150. homeassistant/components/hanna/translations/he.json +20 -0
  151. homeassistant/components/hassio/translations/cs.json +1 -0
  152. homeassistant/components/hassio/translations/et.json +1 -0
  153. homeassistant/components/hassio/translations/pt.json +1 -0
  154. homeassistant/components/home_connect/translations/de.json +2 -2
  155. homeassistant/components/home_connect/translations/he.json +3 -0
  156. homeassistant/components/homekit_controller/translations/he.json +1 -1
  157. homeassistant/components/hue_ble/translations/he.json +11 -0
  158. homeassistant/components/hue_ble/translations/nl.json +3 -0
  159. homeassistant/components/hue_ble/translations/pt.json +2 -1
  160. homeassistant/components/hue_ble/translations/sv.json +8 -0
  161. homeassistant/components/humidifier/translations/he.json +1 -1
  162. homeassistant/components/integration/translations/pl.json +1 -1
  163. homeassistant/components/ipp/translations/he.json +1 -1
  164. homeassistant/components/iron_os/translations/he.json +1 -1
  165. homeassistant/components/kitchen_sink/translations/cs.json +2 -2
  166. homeassistant/components/kitchen_sink/translations/de.json +4 -4
  167. homeassistant/components/kitchen_sink/translations/el.json +5 -0
  168. homeassistant/components/kitchen_sink/translations/en-GB.json +2 -2
  169. homeassistant/components/kitchen_sink/translations/en.json +2 -2
  170. homeassistant/components/kitchen_sink/translations/es.json +2 -2
  171. homeassistant/components/kitchen_sink/translations/et.json +1 -1
  172. homeassistant/components/kitchen_sink/translations/ga.json +0 -2
  173. homeassistant/components/kitchen_sink/translations/it.json +0 -2
  174. homeassistant/components/kitchen_sink/translations/lt.json +0 -2
  175. homeassistant/components/kitchen_sink/translations/nl.json +4 -0
  176. homeassistant/components/kitchen_sink/translations/pt.json +2 -2
  177. homeassistant/components/kitchen_sink/translations/sk.json +2 -2
  178. homeassistant/components/kitchen_sink/translations/tr.json +0 -2
  179. homeassistant/components/kitchen_sink/translations/zh-Hans.json +0 -2
  180. homeassistant/components/labs/__init__.py +2 -54
  181. homeassistant/components/labs/helpers.py +63 -0
  182. homeassistant/components/labs/websocket_api.py +51 -0
  183. homeassistant/components/lametric/services.py +1 -0
  184. homeassistant/components/lametric/strings.json +1 -1
  185. homeassistant/components/lametric/translations/ca.json +0 -3
  186. homeassistant/components/lametric/translations/cs.json +1 -1
  187. homeassistant/components/lametric/translations/de.json +1 -1
  188. homeassistant/components/lametric/translations/el.json +0 -1
  189. homeassistant/components/lametric/translations/en-GB.json +1 -1
  190. homeassistant/components/lametric/translations/en.json +1 -1
  191. homeassistant/components/lametric/translations/es.json +1 -1
  192. homeassistant/components/lametric/translations/et.json +0 -1
  193. homeassistant/components/lametric/translations/fi.json +0 -3
  194. homeassistant/components/lametric/translations/ga.json +0 -1
  195. homeassistant/components/lametric/translations/gl.json +0 -3
  196. homeassistant/components/lametric/translations/hu.json +0 -1
  197. homeassistant/components/lametric/translations/it.json +0 -3
  198. homeassistant/components/lametric/translations/ja.json +0 -1
  199. homeassistant/components/lametric/translations/ko.json +0 -3
  200. homeassistant/components/lametric/translations/lt.json +0 -1
  201. homeassistant/components/lametric/translations/nl.json +0 -3
  202. homeassistant/components/lametric/translations/pt-BR.json +0 -3
  203. homeassistant/components/lametric/translations/pt.json +0 -1
  204. homeassistant/components/lametric/translations/ru.json +0 -1
  205. homeassistant/components/lametric/translations/sk.json +0 -1
  206. homeassistant/components/lametric/translations/sv.json +0 -1
  207. homeassistant/components/lametric/translations/tr.json +0 -1
  208. homeassistant/components/lametric/translations/vi.json +0 -3
  209. homeassistant/components/lametric/translations/zh-Hans.json +0 -1
  210. homeassistant/components/lametric/translations/zh-Hant.json +0 -1
  211. homeassistant/components/lawn_mower/translations/cs.json +12 -4
  212. homeassistant/components/lawn_mower/translations/he.json +38 -0
  213. homeassistant/components/lawn_mower/translations/pt.json +20 -12
  214. homeassistant/components/lawn_mower/translations/ru.json +56 -1
  215. homeassistant/components/light/translations/cs.json +6 -2
  216. homeassistant/components/light/translations/he.json +69 -2
  217. homeassistant/components/light/translations/nl.json +6 -1
  218. homeassistant/components/light/translations/pt.json +6 -2
  219. homeassistant/components/light/translations/ru.json +15 -11
  220. homeassistant/components/matter/translations/he.json +56 -2
  221. homeassistant/components/media_player/translations/cs.json +3 -1
  222. homeassistant/components/media_player/translations/he.json +27 -4
  223. homeassistant/components/media_player/translations/pt.json +3 -1
  224. homeassistant/components/media_player/translations/ru.json +24 -1
  225. homeassistant/components/miele/translations/ga.json +1 -0
  226. homeassistant/components/miele/translations/he.json +4 -1
  227. homeassistant/components/miele/translations/it.json +15 -1
  228. homeassistant/components/miele/translations/pt.json +1 -0
  229. homeassistant/components/miele/translations/zh-Hans.json +1 -0
  230. homeassistant/components/mqtt/translations/cs.json +3 -1
  231. homeassistant/components/mqtt/translations/he.json +35 -1
  232. homeassistant/components/mqtt/translations/pt.json +3 -1
  233. homeassistant/components/music_assistant/translations/he.json +8 -1
  234. homeassistant/components/myuplink/translations/he.json +5 -0
  235. homeassistant/components/neato/translations/he.json +5 -0
  236. homeassistant/components/netatmo/translations/he.json +5 -0
  237. homeassistant/components/niko_home_control/translations/he.json +3 -1
  238. homeassistant/components/nina/translations/he.json +12 -1
  239. homeassistant/components/ntfy/translations/cs.json +1 -1
  240. homeassistant/components/ntfy/translations/de.json +1 -1
  241. homeassistant/components/ntfy/translations/el.json +0 -3
  242. homeassistant/components/ntfy/translations/en-GB.json +1 -1
  243. homeassistant/components/ntfy/translations/en.json +1 -1
  244. homeassistant/components/ntfy/translations/es.json +1 -1
  245. homeassistant/components/ntfy/translations/et.json +1 -1
  246. homeassistant/components/ntfy/translations/lt.json +0 -1
  247. homeassistant/components/ntfy/translations/pt.json +1 -1
  248. homeassistant/components/ntfy/translations/ru.json +0 -1
  249. homeassistant/components/ntfy/translations/sk.json +1 -1
  250. homeassistant/components/ntfy/translations/sv.json +0 -1
  251. homeassistant/components/ntfy/translations/tr.json +0 -1
  252. homeassistant/components/ntfy/translations/zh-Hans.json +0 -1
  253. homeassistant/components/ntfy/translations/zh-Hant.json +1 -1
  254. homeassistant/components/onedrive/services.py +1 -0
  255. homeassistant/components/onedrive/strings.json +1 -1
  256. homeassistant/components/onedrive/translations/cs.json +1 -1
  257. homeassistant/components/onedrive/translations/de.json +1 -1
  258. homeassistant/components/onedrive/translations/el.json +0 -1
  259. homeassistant/components/onedrive/translations/en-GB.json +1 -1
  260. homeassistant/components/onedrive/translations/en.json +1 -1
  261. homeassistant/components/onedrive/translations/es.json +1 -1
  262. homeassistant/components/onedrive/translations/et.json +1 -1
  263. homeassistant/components/onedrive/translations/ga.json +0 -1
  264. homeassistant/components/onedrive/translations/he.json +3 -1
  265. homeassistant/components/onedrive/translations/hu.json +0 -1
  266. homeassistant/components/onedrive/translations/it.json +0 -1
  267. homeassistant/components/onedrive/translations/ja.json +0 -1
  268. homeassistant/components/onedrive/translations/lt.json +0 -1
  269. homeassistant/components/onedrive/translations/nl.json +0 -1
  270. homeassistant/components/onedrive/translations/pt.json +1 -1
  271. homeassistant/components/onedrive/translations/ru.json +0 -1
  272. homeassistant/components/onedrive/translations/sk.json +0 -1
  273. homeassistant/components/onedrive/translations/sl.json +0 -1
  274. homeassistant/components/onedrive/translations/sv.json +0 -1
  275. homeassistant/components/onedrive/translations/tr.json +0 -1
  276. homeassistant/components/onedrive/translations/zh-Hans.json +0 -1
  277. homeassistant/components/onedrive/translations/zh-Hant.json +0 -1
  278. homeassistant/components/oralb/manifest.json +1 -1
  279. homeassistant/components/oralb/translations/he.json +1 -1
  280. homeassistant/components/pilight/__init__.py +13 -1
  281. homeassistant/components/pilight/strings.json +1 -1
  282. homeassistant/components/pilight/translations/cs.json +1 -1
  283. homeassistant/components/pilight/translations/de.json +1 -1
  284. homeassistant/components/pilight/translations/el.json +0 -1
  285. homeassistant/components/pilight/translations/en-GB.json +1 -1
  286. homeassistant/components/pilight/translations/en.json +1 -1
  287. homeassistant/components/pilight/translations/es.json +1 -1
  288. homeassistant/components/pilight/translations/et.json +1 -1
  289. homeassistant/components/pilight/translations/fi.json +0 -1
  290. homeassistant/components/pilight/translations/ga.json +0 -1
  291. homeassistant/components/pilight/translations/hu.json +0 -1
  292. homeassistant/components/pilight/translations/it.json +0 -1
  293. homeassistant/components/pilight/translations/ja.json +0 -1
  294. homeassistant/components/pilight/translations/ko.json +0 -1
  295. homeassistant/components/pilight/translations/lt.json +0 -1
  296. homeassistant/components/pilight/translations/pt.json +1 -1
  297. homeassistant/components/pilight/translations/ru.json +0 -1
  298. homeassistant/components/pilight/translations/sk.json +1 -1
  299. homeassistant/components/pilight/translations/sv.json +0 -1
  300. homeassistant/components/pilight/translations/tr.json +0 -1
  301. homeassistant/components/pilight/translations/zh-Hans.json +0 -1
  302. homeassistant/components/pilight/translations/zh-Hant.json +1 -1
  303. homeassistant/components/playstation_network/coordinator.py +14 -7
  304. homeassistant/components/plugwise/translations/he.json +26 -0
  305. homeassistant/components/plugwise/translations/ru.json +12 -0
  306. homeassistant/components/point/translations/he.json +5 -0
  307. homeassistant/components/pooldose/translations/he.json +11 -0
  308. homeassistant/components/prusalink/translations/he.json +1 -1
  309. homeassistant/components/qbittorrent/translations/he.json +1 -1
  310. homeassistant/components/rainmachine/__init__.py +13 -2
  311. homeassistant/components/rainmachine/strings.json +1 -1
  312. homeassistant/components/rainmachine/translations/cs.json +1 -1
  313. homeassistant/components/rainmachine/translations/de.json +1 -1
  314. homeassistant/components/rainmachine/translations/en-GB.json +1 -1
  315. homeassistant/components/rainmachine/translations/en.json +1 -1
  316. homeassistant/components/rainmachine/translations/es.json +1 -1
  317. homeassistant/components/rainmachine/translations/et.json +1 -1
  318. homeassistant/components/rainmachine/translations/lt.json +0 -1
  319. homeassistant/components/rainmachine/translations/pt.json +1 -1
  320. homeassistant/components/rainmachine/translations/ru.json +1 -0
  321. homeassistant/components/rainmachine/translations/sk.json +1 -1
  322. homeassistant/components/rainmachine/translations/zh-Hans.json +0 -1
  323. homeassistant/components/rainmachine/translations/zh-Hant.json +1 -1
  324. homeassistant/components/reolink/host.py +4 -0
  325. homeassistant/components/reolink/manifest.json +1 -1
  326. homeassistant/components/reolink/strings.json +2 -2
  327. homeassistant/components/reolink/translations/ca.json +0 -2
  328. homeassistant/components/reolink/translations/cs.json +2 -2
  329. homeassistant/components/reolink/translations/de.json +2 -2
  330. homeassistant/components/reolink/translations/el.json +0 -2
  331. homeassistant/components/reolink/translations/en-GB.json +2 -2
  332. homeassistant/components/reolink/translations/en.json +2 -2
  333. homeassistant/components/reolink/translations/es.json +0 -2
  334. homeassistant/components/reolink/translations/et.json +2 -2
  335. homeassistant/components/reolink/translations/fi.json +0 -2
  336. homeassistant/components/reolink/translations/fr.json +0 -2
  337. homeassistant/components/reolink/translations/ga.json +0 -2
  338. homeassistant/components/reolink/translations/hr.json +0 -5
  339. homeassistant/components/reolink/translations/hu.json +0 -2
  340. homeassistant/components/reolink/translations/id.json +0 -2
  341. homeassistant/components/reolink/translations/it.json +0 -2
  342. homeassistant/components/reolink/translations/ja.json +0 -2
  343. homeassistant/components/reolink/translations/ko.json +0 -2
  344. homeassistant/components/reolink/translations/lt.json +0 -2
  345. homeassistant/components/reolink/translations/nb.json +0 -1
  346. homeassistant/components/reolink/translations/nl.json +0 -2
  347. homeassistant/components/reolink/translations/pl.json +0 -1
  348. homeassistant/components/reolink/translations/pt-BR.json +0 -2
  349. homeassistant/components/reolink/translations/pt.json +2 -2
  350. homeassistant/components/reolink/translations/ro.json +0 -2
  351. homeassistant/components/reolink/translations/ru.json +0 -2
  352. homeassistant/components/reolink/translations/sk.json +2 -2
  353. homeassistant/components/reolink/translations/sv.json +0 -2
  354. homeassistant/components/reolink/translations/tr.json +0 -2
  355. homeassistant/components/reolink/translations/uk.json +0 -2
  356. homeassistant/components/reolink/translations/zh-Hans.json +0 -2
  357. homeassistant/components/reolink/translations/zh-Hant.json +2 -2
  358. homeassistant/components/rituals_perfume_genie/__init__.py +47 -7
  359. homeassistant/components/rituals_perfume_genie/config_flow.py +79 -32
  360. homeassistant/components/rituals_perfume_genie/const.py +1 -0
  361. homeassistant/components/rituals_perfume_genie/coordinator.py +39 -4
  362. homeassistant/components/rituals_perfume_genie/manifest.json +2 -2
  363. homeassistant/components/rituals_perfume_genie/strings.json +8 -1
  364. homeassistant/components/rituals_perfume_genie/translations/bg.json +0 -3
  365. homeassistant/components/rituals_perfume_genie/translations/ca.json +0 -3
  366. homeassistant/components/rituals_perfume_genie/translations/cs.json +8 -1
  367. homeassistant/components/rituals_perfume_genie/translations/da.json +0 -3
  368. homeassistant/components/rituals_perfume_genie/translations/de.json +8 -1
  369. homeassistant/components/rituals_perfume_genie/translations/el.json +0 -3
  370. homeassistant/components/rituals_perfume_genie/translations/en-GB.json +8 -1
  371. homeassistant/components/rituals_perfume_genie/translations/en.json +8 -1
  372. homeassistant/components/rituals_perfume_genie/translations/es.json +8 -1
  373. homeassistant/components/rituals_perfume_genie/translations/et.json +7 -1
  374. homeassistant/components/rituals_perfume_genie/translations/fi.json +0 -3
  375. homeassistant/components/rituals_perfume_genie/translations/fr.json +0 -3
  376. homeassistant/components/rituals_perfume_genie/translations/ga.json +0 -3
  377. homeassistant/components/rituals_perfume_genie/translations/he.json +0 -3
  378. homeassistant/components/rituals_perfume_genie/translations/hu.json +0 -3
  379. homeassistant/components/rituals_perfume_genie/translations/id.json +0 -3
  380. homeassistant/components/rituals_perfume_genie/translations/it.json +0 -3
  381. homeassistant/components/rituals_perfume_genie/translations/ja.json +0 -3
  382. homeassistant/components/rituals_perfume_genie/translations/ko.json +0 -3
  383. homeassistant/components/rituals_perfume_genie/translations/lt.json +0 -3
  384. homeassistant/components/rituals_perfume_genie/translations/lv.json +0 -5
  385. homeassistant/components/rituals_perfume_genie/translations/nb.json +0 -3
  386. homeassistant/components/rituals_perfume_genie/translations/nl.json +0 -3
  387. homeassistant/components/rituals_perfume_genie/translations/pl.json +0 -3
  388. homeassistant/components/rituals_perfume_genie/translations/pt-BR.json +0 -3
  389. homeassistant/components/rituals_perfume_genie/translations/pt.json +8 -1
  390. homeassistant/components/rituals_perfume_genie/translations/ro.json +0 -3
  391. homeassistant/components/rituals_perfume_genie/translations/ru.json +0 -3
  392. homeassistant/components/rituals_perfume_genie/translations/sk.json +8 -1
  393. homeassistant/components/rituals_perfume_genie/translations/sl.json +0 -3
  394. homeassistant/components/rituals_perfume_genie/translations/sv.json +0 -3
  395. homeassistant/components/rituals_perfume_genie/translations/tr.json +0 -3
  396. homeassistant/components/rituals_perfume_genie/translations/uk.json +0 -3
  397. homeassistant/components/rituals_perfume_genie/translations/zh-Hans.json +0 -3
  398. homeassistant/components/rituals_perfume_genie/translations/zh-Hant.json +0 -3
  399. homeassistant/components/roborock/__init__.py +20 -1
  400. homeassistant/components/roborock/manifest.json +1 -1
  401. homeassistant/components/roborock/translations/he.json +1 -1
  402. homeassistant/components/saunum/translations/he.json +31 -0
  403. homeassistant/components/scene/translations/cs.json +3 -3
  404. homeassistant/components/senz/translations/he.json +11 -1
  405. homeassistant/components/sfr_box/translations/he.json +1 -1
  406. homeassistant/components/sharkiq/manifest.json +1 -1
  407. homeassistant/components/shelly/button.py +11 -2
  408. homeassistant/components/shelly/translations/ga.json +8 -0
  409. homeassistant/components/shelly/translations/he.json +132 -0
  410. homeassistant/components/sleep_as_android/translations/es.json +3 -0
  411. homeassistant/components/smartthings/translations/he.json +19 -1
  412. homeassistant/components/spotify/translations/he.json +5 -0
  413. homeassistant/components/starlink/coordinator.py +0 -1
  414. homeassistant/components/starlink/sensor.py +6 -3
  415. homeassistant/components/switchbot/translations/he.json +12 -0
  416. homeassistant/components/telegram_bot/__init__.py +3 -0
  417. homeassistant/components/telegram_bot/config_flow.py +9 -5
  418. homeassistant/components/telegram_bot/strings.json +9 -9
  419. homeassistant/components/telegram_bot/translations/bg.json +0 -7
  420. homeassistant/components/telegram_bot/translations/ca.json +0 -12
  421. homeassistant/components/telegram_bot/translations/cs.json +15 -15
  422. homeassistant/components/telegram_bot/translations/de.json +15 -15
  423. homeassistant/components/telegram_bot/translations/el.json +0 -18
  424. homeassistant/components/telegram_bot/translations/en-GB.json +15 -15
  425. homeassistant/components/telegram_bot/translations/en.json +15 -15
  426. homeassistant/components/telegram_bot/translations/es.json +2 -15
  427. homeassistant/components/telegram_bot/translations/et.json +15 -15
  428. homeassistant/components/telegram_bot/translations/fi.json +0 -12
  429. homeassistant/components/telegram_bot/translations/ga.json +0 -19
  430. homeassistant/components/telegram_bot/translations/gl.json +0 -3
  431. homeassistant/components/telegram_bot/translations/he.json +0 -12
  432. homeassistant/components/telegram_bot/translations/hu.json +0 -18
  433. homeassistant/components/telegram_bot/translations/it.json +0 -18
  434. homeassistant/components/telegram_bot/translations/ja.json +0 -18
  435. homeassistant/components/telegram_bot/translations/ko.json +0 -12
  436. homeassistant/components/telegram_bot/translations/lt.json +0 -19
  437. homeassistant/components/telegram_bot/translations/mk.json +0 -1
  438. homeassistant/components/telegram_bot/translations/nb.json +0 -12
  439. homeassistant/components/telegram_bot/translations/nl.json +0 -18
  440. homeassistant/components/telegram_bot/translations/pt.json +15 -15
  441. homeassistant/components/telegram_bot/translations/ru.json +13 -19
  442. homeassistant/components/telegram_bot/translations/sk.json +15 -15
  443. homeassistant/components/telegram_bot/translations/sr-Latn.json +0 -12
  444. homeassistant/components/telegram_bot/translations/sv.json +0 -19
  445. homeassistant/components/telegram_bot/translations/tr.json +0 -13
  446. homeassistant/components/telegram_bot/translations/zh-Hans.json +0 -19
  447. homeassistant/components/telegram_bot/translations/zh-Hant.json +13 -19
  448. homeassistant/components/template/helpers.py +20 -10
  449. homeassistant/components/template/light.py +12 -18
  450. homeassistant/components/template/strings.json +1 -1
  451. homeassistant/components/template/translations/cs.json +1 -1
  452. homeassistant/components/template/translations/de.json +1 -1
  453. homeassistant/components/template/translations/el.json +0 -1
  454. homeassistant/components/template/translations/en-GB.json +1 -1
  455. homeassistant/components/template/translations/en.json +1 -1
  456. homeassistant/components/template/translations/es.json +0 -1
  457. homeassistant/components/template/translations/et.json +1 -1
  458. homeassistant/components/template/translations/ga.json +0 -1
  459. homeassistant/components/template/translations/he.json +3 -0
  460. homeassistant/components/template/translations/it.json +0 -1
  461. homeassistant/components/template/translations/lt.json +0 -1
  462. homeassistant/components/template/translations/pl.json +0 -1
  463. homeassistant/components/template/translations/pt.json +1 -1
  464. homeassistant/components/template/translations/sk.json +1 -1
  465. homeassistant/components/template/translations/sr-Latn.json +0 -1
  466. homeassistant/components/template/translations/tr.json +0 -1
  467. homeassistant/components/template/translations/zh-Hans.json +0 -1
  468. homeassistant/components/template/translations/zh-Hant.json +0 -1
  469. homeassistant/components/tesla_fleet/translations/he.json +5 -0
  470. homeassistant/components/teslemetry/services.py +3 -0
  471. homeassistant/components/teslemetry/strings.json +1 -1
  472. homeassistant/components/teslemetry/translations/bg.json +0 -1
  473. homeassistant/components/teslemetry/translations/cs.json +1 -1
  474. homeassistant/components/teslemetry/translations/de.json +1 -1
  475. homeassistant/components/teslemetry/translations/el.json +0 -1
  476. homeassistant/components/teslemetry/translations/en-GB.json +1 -1
  477. homeassistant/components/teslemetry/translations/en.json +1 -1
  478. homeassistant/components/teslemetry/translations/es.json +1 -1
  479. homeassistant/components/teslemetry/translations/et.json +1 -1
  480. homeassistant/components/teslemetry/translations/ga.json +0 -1
  481. homeassistant/components/teslemetry/translations/he.json +2 -2
  482. homeassistant/components/teslemetry/translations/hr.json +0 -1
  483. homeassistant/components/teslemetry/translations/hu.json +0 -1
  484. homeassistant/components/teslemetry/translations/ja.json +0 -1
  485. homeassistant/components/teslemetry/translations/lt.json +0 -1
  486. homeassistant/components/teslemetry/translations/pt.json +1 -1
  487. homeassistant/components/teslemetry/translations/ru.json +1 -1
  488. homeassistant/components/teslemetry/translations/sk.json +1 -1
  489. homeassistant/components/teslemetry/translations/sv.json +0 -1
  490. homeassistant/components/teslemetry/translations/tr.json +0 -1
  491. homeassistant/components/teslemetry/translations/zh-Hans.json +0 -1
  492. homeassistant/components/teslemetry/translations/zh-Hant.json +1 -1
  493. homeassistant/components/text/translations/cs.json +7 -1
  494. homeassistant/components/text/translations/he.json +7 -1
  495. homeassistant/components/text/translations/pt.json +7 -1
  496. homeassistant/components/text/translations/ru.json +7 -1
  497. homeassistant/components/timer/translations/he.json +1 -1
  498. homeassistant/components/toon/translations/he.json +5 -0
  499. homeassistant/components/transmission/translations/he.json +1 -1
  500. homeassistant/components/tuya/climate.py +12 -0
  501. homeassistant/components/tuya/translations/he.json +10 -0
  502. homeassistant/components/twitch/translations/he.json +5 -0
  503. homeassistant/components/unifiprotect/manifest.json +1 -1
  504. homeassistant/components/unifiprotect/translations/pt.json +10 -0
  505. homeassistant/components/unifiprotect/translations/zh-Hans.json +2 -1
  506. homeassistant/components/vacuum/translations/cs.json +12 -4
  507. homeassistant/components/vacuum/translations/he.json +57 -2
  508. homeassistant/components/vacuum/translations/pt.json +12 -4
  509. homeassistant/components/vacuum/translations/ru.json +20 -12
  510. homeassistant/components/vacuum/translations/sv.json +14 -0
  511. homeassistant/components/venstar/translations/he.json +1 -1
  512. homeassistant/components/vesync/binary_sensor.py +1 -1
  513. homeassistant/components/vicare/translations/he.json +10 -0
  514. homeassistant/components/victron_ble/translations/he.json +17 -0
  515. homeassistant/components/volvo/translations/he.json +6 -1
  516. homeassistant/components/weheat/translations/he.json +5 -0
  517. homeassistant/components/withings/translations/he.json +5 -0
  518. homeassistant/components/wled/translations/cs.json +10 -2
  519. homeassistant/components/wled/translations/et.json +10 -2
  520. homeassistant/components/wled/translations/ga.json +10 -2
  521. homeassistant/components/wled/translations/he.json +8 -2
  522. homeassistant/components/wled/translations/pt.json +10 -2
  523. homeassistant/components/wled/translations/ru.json +10 -2
  524. homeassistant/components/wled/translations/zh-Hans.json +10 -2
  525. homeassistant/components/xbox/browse_media.py +3 -1
  526. homeassistant/components/xbox/entity.py +10 -6
  527. homeassistant/components/xbox/media_source.py +2 -1
  528. homeassistant/components/xbox/sensor.py +3 -2
  529. homeassistant/components/xbox/translations/de.json +1 -1
  530. homeassistant/components/xbox/translations/he.json +10 -1
  531. homeassistant/components/xiaomi_aqara/config_flow.py +19 -3
  532. homeassistant/components/xiaomi_aqara/strings.json +2 -2
  533. homeassistant/components/xiaomi_aqara/translations/ca.json +0 -2
  534. homeassistant/components/xiaomi_aqara/translations/cs.json +2 -2
  535. homeassistant/components/xiaomi_aqara/translations/da.json +0 -4
  536. homeassistant/components/xiaomi_aqara/translations/de.json +2 -2
  537. homeassistant/components/xiaomi_aqara/translations/el.json +0 -2
  538. homeassistant/components/xiaomi_aqara/translations/en-GB.json +2 -2
  539. homeassistant/components/xiaomi_aqara/translations/en.json +2 -2
  540. homeassistant/components/xiaomi_aqara/translations/es.json +2 -2
  541. homeassistant/components/xiaomi_aqara/translations/et.json +2 -2
  542. homeassistant/components/xiaomi_aqara/translations/fi.json +0 -2
  543. homeassistant/components/xiaomi_aqara/translations/fr.json +0 -2
  544. homeassistant/components/xiaomi_aqara/translations/ga.json +0 -2
  545. homeassistant/components/xiaomi_aqara/translations/gl.json +1 -2
  546. homeassistant/components/xiaomi_aqara/translations/he.json +0 -2
  547. homeassistant/components/xiaomi_aqara/translations/hu.json +0 -2
  548. homeassistant/components/xiaomi_aqara/translations/id.json +0 -2
  549. homeassistant/components/xiaomi_aqara/translations/it.json +0 -2
  550. homeassistant/components/xiaomi_aqara/translations/ja.json +0 -2
  551. homeassistant/components/xiaomi_aqara/translations/ko.json +0 -2
  552. homeassistant/components/xiaomi_aqara/translations/lb.json +1 -2
  553. homeassistant/components/xiaomi_aqara/translations/lt.json +0 -2
  554. homeassistant/components/xiaomi_aqara/translations/nb.json +0 -1
  555. homeassistant/components/xiaomi_aqara/translations/nl.json +0 -2
  556. homeassistant/components/xiaomi_aqara/translations/pl.json +0 -2
  557. homeassistant/components/xiaomi_aqara/translations/pt-BR.json +0 -2
  558. homeassistant/components/xiaomi_aqara/translations/pt.json +2 -2
  559. homeassistant/components/xiaomi_aqara/translations/ro.json +0 -2
  560. homeassistant/components/xiaomi_aqara/translations/ru.json +2 -2
  561. homeassistant/components/xiaomi_aqara/translations/sk.json +2 -2
  562. homeassistant/components/xiaomi_aqara/translations/sl.json +0 -2
  563. homeassistant/components/xiaomi_aqara/translations/sr-Latn.json +6 -0
  564. homeassistant/components/xiaomi_aqara/translations/sv.json +0 -2
  565. homeassistant/components/xiaomi_aqara/translations/tr.json +0 -2
  566. homeassistant/components/xiaomi_aqara/translations/uk.json +0 -2
  567. homeassistant/components/xiaomi_aqara/translations/vi.json +0 -2
  568. homeassistant/components/xiaomi_aqara/translations/zh-Hans.json +0 -2
  569. homeassistant/components/xiaomi_aqara/translations/zh-Hant.json +2 -2
  570. homeassistant/components/yeelight/light.py +9 -1
  571. homeassistant/components/yeelight/strings.json +2 -2
  572. homeassistant/components/yeelight/translations/cs.json +3 -3
  573. homeassistant/components/yeelight/translations/de.json +3 -3
  574. homeassistant/components/yeelight/translations/el.json +0 -3
  575. homeassistant/components/yeelight/translations/en-GB.json +3 -3
  576. homeassistant/components/yeelight/translations/en.json +3 -3
  577. homeassistant/components/yeelight/translations/es.json +3 -3
  578. homeassistant/components/yeelight/translations/et.json +3 -3
  579. homeassistant/components/yeelight/translations/fi.json +0 -2
  580. homeassistant/components/yeelight/translations/fr.json +0 -3
  581. homeassistant/components/yeelight/translations/ga.json +0 -3
  582. homeassistant/components/yeelight/translations/gl.json +0 -2
  583. homeassistant/components/yeelight/translations/he.json +0 -3
  584. homeassistant/components/yeelight/translations/hu.json +0 -3
  585. homeassistant/components/yeelight/translations/it.json +0 -2
  586. homeassistant/components/yeelight/translations/ja.json +0 -3
  587. homeassistant/components/yeelight/translations/ko.json +0 -2
  588. homeassistant/components/yeelight/translations/lt.json +0 -3
  589. homeassistant/components/yeelight/translations/pt.json +3 -3
  590. homeassistant/components/yeelight/translations/ru.json +0 -3
  591. homeassistant/components/yeelight/translations/sk.json +3 -3
  592. homeassistant/components/yeelight/translations/sv.json +0 -3
  593. homeassistant/components/yeelight/translations/tr.json +0 -3
  594. homeassistant/components/yeelight/translations/vi.json +0 -2
  595. homeassistant/components/yeelight/translations/zh-Hans.json +0 -3
  596. homeassistant/components/yeelight/translations/zh-Hant.json +3 -3
  597. homeassistant/components/yolink/translations/he.json +5 -0
  598. homeassistant/components/youtube/translations/he.json +5 -0
  599. homeassistant/components/zha/config_flow.py +7 -0
  600. homeassistant/components/zha/strings.json +5 -3
  601. homeassistant/components/zha/translations/cs.json +6 -4
  602. homeassistant/components/zha/translations/de.json +6 -4
  603. homeassistant/components/zha/translations/el.json +0 -8
  604. homeassistant/components/zha/translations/en-GB.json +6 -4
  605. homeassistant/components/zha/translations/en.json +6 -4
  606. homeassistant/components/zha/translations/es.json +6 -4
  607. homeassistant/components/zha/translations/et.json +6 -4
  608. homeassistant/components/zha/translations/fr.json +0 -3
  609. homeassistant/components/zha/translations/ga.json +2 -0
  610. homeassistant/components/zha/translations/he.json +1 -1
  611. homeassistant/components/zha/translations/hu.json +0 -3
  612. homeassistant/components/zha/translations/lt.json +0 -8
  613. homeassistant/components/zha/translations/nl.json +8 -0
  614. homeassistant/components/zha/translations/pt.json +6 -4
  615. homeassistant/components/zha/translations/ru.json +46 -8
  616. homeassistant/components/zha/translations/sk.json +6 -4
  617. homeassistant/components/zha/translations/sv.json +2 -0
  618. homeassistant/components/zha/translations/zh-Hans.json +2 -8
  619. homeassistant/components/zha/translations/zh-Hant.json +2 -8
  620. homeassistant/components/zwave_js/services.py +3 -0
  621. homeassistant/components/zwave_js/strings.json +2 -2
  622. homeassistant/components/zwave_js/translations/cs.json +2 -2
  623. homeassistant/components/zwave_js/translations/de.json +2 -2
  624. homeassistant/components/zwave_js/translations/el.json +0 -2
  625. homeassistant/components/zwave_js/translations/en-GB.json +2 -2
  626. homeassistant/components/zwave_js/translations/en.json +2 -2
  627. homeassistant/components/zwave_js/translations/es.json +2 -2
  628. homeassistant/components/zwave_js/translations/et.json +2 -2
  629. homeassistant/components/zwave_js/translations/ga.json +0 -2
  630. homeassistant/components/zwave_js/translations/hu.json +0 -2
  631. homeassistant/components/zwave_js/translations/ja.json +0 -2
  632. homeassistant/components/zwave_js/translations/lt.json +0 -2
  633. homeassistant/components/zwave_js/translations/pt.json +2 -2
  634. homeassistant/components/zwave_js/translations/ru.json +0 -2
  635. homeassistant/components/zwave_js/translations/sk.json +2 -2
  636. homeassistant/components/zwave_js/translations/sv.json +0 -2
  637. homeassistant/components/zwave_js/translations/tr.json +0 -2
  638. homeassistant/components/zwave_js/translations/vi.json +0 -2
  639. homeassistant/components/zwave_js/translations/zh-Hans.json +0 -2
  640. homeassistant/components/zwave_js/translations/zh-Hant.json +2 -2
  641. homeassistant/const.py +1 -1
  642. homeassistant/loader.py +6 -0
  643. homeassistant/package_constraints.txt +2 -2
  644. {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/METADATA +2 -2
  645. {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/RECORD +650 -635
  646. {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/WHEEL +0 -0
  647. {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/entry_points.txt +0 -0
  648. {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/licenses/LICENSE.md +0 -0
  649. {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  650. {homeassistant-2025.12.0b8.dist-info → homeassistant-2025.12.1.dist-info}/top_level.txt +0 -0
@@ -889,7 +889,6 @@
889
889
  "title": "\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 Reolink"
890
890
  },
891
891
  "https_webhook": {
892
- "description": "\u041f\u0440\u043e\u0434\u0443\u043a\u0442\u044b Reolink \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0430 HTTPS-\u0430\u0434\u0440\u0435\u0441 (SSL). \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439) HTTP-\u0430\u0434\u0440\u0435\u0441 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \"URL-\u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\" \u0432 [\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0441\u0435\u0442\u0438]({network_link}). \u0422\u0435\u043a\u0443\u0449\u0438\u0439 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439) \u0430\u0434\u0440\u0435\u0441: `{base_url}`, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, `http://192.168.1.10:8123`, \u0433\u0434\u0435 `192.168.1.10` \u2014 \u044d\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Home Assistant.",
893
892
  "title": "URL-\u0430\u0434\u0440\u0435\u0441 webhook Reolink \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 HTTPS (SSL)"
894
893
  },
895
894
  "password_too_long": {
@@ -901,7 +900,6 @@
901
900
  "title": "Reolink \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u043c SSL"
902
901
  },
903
902
  "webhook_url": {
904
- "description": "\u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 ONVIF \u043e\u0442 {name}. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043a\u0430\u043c\u0435\u0440\u0430 Reolink \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443) URL-\u0430\u0434\u0440\u0435\u0441\u0443 Home Assistant `{base_url}`. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439) HTTP-\u0430\u0434\u0440\u0435\u0441 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \"URL-\u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\" \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a [\u0421\u0435\u0442\u044c]({network_link}). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, `http://192.168.1.10:8123`, \u0433\u0434\u0435 `192.168.1.10` \u2014 \u044d\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Home Assistant. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043a\u0430\u043c\u0435\u0440\u0430 Reolink \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u0442\u043e\u043c\u0443 URL-\u0430\u0434\u0440\u0435\u0441\u0443. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0440\u043e\u0441\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f Fast Motion/AI \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d push ONVIF.",
905
903
  "title": "Reolink webhook URL \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d"
906
904
  }
907
905
  },
@@ -1004,7 +1004,7 @@
1004
1004
  "title": "Vy\u017eaduje sa aktualiz\u00e1cia firmv\u00e9ru Reolink"
1005
1005
  },
1006
1006
  "https_webhook": {
1007
- "description": "Produkty Reolink nem\u00f4\u017eu posiela\u0165 udalosti pohybu na adresu HTTPS (SSL), nakonfigurujte (lok\u00e1lnu) adresu HTTP v \u010dasti \u201eWebov\u00e1 adresa Home Assistant\u201c v [nastaveniach siete] ({network_link}). Aktu\u00e1lna (lok\u00e1lna) adresa je: `{base_url}`, platn\u00e1 adresa m\u00f4\u017ee by\u0165 napr\u00edklad `http://192.168.1.10:8123`, kde `192.168.1.10` je adresa IP zariadenia Home Assistant",
1007
+ "description": "Produkty Reolink nem\u00f4\u017eu odosiela\u0165 udalosti pohybu na adresu HTTPS (SSL), nakonfigurujte (miestnu) adresu HTTP v \u010dasti \"Home Assistant URL\" v [sie\u0165ov\u00e9 nastavenia]({network_link}). Aktu\u00e1lna (miestna) adresa je:{base_url}`, platn\u00e1 adresa by mohla by\u0165 napr\u00edklad `{example_url}`, kde `{example_ip}` je IP adresa zariadenia Home Assistant\u201c",
1008
1008
  "title": "Webov\u00e1 adresa webhooku na op\u00e4tovn\u00e9 prepojenie pou\u017e\u00edva protokol HTTPS (SSL)"
1009
1009
  },
1010
1010
  "password_too_long": {
@@ -1016,7 +1016,7 @@
1016
1016
  "title": "Reolink nekompatibiln\u00fd s glob\u00e1lnym certifik\u00e1tom SSL"
1017
1017
  },
1018
1018
  "webhook_url": {
1019
- "description": "Nebol prijat\u00fd po\u010diato\u010dn\u00fd stav ONVIF od {name}. Kamera Reolink s najv\u00e4\u010d\u0161ou pravdepodobnos\u0165ou nem\u00f4\u017ee dosiahnu\u0165 aktu\u00e1lnu (lok\u00e1lnu) webov\u00fa adresu Home Assistant `{base_url}`, nakonfigurujte (lok\u00e1lnu) adresu HTTP v \u010dasti Adresa URL Home Assistant v [nastaveniach siete] ({network_link}), ktor\u00e1 ukazuje na Home Assistant. Napr\u00edklad \u201ehttp://192.168.1.10:8123\u201c, kde \u201e192.168.1.10\u201c je adresa IP zariadenia Home Assistant. Tie\u017e sa uistite, \u017ee kamera Reolink m\u00f4\u017ee dosiahnu\u0165 t\u00fato adresu URL. Pou\u017e\u00edvanie r\u00fdchleho pohybu/v\u00fdzvy stavu AI, k\u00fdm sa neprijme prv\u00e9 stla\u010denie ONVIF.",
1019
+ "description": "Neobdr\u017eal po\u010diato\u010dn\u00fd stav ONVIF zo str\u00e1nky {name}. S najv\u00e4\u010d\u0161ou pravdepodobnos\u0165ou kamera Reolink nedosahuje aktu\u00e1lnu (miestnu) adresu URL Home Assistant `{base_url}`, nakonfigurujte (miestnu) adresu HTTP v polo\u017eke \"Home Assistant URL\" v [sie\u0165ov\u00fdch nastaveniach]({network_link}), ktor\u00e1 ukazuje na Home Assistant. Napr\u00edklad `{example_url}`, kde `{example_ip}` je IP adresa zariadenia Home Assistant. Tie\u017e sa uistite, \u017ee kamera Reolink m\u00f4\u017ee dosiahnu\u0165 t\u00fato adresu URL. Pou\u017e\u00edvanie r\u00fdchleho opytovania stavu pohybu/AI a\u017e do prijatia prv\u00e9ho tla\u010didla ONVIF.",
1020
1020
  "title": "Adresa URL webhooku Reolink je nedostupn\u00e1"
1021
1021
  }
1022
1022
  },
@@ -983,7 +983,6 @@
983
983
  "title": "Reolink firmware-uppdatering kr\u00e4vs"
984
984
  },
985
985
  "https_webhook": {
986
- "description": "Reolink-produkter kan inte skicka r\u00f6relseh\u00e4ndelser till en HTTPS-adress (SSL), konfigurera en (lokal) HTTP-adress under \"[%key_id:158946755%]\" i [n\u00e4tverksinst\u00e4llningarna]({network_link}). Den aktuella (lokala) adressen \u00e4r: `{base_url}`, en giltig adress kan till exempel vara `http://192.168.1.10:8123` d\u00e4r `192.168.1.10` \u00e4r IP-adressen f\u00f6r Home Assistant-enheten",
987
986
  "title": "Reolink webhook-URL anv\u00e4nder HTTPS (SSL)"
988
987
  },
989
988
  "password_too_long": {
@@ -995,7 +994,6 @@
995
994
  "title": "Reolink \u00e4r inkompatibelt med globalt SSL-certifikat"
996
995
  },
997
996
  "webhook_url": {
998
- "description": "Tog inte emot initialt ONVIF-tillst\u00e5nd fr\u00e5n {name}. Troligtvis kan Reolink-kameran inte n\u00e5 den aktuella (lokala) Home Assistant-adressen `{base_url}`, konfigurera en (lokal) HTTP-adress under \"[%key_id:158946755%]\" i [n\u00e4tverksinst\u00e4llningarna]({network_link}) som pekar till Home Assistant. Till exempel `http://192.168.1.10:8123` d\u00e4r `192.168.1.10` \u00e4r IP-adressen f\u00f6r Home Assistant-enheten. Se ocks\u00e5 till att Reolink-kameran kan n\u00e5 den adressen. Anv\u00e4nder snabbpollning av r\u00f6relse-/AI-tillst\u00e5nd tills det f\u00f6rsta ONVIF-pushmeddelandet tas emot.",
999
997
  "title": "Reolink webhook-URL kan inte n\u00e5s"
1000
998
  }
1001
999
  },
@@ -880,7 +880,6 @@
880
880
  "title": "Reolink \u00fcretici yaz\u0131l\u0131m\u0131 g\u00fcncellemesi gerekli"
881
881
  },
882
882
  "https_webhook": {
883
- "description": "Reolink \u00fcr\u00fcnleri, hareket olaylar\u0131n\u0131 bir HTTPS adresine (SSL) aktaramaz, l\u00fctfen [a\u011f ayarlar\u0131nda]( {network_link} ) \"Ev Asistan\u0131 URL'si\" alt\u0131nda bir (yerel) HTTP adresi yap\u0131land\u0131r\u0131n. Ge\u00e7erli (yerel) adres: ` {base_url} `, ge\u00e7erli bir adres, \u00f6rne\u011fin, `http://192.168.1.10:8123` olabilir; burada `192.168.1.10`, Home Assistant cihaz\u0131n\u0131n IP'sidir",
884
883
  "title": "Reolink webhook URL'si HTTPS (SSL) kullan\u0131r"
885
884
  },
886
885
  "ssl": {
@@ -888,7 +887,6 @@
888
887
  "title": "Reolink, k\u00fcresel SSL sertifikas\u0131yla uyumsuz"
889
888
  },
890
889
  "webhook_url": {
891
- "description": "{name} adl\u0131 ki\u015fiden ilk ONVIF durumu al\u0131nmad\u0131. B\u00fcy\u00fck olas\u0131l\u0131kla, Reolink kameras\u0131 mevcut (yerel) Ev Yard\u0131mc\u0131s\u0131 URL'si ` {base_url} `a ula\u015fam\u0131yor, l\u00fctfen [a\u011f ayarlar\u0131nda]( {network_link} ) \"Ev Asistan\u0131 URL'si\" alt\u0131nda bu noktay\u0131 i\u015faret eden bir (yerel) HTTP adresi yap\u0131land\u0131r\u0131n Ev Asistan\u0131'na. \u00d6rne\u011fin, \"http://192.168.1.10:8123\" burada \"192.168.1.10\" Ev Asistan\u0131 cihaz\u0131n\u0131n IP'sidir. Ayr\u0131ca, Reolink kameras\u0131n\u0131n bu URL'ye eri\u015febildi\u011finden emin olun. \u0130lk ONVIF g\u00f6nderimi al\u0131nana kadar h\u0131zl\u0131 hareket/AI durum yoklamas\u0131 kullan\u0131l\u0131yor.",
892
890
  "title": "Reolink webhook URL'sine ula\u015f\u0131lam\u0131yor"
893
891
  }
894
892
  },
@@ -54,11 +54,9 @@
54
54
  "title": "\u041f\u043e\u0442\u0440\u0456\u0431\u043d\u0435 \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 Reolink"
55
55
  },
56
56
  "https_webhook": {
57
- "description": "\u041f\u0440\u043e\u0434\u0443\u043a\u0442\u0438 Reolink \u043d\u0435 \u043c\u043e\u0436\u0443\u0442\u044c \u043d\u0430\u0434\u0441\u0438\u043b\u0430\u0442\u0438 \u043f\u043e\u0434\u0456\u0457 \u0440\u0443\u0445\u0443 \u043d\u0430 HTTPS-\u0430\u0434\u0440\u0435\u0441\u0443 (SSL), \u0431\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0439\u0442\u0435 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443) HTTP-\u0430\u0434\u0440\u0435\u0441\u0443 \u0432 \u0440\u043e\u0437\u0434\u0456\u043b\u0456 \"URL-\u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043e\u043c\u0430\u0448\u043d\u044c\u043e\u0433\u043e \u043f\u043e\u043c\u0456\u0447\u043d\u0438\u043a\u0430\" \u0443 [\u043c\u0435\u0440\u0435\u0436\u0435\u0432\u0438\u0445 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f\u0445] ({network_link}). \u041f\u043e\u0442\u043e\u0447\u043d\u0430 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430) \u0430\u0434\u0440\u0435\u0441\u0430 \u0442\u0430\u043a\u0430: `{base_url}`, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u044e \u0430\u0434\u0440\u0435\u0441\u043e\u044e \u043c\u043e\u0436\u0435 \u0431\u0443\u0442\u0438, \u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, `http://192.168.1.10:8123`, \u0434\u0435 `192.168.1.10` - \u0446\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u044e Home Assistant",
58
57
  "title": "URL-\u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u0435\u0431-\u0445\u0443\u043a\u0430 Reolink \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 HTTPS (SSL)"
59
58
  },
60
59
  "webhook_url": {
61
- "description": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u043f\u043e\u0447\u0430\u0442\u043a\u043e\u0432\u0438\u0439 \u0441\u0442\u0430\u043d ONVIF \u0432\u0456\u0434 {name}. \u041d\u0430\u0439\u0456\u043c\u043e\u0432\u0456\u0440\u043d\u0456\u0448\u0435, \u043a\u0430\u043c\u0435\u0440\u0430 Reolink \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u043e\u0441\u044f\u0433\u0442\u0438 \u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0457 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0457) URL-\u0430\u0434\u0440\u0435\u0441\u0438 Home Assistant `{base_url}`, \u0431\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0439\u0442\u0435 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443) HTTP-\u0430\u0434\u0440\u0435\u0441\u0443 \u0432 \u0440\u043e\u0437\u0434\u0456\u043b\u0456 \"URL-\u0430\u0434\u0440\u0435\u0441\u0430 Home Assistant\" \u0443 [\u043c\u0435\u0440\u0435\u0436\u0435\u0432\u0438\u0445 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f\u0445]({network_link}), \u044f\u043a\u0430 \u0432\u043a\u0430\u0437\u0443\u0454 \u043d\u0430 Home Assistant. \u041d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, `http://192.168.1.10:8123`, \u0434\u0435 `192.168.1.10` - \u0446\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u0438\u0441\u0442\u0440\u043e\u044e Home Assistant. \u0422\u0430\u043a\u043e\u0436 \u043f\u0435\u0440\u0435\u043a\u043e\u043d\u0430\u0439\u0442\u0435\u0441\u044f, \u0449\u043e \u043a\u0430\u043c\u0435\u0440\u0430 Reolink \u043c\u043e\u0436\u0435 \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0446\u0456\u0454\u0457 \u0430\u0434\u0440\u0435\u0441\u0438. \u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u0448\u0432\u0438\u0434\u043a\u0438\u0439 \u0440\u0443\u0445/\u043e\u043f\u0438\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0441\u0442\u0430\u043d\u0443 \u0428\u0406, \u043f\u043e\u043a\u0438 \u043d\u0435 \u043e\u0442\u0440\u0438\u043c\u0430\u0454\u0442\u0435 \u043f\u0435\u0440\u0448\u0438\u0439 \u043f\u043e\u0448\u0442\u043e\u0432\u0445 ONVIF.",
62
60
  "title": "URL-\u0430\u0434\u0440\u0435\u0441\u0430 Reolink \u0432\u0435\u0431\u0445\u0443\u043a\u0443 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430"
63
61
  }
64
62
  },
@@ -1004,7 +1004,6 @@
1004
1004
  "title": "Reolink \u56fa\u4ef6\u9700\u8981\u66f4\u65b0"
1005
1005
  },
1006
1006
  "https_webhook": {
1007
- "description": "Reolink \u4ea7\u54c1\u65e0\u6cd5\u5c06\u8fd0\u52a8\u4e8b\u4ef6\u63a8\u9001\u5230 HTTPS \u5730\u5740 (SSL) \uff0c\u8bf7\u5728[\u7f51\u7edc\u8bbe\u7f6e]({network_link})\u4e2d\u7684\u201cHome Assistant \u7f51\u5740\u201d\u4e0b\u914d\u7f6e\uff08\u672c\u5730\uff09HTTP \u5730\u5740\u3002\u5f53\u524d\uff08\u672c\u5730\uff09\u5730\u5740\u4e3a\uff1a`{base_url}` \u3002\u4f8b\u5982\uff0c\u6709\u6548\u5730\u5740\u7c7b\u4f3c `http://192.168.1.10:8123` \uff0c\u5176\u4e2d `192.168.1.10` \u662f Home Assistant \u8bbe\u5907\u7684 IP \u5730\u5740",
1008
1007
  "title": "Reolink webhook URL \u4f7f\u7528 HTTPS (SSL)"
1009
1008
  },
1010
1009
  "password_too_long": {
@@ -1016,7 +1015,6 @@
1016
1015
  "title": "Reolink \u4e0e\u5168\u5c40 SSL \u8bc1\u4e66\u4e0d\u517c\u5bb9"
1017
1016
  },
1018
1017
  "webhook_url": {
1019
- "description": "\u672a\u4ece\u201c{name}\u201d\u63a5\u6536\u521d\u59cb ONVIF \u72b6\u6001\u3002\u6700\u6709\u53ef\u80fd\u7684\u662f\uff0cReolink \u6444\u50cf\u5934\u65e0\u6cd5\u8bbf\u95ee\u5f53\u524d\uff08\u672c\u5730\uff09Home Assistant \u7f51\u5740 {base_url} \uff0c\u8bf7\u5728[\u7f51\u7edc\u8bbe\u7f6e]({network_link})\u4e2d\u7684 \u201cHome Assistant \u7f51\u5740\u201d\u4e0b\u914d\u7f6e\u6307\u5411 Home Assistant \u7684\uff08\u672c\u5730\uff09HTTP \u5730\u5740\u3002\u4f8b\u5982 `http://192.168.1.10:8123` \uff0c\u5176\u4e2d `192.168.1.10` \u662f Home Assistant \u8bbe\u5907\u7684 IP \u5730\u5740\u3002\u6b64\u5916\uff0c\u8bf7\u786e\u4fdd Reolink \u6444\u50cf\u5934\u53ef\u4ee5\u8bbf\u95ee\u6b64\u7f51\u5740\u3002\u4f7f\u7528\u5feb\u901f\u8fd0\u52a8/AI \u72b6\u6001\u8f6e\u8be2\uff0c\u76f4\u5230\u6536\u5230\u7b2c\u4e00\u4e2a ONVIF \u63a8\u9001\u3002",
1020
1018
  "title": "Reolink webhook \u7f51\u5740\u65e0\u6cd5\u8bbf\u95ee"
1021
1019
  }
1022
1020
  },
@@ -1004,7 +1004,7 @@
1004
1004
  "title": "\u9700\u8981\u66f4\u65b0 Reolink \u97cc\u9ad4"
1005
1005
  },
1006
1006
  "https_webhook": {
1007
- "description": "Reolink \u7522\u54c1\u7121\u6cd5\u63a8\u9001\u4e8b\u4ef6\u81f3 HTTPS \u4f4d\u5740\uff08SSL\uff09\u3001\u8acb\u65bc [\u7db2\u8def\u8a2d\u5b9a]({network_link}) \u5167\u7684 \"Home Assistant URL\" \u8a2d\u5b9a\u4e00\u7d44\uff08\u672c\u5730\uff09HTTP \u4f4d\u5740\u3002\u76ee\u524d\uff08\u672c\u5730\uff09\u4f4d\u5740\u70ba\uff1a`{base_url}`\u3001\u6709\u6548\u7684\u4f4d\u5740\u61c9\u8a72\u70ba\u985e\u4f3c `http://192.168.1.10:8123`\u3002\u5176\u4e2d `192.168.1.10` \u70ba Home Assistant \u88dd\u7f6e\u7684 IP \u4f4d\u5740",
1007
+ "description": "Reolink \u7522\u54c1\u7121\u6cd5\u63a8\u9001\u4e8b\u4ef6\u81f3 HTTPS \u4f4d\u5740\uff08SSL\uff09\u3001\u8acb\u65bc [\u7db2\u8def\u8a2d\u5b9a]({network_link}) \u5167\u7684 \"Home Assistant URL\" \u8a2d\u5b9a\u4e00\u7d44\uff08\u672c\u5730\uff09HTTP \u4f4d\u5740\u3002\u76ee\u524d\uff08\u672c\u5730\uff09\u4f4d\u5740\u70ba\uff1a`{base_url}`\u3001\u6709\u6548\u7684\u4f4d\u5740\u61c9\u8a72\u70ba\u985e\u4f3c `{example_url}`\u3002\u5176\u4e2d `{example_ip}` \u70ba Home Assistant \u88dd\u7f6e\u7684 IP \u4f4d\u5740",
1008
1008
  "title": "Reolink webhook URL \u4f7f\u7528 HTTPS (SSL)"
1009
1009
  },
1010
1010
  "password_too_long": {
@@ -1016,7 +1016,7 @@
1016
1016
  "title": "Reolink \u8207\u5168\u57df SSL \u6191\u8b49\u4e0d\u76f8\u5bb9"
1017
1017
  },
1018
1018
  "webhook_url": {
1019
- "description": "\u672a\u6536\u5230 {name} \u521d\u59cb ONVIF \u72c0\u614b\u3002Reolink \u651d\u5f71\u6a5f\u5f88\u53ef\u80fd\u7121\u6cd5\u8a2a\u554f\u76ee\u524d\uff08\u672c\u5730\uff09\u7684 Home Assistant URL `{base_url}`\u3001\u8acb\u65bc [\u7db2\u8def\u8a2d\u5b9a]({network_link}) \u5167\u7684 \"Home Assistant URL\" \u4e2d\u8a2d\u5b9a\uff08\u672c\u5730\uff09\u6307\u5b9a HTTP \u4f4d\u5740\u3002\u4f8b\u5982\uff1a`http://192.168.1.10:8123`\u3001`192.168.1.10` \u70ba Home Assistant \u88dd\u7f6e\u7684 IP \u4f4d\u5740\u3002\u540c\u6642\u78ba\u5b9a Reolink \u651d\u5f71\u6a5f\u53ef\u4ee5\u9020\u8a2a\u8a72 URL\u3002\u4f7f\u7528\u5feb\u901f\u52d5\u4f5c/AI \u72c0\u614b\u8f2a\u8a62\u76f4\u5230\u6536\u5230\u7b2c\u4e00\u6b21 ONVIF \u63a8\u9001\u3002",
1019
+ "description": "\u672a\u6536\u5230 {name} \u521d\u59cb ONVIF \u72c0\u614b\u3002Reolink \u651d\u5f71\u6a5f\u5f88\u53ef\u80fd\u7121\u6cd5\u8a2a\u554f\u76ee\u524d\uff08\u672c\u5730\uff09\u7684 Home Assistant URL `{base_url}`\u3001\u8acb\u65bc [\u7db2\u8def\u8a2d\u5b9a]({network_link}) \u5167\u7684 \"Home Assistant URL\" \u4e2d\u8a2d\u5b9a\uff08\u672c\u5730\uff09\u6307\u5b9a HTTP \u4f4d\u5740\u3002\u4f8b\u5982\uff1a`{example_url}`\u3001\u5176\u4e2d `{example_ip}` \u70ba Home Assistant \u88dd\u7f6e\u7684 IP \u4f4d\u5740\u3002\u540c\u6642\u78ba\u5b9a Reolink \u651d\u5f71\u6a5f\u53ef\u4ee5\u9020\u8a2a\u8a72 URL\u3002\u4f7f\u7528\u5feb\u901f\u52d5\u4f5c/AI \u72c0\u614b\u8f2a\u8a62\u76f4\u5230\u6536\u5230\u7b2c\u4e00\u6b21 ONVIF \u63a8\u9001\u3002",
1020
1020
  "title": "Reolink webhook URL \u7121\u6cd5\u8a2a\u554f"
1021
1021
  }
1022
1022
  },
@@ -1,20 +1,23 @@
1
1
  """The Rituals Perfume Genie integration."""
2
2
 
3
3
  import asyncio
4
+ import logging
4
5
 
5
- import aiohttp
6
- from pyrituals import Account, Diffuser
6
+ from aiohttp import ClientError, ClientResponseError
7
+ from pyrituals import Account, AuthenticationException, Diffuser
7
8
 
8
9
  from homeassistant.config_entries import ConfigEntry
9
- from homeassistant.const import Platform
10
+ from homeassistant.const import CONF_EMAIL, CONF_PASSWORD, Platform
10
11
  from homeassistant.core import HomeAssistant, callback
11
- from homeassistant.exceptions import ConfigEntryNotReady
12
+ from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
12
13
  from homeassistant.helpers import entity_registry as er
13
14
  from homeassistant.helpers.aiohttp_client import async_get_clientsession
14
15
 
15
16
  from .const import ACCOUNT_HASH, DOMAIN, UPDATE_INTERVAL
16
17
  from .coordinator import RitualsDataUpdateCoordinator
17
18
 
19
+ _LOGGER = logging.getLogger(__name__)
20
+
18
21
  PLATFORMS = [
19
22
  Platform.BINARY_SENSOR,
20
23
  Platform.NUMBER,
@@ -26,12 +29,38 @@ PLATFORMS = [
26
29
 
27
30
  async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
28
31
  """Set up Rituals Perfume Genie from a config entry."""
32
+ # Initiate reauth for old config entries which don't have username / password in the entry data
33
+ if CONF_EMAIL not in entry.data or CONF_PASSWORD not in entry.data:
34
+ raise ConfigEntryAuthFailed("Missing credentials")
35
+
29
36
  session = async_get_clientsession(hass)
30
- account = Account(session=session, account_hash=entry.data[ACCOUNT_HASH])
37
+
38
+ account = Account(
39
+ email=entry.data[CONF_EMAIL],
40
+ password=entry.data[CONF_PASSWORD],
41
+ session=session,
42
+ )
31
43
 
32
44
  try:
45
+ # Authenticate first so API token/cookies are available for subsequent calls
46
+ await account.authenticate()
33
47
  account_devices = await account.get_devices()
34
- except aiohttp.ClientError as err:
48
+
49
+ except AuthenticationException as err:
50
+ # Credentials invalid/expired -> raise AuthFailed to trigger reauth flow
51
+
52
+ raise ConfigEntryAuthFailed(err) from err
53
+
54
+ except ClientResponseError as err:
55
+ _LOGGER.debug(
56
+ "HTTP error during Rituals setup: status=%s, url=%s, headers=%s",
57
+ err.status,
58
+ err.request_info,
59
+ dict(err.headers or {}),
60
+ )
61
+ raise ConfigEntryNotReady from err
62
+
63
+ except ClientError as err:
35
64
  raise ConfigEntryNotReady from err
36
65
 
37
66
  # Migrate old unique_ids to the new format
@@ -45,7 +74,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
45
74
  # Create a coordinator for each diffuser
46
75
  coordinators = {
47
76
  diffuser.hublot: RitualsDataUpdateCoordinator(
48
- hass, entry, diffuser, update_interval
77
+ hass, entry, account, diffuser, update_interval
49
78
  )
50
79
  for diffuser in account_devices
51
80
  }
@@ -106,3 +135,14 @@ def async_migrate_entities_unique_ids(
106
135
  registry_entry.entity_id,
107
136
  new_unique_id=f"{diffuser.hublot}-{new_unique_id}",
108
137
  )
138
+
139
+
140
+ # Migration helpers for API v2
141
+ async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
142
+ """Migrate config entry to version 2: drop legacy ACCOUNT_HASH and bump version."""
143
+ if entry.version < 2:
144
+ data = dict(entry.data)
145
+ data.pop(ACCOUNT_HASH, None)
146
+ hass.config_entries.async_update_entry(entry, data=data, version=2)
147
+ return True
148
+ return True
@@ -2,10 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import logging
6
- from typing import Any
5
+ from collections.abc import Mapping
6
+ from typing import TYPE_CHECKING, Any
7
7
 
8
- from aiohttp import ClientResponseError
8
+ from aiohttp import ClientError
9
9
  from pyrituals import Account, AuthenticationException
10
10
  import voluptuous as vol
11
11
 
@@ -13,9 +13,7 @@ from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
13
13
  from homeassistant.const import CONF_EMAIL, CONF_PASSWORD
14
14
  from homeassistant.helpers.aiohttp_client import async_get_clientsession
15
15
 
16
- from .const import ACCOUNT_HASH, DOMAIN
17
-
18
- _LOGGER = logging.getLogger(__name__)
16
+ from .const import DOMAIN
19
17
 
20
18
  DATA_SCHEMA = vol.Schema(
21
19
  {
@@ -28,39 +26,88 @@ DATA_SCHEMA = vol.Schema(
28
26
  class RitualsPerfumeGenieConfigFlow(ConfigFlow, domain=DOMAIN):
29
27
  """Handle a config flow for Rituals Perfume Genie."""
30
28
 
31
- VERSION = 1
29
+ VERSION = 2
32
30
 
33
31
  async def async_step_user(
34
32
  self, user_input: dict[str, Any] | None = None
35
33
  ) -> ConfigFlowResult:
36
34
  """Handle the initial step."""
37
- if user_input is None:
38
- return self.async_show_form(step_id="user", data_schema=DATA_SCHEMA)
39
-
40
- errors = {}
41
-
42
- session = async_get_clientsession(self.hass)
43
- account = Account(user_input[CONF_EMAIL], user_input[CONF_PASSWORD], session)
44
-
45
- try:
46
- await account.authenticate()
47
- except ClientResponseError:
48
- _LOGGER.exception("Unexpected response")
49
- errors["base"] = "cannot_connect"
50
- except AuthenticationException:
51
- errors["base"] = "invalid_auth"
52
- except Exception:
53
- _LOGGER.exception("Unexpected exception")
54
- errors["base"] = "unknown"
55
- else:
56
- await self.async_set_unique_id(account.email)
57
- self._abort_if_unique_id_configured()
58
-
59
- return self.async_create_entry(
60
- title=account.email,
61
- data={ACCOUNT_HASH: account.account_hash},
35
+ errors: dict[str, str] = {}
36
+ if user_input is not None:
37
+ session = async_get_clientsession(self.hass)
38
+ account = Account(
39
+ email=user_input[CONF_EMAIL],
40
+ password=user_input[CONF_PASSWORD],
41
+ session=session,
62
42
  )
63
43
 
44
+ try:
45
+ await account.authenticate()
46
+ except AuthenticationException:
47
+ errors["base"] = "invalid_auth"
48
+ except ClientError:
49
+ errors["base"] = "cannot_connect"
50
+ else:
51
+ await self.async_set_unique_id(user_input[CONF_EMAIL])
52
+ self._abort_if_unique_id_configured()
53
+ return self.async_create_entry(
54
+ title=user_input[CONF_EMAIL],
55
+ data=user_input,
56
+ )
57
+
64
58
  return self.async_show_form(
65
59
  step_id="user", data_schema=DATA_SCHEMA, errors=errors
66
60
  )
61
+
62
+ async def async_step_reauth(
63
+ self, entry_data: Mapping[str, Any]
64
+ ) -> ConfigFlowResult:
65
+ """Handle re-authentication with Rituals."""
66
+ return await self.async_step_reauth_confirm()
67
+
68
+ async def async_step_reauth_confirm(
69
+ self, user_input: dict[str, Any] | None = None
70
+ ) -> ConfigFlowResult:
71
+ """Form to log in again."""
72
+ errors: dict[str, str] = {}
73
+
74
+ reauth_entry = self._get_reauth_entry()
75
+
76
+ if TYPE_CHECKING:
77
+ assert reauth_entry.unique_id is not None
78
+
79
+ if user_input:
80
+ session = async_get_clientsession(self.hass)
81
+ account = Account(
82
+ email=reauth_entry.unique_id,
83
+ password=user_input[CONF_PASSWORD],
84
+ session=session,
85
+ )
86
+
87
+ try:
88
+ await account.authenticate()
89
+ except AuthenticationException:
90
+ errors["base"] = "invalid_auth"
91
+ except ClientError:
92
+ errors["base"] = "cannot_connect"
93
+ else:
94
+ return self.async_update_reload_and_abort(
95
+ reauth_entry,
96
+ data={
97
+ CONF_EMAIL: reauth_entry.unique_id,
98
+ CONF_PASSWORD: user_input[CONF_PASSWORD],
99
+ },
100
+ )
101
+
102
+ return self.async_show_form(
103
+ step_id="reauth_confirm",
104
+ data_schema=self.add_suggested_values_to_schema(
105
+ vol.Schema(
106
+ {
107
+ vol.Required(CONF_PASSWORD): str,
108
+ }
109
+ ),
110
+ reauth_entry.data,
111
+ ),
112
+ errors=errors,
113
+ )
@@ -4,6 +4,7 @@ from datetime import timedelta
4
4
 
5
5
  DOMAIN = "rituals_perfume_genie"
6
6
 
7
+ # Old (API V1)
7
8
  ACCOUNT_HASH = "account_hash"
8
9
 
9
10
  # The API provided by Rituals is currently rate limited to 30 requests
@@ -3,11 +3,13 @@
3
3
  from datetime import timedelta
4
4
  import logging
5
5
 
6
- from pyrituals import Diffuser
6
+ from aiohttp import ClientError, ClientResponseError
7
+ from pyrituals import Account, AuthenticationException, Diffuser
7
8
 
8
9
  from homeassistant.config_entries import ConfigEntry
9
10
  from homeassistant.core import HomeAssistant
10
- from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
11
+ from homeassistant.exceptions import ConfigEntryAuthFailed
12
+ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
11
13
 
12
14
  from .const import DOMAIN
13
15
 
@@ -23,10 +25,12 @@ class RitualsDataUpdateCoordinator(DataUpdateCoordinator[None]):
23
25
  self,
24
26
  hass: HomeAssistant,
25
27
  config_entry: ConfigEntry,
28
+ account: Account,
26
29
  diffuser: Diffuser,
27
30
  update_interval: timedelta,
28
31
  ) -> None:
29
32
  """Initialize global Rituals Perfume Genie data updater."""
33
+ self.account = account
30
34
  self.diffuser = diffuser
31
35
  super().__init__(
32
36
  hass,
@@ -37,5 +41,36 @@ class RitualsDataUpdateCoordinator(DataUpdateCoordinator[None]):
37
41
  )
38
42
 
39
43
  async def _async_update_data(self) -> None:
40
- """Fetch data from Rituals."""
41
- await self.diffuser.update_data()
44
+ """Fetch data from Rituals, with one silent re-auth on 401.
45
+
46
+ If silent re-auth also fails, raise ConfigEntryAuthFailed to trigger reauth flow.
47
+ Other HTTP/network errors are wrapped in UpdateFailed so HA can retry.
48
+ """
49
+ try:
50
+ await self.diffuser.update_data()
51
+ except (AuthenticationException, ClientResponseError) as err:
52
+ # Treat 401/403 like AuthenticationException → one silent re-auth, single retry
53
+ if isinstance(err, ClientResponseError) and (status := err.status) not in (
54
+ 401,
55
+ 403,
56
+ ):
57
+ # Non-auth HTTP error → let HA retry
58
+ raise UpdateFailed(f"HTTP {status}") from err
59
+
60
+ self.logger.debug(
61
+ "Auth issue detected (%r). Attempting silent re-auth.", err
62
+ )
63
+ try:
64
+ await self.account.authenticate()
65
+ await self.diffuser.update_data()
66
+ except AuthenticationException as err2:
67
+ # Credentials invalid → trigger HA reauth
68
+ raise ConfigEntryAuthFailed from err2
69
+ except ClientResponseError as err2:
70
+ # Still HTTP auth errors after refresh → trigger HA reauth
71
+ if err2.status in (401, 403):
72
+ raise ConfigEntryAuthFailed from err2
73
+ raise UpdateFailed(f"HTTP {err2.status}") from err2
74
+ except ClientError as err:
75
+ # Network issues (timeouts, DNS, etc.)
76
+ raise UpdateFailed(f"Network error: {err!r}") from err
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "domain": "rituals_perfume_genie",
3
3
  "name": "Rituals Perfume Genie",
4
- "codeowners": ["@milanmeu", "@frenck"],
4
+ "codeowners": ["@milanmeu", "@frenck", "@quebulm"],
5
5
  "config_flow": true,
6
6
  "documentation": "https://www.home-assistant.io/integrations/rituals_perfume_genie",
7
7
  "iot_class": "cloud_polling",
8
8
  "loggers": ["pyrituals"],
9
- "requirements": ["pyrituals==0.0.6"]
9
+ "requirements": ["pyrituals==0.0.7"]
10
10
  }
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "config": {
3
3
  "abort": {
4
- "already_configured": "[%key:common::config_flow::abort::already_configured_device%]"
4
+ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]",
5
+ "reauth_successful": "Re-authentication was successful"
5
6
  },
6
7
  "error": {
7
8
  "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
@@ -9,6 +10,12 @@
9
10
  "unknown": "[%key:common::config_flow::error::unknown%]"
10
11
  },
11
12
  "step": {
13
+ "reauth_confirm": {
14
+ "data": {
15
+ "password": "[%key:common::config_flow::data::password%]"
16
+ },
17
+ "description": "Please enter the correct password."
18
+ },
12
19
  "user": {
13
20
  "data": {
14
21
  "email": "[%key:common::config_flow::data::email%]",
@@ -1,8 +1,5 @@
1
1
  {
2
2
  "config": {
3
- "abort": {
4
- "already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e"
5
- },
6
3
  "error": {
7
4
  "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435",
8
5
  "invalid_auth": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430 \u0430\u0432\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f",
@@ -1,8 +1,5 @@
1
1
  {
2
2
  "config": {
3
- "abort": {
4
- "already_configured": "El dispositiu ja est\u00e0 configurat"
5
- },
6
3
  "error": {
7
4
  "cannot_connect": "Ha fallat la connexi\u00f3",
8
5
  "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida",
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "config": {
3
3
  "abort": {
4
- "already_configured": "Za\u0159\u00edzen\u00ed je ji\u017e nastaveno"
4
+ "already_configured": "\u00da\u010det je ji\u017e nastaven",
5
+ "reauth_successful": "Op\u011btovn\u00e9 ov\u011b\u0159en\u00ed bylo \u00fasp\u011b\u0161n\u00e9"
5
6
  },
6
7
  "error": {
7
8
  "cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit",
@@ -9,6 +10,12 @@
9
10
  "unknown": "Neo\u010dek\u00e1van\u00e1 chyba"
10
11
  },
11
12
  "step": {
13
+ "reauth_confirm": {
14
+ "data": {
15
+ "password": "Heslo"
16
+ },
17
+ "description": "Zadejte spr\u00e1vn\u00e9 heslo."
18
+ },
12
19
  "user": {
13
20
  "data": {
14
21
  "email": "E-mail",
@@ -1,8 +1,5 @@
1
1
  {
2
2
  "config": {
3
- "abort": {
4
- "already_configured": "Enheden er allerede konfigureret"
5
- },
6
3
  "error": {
7
4
  "cannot_connect": "Forbindelse mislykkedes",
8
5
  "invalid_auth": "Ugyldig godkendelse",
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "config": {
3
3
  "abort": {
4
- "already_configured": "Ger\u00e4t ist bereits konfiguriert"
4
+ "already_configured": "Konto ist bereits konfiguriert",
5
+ "reauth_successful": "Die erneute Authentifizierung war erfolgreich"
5
6
  },
6
7
  "error": {
7
8
  "cannot_connect": "Verbindung fehlgeschlagen",
@@ -9,6 +10,12 @@
9
10
  "unknown": "Unerwarteter Fehler"
10
11
  },
11
12
  "step": {
13
+ "reauth_confirm": {
14
+ "data": {
15
+ "password": "Passwort"
16
+ },
17
+ "description": "Bitte gib das richtige Passwort ein."
18
+ },
12
19
  "user": {
13
20
  "data": {
14
21
  "email": "E-Mail",
@@ -1,8 +1,5 @@
1
1
  {
2
2
  "config": {
3
- "abort": {
4
- "already_configured": "\u0397 \u03c3\u03c5\u03c3\u03ba\u03b5\u03c5\u03ae \u03ad\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7 \u03b4\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03b8\u03b5\u03af"
5
- },
6
3
  "error": {
7
4
  "cannot_connect": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2",
8
5
  "invalid_auth": "\u039c\u03b7 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf\u03c2 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2",
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "config": {
3
3
  "abort": {
4
- "already_configured": "Device is already configured"
4
+ "already_configured": "Account is already configured",
5
+ "reauth_successful": "Re-authentication was successful"
5
6
  },
6
7
  "error": {
7
8
  "cannot_connect": "Failed to connect",
@@ -9,6 +10,12 @@
9
10
  "unknown": "Unexpected error"
10
11
  },
11
12
  "step": {
13
+ "reauth_confirm": {
14
+ "data": {
15
+ "password": "Password"
16
+ },
17
+ "description": "Please enter the correct password."
18
+ },
12
19
  "user": {
13
20
  "data": {
14
21
  "email": "Email",
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "config": {
3
3
  "abort": {
4
- "already_configured": "Device is already configured"
4
+ "already_configured": "Account is already configured",
5
+ "reauth_successful": "Re-authentication was successful"
5
6
  },
6
7
  "error": {
7
8
  "cannot_connect": "Failed to connect",
@@ -9,6 +10,12 @@
9
10
  "unknown": "Unexpected error"
10
11
  },
11
12
  "step": {
13
+ "reauth_confirm": {
14
+ "data": {
15
+ "password": "Password"
16
+ },
17
+ "description": "Please enter the correct password."
18
+ },
12
19
  "user": {
13
20
  "data": {
14
21
  "email": "Email",
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "config": {
3
3
  "abort": {
4
- "already_configured": "El dispositivo ya est\u00e1 configurado"
4
+ "already_configured": "La cuenta ya est\u00e1 configurada",
5
+ "reauth_successful": "La autenticaci\u00f3n se volvi\u00f3 a realizar correctamente"
5
6
  },
6
7
  "error": {
7
8
  "cannot_connect": "No se pudo conectar",
@@ -9,6 +10,12 @@
9
10
  "unknown": "Error inesperado"
10
11
  },
11
12
  "step": {
13
+ "reauth_confirm": {
14
+ "data": {
15
+ "password": "Contrase\u00f1a"
16
+ },
17
+ "description": "Por favor, introduce la contrase\u00f1a correcta."
18
+ },
12
19
  "user": {
13
20
  "data": {
14
21
  "email": "Correo electr\u00f3nico",