homeassistant 2025.8.0b2__py3-none-any.whl → 2025.8.0b4__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 (696) hide show
  1. homeassistant/components/airos/config_flow.py +9 -9
  2. homeassistant/components/airos/coordinator.py +11 -7
  3. homeassistant/components/airos/manifest.json +1 -1
  4. homeassistant/components/airos/sensor.py +0 -7
  5. homeassistant/components/airos/strings.json +0 -7
  6. homeassistant/components/airos/translations/bg.json +0 -7
  7. homeassistant/components/airos/translations/cs.json +0 -7
  8. homeassistant/components/airos/translations/de.json +0 -7
  9. homeassistant/components/airos/translations/en-GB.json +0 -7
  10. homeassistant/components/airos/translations/en.json +0 -7
  11. homeassistant/components/airos/translations/es.json +0 -7
  12. homeassistant/components/airos/translations/et.json +0 -7
  13. homeassistant/components/airos/translations/ga.json +0 -7
  14. homeassistant/components/airos/translations/he.json +29 -0
  15. homeassistant/components/airos/translations/ko.json +13 -0
  16. homeassistant/components/airos/translations/sk.json +25 -6
  17. homeassistant/components/airos/translations/zh-Hans.json +0 -7
  18. homeassistant/components/airos/translations/zh-Hant.json +0 -7
  19. homeassistant/components/airthings/__init__.py +2 -5
  20. homeassistant/components/airthings/coordinator.py +10 -1
  21. homeassistant/components/airtouch5/translations/ko.json +11 -0
  22. homeassistant/components/airzone/translations/ko.json +9 -0
  23. homeassistant/components/airzone_cloud/translations/ko.json +13 -0
  24. homeassistant/components/alert/translations/he.json +1 -1
  25. homeassistant/components/alexa_devices/translations/es.json +192 -1
  26. homeassistant/components/alexa_devices/translations/ko.json +18 -0
  27. homeassistant/components/alexa_devices/translations/nl.json +7 -1
  28. homeassistant/components/alexa_devices/translations/sk.json +351 -1
  29. homeassistant/components/altruist/translations/ko.json +11 -0
  30. homeassistant/components/ambient_station/translations/ga.json +12 -0
  31. homeassistant/components/analytics_insights/translations/ga.json +7 -2
  32. homeassistant/components/androidtv_remote/translations/ko.json +5 -0
  33. homeassistant/components/androidtv_remote/translations/sl.json +2 -1
  34. homeassistant/components/anova/translations/he.json +1 -1
  35. homeassistant/components/anthropic/__init__.py +78 -11
  36. homeassistant/components/anthropic/config_flow.py +1 -1
  37. homeassistant/components/anthropic/translations/ko.json +12 -1
  38. homeassistant/components/apcupsd/translations/ga.json +50 -0
  39. homeassistant/components/aprilaire/translations/he.json +4 -4
  40. homeassistant/components/aprilaire/translations/ko.json +10 -0
  41. homeassistant/components/apsystems/translations/ko.json +9 -0
  42. homeassistant/components/aquacell/translations/ko.json +1 -1
  43. homeassistant/components/aseko_pool_live/translations/ko.json +6 -0
  44. homeassistant/components/assist_satellite/translations/he.json +1 -1
  45. homeassistant/components/assist_satellite/translations/sl.json +7 -0
  46. homeassistant/components/asuswrt/router.py +12 -3
  47. homeassistant/components/august/manifest.json +1 -1
  48. homeassistant/components/autarco/translations/ko.json +17 -0
  49. homeassistant/components/axis/manifest.json +1 -1
  50. homeassistant/components/backup/translations/he.json +1 -1
  51. homeassistant/components/bang_olufsen/translations/ga.json +15 -0
  52. homeassistant/components/blebox/translations/ko.json +3 -1
  53. homeassistant/components/blink/translations/ga.json +7 -0
  54. homeassistant/components/blue_current/translations/ko.json +9 -0
  55. homeassistant/components/bluemaestro/translations/ga.json +9 -0
  56. homeassistant/components/bluesound/translations/ko.json +10 -0
  57. homeassistant/components/bluetooth/manifest.json +1 -1
  58. homeassistant/components/bmw_connected_drive/translations/ga.json +1 -0
  59. homeassistant/components/bosch_alarm/translations/ko.json +22 -0
  60. homeassistant/components/bring/translations/ko.json +22 -0
  61. homeassistant/components/broadlink/updater.py +1 -0
  62. homeassistant/components/brother/translations/ko.json +5 -0
  63. homeassistant/components/bsblan/translations/ko.json +6 -0
  64. homeassistant/components/caldav/manifest.json +1 -1
  65. homeassistant/components/cambridge_audio/translations/ko.json +16 -0
  66. homeassistant/components/camera/translations/he.json +1 -1
  67. homeassistant/components/ccm15/translations/ko.json +12 -0
  68. homeassistant/components/chacon_dio/translations/ko.json +12 -0
  69. homeassistant/components/climate/translations/he.json +1 -1
  70. homeassistant/components/cloud/manifest.json +1 -1
  71. homeassistant/components/cloud/translations/ga.json +4 -0
  72. homeassistant/components/cloud/translations/he.json +4 -0
  73. homeassistant/components/co2signal/translations/ko.json +5 -0
  74. homeassistant/components/comelit/translations/ko.json +7 -0
  75. homeassistant/components/cookidoo/translations/ko.json +24 -0
  76. homeassistant/components/datadog/translations/ko.json +12 -0
  77. homeassistant/components/datadog/translations/sv.json +17 -1
  78. homeassistant/components/deluge/translations/he.json +1 -1
  79. homeassistant/components/devolo_home_control/translations/ko.json +5 -0
  80. homeassistant/components/devolo_home_network/translations/ko.json +7 -1
  81. homeassistant/components/doorbird/translations/ko.json +6 -0
  82. homeassistant/components/downloader/__init__.py +3 -0
  83. homeassistant/components/downloader/services.py +24 -14
  84. homeassistant/components/downloader/strings.json +8 -0
  85. homeassistant/components/downloader/translations/cs.json +8 -0
  86. homeassistant/components/downloader/translations/de.json +8 -0
  87. homeassistant/components/downloader/translations/en.json +8 -0
  88. homeassistant/components/downloader/translations/et.json +8 -0
  89. homeassistant/components/downloader/translations/ga.json +3 -0
  90. homeassistant/components/downloader/translations/ru.json +8 -0
  91. homeassistant/components/downloader/translations/sk.json +8 -0
  92. homeassistant/components/downloader/translations/zh-Hans.json +8 -0
  93. homeassistant/components/downloader/translations/zh-Hant.json +8 -0
  94. homeassistant/components/duke_energy/translations/ko.json +12 -0
  95. homeassistant/components/duotecno/translations/ko.json +1 -0
  96. homeassistant/components/ecovacs/manifest.json +1 -1
  97. homeassistant/components/ecovacs/translations/ga.json +74 -1
  98. homeassistant/components/ecovacs/translations/he.json +1 -1
  99. homeassistant/components/ecovacs/translations/ko.json +11 -0
  100. homeassistant/components/eheimdigital/translations/ko.json +16 -0
  101. homeassistant/components/electric_kiwi/translations/ga.json +3 -0
  102. homeassistant/components/electric_kiwi/translations/ko.json +3 -0
  103. homeassistant/components/elevenlabs/translations/ko.json +1 -1
  104. homeassistant/components/elmax/translations/ko.json +6 -0
  105. homeassistant/components/elvia/translations/ko.json +11 -0
  106. homeassistant/components/emoncms/translations/cs.json +8 -0
  107. homeassistant/components/emoncms/translations/es.json +8 -0
  108. homeassistant/components/emoncms/translations/ko.json +12 -0
  109. homeassistant/components/emoncms/translations/zh-Hans.json +8 -0
  110. homeassistant/components/energenie_power_sockets/translations/ko.json +11 -0
  111. homeassistant/components/energy/translations/sl.json +4 -0
  112. homeassistant/components/enigma2/translations/ko.json +14 -0
  113. homeassistant/components/enphase_envoy/translations/ga.json +9 -0
  114. homeassistant/components/enphase_envoy/translations/he.json +1 -1
  115. homeassistant/components/enphase_envoy/translations/ko.json +13 -0
  116. homeassistant/components/epic_games_store/translations/ko.json +12 -0
  117. homeassistant/components/epion/translations/ko.json +11 -0
  118. homeassistant/components/feedreader/translations/ko.json +16 -0
  119. homeassistant/components/filter/translations/ko.json +9 -0
  120. homeassistant/components/fitbit/translations/ko.json +3 -0
  121. homeassistant/components/flexit_bacnet/translations/ga.json +54 -0
  122. homeassistant/components/fritz/translations/ko.json +9 -0
  123. homeassistant/components/fritzbox/translations/ko.json +5 -0
  124. homeassistant/components/fritzbox_callmonitor/translations/he.json +1 -1
  125. homeassistant/components/fritzbox_callmonitor/translations/ko.json +11 -0
  126. homeassistant/components/fronius/__init__.py +6 -0
  127. homeassistant/components/fronius/translations/he.json +1 -1
  128. homeassistant/components/fronius/translations/ko.json +5 -0
  129. homeassistant/components/frontend/manifest.json +1 -1
  130. homeassistant/components/fujitsu_fglair/translations/ko.json +17 -0
  131. homeassistant/components/fyta/translations/ko.json +16 -0
  132. homeassistant/components/generic_hygrostat/translations/ko.json +11 -0
  133. homeassistant/components/generic_thermostat/translations/ko.json +9 -0
  134. homeassistant/components/geniushub/translations/ko.json +16 -0
  135. homeassistant/components/geocaching/translations/ko.json +3 -0
  136. homeassistant/components/gios/translations/sv.json +3 -0
  137. homeassistant/components/glances/translations/ga.json +66 -0
  138. homeassistant/components/goalzero/translations/ru.json +3 -0
  139. homeassistant/components/google/translations/ko.json +3 -0
  140. homeassistant/components/google_assistant_sdk/translations/ko.json +3 -0
  141. homeassistant/components/google_drive/translations/ko.json +11 -0
  142. homeassistant/components/google_generative_ai_conversation/strings.json +3 -3
  143. homeassistant/components/google_generative_ai_conversation/translations/cs.json +3 -3
  144. homeassistant/components/google_generative_ai_conversation/translations/de.json +3 -3
  145. homeassistant/components/google_generative_ai_conversation/translations/el.json +0 -5
  146. homeassistant/components/google_generative_ai_conversation/translations/en-GB.json +0 -5
  147. homeassistant/components/google_generative_ai_conversation/translations/en.json +3 -3
  148. homeassistant/components/google_generative_ai_conversation/translations/es.json +0 -5
  149. homeassistant/components/google_generative_ai_conversation/translations/et.json +3 -3
  150. homeassistant/components/google_generative_ai_conversation/translations/fr.json +0 -5
  151. homeassistant/components/google_generative_ai_conversation/translations/ga.json +0 -5
  152. homeassistant/components/google_generative_ai_conversation/translations/ja.json +0 -5
  153. homeassistant/components/google_generative_ai_conversation/translations/ko.json +38 -0
  154. homeassistant/components/google_generative_ai_conversation/translations/lt.json +0 -5
  155. homeassistant/components/google_generative_ai_conversation/translations/pt.json +0 -5
  156. homeassistant/components/google_generative_ai_conversation/translations/sk.json +0 -5
  157. homeassistant/components/google_generative_ai_conversation/translations/sl.json +9 -0
  158. homeassistant/components/google_generative_ai_conversation/translations/zh-Hans.json +3 -3
  159. homeassistant/components/google_generative_ai_conversation/translations/zh-Hant.json +3 -3
  160. homeassistant/components/google_mail/translations/ko.json +3 -0
  161. homeassistant/components/google_photos/translations/ko.json +5 -0
  162. homeassistant/components/google_sheets/translations/ko.json +3 -0
  163. homeassistant/components/google_tasks/translations/ko.json +3 -0
  164. homeassistant/components/google_travel_time/translations/ko.json +5 -0
  165. homeassistant/components/gpsd/translations/ko.json +16 -1
  166. homeassistant/components/group/translations/ga.json +9 -0
  167. homeassistant/components/group/translations/he.json +18 -0
  168. homeassistant/components/group/translations/sk.json +18 -0
  169. homeassistant/components/habitica/translations/ko.json +32 -0
  170. homeassistant/components/hassio/issues.py +4 -2
  171. homeassistant/components/hassio/strings.json +41 -29
  172. homeassistant/components/hassio/translations/bg.json +0 -1
  173. homeassistant/components/hassio/translations/ca.json +0 -22
  174. homeassistant/components/hassio/translations/cs.json +37 -25
  175. homeassistant/components/hassio/translations/da.json +0 -2
  176. homeassistant/components/hassio/translations/de.json +37 -25
  177. homeassistant/components/hassio/translations/el.json +3 -25
  178. homeassistant/components/hassio/translations/en-GB.json +0 -25
  179. homeassistant/components/hassio/translations/en.json +37 -25
  180. homeassistant/components/hassio/translations/es.json +3 -25
  181. homeassistant/components/hassio/translations/et.json +3 -25
  182. homeassistant/components/hassio/translations/fi.json +0 -23
  183. homeassistant/components/hassio/translations/fr.json +0 -24
  184. homeassistant/components/hassio/translations/fy.json +0 -7
  185. homeassistant/components/hassio/translations/ga.json +3 -1
  186. homeassistant/components/hassio/translations/gsw.json +0 -2
  187. homeassistant/components/hassio/translations/he.json +37 -25
  188. homeassistant/components/hassio/translations/hr.json +0 -2
  189. homeassistant/components/hassio/translations/hu.json +0 -25
  190. homeassistant/components/hassio/translations/id.json +0 -25
  191. homeassistant/components/hassio/translations/it.json +0 -22
  192. homeassistant/components/hassio/translations/ja.json +0 -23
  193. homeassistant/components/hassio/translations/ko.json +3 -22
  194. homeassistant/components/hassio/translations/lt.json +3 -25
  195. homeassistant/components/hassio/translations/nb.json +0 -22
  196. homeassistant/components/hassio/translations/nl.json +0 -23
  197. homeassistant/components/hassio/translations/pl.json +0 -22
  198. homeassistant/components/hassio/translations/pt-BR.json +0 -22
  199. homeassistant/components/hassio/translations/pt.json +0 -25
  200. homeassistant/components/hassio/translations/ro.json +0 -22
  201. homeassistant/components/hassio/translations/ru.json +0 -25
  202. homeassistant/components/hassio/translations/sk.json +3 -25
  203. homeassistant/components/hassio/translations/sl.json +0 -21
  204. homeassistant/components/hassio/translations/sv.json +0 -25
  205. homeassistant/components/hassio/translations/tr.json +0 -25
  206. homeassistant/components/hassio/translations/uk.json +0 -22
  207. homeassistant/components/hassio/translations/vi.json +0 -23
  208. homeassistant/components/hassio/translations/zh-Hans.json +3 -25
  209. homeassistant/components/hassio/translations/zh-Hant.json +3 -25
  210. homeassistant/components/heos/translations/ko.json +21 -0
  211. homeassistant/components/hko/translations/ko.json +11 -0
  212. homeassistant/components/home_connect/translations/ko.json +3 -0
  213. homeassistant/components/home_connect/translations/ru.json +6 -4
  214. homeassistant/components/homeassistant/translations/de.json +1 -1
  215. homeassistant/components/homeassistant/translations/ga.json +3 -0
  216. homeassistant/components/homee/translations/ko.json +22 -0
  217. homeassistant/components/homee/translations/ru.json +5 -0
  218. homeassistant/components/homekit_controller/translations/he.json +1 -1
  219. homeassistant/components/homematicip_cloud/translations/sv.json +11 -0
  220. homeassistant/components/homeworks/translations/ko.json +41 -0
  221. homeassistant/components/html5/translations/ko.json +9 -0
  222. homeassistant/components/http/translations/sv.json +1 -1
  223. homeassistant/components/hue/translations/ga.json +5 -0
  224. homeassistant/components/hue/v1/light.py +2 -0
  225. homeassistant/components/hue/v1/sensor_base.py +1 -0
  226. homeassistant/components/humidifier/translations/he.json +1 -1
  227. homeassistant/components/husqvarna_automower/manifest.json +1 -1
  228. homeassistant/components/husqvarna_automower/sensor.py +3 -4
  229. homeassistant/components/husqvarna_automower/translations/ga.json +16 -0
  230. homeassistant/components/husqvarna_automower/translations/he.json +7 -0
  231. homeassistant/components/husqvarna_automower/translations/ko.json +11 -0
  232. homeassistant/components/huum/translations/ko.json +12 -0
  233. homeassistant/components/hydrawise/translations/ko.json +15 -0
  234. homeassistant/components/ibeacon/translations/ga.json +15 -0
  235. homeassistant/components/imap/translations/ga.json +20 -0
  236. homeassistant/components/imeon_inverter/translations/ko.json +13 -0
  237. homeassistant/components/immich/translations/he.json +10 -0
  238. homeassistant/components/immich/translations/ko.json +18 -0
  239. homeassistant/components/immich/translations/sv.json +5 -1
  240. homeassistant/components/incomfort/translations/ko.json +13 -0
  241. homeassistant/components/intellifire/translations/ko.json +8 -0
  242. homeassistant/components/iometer/translations/ko.json +11 -0
  243. homeassistant/components/iotty/translations/ko.json +11 -0
  244. homeassistant/components/ipp/translations/he.json +1 -1
  245. homeassistant/components/iron_os/translations/he.json +1 -1
  246. homeassistant/components/iskra/translations/ko.json +22 -0
  247. homeassistant/components/ista_ecotrend/translations/ko.json +22 -0
  248. homeassistant/components/ituran/translations/he.json +3 -0
  249. homeassistant/components/ituran/translations/sv.json +3 -0
  250. homeassistant/components/jewish_calendar/translations/ko.json +17 -0
  251. homeassistant/components/justnimbus/translations/ga.json +27 -0
  252. homeassistant/components/kitchen_sink/translations/ko.json +11 -0
  253. homeassistant/components/knocki/translations/ko.json +12 -0
  254. homeassistant/components/knx/manifest.json +1 -1
  255. homeassistant/components/knx/translations/zh-Hant.json +1 -1
  256. homeassistant/components/kostal_plenticore/translations/ko.json +6 -0
  257. homeassistant/components/kraken/__init__.py +1 -0
  258. homeassistant/components/kulersky/translations/ko.json +7 -0
  259. homeassistant/components/lamarzocco/translations/ga.json +13 -0
  260. homeassistant/components/lamarzocco/translations/ko.json +26 -0
  261. homeassistant/components/lametric/translations/ko.json +3 -0
  262. homeassistant/components/lcn/translations/ko.json +58 -0
  263. homeassistant/components/lcn/translations/ru.json +1 -0
  264. homeassistant/components/leaone/translations/ga.json +8 -0
  265. homeassistant/components/leaone/translations/ko.json +11 -0
  266. homeassistant/components/leaone/translations/zh-Hans.json +2 -1
  267. homeassistant/components/lektrico/translations/ko.json +10 -0
  268. homeassistant/components/letpot/translations/ko.json +17 -0
  269. homeassistant/components/lg_netcast/translations/ga.json +14 -0
  270. homeassistant/components/lg_netcast/translations/ko.json +12 -0
  271. homeassistant/components/lg_thinq/translations/he.json +2 -1
  272. homeassistant/components/linkplay/translations/ko.json +11 -0
  273. homeassistant/components/linkplay/translations/sv.json +1 -0
  274. homeassistant/components/litterrobot/translations/sv.json +2 -1
  275. homeassistant/components/local_file/translations/ko.json +9 -0
  276. homeassistant/components/luftdaten/translations/ru.json +7 -0
  277. homeassistant/components/lupusec/translations/ko.json +13 -0
  278. homeassistant/components/lutron/translations/ko.json +13 -0
  279. homeassistant/components/lyric/translations/ko.json +3 -0
  280. homeassistant/components/madvr/translations/ko.json +18 -0
  281. homeassistant/components/mastodon/translations/ko.json +10 -0
  282. homeassistant/components/matter/number.py +3 -1
  283. homeassistant/components/matter/translations/he.json +6 -0
  284. homeassistant/components/matter/translations/ru.json +3 -0
  285. homeassistant/components/matter/translations/sv.json +3 -0
  286. homeassistant/components/matter/vacuum.py +0 -11
  287. homeassistant/components/mcp/translations/ko.json +16 -0
  288. homeassistant/components/mealie/manifest.json +1 -1
  289. homeassistant/components/mealie/todo.py +4 -2
  290. homeassistant/components/mealie/translations/ko.json +14 -0
  291. homeassistant/components/mealie/translations/sk.json +14 -1
  292. homeassistant/components/mealie/translations/sv.json +9 -1
  293. homeassistant/components/media_extractor/manifest.json +1 -1
  294. homeassistant/components/media_player/translations/he.json +1 -1
  295. homeassistant/components/melcloud/translations/ko.json +5 -0
  296. homeassistant/components/meteo_france/__init__.py +3 -0
  297. homeassistant/components/metoffice/translations/ko.json +5 -0
  298. homeassistant/components/microbees/translations/ga.json +2 -1
  299. homeassistant/components/microbees/translations/ko.json +11 -0
  300. homeassistant/components/miele/translations/cs.json +24 -1
  301. homeassistant/components/miele/translations/de.json +5 -5
  302. homeassistant/components/miele/translations/es.json +46 -1
  303. homeassistant/components/miele/translations/ga.json +1 -0
  304. homeassistant/components/miele/translations/he.json +36 -1
  305. homeassistant/components/miele/translations/ko.json +5 -0
  306. homeassistant/components/miele/translations/lt.json +13 -1
  307. homeassistant/components/miele/translations/nl.json +22 -0
  308. homeassistant/components/miele/translations/sk.json +34 -2
  309. homeassistant/components/miele/translations/zh-Hans.json +12 -1
  310. homeassistant/components/mill/__init__.py +1 -0
  311. homeassistant/components/mill/coordinator.py +2 -0
  312. homeassistant/components/modbus/translations/ga.json +8 -0
  313. homeassistant/components/mold_indicator/translations/ko.json +1 -0
  314. homeassistant/components/monarch_money/translations/ko.json +12 -0
  315. homeassistant/components/monzo/translations/ko.json +3 -0
  316. homeassistant/components/motionblinds_ble/translations/ga.json +25 -0
  317. homeassistant/components/motionmount/translations/ga.json +9 -0
  318. homeassistant/components/motionmount/translations/ko.json +17 -0
  319. homeassistant/components/mpd/translations/ko.json +13 -0
  320. homeassistant/components/mqtt/strings.json +4 -0
  321. homeassistant/components/mqtt/translations/cs.json +5 -0
  322. homeassistant/components/mqtt/translations/de.json +4 -0
  323. homeassistant/components/mqtt/translations/el.json +1 -0
  324. homeassistant/components/mqtt/translations/en.json +4 -0
  325. homeassistant/components/mqtt/translations/es.json +39 -5
  326. homeassistant/components/mqtt/translations/he.json +191 -0
  327. homeassistant/components/mqtt/translations/ko.json +28 -0
  328. homeassistant/components/mqtt/translations/lt.json +1 -0
  329. homeassistant/components/mqtt/translations/ru.json +36 -0
  330. homeassistant/components/mqtt/translations/sk.json +107 -2
  331. homeassistant/components/mqtt/translations/sl.json +5 -0
  332. homeassistant/components/mqtt/translations/sv.json +18 -0
  333. homeassistant/components/mqtt/translations/zh-Hant.json +45 -45
  334. homeassistant/components/mqtt/vacuum.py +31 -5
  335. homeassistant/components/music_assistant/translations/he.json +2 -1
  336. homeassistant/components/mystrom/translations/ga.json +9 -0
  337. homeassistant/components/myuplink/translations/ko.json +9 -0
  338. homeassistant/components/nam/translations/ko.json +5 -0
  339. homeassistant/components/nasweb/translations/ko.json +13 -0
  340. homeassistant/components/neato/translations/ko.json +3 -0
  341. homeassistant/components/nest/translations/ko.json +3 -0
  342. homeassistant/components/netatmo/translations/ko.json +3 -0
  343. homeassistant/components/netgear_lte/translations/ko.json +10 -0
  344. homeassistant/components/nextcloud/translations/ko.json +1 -1
  345. homeassistant/components/nice_go/translations/ko.json +16 -0
  346. homeassistant/components/niko_home_control/translations/ko.json +11 -0
  347. homeassistant/components/ntfy/translations/ko.json +38 -0
  348. homeassistant/components/nuki/translations/sv.json +1 -1
  349. homeassistant/components/nut/translations/ko.json +14 -0
  350. homeassistant/components/ohme/translations/ko.json +20 -0
  351. homeassistant/components/ollama/strings.json +3 -3
  352. homeassistant/components/ollama/translations/cs.json +3 -3
  353. homeassistant/components/ollama/translations/de.json +3 -3
  354. homeassistant/components/ollama/translations/el.json +0 -5
  355. homeassistant/components/ollama/translations/en-GB.json +0 -5
  356. homeassistant/components/ollama/translations/en.json +3 -3
  357. homeassistant/components/ollama/translations/es.json +0 -5
  358. homeassistant/components/ollama/translations/et.json +3 -3
  359. homeassistant/components/ollama/translations/fr.json +0 -5
  360. homeassistant/components/ollama/translations/ga.json +0 -5
  361. homeassistant/components/ollama/translations/ja.json +0 -5
  362. homeassistant/components/ollama/translations/ko.json +31 -0
  363. homeassistant/components/ollama/translations/lt.json +0 -5
  364. homeassistant/components/ollama/translations/mk.json +0 -5
  365. homeassistant/components/ollama/translations/pt.json +0 -5
  366. homeassistant/components/ollama/translations/ru.json +3 -3
  367. homeassistant/components/ollama/translations/sk.json +0 -5
  368. homeassistant/components/ollama/translations/zh-Hans.json +3 -3
  369. homeassistant/components/ollama/translations/zh-Hant.json +3 -3
  370. homeassistant/components/ondilo_ico/translations/ko.json +3 -0
  371. homeassistant/components/onedrive/translations/ko.json +11 -0
  372. homeassistant/components/onewire/translations/ko.json +6 -0
  373. homeassistant/components/onkyo/translations/ko.json +16 -0
  374. homeassistant/components/open_router/strings.json +2 -2
  375. homeassistant/components/open_router/translations/cs.json +2 -2
  376. homeassistant/components/open_router/translations/de.json +2 -2
  377. homeassistant/components/open_router/translations/en-GB.json +0 -4
  378. homeassistant/components/open_router/translations/en.json +2 -2
  379. homeassistant/components/open_router/translations/es.json +0 -4
  380. homeassistant/components/open_router/translations/et.json +2 -2
  381. homeassistant/components/open_router/translations/fr.json +0 -4
  382. homeassistant/components/open_router/translations/ga.json +0 -4
  383. homeassistant/components/open_router/translations/he.json +10 -0
  384. homeassistant/components/open_router/translations/ko.json +11 -0
  385. homeassistant/components/open_router/translations/ru.json +4 -0
  386. homeassistant/components/open_router/translations/zh-Hans.json +2 -2
  387. homeassistant/components/open_router/translations/zh-Hant.json +2 -2
  388. homeassistant/components/openai_conversation/__init__.py +93 -20
  389. homeassistant/components/openai_conversation/config_flow.py +1 -1
  390. homeassistant/components/openai_conversation/strings.json +3 -3
  391. homeassistant/components/openai_conversation/translations/cs.json +3 -3
  392. homeassistant/components/openai_conversation/translations/de.json +3 -3
  393. homeassistant/components/openai_conversation/translations/el.json +0 -5
  394. homeassistant/components/openai_conversation/translations/en-GB.json +0 -5
  395. homeassistant/components/openai_conversation/translations/en.json +3 -3
  396. homeassistant/components/openai_conversation/translations/es.json +0 -5
  397. homeassistant/components/openai_conversation/translations/et.json +3 -3
  398. homeassistant/components/openai_conversation/translations/fr.json +0 -5
  399. homeassistant/components/openai_conversation/translations/ga.json +0 -5
  400. homeassistant/components/openai_conversation/translations/it.json +0 -5
  401. homeassistant/components/openai_conversation/translations/ko.json +20 -0
  402. homeassistant/components/openai_conversation/translations/lt.json +0 -5
  403. homeassistant/components/openai_conversation/translations/mk.json +0 -5
  404. homeassistant/components/openai_conversation/translations/pt.json +0 -5
  405. homeassistant/components/openai_conversation/translations/ru.json +3 -3
  406. homeassistant/components/openai_conversation/translations/sk.json +0 -5
  407. homeassistant/components/openai_conversation/translations/zh-Hans.json +3 -3
  408. homeassistant/components/openai_conversation/translations/zh-Hant.json +3 -3
  409. homeassistant/components/openweathermap/translations/he.json +2 -1
  410. homeassistant/components/openweathermap/translations/ru.json +2 -1
  411. homeassistant/components/opower/config_flow.py +141 -75
  412. homeassistant/components/opower/const.py +1 -0
  413. homeassistant/components/opower/coordinator.py +4 -3
  414. homeassistant/components/opower/manifest.json +1 -1
  415. homeassistant/components/opower/strings.json +33 -16
  416. homeassistant/components/opower/translations/bg.json +0 -10
  417. homeassistant/components/opower/translations/ca.json +0 -8
  418. homeassistant/components/opower/translations/cs.json +26 -9
  419. homeassistant/components/opower/translations/de.json +26 -9
  420. homeassistant/components/opower/translations/el.json +0 -25
  421. homeassistant/components/opower/translations/en-GB.json +0 -23
  422. homeassistant/components/opower/translations/en.json +26 -9
  423. homeassistant/components/opower/translations/es.json +0 -23
  424. homeassistant/components/opower/translations/et.json +0 -23
  425. homeassistant/components/opower/translations/fi.json +0 -2
  426. homeassistant/components/opower/translations/fr.json +0 -11
  427. homeassistant/components/opower/translations/fy.json +0 -12
  428. homeassistant/components/opower/translations/ga.json +0 -16
  429. homeassistant/components/opower/translations/he.json +0 -12
  430. homeassistant/components/opower/translations/hu.json +0 -9
  431. homeassistant/components/opower/translations/id.json +0 -3
  432. homeassistant/components/opower/translations/it.json +0 -2
  433. homeassistant/components/opower/translations/ja.json +0 -20
  434. homeassistant/components/opower/translations/ko.json +20 -2
  435. homeassistant/components/opower/translations/lt.json +0 -23
  436. homeassistant/components/opower/translations/nb.json +0 -6
  437. homeassistant/components/opower/translations/nl.json +0 -9
  438. homeassistant/components/opower/translations/pl.json +0 -6
  439. homeassistant/components/opower/translations/pt-BR.json +0 -2
  440. homeassistant/components/opower/translations/pt.json +0 -23
  441. homeassistant/components/opower/translations/ro.json +0 -2
  442. homeassistant/components/opower/translations/ru.json +0 -22
  443. homeassistant/components/opower/translations/sk.json +0 -23
  444. homeassistant/components/opower/translations/sl.json +0 -6
  445. homeassistant/components/opower/translations/sv.json +0 -21
  446. homeassistant/components/opower/translations/tr.json +0 -2
  447. homeassistant/components/opower/translations/uk.json +0 -2
  448. homeassistant/components/opower/translations/zh-Hans.json +0 -23
  449. homeassistant/components/opower/translations/zh-Hant.json +0 -23
  450. homeassistant/components/oralb/translations/ga.json +21 -0
  451. homeassistant/components/osoenergy/translations/zh-Hans.json +1 -0
  452. homeassistant/components/otbr/translations/ko.json +1 -1
  453. homeassistant/components/otp/translations/ko.json +11 -0
  454. homeassistant/components/overkiz/translations/ko.json +1 -0
  455. homeassistant/components/overseerr/translations/ko.json +15 -0
  456. homeassistant/components/ovo_energy/translations/ko.json +5 -0
  457. homeassistant/components/p1_monitor/translations/ko.json +2 -1
  458. homeassistant/components/palazzetti/translations/ko.json +11 -0
  459. homeassistant/components/paperless_ngx/translations/ko.json +25 -0
  460. homeassistant/components/peblar/translations/ko.json +26 -0
  461. homeassistant/components/pi_hole/translations/ko.json +1 -0
  462. homeassistant/components/playstation_network/translations/es.json +27 -0
  463. homeassistant/components/playstation_network/translations/he.json +8 -0
  464. homeassistant/components/playstation_network/translations/sk.json +19 -0
  465. homeassistant/components/plugwise/translations/ko.json +5 -0
  466. homeassistant/components/point/translations/ko.json +7 -0
  467. homeassistant/components/powerfox/translations/ko.json +23 -0
  468. homeassistant/components/probe_plus/translations/ko.json +11 -0
  469. homeassistant/components/proximity/translations/ga.json +59 -1
  470. homeassistant/components/prusalink/translations/he.json +1 -1
  471. homeassistant/components/pterodactyl/translations/ko.json +17 -0
  472. homeassistant/components/pyload/translations/ko.json +34 -0
  473. homeassistant/components/qbittorrent/translations/he.json +1 -1
  474. homeassistant/components/qbittorrent/translations/ko.json +10 -1
  475. homeassistant/components/qnap/translations/ga.json +24 -0
  476. homeassistant/components/rabbitair/translations/ko.json +12 -0
  477. homeassistant/components/rainbird/translations/ko.json +5 -0
  478. homeassistant/components/random/translations/cs.json +2 -0
  479. homeassistant/components/random/translations/el.json +2 -0
  480. homeassistant/components/random/translations/es.json +2 -0
  481. homeassistant/components/random/translations/he.json +2 -0
  482. homeassistant/components/random/translations/lt.json +1 -0
  483. homeassistant/components/random/translations/sk.json +1 -0
  484. homeassistant/components/random/translations/zh-Hans.json +1 -0
  485. homeassistant/components/rehlko/translations/ko.json +17 -0
  486. homeassistant/components/remote_calendar/coordinator.py +1 -0
  487. homeassistant/components/reolink/__init__.py +1 -1
  488. homeassistant/components/reolink/diagnostics.py +2 -2
  489. homeassistant/components/reolink/manifest.json +1 -1
  490. homeassistant/components/reolink/sensor.py +1 -1
  491. homeassistant/components/reolink/translations/sv.json +28 -13
  492. homeassistant/components/rfxtrx/translations/ga.json +18 -0
  493. homeassistant/components/ring/translations/ga.json +11 -0
  494. homeassistant/components/ring/translations/ko.json +5 -0
  495. homeassistant/components/risco/translations/he.json +8 -0
  496. homeassistant/components/roborock/translations/he.json +1 -1
  497. homeassistant/components/romy/translations/ko.json +14 -0
  498. homeassistant/components/russound_rio/translations/ko.json +19 -0
  499. homeassistant/components/ruuvitag_ble/translations/ko.json +11 -0
  500. homeassistant/components/rympro/translations/ga.json +3 -0
  501. homeassistant/components/samsungtv/translations/ko.json +6 -0
  502. homeassistant/components/sanix/translations/ko.json +11 -0
  503. homeassistant/components/scrape/translations/cs.json +1 -0
  504. homeassistant/components/scrape/translations/el.json +1 -0
  505. homeassistant/components/scrape/translations/es.json +1 -0
  506. homeassistant/components/scrape/translations/he.json +1 -0
  507. homeassistant/components/scrape/translations/ru.json +1 -0
  508. homeassistant/components/scrape/translations/zh-Hans.json +1 -0
  509. homeassistant/components/screenlogic/translations/ga.json +1 -0
  510. homeassistant/components/sensibo/translations/ko.json +15 -0
  511. homeassistant/components/sensirion_ble/translations/ga.json +8 -0
  512. homeassistant/components/sensirion_ble/translations/ko.json +11 -0
  513. homeassistant/components/sensor/translations/ko.json +3 -0
  514. homeassistant/components/sensor/translations/sv.json +1 -0
  515. homeassistant/components/sensorpush_cloud/translations/ko.json +12 -0
  516. homeassistant/components/sensoterra/translations/ko.json +18 -0
  517. homeassistant/components/senz/translations/ko.json +3 -0
  518. homeassistant/components/seventeentrack/translations/ko.json +12 -0
  519. homeassistant/components/sfr_box/translations/he.json +1 -1
  520. homeassistant/components/sharkiq/translations/ko.json +6 -0
  521. homeassistant/components/shelly/translations/ko.json +8 -1
  522. homeassistant/components/shelly/translations/sv.json +10 -2
  523. homeassistant/components/simplisafe/__init__.py +1 -0
  524. homeassistant/components/sky_remote/translations/ko.json +11 -0
  525. homeassistant/components/slide_local/translations/ko.json +18 -0
  526. homeassistant/components/sma/translations/ko.json +12 -0
  527. homeassistant/components/smappee/translations/ko.json +3 -0
  528. homeassistant/components/smarla/translations/ko.json +11 -0
  529. homeassistant/components/smartthings/translations/he.json +1 -1
  530. homeassistant/components/smartthings/translations/ko.json +209 -4
  531. homeassistant/components/smarttub/controller.py +1 -0
  532. homeassistant/components/smarty/translations/ko.json +11 -0
  533. homeassistant/components/smlight/translations/ko.json +15 -0
  534. homeassistant/components/sms/__init__.py +2 -2
  535. homeassistant/components/sms/coordinator.py +4 -2
  536. homeassistant/components/snoo/__init__.py +1 -1
  537. homeassistant/components/snoo/coordinator.py +8 -1
  538. homeassistant/components/snoo/translations/ko.json +12 -0
  539. homeassistant/components/solarlog/translations/ko.json +15 -0
  540. homeassistant/components/sonos/manifest.json +1 -1
  541. homeassistant/components/spotify/translations/ko.json +3 -0
  542. homeassistant/components/sql/translations/cs.json +1 -0
  543. homeassistant/components/sql/translations/el.json +1 -0
  544. homeassistant/components/sql/translations/es.json +1 -0
  545. homeassistant/components/sql/translations/he.json +1 -0
  546. homeassistant/components/statistics/translations/ko.json +9 -0
  547. homeassistant/components/stiebel_eltron/translations/ko.json +12 -0
  548. homeassistant/components/streamlabswater/translations/ko.json +9 -0
  549. homeassistant/components/swiss_public_transport/translations/ga.json +3 -0
  550. homeassistant/components/switch_as_x/translations/ga.json +24 -0
  551. homeassistant/components/switchbot/manifest.json +1 -1
  552. homeassistant/components/switcher_kis/translations/ko.json +12 -0
  553. homeassistant/components/system_bridge/translations/ko.json +5 -0
  554. homeassistant/components/tailwind/translations/ko.json +1 -0
  555. homeassistant/components/technove/translations/ko.json +11 -0
  556. homeassistant/components/tedee/translations/ko.json +16 -0
  557. homeassistant/components/telegram_bot/translations/ko.json +19 -0
  558. homeassistant/components/template/cover.py +1 -0
  559. homeassistant/components/template/entity.py +9 -3
  560. homeassistant/components/template/strings.json +7 -1
  561. homeassistant/components/template/translations/cs.json +25 -9
  562. homeassistant/components/template/translations/de.json +7 -1
  563. homeassistant/components/template/translations/el.json +2 -0
  564. homeassistant/components/template/translations/en-GB.json +1 -2
  565. homeassistant/components/template/translations/en.json +7 -1
  566. homeassistant/components/template/translations/es.json +116 -19
  567. homeassistant/components/template/translations/et.json +7 -1
  568. homeassistant/components/template/translations/fr.json +1 -2
  569. homeassistant/components/template/translations/ga.json +7 -2
  570. homeassistant/components/template/translations/he.json +693 -18
  571. homeassistant/components/template/translations/ko.json +106 -1
  572. homeassistant/components/template/translations/lt.json +24 -0
  573. homeassistant/components/template/translations/nl.json +1 -0
  574. homeassistant/components/template/translations/ru.json +35 -5
  575. homeassistant/components/template/translations/sk.json +244 -28
  576. homeassistant/components/template/translations/sl.json +478 -12
  577. homeassistant/components/template/translations/sv.json +4 -0
  578. homeassistant/components/template/translations/zh-Hans.json +16 -1
  579. homeassistant/components/template/translations/zh-Hant.json +7 -1
  580. homeassistant/components/template/vacuum.py +46 -1
  581. homeassistant/components/tesla_fleet/translations/ko.json +9 -0
  582. homeassistant/components/teslemetry/models.py +1 -1
  583. homeassistant/components/teslemetry/sensor.py +8 -7
  584. homeassistant/components/teslemetry/translations/ga.json +19 -1
  585. homeassistant/components/teslemetry/translations/he.json +1 -1
  586. homeassistant/components/teslemetry/translations/ko.json +30 -0
  587. homeassistant/components/tessie/translations/ga.json +43 -1
  588. homeassistant/components/tessie/translations/ko.json +5 -0
  589. homeassistant/components/thethingsnetwork/translations/ko.json +3 -1
  590. homeassistant/components/tibber/translations/ga.json +45 -0
  591. homeassistant/components/tilt_pi/translations/ko.json +11 -0
  592. homeassistant/components/time_date/translations/ga.json +3 -0
  593. homeassistant/components/timer/translations/he.json +1 -1
  594. homeassistant/components/toon/translations/ko.json +3 -0
  595. homeassistant/components/totalconnect/translations/ko.json +3 -0
  596. homeassistant/components/touchline_sl/translations/ko.json +12 -0
  597. homeassistant/components/tplink/translations/ko.json +29 -0
  598. homeassistant/components/traccar_server/translations/ga.json +4 -1
  599. homeassistant/components/traccar_server/translations/ko.json +20 -0
  600. homeassistant/components/trafikverket_camera/translations/ko.json +11 -0
  601. homeassistant/components/trafikverket_train/translations/ko.json +5 -0
  602. homeassistant/components/trafikverket_weatherstation/translations/ko.json +5 -0
  603. homeassistant/components/transmission/translations/he.json +1 -1
  604. homeassistant/components/transmission/translations/ko.json +1 -0
  605. homeassistant/components/trend/translations/ko.json +9 -0
  606. homeassistant/components/triggercmd/translations/ko.json +11 -0
  607. homeassistant/components/tuya/__init__.py +15 -0
  608. homeassistant/components/tuya/fan.py +3 -1
  609. homeassistant/components/tuya/sensor.py +7 -0
  610. homeassistant/components/tuya/translations/es.json +12 -0
  611. homeassistant/components/tuya/translations/he.json +3 -0
  612. homeassistant/components/tuya/translations/sk.json +6 -0
  613. homeassistant/components/tuya/translations/sv.json +33 -0
  614. homeassistant/components/tuya/vacuum.py +1 -15
  615. homeassistant/components/unifi/hub/entity_loader.py +5 -3
  616. homeassistant/components/unifi/hub/hub.py +1 -1
  617. homeassistant/components/unifiprotect/translations/ga.json +4 -2
  618. homeassistant/components/unifiprotect/translations/ko.json +3 -0
  619. homeassistant/components/unifiprotect/translations/ru.json +5 -1
  620. homeassistant/components/uptime_kuma/translations/es.json +10 -0
  621. homeassistant/components/uptime_kuma/translations/he.json +5 -0
  622. homeassistant/components/uptime_kuma/translations/ko.json +30 -0
  623. homeassistant/components/uptime_kuma/translations/sk.json +3 -1
  624. homeassistant/components/uptime_kuma/translations/sv.json +1 -0
  625. homeassistant/components/utility_meter/translations/ga.json +22 -0
  626. homeassistant/components/vacuum/__init__.py +12 -2
  627. homeassistant/components/vacuum/translations/he.json +1 -1
  628. homeassistant/components/vallox/translations/ru.json +5 -0
  629. homeassistant/components/velbus/translations/ko.json +14 -0
  630. homeassistant/components/velux/translations/ko.json +15 -0
  631. homeassistant/components/venstar/translations/he.json +1 -1
  632. homeassistant/components/vesync/translations/ko.json +6 -0
  633. homeassistant/components/vodafone_station/translations/ko.json +7 -0
  634. homeassistant/components/volvo/icons.json +9 -5
  635. homeassistant/components/volvo/translations/he.json +59 -0
  636. homeassistant/components/volvo/translations/ko.json +11 -0
  637. homeassistant/components/volvo/translations/sv.json +21 -0
  638. homeassistant/components/waze_travel_time/translations/he.json +10 -0
  639. homeassistant/components/waze_travel_time/translations/ru.json +10 -0
  640. homeassistant/components/weatherflow_cloud/translations/sk.json +27 -0
  641. homeassistant/components/weatherflow_cloud/translations/sv.json +9 -0
  642. homeassistant/components/webdav/translations/ko.json +12 -0
  643. homeassistant/components/webmin/translations/ko.json +14 -0
  644. homeassistant/components/weheat/translations/ko.json +11 -0
  645. homeassistant/components/whirlpool/translations/ko.json +5 -0
  646. homeassistant/components/whois/translations/ru.json +1 -0
  647. homeassistant/components/withings/translations/ko.json +3 -0
  648. homeassistant/components/wmspro/translations/ko.json +11 -0
  649. homeassistant/components/worldclock/translations/ko.json +11 -0
  650. homeassistant/components/wyoming/manifest.json +1 -1
  651. homeassistant/components/xbox/translations/ko.json +3 -0
  652. homeassistant/components/xiaomi_ble/translations/ga.json +28 -2
  653. homeassistant/components/xiaomi_ble/translations/ko.json +6 -0
  654. homeassistant/components/yale/manifest.json +1 -1
  655. homeassistant/components/yale/translations/ko.json +11 -0
  656. homeassistant/components/yale_smart_alarm/translations/ko.json +6 -0
  657. homeassistant/components/yolink/translations/ko.json +3 -0
  658. homeassistant/components/zha/manifest.json +1 -1
  659. homeassistant/components/zha/translations/ga.json +3 -0
  660. homeassistant/components/zha/translations/he.json +21 -1
  661. homeassistant/components/zha/translations/ru.json +6 -0
  662. homeassistant/components/zha/translations/sk.json +12 -0
  663. homeassistant/components/zha/translations/sl.json +1 -0
  664. homeassistant/components/zimi/translations/ko.json +18 -0
  665. homeassistant/components/zwave_js/__init__.py +33 -25
  666. homeassistant/components/zwave_js/config_flow.py +16 -2
  667. homeassistant/components/zwave_js/manifest.json +1 -1
  668. homeassistant/components/zwave_js/strings.json +1 -1
  669. homeassistant/components/zwave_js/translations/cs.json +1 -1
  670. homeassistant/components/zwave_js/translations/de.json +1 -1
  671. homeassistant/components/zwave_js/translations/el.json +0 -1
  672. homeassistant/components/zwave_js/translations/en-GB.json +0 -1
  673. homeassistant/components/zwave_js/translations/en.json +1 -1
  674. homeassistant/components/zwave_js/translations/es.json +1 -1
  675. homeassistant/components/zwave_js/translations/et.json +1 -1
  676. homeassistant/components/zwave_js/translations/ga.json +0 -1
  677. homeassistant/components/zwave_js/translations/hu.json +0 -1
  678. homeassistant/components/zwave_js/translations/ko.json +20 -0
  679. homeassistant/components/zwave_js/translations/lt.json +0 -1
  680. homeassistant/components/zwave_js/translations/nl.json +0 -1
  681. homeassistant/components/zwave_js/translations/pt.json +0 -1
  682. homeassistant/components/zwave_js/translations/ru.json +1 -1
  683. homeassistant/components/zwave_js/translations/sk.json +0 -1
  684. homeassistant/components/zwave_js/translations/sv.json +0 -1
  685. homeassistant/components/zwave_js/translations/zh-Hans.json +1 -1
  686. homeassistant/components/zwave_js/translations/zh-Hant.json +1 -1
  687. homeassistant/const.py +1 -1
  688. homeassistant/helpers/device_registry.py +5 -2
  689. homeassistant/package_constraints.txt +3 -3
  690. {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b4.dist-info}/METADATA +2 -2
  691. {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b4.dist-info}/RECORD +696 -602
  692. {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b4.dist-info}/WHEEL +0 -0
  693. {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b4.dist-info}/entry_points.txt +0 -0
  694. {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b4.dist-info}/licenses/LICENSE.md +0 -0
  695. {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b4.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  696. {homeassistant-2025.8.0b2.dist-info → homeassistant-2025.8.0b4.dist-info}/top_level.txt +0 -0
@@ -9,6 +9,8 @@ from typing import Any
9
9
  from opower import (
10
10
  CannotConnect,
11
11
  InvalidAuth,
12
+ MfaChallenge,
13
+ MfaHandlerBase,
12
14
  Opower,
13
15
  create_cookie_jar,
14
16
  get_supported_utility_names,
@@ -16,49 +18,34 @@ from opower import (
16
18
  )
17
19
  import voluptuous as vol
18
20
 
19
- from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
21
+ from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlow, ConfigFlowResult
20
22
  from homeassistant.const import CONF_NAME, CONF_PASSWORD, CONF_USERNAME
21
23
  from homeassistant.core import HomeAssistant, callback
22
24
  from homeassistant.helpers.aiohttp_client import async_create_clientsession
23
25
  from homeassistant.helpers.typing import VolDictType
24
26
 
25
- from .const import CONF_TOTP_SECRET, CONF_UTILITY, DOMAIN
27
+ from .const import CONF_LOGIN_DATA, CONF_TOTP_SECRET, CONF_UTILITY, DOMAIN
26
28
 
27
29
  _LOGGER = logging.getLogger(__name__)
28
30
 
29
-
30
- STEP_USER_DATA_SCHEMA = vol.Schema(
31
- {
32
- vol.Required(CONF_UTILITY): vol.In(get_supported_utility_names()),
33
- vol.Required(CONF_USERNAME): str,
34
- vol.Required(CONF_PASSWORD): str,
35
- }
36
- )
31
+ CONF_MFA_CODE = "mfa_code"
32
+ CONF_MFA_METHOD = "mfa_method"
37
33
 
38
34
 
39
35
  async def _validate_login(
40
- hass: HomeAssistant, login_data: dict[str, str]
41
- ) -> dict[str, str]:
42
- """Validate login data and return any errors."""
36
+ hass: HomeAssistant,
37
+ data: Mapping[str, Any],
38
+ ) -> None:
39
+ """Validate login data and raise exceptions on failure."""
43
40
  api = Opower(
44
41
  async_create_clientsession(hass, cookie_jar=create_cookie_jar()),
45
- login_data[CONF_UTILITY],
46
- login_data[CONF_USERNAME],
47
- login_data[CONF_PASSWORD],
48
- login_data.get(CONF_TOTP_SECRET),
42
+ data[CONF_UTILITY],
43
+ data[CONF_USERNAME],
44
+ data[CONF_PASSWORD],
45
+ data.get(CONF_TOTP_SECRET),
46
+ data.get(CONF_LOGIN_DATA),
49
47
  )
50
- errors: dict[str, str] = {}
51
- try:
52
- await api.async_login()
53
- except InvalidAuth:
54
- _LOGGER.exception(
55
- "Invalid auth when connecting to %s", login_data[CONF_UTILITY]
56
- )
57
- errors["base"] = "invalid_auth"
58
- except CannotConnect:
59
- _LOGGER.exception("Could not connect to %s", login_data[CONF_UTILITY])
60
- errors["base"] = "cannot_connect"
61
- return errors
48
+ await api.async_login()
62
49
 
63
50
 
64
51
  class OpowerConfigFlow(ConfigFlow, domain=DOMAIN):
@@ -68,81 +55,147 @@ class OpowerConfigFlow(ConfigFlow, domain=DOMAIN):
68
55
 
69
56
  def __init__(self) -> None:
70
57
  """Initialize a new OpowerConfigFlow."""
71
- self.utility_info: dict[str, Any] | None = None
58
+ self._data: dict[str, Any] = {}
59
+ self.mfa_handler: MfaHandlerBase | None = None
72
60
 
73
61
  async def async_step_user(
74
62
  self, user_input: dict[str, Any] | None = None
75
63
  ) -> ConfigFlowResult:
76
- """Handle the initial step."""
64
+ """Handle the initial step (select utility)."""
65
+ if user_input is not None:
66
+ self._data[CONF_UTILITY] = user_input[CONF_UTILITY]
67
+ return await self.async_step_credentials()
68
+
69
+ return self.async_show_form(
70
+ step_id="user",
71
+ data_schema=vol.Schema(
72
+ {vol.Required(CONF_UTILITY): vol.In(get_supported_utility_names())}
73
+ ),
74
+ )
75
+
76
+ async def async_step_credentials(
77
+ self, user_input: dict[str, Any] | None = None
78
+ ) -> ConfigFlowResult:
79
+ """Handle credentials step."""
77
80
  errors: dict[str, str] = {}
81
+ utility = select_utility(self._data[CONF_UTILITY])
82
+
78
83
  if user_input is not None:
84
+ self._data.update(user_input)
85
+
79
86
  self._async_abort_entries_match(
80
87
  {
81
- CONF_UTILITY: user_input[CONF_UTILITY],
82
- CONF_USERNAME: user_input[CONF_USERNAME],
88
+ CONF_UTILITY: self._data[CONF_UTILITY],
89
+ CONF_USERNAME: self._data[CONF_USERNAME],
83
90
  }
84
91
  )
85
- if select_utility(user_input[CONF_UTILITY]).accepts_mfa():
86
- self.utility_info = user_input
87
- return await self.async_step_mfa()
88
92
 
89
- errors = await _validate_login(self.hass, user_input)
90
- if not errors:
91
- return self._async_create_opower_entry(user_input)
92
- else:
93
- user_input = {}
94
- user_input.pop(CONF_PASSWORD, None)
93
+ try:
94
+ await _validate_login(self.hass, self._data)
95
+ except MfaChallenge as exc:
96
+ self.mfa_handler = exc.handler
97
+ return await self.async_step_mfa_options()
98
+ except InvalidAuth:
99
+ errors["base"] = "invalid_auth"
100
+ except CannotConnect:
101
+ errors["base"] = "cannot_connect"
102
+ else:
103
+ return self._async_create_opower_entry(self._data)
104
+
105
+ schema_dict: VolDictType = {
106
+ vol.Required(CONF_USERNAME): str,
107
+ vol.Required(CONF_PASSWORD): str,
108
+ }
109
+ if utility.accepts_totp_secret():
110
+ schema_dict[vol.Optional(CONF_TOTP_SECRET)] = str
111
+
95
112
  return self.async_show_form(
96
- step_id="user",
113
+ step_id="credentials",
97
114
  data_schema=self.add_suggested_values_to_schema(
98
- STEP_USER_DATA_SCHEMA, user_input
115
+ vol.Schema(schema_dict), user_input
99
116
  ),
100
117
  errors=errors,
101
118
  )
102
119
 
103
- async def async_step_mfa(
120
+ async def async_step_mfa_options(
104
121
  self, user_input: dict[str, Any] | None = None
105
122
  ) -> ConfigFlowResult:
106
- """Handle MFA step."""
107
- assert self.utility_info is not None
123
+ """Handle MFA options step."""
108
124
  errors: dict[str, str] = {}
125
+ assert self.mfa_handler is not None
126
+
109
127
  if user_input is not None:
110
- data = {**self.utility_info, **user_input}
111
- errors = await _validate_login(self.hass, data)
112
- if not errors:
113
- return self._async_create_opower_entry(data)
114
-
115
- if errors:
116
- schema = {
117
- vol.Required(
118
- CONF_USERNAME, default=self.utility_info[CONF_USERNAME]
119
- ): str,
120
- vol.Required(CONF_PASSWORD): str,
121
- }
122
- else:
123
- schema = {}
128
+ method = user_input[CONF_MFA_METHOD]
129
+ try:
130
+ await self.mfa_handler.async_select_mfa_option(method)
131
+ except CannotConnect:
132
+ errors["base"] = "cannot_connect"
133
+ else:
134
+ return await self.async_step_mfa_code()
135
+
136
+ mfa_options = await self.mfa_handler.async_get_mfa_options()
137
+ if not mfa_options:
138
+ return await self.async_step_mfa_code()
139
+ return self.async_show_form(
140
+ step_id="mfa_options",
141
+ data_schema=self.add_suggested_values_to_schema(
142
+ vol.Schema({vol.Required(CONF_MFA_METHOD): vol.In(mfa_options)}),
143
+ user_input,
144
+ ),
145
+ errors=errors,
146
+ )
124
147
 
125
- schema[vol.Required(CONF_TOTP_SECRET)] = str
148
+ async def async_step_mfa_code(
149
+ self, user_input: dict[str, Any] | None = None
150
+ ) -> ConfigFlowResult:
151
+ """Handle MFA code submission step."""
152
+ assert self.mfa_handler is not None
153
+ errors: dict[str, str] = {}
154
+ if user_input is not None:
155
+ code = user_input[CONF_MFA_CODE]
156
+ try:
157
+ login_data = await self.mfa_handler.async_submit_mfa_code(code)
158
+ except InvalidAuth:
159
+ errors["base"] = "invalid_mfa_code"
160
+ except CannotConnect:
161
+ errors["base"] = "cannot_connect"
162
+ else:
163
+ self._data[CONF_LOGIN_DATA] = login_data
164
+ if self.source == SOURCE_REAUTH:
165
+ return self.async_update_reload_and_abort(
166
+ self._get_reauth_entry(), data=self._data
167
+ )
168
+ return self._async_create_opower_entry(self._data)
126
169
 
127
170
  return self.async_show_form(
128
- step_id="mfa",
129
- data_schema=vol.Schema(schema),
171
+ step_id="mfa_code",
172
+ data_schema=self.add_suggested_values_to_schema(
173
+ vol.Schema({vol.Required(CONF_MFA_CODE): str}), user_input
174
+ ),
130
175
  errors=errors,
131
176
  )
132
177
 
133
178
  @callback
134
- def _async_create_opower_entry(self, data: dict[str, Any]) -> ConfigFlowResult:
179
+ def _async_create_opower_entry(
180
+ self, data: dict[str, Any], **kwargs: Any
181
+ ) -> ConfigFlowResult:
135
182
  """Create the config entry."""
136
183
  return self.async_create_entry(
137
184
  title=f"{data[CONF_UTILITY]} ({data[CONF_USERNAME]})",
138
185
  data=data,
186
+ **kwargs,
139
187
  )
140
188
 
141
189
  async def async_step_reauth(
142
190
  self, entry_data: Mapping[str, Any]
143
191
  ) -> ConfigFlowResult:
144
192
  """Handle configuration by re-auth."""
145
- return await self.async_step_reauth_confirm()
193
+ reauth_entry = self._get_reauth_entry()
194
+ self._data = dict(reauth_entry.data)
195
+ return self.async_show_form(
196
+ step_id="reauth_confirm",
197
+ description_placeholders={CONF_NAME: reauth_entry.title},
198
+ )
146
199
 
147
200
  async def async_step_reauth_confirm(
148
201
  self, user_input: dict[str, Any] | None = None
@@ -150,21 +203,34 @@ class OpowerConfigFlow(ConfigFlow, domain=DOMAIN):
150
203
  """Dialog that informs the user that reauth is required."""
151
204
  errors: dict[str, str] = {}
152
205
  reauth_entry = self._get_reauth_entry()
206
+
153
207
  if user_input is not None:
154
- data = {**reauth_entry.data, **user_input}
155
- errors = await _validate_login(self.hass, data)
156
- if not errors:
157
- return self.async_update_reload_and_abort(reauth_entry, data=data)
208
+ self._data.update(user_input)
209
+ try:
210
+ await _validate_login(self.hass, self._data)
211
+ except MfaChallenge as exc:
212
+ self.mfa_handler = exc.handler
213
+ return await self.async_step_mfa_options()
214
+ except InvalidAuth:
215
+ errors["base"] = "invalid_auth"
216
+ except CannotConnect:
217
+ errors["base"] = "cannot_connect"
218
+ else:
219
+ return self.async_update_reload_and_abort(reauth_entry, data=self._data)
158
220
 
159
- schema: VolDictType = {
160
- vol.Required(CONF_USERNAME): reauth_entry.data[CONF_USERNAME],
221
+ utility = select_utility(self._data[CONF_UTILITY])
222
+ schema_dict: VolDictType = {
223
+ vol.Required(CONF_USERNAME): str,
161
224
  vol.Required(CONF_PASSWORD): str,
162
225
  }
163
- if select_utility(reauth_entry.data[CONF_UTILITY]).accepts_mfa():
164
- schema[vol.Optional(CONF_TOTP_SECRET)] = str
226
+ if utility.accepts_totp_secret():
227
+ schema_dict[vol.Optional(CONF_TOTP_SECRET)] = str
228
+
165
229
  return self.async_show_form(
166
230
  step_id="reauth_confirm",
167
- data_schema=vol.Schema(schema),
231
+ data_schema=self.add_suggested_values_to_schema(
232
+ vol.Schema(schema_dict), self._data
233
+ ),
168
234
  errors=errors,
169
235
  description_placeholders={CONF_NAME: reauth_entry.title},
170
236
  )
@@ -4,3 +4,4 @@ DOMAIN = "opower"
4
4
 
5
5
  CONF_UTILITY = "utility"
6
6
  CONF_TOTP_SECRET = "totp_secret"
7
+ CONF_LOGIN_DATA = "login_data"
@@ -14,7 +14,7 @@ from opower import (
14
14
  ReadResolution,
15
15
  create_cookie_jar,
16
16
  )
17
- from opower.exceptions import ApiException, CannotConnect, InvalidAuth
17
+ from opower.exceptions import ApiException, CannotConnect, InvalidAuth, MfaChallenge
18
18
 
19
19
  from homeassistant.components.recorder import get_instance
20
20
  from homeassistant.components.recorder.models import (
@@ -36,7 +36,7 @@ from homeassistant.helpers.aiohttp_client import async_create_clientsession
36
36
  from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
37
37
  from homeassistant.util import dt as dt_util
38
38
 
39
- from .const import CONF_TOTP_SECRET, CONF_UTILITY, DOMAIN
39
+ from .const import CONF_LOGIN_DATA, CONF_TOTP_SECRET, CONF_UTILITY, DOMAIN
40
40
 
41
41
  _LOGGER = logging.getLogger(__name__)
42
42
 
@@ -69,6 +69,7 @@ class OpowerCoordinator(DataUpdateCoordinator[dict[str, Forecast]]):
69
69
  config_entry.data[CONF_USERNAME],
70
70
  config_entry.data[CONF_PASSWORD],
71
71
  config_entry.data.get(CONF_TOTP_SECRET),
72
+ config_entry.data.get(CONF_LOGIN_DATA),
72
73
  )
73
74
 
74
75
  @callback
@@ -90,7 +91,7 @@ class OpowerCoordinator(DataUpdateCoordinator[dict[str, Forecast]]):
90
91
  # Given the infrequent updating (every 12h)
91
92
  # assume previous session has expired and re-login.
92
93
  await self.api.async_login()
93
- except InvalidAuth as err:
94
+ except (InvalidAuth, MfaChallenge) as err:
94
95
  _LOGGER.error("Error during login: %s", err)
95
96
  raise ConfigEntryAuthFailed from err
96
97
  except CannotConnect as err:
@@ -7,5 +7,5 @@
7
7
  "documentation": "https://www.home-assistant.io/integrations/opower",
8
8
  "iot_class": "cloud_polling",
9
9
  "loggers": ["opower"],
10
- "requirements": ["opower==0.12.4"]
10
+ "requirements": ["opower==0.15.1"]
11
11
  }
@@ -3,27 +3,43 @@
3
3
  "step": {
4
4
  "user": {
5
5
  "data": {
6
- "utility": "Utility name",
7
- "username": "[%key:common::config_flow::data::username%]",
8
- "password": "[%key:common::config_flow::data::password%]"
6
+ "utility": "Utility name"
9
7
  },
10
8
  "data_description": {
11
- "utility": "The name of your utility provider",
12
- "username": "The username for your utility account",
13
- "password": "The password for your utility account"
9
+ "utility": "The name of your utility provider"
14
10
  }
15
11
  },
16
- "mfa": {
17
- "description": "The TOTP secret below is not one of the 6-digit time-based numeric codes. It is a string of around 16 characters containing the shared secret that enables your authenticator app to generate the correct time-based code at the appropriate time. See the documentation.",
12
+ "credentials": {
13
+ "title": "Enter Credentials",
18
14
  "data": {
19
15
  "username": "[%key:common::config_flow::data::username%]",
20
16
  "password": "[%key:common::config_flow::data::password%]",
21
17
  "totp_secret": "TOTP secret"
22
18
  },
23
19
  "data_description": {
24
- "username": "[%key:component::opower::config::step::user::data_description::username%]",
25
- "password": "[%key:component::opower::config::step::user::data_description::password%]",
26
- "totp_secret": "The TOTP secret for your utility account, used for multi-factor authentication (MFA)."
20
+ "username": "The username for your utility account",
21
+ "password": "The password for your utility account",
22
+ "totp_secret": "This is not a 6-digit code. It is a string of around 16 characters containing the shared secret that enables your authenticator app to generate the correct time-based code at the appropriate time. See the documentation."
23
+ }
24
+ },
25
+ "mfa_options": {
26
+ "title": "Multi-factor authentication",
27
+ "description": "Your account requires multi-factor authentication (MFA). Select a method to receive your security code.",
28
+ "data": {
29
+ "mfa_method": "MFA method"
30
+ },
31
+ "data_description": {
32
+ "mfa_method": "How to receive your security code"
33
+ }
34
+ },
35
+ "mfa_code": {
36
+ "title": "Enter security code",
37
+ "description": "A security code has been sent via your selected method. Please enter it below to complete login.",
38
+ "data": {
39
+ "mfa_code": "Security code"
40
+ },
41
+ "data_description": {
42
+ "mfa_code": "Typically a 6-digit code"
27
43
  }
28
44
  },
29
45
  "reauth_confirm": {
@@ -31,18 +47,19 @@
31
47
  "data": {
32
48
  "username": "[%key:common::config_flow::data::username%]",
33
49
  "password": "[%key:common::config_flow::data::password%]",
34
- "totp_secret": "[%key:component::opower::config::step::mfa::data::totp_secret%]"
50
+ "totp_secret": "[%key:component::opower::config::step::credentials::data::totp_secret%]"
35
51
  },
36
52
  "data_description": {
37
- "username": "[%key:component::opower::config::step::user::data_description::username%]",
38
- "password": "[%key:component::opower::config::step::user::data_description::password%]",
39
- "totp_secret": "The TOTP secret for your utility account, used for multi-factor authentication (MFA)."
53
+ "username": "[%key:component::opower::config::step::credentials::data_description::username%]",
54
+ "password": "[%key:component::opower::config::step::credentials::data_description::password%]",
55
+ "totp_secret": "[%key:component::opower::config::step::credentials::data_description::totp_secret%]"
40
56
  }
41
57
  }
42
58
  },
43
59
  "error": {
44
60
  "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
45
- "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]"
61
+ "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]",
62
+ "invalid_mfa_code": "The security code is incorrect. Please try again."
46
63
  },
47
64
  "abort": {
48
65
  "already_configured": "[%key:common::config_flow::abort::already_configured_service%]",
@@ -9,12 +9,6 @@
9
9
  "invalid_auth": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430 \u0430\u0432\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f"
10
10
  },
11
11
  "step": {
12
- "mfa": {
13
- "data": {
14
- "password": "\u041f\u0430\u0440\u043e\u043b\u0430",
15
- "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435"
16
- }
17
- },
18
12
  "reauth_confirm": {
19
13
  "data": {
20
14
  "password": "\u041f\u0430\u0440\u043e\u043b\u0430",
@@ -23,10 +17,6 @@
23
17
  "title": "\u0410\u0432\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f\u0442\u0430 \u0437\u0430 {name} \u0435 \u0438\u0437\u0442\u0435\u043a\u043b\u0430"
24
18
  },
25
19
  "user": {
26
- "data": {
27
- "password": "\u041f\u0430\u0440\u043e\u043b\u0430",
28
- "username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435"
29
- },
30
20
  "data_description": {
31
21
  "utility": "The name of your utility provider"
32
22
  }
@@ -9,12 +9,6 @@
9
9
  "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida"
10
10
  },
11
11
  "step": {
12
- "mfa": {
13
- "data": {
14
- "password": "Contrasenya",
15
- "username": "Nom d'usuari"
16
- }
17
- },
18
12
  "reauth_confirm": {
19
13
  "data": {
20
14
  "password": "Contrasenya",
@@ -24,8 +18,6 @@
24
18
  },
25
19
  "user": {
26
20
  "data": {
27
- "password": "Contrasenya",
28
- "username": "Nom d'usuari",
29
21
  "utility": "Nom de la xarxa"
30
22
  }
31
23
  }
@@ -6,10 +6,11 @@
6
6
  },
7
7
  "error": {
8
8
  "cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit",
9
- "invalid_auth": "Neplatn\u00e9 ov\u011b\u0159en\u00ed"
9
+ "invalid_auth": "Neplatn\u00e9 ov\u011b\u0159en\u00ed",
10
+ "invalid_mfa_code": "Bezpe\u010dnostn\u00ed k\u00f3d je nespr\u00e1vn\u00fd. Zkuste to znovu."
10
11
  },
11
12
  "step": {
12
- "mfa": {
13
+ "credentials": {
13
14
  "data": {
14
15
  "password": "Heslo",
15
16
  "totp_secret": "Tajn\u00fd kl\u00ed\u010d TOTP",
@@ -17,10 +18,30 @@
17
18
  },
18
19
  "data_description": {
19
20
  "password": "Heslo k va\u0161emu \u00fa\u010dtu pro energie",
20
- "totp_secret": "Tajn\u00fd kl\u00ed\u010d TOTP pro v\u00e1\u0161 \u00fa\u010det pro energie, pou\u017e\u00edvan\u00fd pro v\u00edcefaktorov\u00e9 ov\u011b\u0159ov\u00e1n\u00ed (MFA).",
21
+ "totp_secret": "Toto nen\u00ed 6m\u00edstn\u00fd k\u00f3d. Je to \u0159et\u011bzec o d\u00e9lce p\u0159ibli\u017en\u011b 16 znak\u016f obsahuj\u00edc\u00ed sd\u00edlen\u00fd tajn\u00fd kl\u00ed\u010d, kter\u00fd umo\u017e\u0148uje va\u0161\u00ed ov\u011b\u0159ovac\u00ed aplikaci vygenerovat spr\u00e1vn\u00fd k\u00f3d zalo\u017een\u00fd na \u010dase ve spr\u00e1vn\u00fd \u010das. Viz dokumentace.",
21
22
  "username": "U\u017eivatelsk\u00e9 jm\u00e9no k va\u0161emu \u00fa\u010dtu pro energie"
22
23
  },
23
- "description": "N\u00ed\u017ee uveden\u00fd tajn\u00fd kl\u00ed\u010d TOTP nen\u00ed jedn\u00edm z 6m\u00edstn\u00fdch \u010d\u00edseln\u00fdch k\u00f3d\u016f zalo\u017een\u00fdch na \u010dase. Jedn\u00e1 se o \u0159et\u011bzec p\u0159ibli\u017en\u011b 16 znak\u016f obsahuj\u00edc\u00ed sd\u00edlen\u00fd tajn\u00fd kl\u00ed\u010d, kter\u00fd va\u0161\u00ed ov\u011b\u0159ovac\u00ed aplikaci umo\u017e\u0148uje vygenerovat spr\u00e1vn\u00fd \u010dasov\u00fd k\u00f3d ve vhodnou dobu. Pod\u00edvejte se do dokumentace."
24
+ "title": "Zadejte p\u0159ihla\u0161ovac\u00ed \u00fadaje"
25
+ },
26
+ "mfa_code": {
27
+ "data": {
28
+ "mfa_code": "Bezpe\u010dnostn\u00ed k\u00f3d"
29
+ },
30
+ "data_description": {
31
+ "mfa_code": "Obvykle \u0161estim\u00edstn\u00fd k\u00f3d"
32
+ },
33
+ "description": "Bezpe\u010dnostn\u00ed k\u00f3d byl odesl\u00e1n zvolenou metodou. Zadejte jej n\u00ed\u017ee pro dokon\u010den\u00ed p\u0159ihl\u00e1\u0161en\u00ed.",
34
+ "title": "Zadat bezpe\u010dnostn\u00ed k\u00f3d"
35
+ },
36
+ "mfa_options": {
37
+ "data": {
38
+ "mfa_method": "Metoda MFA"
39
+ },
40
+ "data_description": {
41
+ "mfa_method": "Jak z\u00edskat bezpe\u010dnostn\u00ed k\u00f3d"
42
+ },
43
+ "description": "V\u00e1\u0161 \u00fa\u010det vy\u017eaduje v\u00edcefaktorov\u00e9 ov\u011b\u0159ov\u00e1n\u00ed (MFA). Vyberte metodu, jak chcete, abyste obdr\u017eeli bezpe\u010dnostn\u00ed k\u00f3d.",
44
+ "title": "V\u00edcefaktorov\u00e9 ov\u011b\u0159ov\u00e1n\u00ed"
24
45
  },
25
46
  "reauth_confirm": {
26
47
  "data": {
@@ -30,20 +51,16 @@
30
51
  },
31
52
  "data_description": {
32
53
  "password": "Heslo k va\u0161emu \u00fa\u010dtu pro energie",
33
- "totp_secret": "Tajn\u00fd kl\u00ed\u010d TOTP pro v\u00e1\u0161 \u00fa\u010det pro energie, pou\u017e\u00edvan\u00fd pro v\u00edcefaktorov\u00e9 ov\u011b\u0159ov\u00e1n\u00ed (MFA).",
54
+ "totp_secret": "Toto nen\u00ed 6m\u00edstn\u00fd k\u00f3d. Je to \u0159et\u011bzec o d\u00e9lce p\u0159ibli\u017en\u011b 16 znak\u016f obsahuj\u00edc\u00ed sd\u00edlen\u00fd tajn\u00fd kl\u00ed\u010d, kter\u00fd umo\u017e\u0148uje va\u0161\u00ed ov\u011b\u0159ovac\u00ed aplikaci vygenerovat spr\u00e1vn\u00fd k\u00f3d zalo\u017een\u00fd na \u010dase ve spr\u00e1vn\u00fd \u010das. Viz dokumentace.",
34
55
  "username": "U\u017eivatelsk\u00e9 jm\u00e9no k va\u0161emu \u00fa\u010dtu pro energie"
35
56
  },
36
57
  "title": "Platnost ov\u011b\u0159en\u00ed pro {name} vypr\u0161ela"
37
58
  },
38
59
  "user": {
39
60
  "data": {
40
- "password": "Heslo",
41
- "username": "U\u017eivatelsk\u00e9 jm\u00e9no",
42
61
  "utility": "N\u00e1zev utility"
43
62
  },
44
63
  "data_description": {
45
- "password": "Heslo k va\u0161emu \u00fa\u010dtu pro energie",
46
- "username": "U\u017eivatelsk\u00e9 jm\u00e9no k va\u0161emu \u00fa\u010dtu pro energie",
47
64
  "utility": "N\u00e1zev va\u0161eho poskytovatele energi\u00ed"
48
65
  }
49
66
  }
@@ -6,10 +6,11 @@
6
6
  },
7
7
  "error": {
8
8
  "cannot_connect": "Verbindung fehlgeschlagen",
9
- "invalid_auth": "Ung\u00fcltige Authentifizierung"
9
+ "invalid_auth": "Ung\u00fcltige Authentifizierung",
10
+ "invalid_mfa_code": "Der Sicherheitscode ist falsch. Bitte versuche es erneut."
10
11
  },
11
12
  "step": {
12
- "mfa": {
13
+ "credentials": {
13
14
  "data": {
14
15
  "password": "Passwort",
15
16
  "totp_secret": "TOTP-Geheimnis",
@@ -17,10 +18,30 @@
17
18
  },
18
19
  "data_description": {
19
20
  "password": "Das Passwort f\u00fcr dein Versorgerkonto",
20
- "totp_secret": "Das TOTP-Geheimnis f\u00fcr dein Versorgerkonto, das f\u00fcr die Multi-Faktor-Authentifizierung (MFA) verwendet wird.",
21
+ "totp_secret": "Dies ist kein 6-stelliger Code. Es handelt sich um eine Folge von etwa 16 Zeichen, die das gemeinsame Geheimnis enth\u00e4lt, das es deiner Authentifizierungs-App erm\u00f6glicht, zum richtigen Zeitpunkt den richtigen zeitbasierten Code zu generieren. Weitere Informationen finden sich in der Dokumentation.",
21
22
  "username": "Der Benutzername f\u00fcr dein Versorgerkonto"
22
23
  },
23
- "description": "Das unten stehende TOTP-Geheimnis ist keiner der 6-stelligen zeitbasierten numerischen Codes. Dabei handelt es sich um eine etwa 16 Zeichen lange Zeichenfolge, die das gemeinsame Geheimnis enth\u00e4lt, das es deiner Authentifizierungs-App erm\u00f6glicht, zum richtigen Zeitpunkt den richtigen zeitbasierten Code zu generieren. Siehe Dokumentation."
24
+ "title": "Anmeldedaten eingeben"
25
+ },
26
+ "mfa_code": {
27
+ "data": {
28
+ "mfa_code": "Sicherheitscode"
29
+ },
30
+ "data_description": {
31
+ "mfa_code": "In der Regel ein 6-stelliger Code"
32
+ },
33
+ "description": "Ein Sicherheitscode wurde \u00fcber die von dir gew\u00e4hlte Methode gesendet. Bitte gib ihn unten ein, um die Anmeldung abzuschlie\u00dfen.",
34
+ "title": "Sicherheitscode eingeben"
35
+ },
36
+ "mfa_options": {
37
+ "data": {
38
+ "mfa_method": "MFA-Methode"
39
+ },
40
+ "data_description": {
41
+ "mfa_method": "Wie du deinen Sicherheitscode erh\u00e4ltst"
42
+ },
43
+ "description": "F\u00fcr dein Konto ist eine Multi-Faktor-Authentifizierung (MFA) erforderlich. W\u00e4hle eine Methode zum Erhalt deines Sicherheitscodes.",
44
+ "title": "Multi-Faktor-Authentifizierung"
24
45
  },
25
46
  "reauth_confirm": {
26
47
  "data": {
@@ -30,20 +51,16 @@
30
51
  },
31
52
  "data_description": {
32
53
  "password": "Das Passwort f\u00fcr dein Versorgerkonto",
33
- "totp_secret": "Das TOTP-Geheimnis f\u00fcr dein Versorgerkonto, das f\u00fcr die Multi-Faktor-Authentifizierung (MFA) verwendet wird.",
54
+ "totp_secret": "Dies ist kein 6-stelliger Code. Es handelt sich um eine Folge von etwa 16 Zeichen, die das gemeinsame Geheimnis enth\u00e4lt, das es deiner Authentifizierungs-App erm\u00f6glicht, zum richtigen Zeitpunkt den richtigen zeitbasierten Code zu generieren. Weitere Informationen finden sich in der Dokumentation.",
34
55
  "username": "Der Benutzername f\u00fcr dein Versorgerkonto"
35
56
  },
36
57
  "title": "Authentifizierung f\u00fcr {name} abgelaufen"
37
58
  },
38
59
  "user": {
39
60
  "data": {
40
- "password": "Passwort",
41
- "username": "Benutzername",
42
61
  "utility": "Name des Versorgers"
43
62
  },
44
63
  "data_description": {
45
- "password": "Das Passwort f\u00fcr dein Versorgerkonto",
46
- "username": "Der Benutzername f\u00fcr dein Versorgerkonto",
47
64
  "utility": "Der Name deines Versorgungsunternehmens"
48
65
  }
49
66
  }