homeassistant 2025.9.3__py3-none-any.whl → 2025.10.0b0__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.

Potentially problematic release.


This version of homeassistant might be problematic. Click here for more details.

Files changed (2841) hide show
  1. homeassistant/__main__.py +32 -26
  2. homeassistant/auth/mfa_modules/notify.py +1 -1
  3. homeassistant/auth/mfa_modules/totp.py +1 -1
  4. homeassistant/brands/fritzbox.json +1 -1
  5. homeassistant/brands/google.json +0 -1
  6. homeassistant/components/abode/translations/pt.json +2 -2
  7. homeassistant/components/abode/translations/uk.json +8 -0
  8. homeassistant/components/acaia/coordinator.py +2 -0
  9. homeassistant/components/acaia/manifest.json +1 -1
  10. homeassistant/components/acaia/translations/uk.json +21 -0
  11. homeassistant/components/accuweather/__init__.py +15 -12
  12. homeassistant/components/accuweather/config_flow.py +47 -0
  13. homeassistant/components/accuweather/const.py +2 -1
  14. homeassistant/components/accuweather/coordinator.py +82 -15
  15. homeassistant/components/accuweather/manifest.json +1 -2
  16. homeassistant/components/accuweather/strings.json +18 -0
  17. homeassistant/components/accuweather/translations/bg.json +3 -0
  18. homeassistant/components/accuweather/translations/ca.json +3 -0
  19. homeassistant/components/accuweather/translations/cs.json +18 -0
  20. homeassistant/components/accuweather/translations/de.json +18 -0
  21. homeassistant/components/accuweather/translations/el.json +3 -0
  22. homeassistant/components/accuweather/translations/en-GB.json +18 -0
  23. homeassistant/components/accuweather/translations/en.json +18 -0
  24. homeassistant/components/accuweather/translations/es.json +18 -0
  25. homeassistant/components/accuweather/translations/et.json +18 -0
  26. homeassistant/components/accuweather/translations/ga.json +3 -0
  27. homeassistant/components/accuweather/translations/he.json +9 -0
  28. homeassistant/components/accuweather/translations/it.json +3 -0
  29. homeassistant/components/accuweather/translations/lt.json +18 -0
  30. homeassistant/components/accuweather/translations/nl.json +3 -0
  31. homeassistant/components/accuweather/translations/pl.json +18 -0
  32. homeassistant/components/accuweather/translations/pt.json +18 -0
  33. homeassistant/components/accuweather/translations/ru.json +3 -0
  34. homeassistant/components/accuweather/translations/sk.json +18 -0
  35. homeassistant/components/accuweather/translations/zh-Hans.json +18 -0
  36. homeassistant/components/accuweather/translations/zh-Hant.json +18 -0
  37. homeassistant/components/accuweather/weather.py +36 -1
  38. homeassistant/components/aftership/translations/es.json +1 -1
  39. homeassistant/components/ai_task/__init__.py +9 -37
  40. homeassistant/components/ai_task/const.py +3 -3
  41. homeassistant/components/ai_task/entity.py +5 -0
  42. homeassistant/components/ai_task/http.py +1 -0
  43. homeassistant/components/ai_task/manifest.json +1 -1
  44. homeassistant/components/ai_task/media_source.py +20 -69
  45. homeassistant/components/ai_task/task.py +57 -69
  46. homeassistant/components/airgradient/translations/uk.json +7 -0
  47. homeassistant/components/airos/__init__.py +2 -2
  48. homeassistant/components/airos/binary_sensor.py +2 -2
  49. homeassistant/components/airos/config_flow.py +2 -2
  50. homeassistant/components/airos/coordinator.py +4 -4
  51. homeassistant/components/airos/manifest.json +1 -1
  52. homeassistant/components/airos/sensor.py +2 -2
  53. homeassistant/components/airos/translations/de.json +1 -1
  54. homeassistant/components/airos/translations/pt.json +1 -1
  55. homeassistant/components/airzone/manifest.json +1 -1
  56. homeassistant/components/airzone/select.py +19 -1
  57. homeassistant/components/airzone/strings.json +10 -0
  58. homeassistant/components/airzone/translations/cs.json +10 -0
  59. homeassistant/components/airzone/translations/de.json +10 -0
  60. homeassistant/components/airzone/translations/en-GB.json +10 -0
  61. homeassistant/components/airzone/translations/en.json +10 -0
  62. homeassistant/components/airzone/translations/sk.json +10 -0
  63. homeassistant/components/airzone/translations/zh-Hant.json +10 -0
  64. homeassistant/components/aladdin_connect/manifest.json +5 -0
  65. homeassistant/components/aladdin_connect/strings.json +3 -0
  66. homeassistant/components/aladdin_connect/translations/cs.json +3 -0
  67. homeassistant/components/aladdin_connect/translations/de.json +3 -0
  68. homeassistant/components/aladdin_connect/translations/en-GB.json +3 -0
  69. homeassistant/components/aladdin_connect/translations/en.json +3 -0
  70. homeassistant/components/aladdin_connect/translations/es.json +3 -0
  71. homeassistant/components/aladdin_connect/translations/et.json +3 -0
  72. homeassistant/components/aladdin_connect/translations/ga.json +3 -0
  73. homeassistant/components/aladdin_connect/translations/it.json +9 -0
  74. homeassistant/components/aladdin_connect/translations/lt.json +3 -0
  75. homeassistant/components/aladdin_connect/translations/pt.json +3 -0
  76. homeassistant/components/aladdin_connect/translations/ru.json +3 -0
  77. homeassistant/components/aladdin_connect/translations/sk.json +3 -0
  78. homeassistant/components/aladdin_connect/translations/zh-Hans.json +3 -0
  79. homeassistant/components/aladdin_connect/translations/zh-Hant.json +3 -0
  80. homeassistant/components/alarm_control_panel/__init__.py +1 -1
  81. homeassistant/components/alarmdecoder/translations/pt.json +1 -1
  82. homeassistant/components/alert/__init__.py +8 -2
  83. homeassistant/components/alert/entity.py +8 -2
  84. homeassistant/components/alert/reproduce_state.py +4 -1
  85. homeassistant/components/alexa_devices/binary_sensor.py +18 -6
  86. homeassistant/components/alexa_devices/coordinator.py +31 -1
  87. homeassistant/components/alexa_devices/notify.py +17 -7
  88. homeassistant/components/alexa_devices/quality_scale.yaml +2 -4
  89. homeassistant/components/alexa_devices/sensor.py +16 -6
  90. homeassistant/components/alexa_devices/strings.json +0 -4
  91. homeassistant/components/alexa_devices/switch.py +16 -6
  92. homeassistant/components/alexa_devices/translations/cs.json +0 -4
  93. homeassistant/components/alexa_devices/translations/de.json +0 -4
  94. homeassistant/components/alexa_devices/translations/en-GB.json +0 -4
  95. homeassistant/components/alexa_devices/translations/en.json +0 -4
  96. homeassistant/components/alexa_devices/translations/es.json +0 -4
  97. homeassistant/components/alexa_devices/translations/et.json +0 -4
  98. homeassistant/components/alexa_devices/translations/ga.json +0 -4
  99. homeassistant/components/alexa_devices/translations/lt.json +0 -4
  100. homeassistant/components/alexa_devices/translations/nl.json +2 -0
  101. homeassistant/components/alexa_devices/translations/pt.json +3 -7
  102. homeassistant/components/alexa_devices/translations/sk.json +0 -4
  103. homeassistant/components/alexa_devices/translations/zh-Hans.json +0 -4
  104. homeassistant/components/alexa_devices/translations/zh-Hant.json +0 -4
  105. homeassistant/components/amcrest/services.py +1 -1
  106. homeassistant/components/analytics/__init__.py +16 -1
  107. homeassistant/components/analytics/analytics.py +295 -42
  108. homeassistant/components/analytics/manifest.json +1 -1
  109. homeassistant/components/androidtv/__init__.py +12 -0
  110. homeassistant/components/androidtv/media_player.py +1 -39
  111. homeassistant/components/androidtv/services.py +66 -0
  112. homeassistant/components/androidtv_remote/config_flow.py +29 -22
  113. homeassistant/components/androidtv_remote/entity.py +2 -4
  114. homeassistant/components/androidtv_remote/manifest.json +1 -0
  115. homeassistant/components/androidtv_remote/media_player.py +10 -2
  116. homeassistant/components/androidtv_remote/quality_scale.yaml +78 -0
  117. homeassistant/components/androidtv_remote/strings.json +14 -1
  118. homeassistant/components/androidtv_remote/translations/cs.json +13 -0
  119. homeassistant/components/androidtv_remote/translations/de.json +13 -0
  120. homeassistant/components/androidtv_remote/translations/en-GB.json +13 -0
  121. homeassistant/components/androidtv_remote/translations/en.json +13 -0
  122. homeassistant/components/androidtv_remote/translations/es.json +13 -0
  123. homeassistant/components/androidtv_remote/translations/et.json +13 -0
  124. homeassistant/components/androidtv_remote/translations/fr.json +6 -0
  125. homeassistant/components/androidtv_remote/translations/ga.json +13 -0
  126. homeassistant/components/androidtv_remote/translations/it.json +8 -0
  127. homeassistant/components/androidtv_remote/translations/lt.json +13 -0
  128. homeassistant/components/androidtv_remote/translations/pt.json +13 -0
  129. homeassistant/components/androidtv_remote/translations/ru.json +1 -0
  130. homeassistant/components/androidtv_remote/translations/sk.json +13 -0
  131. homeassistant/components/androidtv_remote/translations/zh-Hans.json +13 -0
  132. homeassistant/components/androidtv_remote/translations/zh-Hant.json +13 -0
  133. homeassistant/components/anova/translations/pt.json +1 -1
  134. homeassistant/components/aosmith/__init__.py +1 -1
  135. homeassistant/components/aosmith/icons.json +5 -0
  136. homeassistant/components/aosmith/manifest.json +1 -1
  137. homeassistant/components/aosmith/select.py +70 -0
  138. homeassistant/components/aosmith/strings.json +11 -0
  139. homeassistant/components/aosmith/translations/bg.json +10 -0
  140. homeassistant/components/aosmith/translations/ca.json +7 -0
  141. homeassistant/components/aosmith/translations/cs.json +11 -0
  142. homeassistant/components/aosmith/translations/de.json +11 -0
  143. homeassistant/components/aosmith/translations/el.json +7 -0
  144. homeassistant/components/aosmith/translations/en-GB.json +11 -0
  145. homeassistant/components/aosmith/translations/en.json +11 -0
  146. homeassistant/components/aosmith/translations/es.json +11 -0
  147. homeassistant/components/aosmith/translations/et.json +11 -0
  148. homeassistant/components/aosmith/translations/ga.json +11 -0
  149. homeassistant/components/aosmith/translations/he.json +9 -0
  150. homeassistant/components/aosmith/translations/it.json +13 -0
  151. homeassistant/components/aosmith/translations/lt.json +11 -0
  152. homeassistant/components/aosmith/translations/nl.json +9 -0
  153. homeassistant/components/aosmith/translations/pl.json +13 -0
  154. homeassistant/components/aosmith/translations/pt.json +12 -1
  155. homeassistant/components/aosmith/translations/ru.json +11 -0
  156. homeassistant/components/aosmith/translations/sk.json +11 -0
  157. homeassistant/components/aosmith/translations/zh-Hans.json +11 -0
  158. homeassistant/components/aosmith/translations/zh-Hant.json +11 -0
  159. homeassistant/components/apcupsd/__init__.py +1 -1
  160. homeassistant/components/apcupsd/coordinator.py +1 -0
  161. homeassistant/components/apcupsd/manifest.json +2 -2
  162. homeassistant/components/apcupsd/quality_scale.yaml +1 -4
  163. homeassistant/components/apcupsd/sensor.py +5 -1
  164. homeassistant/components/aquacell/translations/pt.json +1 -1
  165. homeassistant/components/aseko_pool_live/translations/pt.json +2 -2
  166. homeassistant/components/assist_pipeline/__init__.py +2 -0
  167. homeassistant/components/assist_pipeline/acknowledge.mp3 +0 -0
  168. homeassistant/components/assist_pipeline/const.py +4 -0
  169. homeassistant/components/assist_pipeline/manifest.json +1 -1
  170. homeassistant/components/assist_pipeline/pipeline.py +105 -16
  171. homeassistant/components/assist_pipeline/select.py +26 -4
  172. homeassistant/components/assist_pipeline/strings.json +1 -1
  173. homeassistant/components/assist_pipeline/translations/cs.json +1 -0
  174. homeassistant/components/assist_pipeline/translations/de.json +1 -1
  175. homeassistant/components/assist_pipeline/translations/fr.json +1 -0
  176. homeassistant/components/assist_pipeline/translations/he.json +1 -0
  177. homeassistant/components/assist_pipeline/translations/it.json +1 -0
  178. homeassistant/components/assist_pipeline/translations/lt.json +1 -0
  179. homeassistant/components/assist_pipeline/translations/pt.json +2 -1
  180. homeassistant/components/assist_pipeline/translations/ru.json +1 -0
  181. homeassistant/components/assist_pipeline/translations/zh-Hans.json +1 -0
  182. homeassistant/components/assist_satellite/entity.py +1 -0
  183. homeassistant/components/assist_satellite/intent.py +0 -1
  184. homeassistant/components/assist_satellite/manifest.json +1 -1
  185. homeassistant/components/assist_satellite/translations/pt.json +3 -3
  186. homeassistant/components/asuswrt/bridge.py +21 -0
  187. homeassistant/components/asuswrt/manifest.json +1 -1
  188. homeassistant/components/asuswrt/router.py +3 -1
  189. homeassistant/components/asuswrt/translations/de.json +1 -1
  190. homeassistant/components/august/lock.py +13 -19
  191. homeassistant/components/august/manifest.json +1 -1
  192. homeassistant/components/aurora_abb_powerone/translations/uk.json +10 -0
  193. homeassistant/components/aussie_broadband/translations/uk.json +37 -0
  194. homeassistant/components/autarco/translations/pt.json +1 -1
  195. homeassistant/components/auth/login_flow.py +15 -4
  196. homeassistant/components/automation/translations/de.json +1 -1
  197. homeassistant/components/awair/translations/de.json +1 -1
  198. homeassistant/components/awair/translations/pt.json +2 -2
  199. homeassistant/components/awair/translations/uk.json +10 -0
  200. homeassistant/components/aws_s3/translations/pt.json +1 -1
  201. homeassistant/components/backup/http.py +3 -2
  202. homeassistant/components/backup/strings.json +3 -3
  203. homeassistant/components/backup/translations/bg.json +0 -3
  204. homeassistant/components/backup/translations/cs.json +3 -3
  205. homeassistant/components/backup/translations/de.json +3 -3
  206. homeassistant/components/backup/translations/el.json +0 -3
  207. homeassistant/components/backup/translations/en-GB.json +3 -3
  208. homeassistant/components/backup/translations/en.json +3 -3
  209. homeassistant/components/backup/translations/es.json +3 -3
  210. homeassistant/components/backup/translations/et.json +2 -2
  211. homeassistant/components/backup/translations/fr.json +0 -3
  212. homeassistant/components/backup/translations/fy.json +24 -0
  213. homeassistant/components/backup/translations/ga.json +0 -3
  214. homeassistant/components/backup/translations/he.json +0 -1
  215. homeassistant/components/backup/translations/hu.json +0 -3
  216. homeassistant/components/backup/translations/id.json +0 -3
  217. homeassistant/components/backup/translations/lt.json +1 -1
  218. homeassistant/components/backup/translations/nl.json +0 -3
  219. homeassistant/components/backup/translations/pl.json +0 -3
  220. homeassistant/components/backup/translations/pt.json +3 -3
  221. homeassistant/components/backup/translations/sv.json +0 -3
  222. homeassistant/components/backup/translations/tr.json +0 -3
  223. homeassistant/components/backup/translations/zh-Hans.json +3 -3
  224. homeassistant/components/backup/translations/zh-Hant.json +3 -3
  225. homeassistant/components/bang_olufsen/translations/pt.json +1 -1
  226. homeassistant/components/bayesian/binary_sensor.py +4 -6
  227. homeassistant/components/bayesian/translations/es.json +1 -1
  228. homeassistant/components/bayesian/translations/he.json +6 -3
  229. homeassistant/components/bayesian/translations/lt.json +3 -0
  230. homeassistant/components/bayesian/translations/pt.json +1 -1
  231. homeassistant/components/bayesian/translations/sv.json +1 -0
  232. homeassistant/components/binary_sensor/translations/es.json +1 -1
  233. homeassistant/components/binary_sensor/translations/mk.json +5 -0
  234. homeassistant/components/binary_sensor/translations/sv.json +1 -1
  235. homeassistant/components/blue_current/__init__.py +87 -5
  236. homeassistant/components/blue_current/const.py +6 -0
  237. homeassistant/components/blue_current/icons.json +5 -0
  238. homeassistant/components/blue_current/services.yaml +12 -0
  239. homeassistant/components/blue_current/strings.json +44 -0
  240. homeassistant/components/blue_current/translations/cs.json +44 -0
  241. homeassistant/components/blue_current/translations/de.json +44 -0
  242. homeassistant/components/blue_current/translations/en-GB.json +44 -0
  243. homeassistant/components/blue_current/translations/en.json +44 -0
  244. homeassistant/components/blue_current/translations/sk.json +44 -0
  245. homeassistant/components/blue_current/translations/zh-Hant.json +44 -0
  246. homeassistant/components/bluesound/manifest.json +1 -1
  247. homeassistant/components/bluesound/media_player.py +10 -4
  248. homeassistant/components/bluetooth/__init__.py +2 -0
  249. homeassistant/components/bluetooth/api.py +23 -3
  250. homeassistant/components/bluetooth/manager.py +109 -3
  251. homeassistant/components/bluetooth/manifest.json +1 -1
  252. homeassistant/components/bluetooth/strings.json +14 -0
  253. homeassistant/components/bluetooth/translations/bg.json +5 -0
  254. homeassistant/components/bluetooth/translations/cs.json +14 -0
  255. homeassistant/components/bluetooth/translations/de.json +14 -0
  256. homeassistant/components/bluetooth/translations/el.json +14 -0
  257. homeassistant/components/bluetooth/translations/en-GB.json +14 -0
  258. homeassistant/components/bluetooth/translations/en.json +14 -0
  259. homeassistant/components/bluetooth/translations/es.json +14 -0
  260. homeassistant/components/bluetooth/translations/et.json +14 -0
  261. homeassistant/components/bluetooth/translations/fr.json +14 -0
  262. homeassistant/components/bluetooth/translations/ga.json +14 -0
  263. homeassistant/components/bluetooth/translations/he.json +5 -0
  264. homeassistant/components/bluetooth/translations/lt.json +14 -0
  265. homeassistant/components/bluetooth/translations/pt.json +14 -0
  266. homeassistant/components/bluetooth/translations/ru.json +14 -0
  267. homeassistant/components/bluetooth/translations/sk.json +14 -0
  268. homeassistant/components/bluetooth/translations/zh-Hans.json +14 -0
  269. homeassistant/components/bluetooth/translations/zh-Hant.json +14 -0
  270. homeassistant/components/bluetooth/websocket_api.py +123 -24
  271. homeassistant/components/bmw_connected_drive/translations/uk.json +66 -0
  272. homeassistant/components/bosch_alarm/translations/pt.json +1 -1
  273. homeassistant/components/braviatv/diagnostics.py +2 -0
  274. homeassistant/components/bring/coordinator.py +1 -0
  275. homeassistant/components/bring/event.py +3 -2
  276. homeassistant/components/bring/strings.json +0 -4
  277. homeassistant/components/bring/translations/bg.json +0 -3
  278. homeassistant/components/bring/translations/ca.json +0 -3
  279. homeassistant/components/bring/translations/cs.json +0 -4
  280. homeassistant/components/bring/translations/de.json +0 -4
  281. homeassistant/components/bring/translations/el.json +0 -4
  282. homeassistant/components/bring/translations/en-GB.json +0 -4
  283. homeassistant/components/bring/translations/en.json +0 -4
  284. homeassistant/components/bring/translations/es-419.json +0 -4
  285. homeassistant/components/bring/translations/es.json +0 -4
  286. homeassistant/components/bring/translations/et.json +0 -4
  287. homeassistant/components/bring/translations/fi.json +0 -4
  288. homeassistant/components/bring/translations/ga.json +0 -4
  289. homeassistant/components/bring/translations/hr.json +0 -4
  290. homeassistant/components/bring/translations/hu.json +0 -4
  291. homeassistant/components/bring/translations/it.json +0 -3
  292. homeassistant/components/bring/translations/ja.json +0 -4
  293. homeassistant/components/bring/translations/ko.json +0 -3
  294. homeassistant/components/bring/translations/lt.json +0 -4
  295. homeassistant/components/bring/translations/pt-BR.json +0 -4
  296. homeassistant/components/bring/translations/pt.json +3 -7
  297. homeassistant/components/bring/translations/ru.json +0 -4
  298. homeassistant/components/bring/translations/sk.json +0 -4
  299. homeassistant/components/bring/translations/sv.json +0 -4
  300. homeassistant/components/bring/translations/tr.json +0 -4
  301. homeassistant/components/bring/translations/zh-Hans.json +0 -4
  302. homeassistant/components/bring/translations/zh-Hant.json +0 -4
  303. homeassistant/components/brother/__init__.py +34 -3
  304. homeassistant/components/brother/config_flow.py +57 -9
  305. homeassistant/components/brother/const.py +7 -0
  306. homeassistant/components/brother/manifest.json +1 -1
  307. homeassistant/components/brother/strings.json +44 -1
  308. homeassistant/components/brother/translations/bg.json +44 -1
  309. homeassistant/components/brother/translations/ca.json +21 -0
  310. homeassistant/components/brother/translations/cs.json +45 -2
  311. homeassistant/components/brother/translations/de.json +45 -2
  312. homeassistant/components/brother/translations/el.json +22 -1
  313. homeassistant/components/brother/translations/en-GB.json +45 -2
  314. homeassistant/components/brother/translations/en.json +45 -2
  315. homeassistant/components/brother/translations/es.json +45 -2
  316. homeassistant/components/brother/translations/et.json +45 -2
  317. homeassistant/components/brother/translations/ga.json +45 -2
  318. homeassistant/components/brother/translations/he.json +21 -0
  319. homeassistant/components/brother/translations/it.json +40 -1
  320. homeassistant/components/brother/translations/lt.json +45 -2
  321. homeassistant/components/brother/translations/nl.json +22 -1
  322. homeassistant/components/brother/translations/pl.json +45 -2
  323. homeassistant/components/brother/translations/pt.json +45 -2
  324. homeassistant/components/brother/translations/sk.json +45 -2
  325. homeassistant/components/brother/translations/sl.json +34 -2
  326. homeassistant/components/brother/translations/zh-Hans.json +45 -2
  327. homeassistant/components/brother/translations/zh-Hant.json +45 -2
  328. homeassistant/components/bsblan/strings.json +2 -2
  329. homeassistant/components/bthome/manifest.json +1 -1
  330. homeassistant/components/bthome/sensor.py +10 -0
  331. homeassistant/components/camera/__init__.py +9 -7
  332. homeassistant/components/camera/prefs.py +10 -1
  333. homeassistant/components/cast/discovery.py +2 -1
  334. homeassistant/components/cast/helpers.py +4 -1
  335. homeassistant/components/cast/media_player.py +3 -1
  336. homeassistant/components/climate/intent.py +0 -1
  337. homeassistant/components/climate/strings.json +3 -3
  338. homeassistant/components/climate/translations/fr.json +6 -0
  339. homeassistant/components/climate/translations/mk.json +13 -0
  340. homeassistant/components/climate/translations/uk.json +5 -1
  341. homeassistant/components/cloud/http_api.py +109 -0
  342. homeassistant/components/cloud/subscription.py +5 -1
  343. homeassistant/components/comelit/binary_sensor.py +17 -4
  344. homeassistant/components/comelit/coordinator.py +57 -4
  345. homeassistant/components/comelit/cover.py +15 -4
  346. homeassistant/components/comelit/light.py +15 -4
  347. homeassistant/components/comelit/quality_scale.yaml +2 -6
  348. homeassistant/components/comelit/sensor.py +35 -17
  349. homeassistant/components/comelit/switch.py +19 -0
  350. homeassistant/components/compit/__init__.py +45 -0
  351. homeassistant/components/compit/climate.py +265 -0
  352. homeassistant/components/compit/config_flow.py +110 -0
  353. homeassistant/components/compit/const.py +4 -0
  354. homeassistant/components/compit/coordinator.py +43 -0
  355. homeassistant/components/compit/manifest.json +12 -0
  356. homeassistant/components/compit/quality_scale.yaml +86 -0
  357. homeassistant/components/compit/strings.json +35 -0
  358. homeassistant/components/compit/translations/ca.json +25 -0
  359. homeassistant/components/compit/translations/cs.json +35 -0
  360. homeassistant/components/compit/translations/de.json +35 -0
  361. homeassistant/components/compit/translations/en-GB.json +35 -0
  362. homeassistant/components/compit/translations/en.json +35 -0
  363. homeassistant/components/compit/translations/es.json +35 -0
  364. homeassistant/components/compit/translations/et.json +35 -0
  365. homeassistant/components/compit/translations/ga.json +35 -0
  366. homeassistant/components/compit/translations/he.json +25 -0
  367. homeassistant/components/compit/translations/lt.json +35 -0
  368. homeassistant/components/compit/translations/mk.json +20 -0
  369. homeassistant/components/compit/translations/nl.json +25 -0
  370. homeassistant/components/compit/translations/pt.json +35 -0
  371. homeassistant/components/compit/translations/ru.json +35 -0
  372. homeassistant/components/compit/translations/sk.json +35 -0
  373. homeassistant/components/compit/translations/zh-Hans.json +35 -0
  374. homeassistant/components/compit/translations/zh-Hant.json +35 -0
  375. homeassistant/components/conversation/__init__.py +11 -14
  376. homeassistant/components/conversation/agent_manager.py +40 -4
  377. homeassistant/components/conversation/chat_log.py +6 -2
  378. homeassistant/components/conversation/const.py +0 -3
  379. homeassistant/components/conversation/default_agent.py +74 -80
  380. homeassistant/components/conversation/http.py +7 -5
  381. homeassistant/components/conversation/icons.json +5 -0
  382. homeassistant/components/conversation/manifest.json +3 -3
  383. homeassistant/components/conversation/models.py +4 -0
  384. homeassistant/components/conversation/trigger.py +32 -4
  385. homeassistant/components/cookidoo/translations/pt.json +2 -2
  386. homeassistant/components/cover/translations/pl.json +3 -1
  387. homeassistant/components/crownstone/translations/pt.json +1 -1
  388. homeassistant/components/cync/__init__.py +58 -0
  389. homeassistant/components/cync/config_flow.py +118 -0
  390. homeassistant/components/cync/const.py +9 -0
  391. homeassistant/components/cync/coordinator.py +87 -0
  392. homeassistant/components/cync/entity.py +45 -0
  393. homeassistant/components/cync/light.py +180 -0
  394. homeassistant/components/cync/manifest.json +11 -0
  395. homeassistant/components/cync/quality_scale.yaml +69 -0
  396. homeassistant/components/cync/strings.json +32 -0
  397. homeassistant/components/cync/translations/de.json +32 -0
  398. homeassistant/components/cync/translations/en-GB.json +32 -0
  399. homeassistant/components/cync/translations/en.json +32 -0
  400. homeassistant/components/cync/translations/he.json +20 -0
  401. homeassistant/components/datadog/translations/es.json +1 -1
  402. homeassistant/components/datadog/translations/pt.json +1 -1
  403. homeassistant/components/debugpy/manifest.json +1 -1
  404. homeassistant/components/deconz/sensor.py +1 -1
  405. homeassistant/components/deconz/translations/de.json +1 -1
  406. homeassistant/components/default_config/manifest.json +2 -0
  407. homeassistant/components/deluge/const.py +2 -0
  408. homeassistant/components/deluge/coordinator.py +37 -8
  409. homeassistant/components/deluge/icons.json +12 -0
  410. homeassistant/components/deluge/sensor.py +12 -0
  411. homeassistant/components/deluge/strings.json +8 -0
  412. homeassistant/components/deluge/translations/cs.json +8 -0
  413. homeassistant/components/deluge/translations/de.json +8 -0
  414. homeassistant/components/deluge/translations/en-GB.json +8 -0
  415. homeassistant/components/deluge/translations/en.json +8 -0
  416. homeassistant/components/deluge/translations/es.json +8 -0
  417. homeassistant/components/deluge/translations/et.json +8 -0
  418. homeassistant/components/deluge/translations/ga.json +8 -0
  419. homeassistant/components/deluge/translations/lt.json +8 -0
  420. homeassistant/components/deluge/translations/nl.json +8 -0
  421. homeassistant/components/deluge/translations/pt.json +8 -0
  422. homeassistant/components/deluge/translations/sk.json +8 -0
  423. homeassistant/components/deluge/translations/zh-Hans.json +8 -0
  424. homeassistant/components/deluge/translations/zh-Hant.json +8 -0
  425. homeassistant/components/derivative/diagnostics.py +23 -0
  426. homeassistant/components/derivative/manifest.json +2 -1
  427. homeassistant/components/derivative/sensor.py +50 -3
  428. homeassistant/components/device_tracker/translations/mk.json +9 -0
  429. homeassistant/components/devolo_home_network/translations/de.json +1 -1
  430. homeassistant/components/discovergy/translations/pt.json +1 -1
  431. homeassistant/components/dlna_dmr/translations/de.json +1 -1
  432. homeassistant/components/doorbird/translations/pt.json +3 -1
  433. homeassistant/components/drop_connect/translations/mk.json +11 -0
  434. homeassistant/components/droplet/__init__.py +37 -0
  435. homeassistant/components/droplet/config_flow.py +118 -0
  436. homeassistant/components/droplet/const.py +11 -0
  437. homeassistant/components/droplet/coordinator.py +84 -0
  438. homeassistant/components/droplet/icons.json +15 -0
  439. homeassistant/components/droplet/manifest.json +11 -0
  440. homeassistant/components/droplet/quality_scale.yaml +72 -0
  441. homeassistant/components/droplet/sensor.py +131 -0
  442. homeassistant/components/droplet/strings.json +46 -0
  443. homeassistant/components/droplet/translations/bg.json +33 -0
  444. homeassistant/components/droplet/translations/ca.json +17 -0
  445. homeassistant/components/droplet/translations/cs.json +52 -0
  446. homeassistant/components/droplet/translations/de.json +52 -0
  447. homeassistant/components/droplet/translations/el.json +17 -0
  448. homeassistant/components/droplet/translations/en-GB.json +52 -0
  449. homeassistant/components/droplet/translations/en.json +52 -0
  450. homeassistant/components/droplet/translations/es.json +52 -0
  451. homeassistant/components/droplet/translations/et.json +52 -0
  452. homeassistant/components/droplet/translations/ga.json +52 -0
  453. homeassistant/components/droplet/translations/he.json +17 -0
  454. homeassistant/components/droplet/translations/lt.json +52 -0
  455. homeassistant/components/droplet/translations/nl.json +17 -0
  456. homeassistant/components/droplet/translations/pt.json +52 -0
  457. homeassistant/components/droplet/translations/sk.json +52 -0
  458. homeassistant/components/droplet/translations/zh-Hans.json +52 -0
  459. homeassistant/components/droplet/translations/zh-Hant.json +52 -0
  460. homeassistant/components/ecobee/strings.json +0 -4
  461. homeassistant/components/ecobee/translations/bg.json +0 -3
  462. homeassistant/components/ecobee/translations/ca.json +0 -3
  463. homeassistant/components/ecobee/translations/cs.json +0 -4
  464. homeassistant/components/ecobee/translations/de.json +1 -5
  465. homeassistant/components/ecobee/translations/el.json +0 -4
  466. homeassistant/components/ecobee/translations/en-GB.json +0 -4
  467. homeassistant/components/ecobee/translations/en.json +0 -4
  468. homeassistant/components/ecobee/translations/es.json +0 -4
  469. homeassistant/components/ecobee/translations/et.json +0 -4
  470. homeassistant/components/ecobee/translations/ga.json +0 -4
  471. homeassistant/components/ecobee/translations/he.json +0 -3
  472. homeassistant/components/ecobee/translations/hu.json +0 -4
  473. homeassistant/components/ecobee/translations/it.json +0 -3
  474. homeassistant/components/ecobee/translations/ja.json +0 -3
  475. homeassistant/components/ecobee/translations/lt.json +0 -4
  476. homeassistant/components/ecobee/translations/mk.json +0 -9
  477. homeassistant/components/ecobee/translations/nl.json +0 -7
  478. homeassistant/components/ecobee/translations/pt-BR.json +0 -7
  479. homeassistant/components/ecobee/translations/pt.json +0 -4
  480. homeassistant/components/ecobee/translations/ru.json +0 -4
  481. homeassistant/components/ecobee/translations/sk.json +0 -4
  482. homeassistant/components/ecobee/translations/sv.json +0 -4
  483. homeassistant/components/ecobee/translations/tr.json +0 -3
  484. homeassistant/components/ecobee/translations/zh-Hans.json +0 -4
  485. homeassistant/components/ecobee/translations/zh-Hant.json +0 -4
  486. homeassistant/components/econet/translations/pt.json +1 -1
  487. homeassistant/components/ecovacs/manifest.json +1 -1
  488. homeassistant/components/ecovacs/number.py +28 -1
  489. homeassistant/components/ecovacs/select.py +5 -1
  490. homeassistant/components/ecovacs/strings.json +7 -2
  491. homeassistant/components/ecovacs/translations/ca.json +0 -1
  492. homeassistant/components/ecovacs/translations/cs.json +6 -1
  493. homeassistant/components/ecovacs/translations/de.json +6 -1
  494. homeassistant/components/ecovacs/translations/el.json +0 -1
  495. homeassistant/components/ecovacs/translations/en-GB.json +6 -1
  496. homeassistant/components/ecovacs/translations/en.json +6 -1
  497. homeassistant/components/ecovacs/translations/es.json +0 -1
  498. homeassistant/components/ecovacs/translations/et.json +0 -1
  499. homeassistant/components/ecovacs/translations/fi.json +0 -1
  500. homeassistant/components/ecovacs/translations/fr.json +0 -1
  501. homeassistant/components/ecovacs/translations/ga.json +0 -1
  502. homeassistant/components/ecovacs/translations/hu.json +0 -1
  503. homeassistant/components/ecovacs/translations/ja.json +0 -1
  504. homeassistant/components/ecovacs/translations/lt.json +6 -1
  505. homeassistant/components/ecovacs/translations/pt.json +3 -2
  506. homeassistant/components/ecovacs/translations/ru.json +0 -1
  507. homeassistant/components/ecovacs/translations/sk.json +6 -1
  508. homeassistant/components/ecovacs/translations/sv.json +0 -1
  509. homeassistant/components/ecovacs/translations/tr.json +0 -1
  510. homeassistant/components/ecovacs/translations/zh-Hans.json +6 -1
  511. homeassistant/components/ecovacs/translations/zh-Hant.json +6 -1
  512. homeassistant/components/ecovacs/util.py +0 -5
  513. homeassistant/components/ecowitt/sensor.py +33 -0
  514. homeassistant/components/edl21/translations/uk.json +10 -0
  515. homeassistant/components/efergy/translations/uk.json +25 -0
  516. homeassistant/components/ekeybionyx/__init__.py +24 -0
  517. homeassistant/components/ekeybionyx/application_credentials.py +14 -0
  518. homeassistant/components/ekeybionyx/config_flow.py +271 -0
  519. homeassistant/components/ekeybionyx/const.py +13 -0
  520. homeassistant/components/ekeybionyx/event.py +70 -0
  521. homeassistant/components/ekeybionyx/manifest.json +11 -0
  522. homeassistant/components/ekeybionyx/quality_scale.yaml +92 -0
  523. homeassistant/components/ekeybionyx/strings.json +66 -0
  524. homeassistant/components/ekeybionyx/translations/cs.json +66 -0
  525. homeassistant/components/ekeybionyx/translations/de.json +66 -0
  526. homeassistant/components/ekeybionyx/translations/en-GB.json +66 -0
  527. homeassistant/components/ekeybionyx/translations/en.json +66 -0
  528. homeassistant/components/ekeybionyx/translations/he.json +24 -0
  529. homeassistant/components/ekeybionyx/translations/sk.json +66 -0
  530. homeassistant/components/ekeybionyx/translations/zh-Hant.json +66 -0
  531. homeassistant/components/elkm1/config_flow.py +85 -3
  532. homeassistant/components/elkm1/sensor.py +25 -1
  533. homeassistant/components/elkm1/strings.json +22 -10
  534. homeassistant/components/elkm1/translations/bg.json +7 -3
  535. homeassistant/components/elkm1/translations/ca.json +9 -4
  536. homeassistant/components/elkm1/translations/cs.json +23 -11
  537. homeassistant/components/elkm1/translations/de.json +27 -15
  538. homeassistant/components/elkm1/translations/el.json +9 -9
  539. homeassistant/components/elkm1/translations/en-GB.json +23 -11
  540. homeassistant/components/elkm1/translations/en.json +23 -11
  541. homeassistant/components/elkm1/translations/es-419.json +0 -4
  542. homeassistant/components/elkm1/translations/es.json +21 -9
  543. homeassistant/components/elkm1/translations/et.json +22 -10
  544. homeassistant/components/elkm1/translations/fi.json +0 -9
  545. homeassistant/components/elkm1/translations/fr.json +0 -4
  546. homeassistant/components/elkm1/translations/ga.json +12 -10
  547. homeassistant/components/elkm1/translations/he.json +8 -2
  548. homeassistant/components/elkm1/translations/hu.json +0 -10
  549. homeassistant/components/elkm1/translations/id.json +0 -4
  550. homeassistant/components/elkm1/translations/it.json +0 -9
  551. homeassistant/components/elkm1/translations/ja.json +0 -10
  552. homeassistant/components/elkm1/translations/ko.json +0 -9
  553. homeassistant/components/elkm1/translations/lb.json +0 -4
  554. homeassistant/components/elkm1/translations/lt.json +23 -11
  555. homeassistant/components/elkm1/translations/nb.json +0 -4
  556. homeassistant/components/elkm1/translations/nl.json +9 -4
  557. homeassistant/components/elkm1/translations/pl.json +0 -4
  558. homeassistant/components/elkm1/translations/pt-BR.json +0 -4
  559. homeassistant/components/elkm1/translations/pt.json +23 -11
  560. homeassistant/components/elkm1/translations/ro.json +0 -4
  561. homeassistant/components/elkm1/translations/ru.json +21 -11
  562. homeassistant/components/elkm1/translations/sk.json +23 -11
  563. homeassistant/components/elkm1/translations/sl.json +0 -2
  564. homeassistant/components/elkm1/translations/sv.json +0 -10
  565. homeassistant/components/elkm1/translations/tr.json +0 -10
  566. homeassistant/components/elkm1/translations/uk.json +7 -4
  567. homeassistant/components/elkm1/translations/vi.json +0 -7
  568. homeassistant/components/elkm1/translations/zh-Hans.json +15 -3
  569. homeassistant/components/elkm1/translations/zh-Hant.json +23 -11
  570. homeassistant/components/emoncms/manifest.json +1 -1
  571. homeassistant/components/emoncms_history/manifest.json +1 -1
  572. homeassistant/components/energy/sensor.py +3 -1
  573. homeassistant/components/energy/translations/sv.json +4 -4
  574. homeassistant/components/energy/validate.py +2 -0
  575. homeassistant/components/enocean/manifest.json +1 -1
  576. homeassistant/components/enphase_envoy/diagnostics.py +0 -1
  577. homeassistant/components/environment_canada/translations/uk.json +7 -0
  578. homeassistant/components/eq3btsmart/__init__.py +1 -1
  579. homeassistant/components/eq3btsmart/manifest.json +1 -1
  580. homeassistant/components/esphome/__init__.py +1 -0
  581. homeassistant/components/esphome/assist_satellite.py +57 -20
  582. homeassistant/components/esphome/climate.py +38 -5
  583. homeassistant/components/esphome/config_flow.py +40 -22
  584. homeassistant/components/esphome/const.py +2 -0
  585. homeassistant/components/esphome/entry_data.py +47 -12
  586. homeassistant/components/esphome/icons.json +6 -0
  587. homeassistant/components/esphome/lock.py +3 -1
  588. homeassistant/components/esphome/manager.py +1 -1
  589. homeassistant/components/esphome/manifest.json +1 -1
  590. homeassistant/components/esphome/select.py +84 -26
  591. homeassistant/components/esphome/strings.json +7 -6
  592. homeassistant/components/esphome/translations/ca.json +1 -2
  593. homeassistant/components/esphome/translations/cs.json +4 -2
  594. homeassistant/components/esphome/translations/da.json +1 -2
  595. homeassistant/components/esphome/translations/de.json +5 -4
  596. homeassistant/components/esphome/translations/el.json +1 -10
  597. homeassistant/components/esphome/translations/en-GB.json +6 -5
  598. homeassistant/components/esphome/translations/en.json +6 -5
  599. homeassistant/components/esphome/translations/es.json +5 -4
  600. homeassistant/components/esphome/translations/et.json +5 -4
  601. homeassistant/components/esphome/translations/fi.json +1 -2
  602. homeassistant/components/esphome/translations/fr.json +7 -7
  603. homeassistant/components/esphome/translations/ga.json +2 -7
  604. homeassistant/components/esphome/translations/he.json +4 -4
  605. homeassistant/components/esphome/translations/hu.json +1 -10
  606. homeassistant/components/esphome/translations/id.json +1 -2
  607. homeassistant/components/esphome/translations/it.json +2 -3
  608. homeassistant/components/esphome/translations/ja.json +1 -3
  609. homeassistant/components/esphome/translations/ko.json +1 -2
  610. homeassistant/components/esphome/translations/lt.json +7 -5
  611. homeassistant/components/esphome/translations/lv.json +1 -2
  612. homeassistant/components/esphome/translations/mk.json +0 -1
  613. homeassistant/components/esphome/translations/nb.json +1 -2
  614. homeassistant/components/esphome/translations/nl.json +1 -3
  615. homeassistant/components/esphome/translations/pl.json +1 -2
  616. homeassistant/components/esphome/translations/pt-BR.json +1 -2
  617. homeassistant/components/esphome/translations/pt.json +8 -6
  618. homeassistant/components/esphome/translations/ro.json +1 -2
  619. homeassistant/components/esphome/translations/ru.json +6 -4
  620. homeassistant/components/esphome/translations/sk.json +4 -3
  621. homeassistant/components/esphome/translations/sl.json +1 -10
  622. homeassistant/components/esphome/translations/sv.json +1 -10
  623. homeassistant/components/esphome/translations/tr.json +1 -3
  624. homeassistant/components/esphome/translations/uk.json +3 -3
  625. homeassistant/components/esphome/translations/vi.json +1 -3
  626. homeassistant/components/esphome/translations/zh-Hans.json +7 -5
  627. homeassistant/components/esphome/translations/zh-Hant.json +5 -4
  628. homeassistant/components/eufylife_ble/translations/uk.json +13 -0
  629. homeassistant/components/evil_genius_labs/manifest.json +1 -1
  630. homeassistant/components/evohome/__init__.py +3 -3
  631. homeassistant/components/ezviz/sensor.py +8 -38
  632. homeassistant/components/ezviz/strings.json +0 -12
  633. homeassistant/components/ezviz/translations/cs.json +0 -12
  634. homeassistant/components/ezviz/translations/de.json +0 -12
  635. homeassistant/components/ezviz/translations/en-GB.json +0 -12
  636. homeassistant/components/ezviz/translations/en.json +0 -12
  637. homeassistant/components/ezviz/translations/es.json +0 -12
  638. homeassistant/components/ezviz/translations/et.json +0 -12
  639. homeassistant/components/ezviz/translations/ga.json +0 -12
  640. homeassistant/components/ezviz/translations/it.json +0 -12
  641. homeassistant/components/ezviz/translations/lt.json +0 -12
  642. homeassistant/components/ezviz/translations/pt.json +0 -12
  643. homeassistant/components/ezviz/translations/sk.json +0 -12
  644. homeassistant/components/ezviz/translations/sv.json +0 -9
  645. homeassistant/components/ezviz/translations/zh-Hans.json +0 -12
  646. homeassistant/components/ezviz/translations/zh-Hant.json +0 -12
  647. homeassistant/components/fan/translations/ca.json +3 -0
  648. homeassistant/components/feedreader/manifest.json +1 -1
  649. homeassistant/components/feedreader/translations/es.json +1 -1
  650. homeassistant/components/fibaro/translations/pt.json +1 -1
  651. homeassistant/components/file/__init__.py +11 -0
  652. homeassistant/components/file/const.py +4 -0
  653. homeassistant/components/file/icons.json +7 -0
  654. homeassistant/components/file/services.py +88 -0
  655. homeassistant/components/file/services.yaml +14 -0
  656. homeassistant/components/file/strings.json +31 -0
  657. homeassistant/components/file/translations/cs.json +31 -0
  658. homeassistant/components/file/translations/de.json +31 -0
  659. homeassistant/components/file/translations/en-GB.json +31 -0
  660. homeassistant/components/file/translations/en.json +31 -0
  661. homeassistant/components/file/translations/fr.json +31 -0
  662. homeassistant/components/file/translations/lt.json +31 -0
  663. homeassistant/components/file/translations/sk.json +31 -0
  664. homeassistant/components/file/translations/zh-Hans.json +31 -0
  665. homeassistant/components/file/translations/zh-Hant.json +31 -0
  666. homeassistant/components/fivem/translations/uk.json +7 -0
  667. homeassistant/components/fjaraskupan/manifest.json +1 -1
  668. homeassistant/components/fjaraskupan/translations/uk.json +15 -0
  669. homeassistant/components/flexit/climate.py +7 -7
  670. homeassistant/components/flexit_bacnet/sensor.py +5 -0
  671. homeassistant/components/flipr/translations/pt.json +1 -1
  672. homeassistant/components/flipr/translations/uk.json +21 -0
  673. homeassistant/components/flo/coordinator.py +1 -1
  674. homeassistant/components/flux_led/translations/uk.json +12 -0
  675. homeassistant/components/foscam/__init__.py +2 -1
  676. homeassistant/components/foscam/coordinator.py +12 -2
  677. homeassistant/components/foscam/entity.py +2 -0
  678. homeassistant/components/foscam/icons.json +8 -0
  679. homeassistant/components/foscam/manifest.json +1 -1
  680. homeassistant/components/foscam/number.py +93 -0
  681. homeassistant/components/foscam/strings.json +8 -0
  682. homeassistant/components/foscam/switch.py +0 -2
  683. homeassistant/components/foscam/translations/cs.json +8 -0
  684. homeassistant/components/foscam/translations/de.json +8 -0
  685. homeassistant/components/foscam/translations/en-GB.json +8 -0
  686. homeassistant/components/foscam/translations/en.json +8 -0
  687. homeassistant/components/foscam/translations/es.json +8 -0
  688. homeassistant/components/foscam/translations/et.json +8 -0
  689. homeassistant/components/foscam/translations/ga.json +8 -0
  690. homeassistant/components/foscam/translations/it.json +10 -0
  691. homeassistant/components/foscam/translations/lt.json +8 -0
  692. homeassistant/components/foscam/translations/pt.json +8 -0
  693. homeassistant/components/foscam/translations/sk.json +8 -0
  694. homeassistant/components/foscam/translations/zh-Hans.json +8 -0
  695. homeassistant/components/foscam/translations/zh-Hant.json +8 -0
  696. homeassistant/components/freebox/translations/de.json +1 -1
  697. homeassistant/components/fritz/coordinator.py +2 -2
  698. homeassistant/components/fritz/entity.py +1 -1
  699. homeassistant/components/fritz/manifest.json +2 -2
  700. homeassistant/components/fritz/sensor.py +18 -0
  701. homeassistant/components/fritz/services.py +4 -3
  702. homeassistant/components/fritz/strings.json +7 -4
  703. homeassistant/components/fritz/switch.py +1 -1
  704. homeassistant/components/fritz/translations/bg.json +3 -0
  705. homeassistant/components/fritz/translations/cs.json +3 -0
  706. homeassistant/components/fritz/translations/de.json +3 -0
  707. homeassistant/components/fritz/translations/en-GB.json +3 -0
  708. homeassistant/components/fritz/translations/en.json +3 -0
  709. homeassistant/components/fritz/translations/es.json +3 -0
  710. homeassistant/components/fritz/translations/et.json +3 -0
  711. homeassistant/components/fritz/translations/ga.json +3 -0
  712. homeassistant/components/fritz/translations/it.json +3 -0
  713. homeassistant/components/fritz/translations/lt.json +3 -0
  714. homeassistant/components/fritz/translations/nl.json +3 -0
  715. homeassistant/components/fritz/translations/pt.json +3 -0
  716. homeassistant/components/fritz/translations/ru.json +9 -2
  717. homeassistant/components/fritz/translations/sk.json +3 -0
  718. homeassistant/components/fritz/translations/zh-Hans.json +3 -0
  719. homeassistant/components/fritz/translations/zh-Hant.json +3 -0
  720. homeassistant/components/fritzbox/button.py +1 -1
  721. homeassistant/components/fritzbox/manifest.json +1 -1
  722. homeassistant/components/fritzbox/strings.json +2 -2
  723. homeassistant/components/fritzbox/translations/fr.json +2 -1
  724. homeassistant/components/fritzbox_callmonitor/__init__.py +2 -2
  725. homeassistant/components/fritzbox_callmonitor/const.py +1 -1
  726. homeassistant/components/fritzbox_callmonitor/manifest.json +2 -2
  727. homeassistant/components/fritzbox_callmonitor/strings.json +1 -1
  728. homeassistant/components/fronius/translations/de.json +4 -4
  729. homeassistant/components/fronius/translations/mk.json +1 -0
  730. homeassistant/components/fronius/translations/pt.json +4 -4
  731. homeassistant/components/fronius/translations/vi.json +9 -0
  732. homeassistant/components/frontend/__init__.py +35 -13
  733. homeassistant/components/frontend/manifest.json +1 -1
  734. homeassistant/components/fully_kiosk/translations/uk.json +17 -0
  735. homeassistant/components/fyta/translations/pt.json +1 -1
  736. homeassistant/components/gardena_bluetooth/translations/de.json +1 -1
  737. homeassistant/components/generic_thermostat/manifest.json +2 -1
  738. homeassistant/components/generic_thermostat/translations/mk.json +20 -0
  739. homeassistant/components/geniushub/__init__.py +1 -1
  740. homeassistant/components/geocaching/entity.py +39 -0
  741. homeassistant/components/geocaching/icons.json +18 -0
  742. homeassistant/components/geocaching/sensor.py +95 -14
  743. homeassistant/components/geocaching/strings.json +30 -5
  744. homeassistant/components/geocaching/translations/cs.json +20 -5
  745. homeassistant/components/geocaching/translations/de.json +20 -5
  746. homeassistant/components/geocaching/translations/en-GB.json +20 -5
  747. homeassistant/components/geocaching/translations/en.json +20 -5
  748. homeassistant/components/geocaching/translations/es.json +20 -5
  749. homeassistant/components/geocaching/translations/et.json +20 -5
  750. homeassistant/components/geocaching/translations/ga.json +20 -5
  751. homeassistant/components/geocaching/translations/lt.json +20 -5
  752. homeassistant/components/geocaching/translations/nl.json +20 -5
  753. homeassistant/components/geocaching/translations/pt.json +20 -5
  754. homeassistant/components/geocaching/translations/ru.json +14 -5
  755. homeassistant/components/geocaching/translations/sk.json +20 -5
  756. homeassistant/components/geocaching/translations/zh-Hans.json +20 -5
  757. homeassistant/components/geocaching/translations/zh-Hant.json +20 -5
  758. homeassistant/components/github/translations/pt.json +1 -1
  759. homeassistant/components/go2rtc/__init__.py +30 -1
  760. homeassistant/components/google/__init__.py +0 -8
  761. homeassistant/components/google/config_flow.py +7 -3
  762. homeassistant/components/google_cloud/__init__.py +0 -6
  763. homeassistant/components/google_cloud/config_flow.py +2 -2
  764. homeassistant/components/google_cloud/strings.json +1 -1
  765. homeassistant/components/google_cloud/translations/pt.json +1 -0
  766. homeassistant/components/google_cloud/translations/uk.json +32 -0
  767. homeassistant/components/google_generative_ai_conversation/__init__.py +18 -18
  768. homeassistant/components/google_generative_ai_conversation/ai_task.py +117 -6
  769. homeassistant/components/google_generative_ai_conversation/const.py +1 -0
  770. homeassistant/components/google_generative_ai_conversation/entity.py +171 -38
  771. homeassistant/components/google_generative_ai_conversation/manifest.json +2 -2
  772. homeassistant/components/google_generative_ai_conversation/services.yaml +0 -4
  773. homeassistant/components/google_generative_ai_conversation/strings.json +8 -13
  774. homeassistant/components/google_generative_ai_conversation/translations/bg.json +1 -6
  775. homeassistant/components/google_generative_ai_conversation/translations/ca.json +1 -6
  776. homeassistant/components/google_generative_ai_conversation/translations/cs.json +5 -10
  777. homeassistant/components/google_generative_ai_conversation/translations/de.json +5 -10
  778. homeassistant/components/google_generative_ai_conversation/translations/el.json +1 -14
  779. homeassistant/components/google_generative_ai_conversation/translations/en-GB.json +5 -10
  780. homeassistant/components/google_generative_ai_conversation/translations/en.json +5 -10
  781. homeassistant/components/google_generative_ai_conversation/translations/es.json +5 -10
  782. homeassistant/components/google_generative_ai_conversation/translations/et.json +5 -10
  783. homeassistant/components/google_generative_ai_conversation/translations/fi.json +1 -7
  784. homeassistant/components/google_generative_ai_conversation/translations/fr.json +5 -10
  785. homeassistant/components/google_generative_ai_conversation/translations/ga.json +1 -14
  786. homeassistant/components/google_generative_ai_conversation/translations/he.json +2 -13
  787. homeassistant/components/google_generative_ai_conversation/translations/hu.json +1 -14
  788. homeassistant/components/google_generative_ai_conversation/translations/id.json +1 -8
  789. homeassistant/components/google_generative_ai_conversation/translations/it.json +1 -7
  790. homeassistant/components/google_generative_ai_conversation/translations/ja.json +1 -7
  791. homeassistant/components/google_generative_ai_conversation/translations/lt.json +5 -10
  792. homeassistant/components/google_generative_ai_conversation/translations/nb.json +1 -6
  793. homeassistant/components/google_generative_ai_conversation/translations/nl.json +0 -5
  794. homeassistant/components/google_generative_ai_conversation/translations/pl.json +1 -7
  795. homeassistant/components/google_generative_ai_conversation/translations/pt-BR.json +1 -11
  796. homeassistant/components/google_generative_ai_conversation/translations/pt.json +5 -10
  797. homeassistant/components/google_generative_ai_conversation/translations/ru.json +5 -10
  798. homeassistant/components/google_generative_ai_conversation/translations/sk.json +5 -10
  799. homeassistant/components/google_generative_ai_conversation/translations/sl.json +1 -14
  800. homeassistant/components/google_generative_ai_conversation/translations/sv.json +1 -14
  801. homeassistant/components/google_generative_ai_conversation/translations/tr.json +1 -14
  802. homeassistant/components/google_generative_ai_conversation/translations/zh-Hans.json +5 -10
  803. homeassistant/components/google_generative_ai_conversation/translations/zh-Hant.json +5 -10
  804. homeassistant/components/google_mail/services.py +1 -1
  805. homeassistant/components/google_photos/media_source.py +1 -2
  806. homeassistant/components/google_photos/translations/uk.json +51 -0
  807. homeassistant/components/govee_light_local/manifest.json +1 -1
  808. homeassistant/components/group/translations/mk.json +1 -0
  809. homeassistant/components/growatt_server/translations/ru.json +6 -0
  810. homeassistant/components/guardian/translations/de.json +1 -1
  811. homeassistant/components/habitica/binary_sensor.py +0 -2
  812. homeassistant/components/habitica/const.py +1 -0
  813. homeassistant/components/habitica/manifest.json +1 -1
  814. homeassistant/components/habitica/sensor.py +22 -0
  815. homeassistant/components/habitica/services.py +11 -0
  816. homeassistant/components/habitica/services.yaml +11 -0
  817. homeassistant/components/habitica/strings.json +42 -1
  818. homeassistant/components/habitica/translations/ca.json +7 -0
  819. homeassistant/components/habitica/translations/cs.json +41 -0
  820. homeassistant/components/habitica/translations/de.json +41 -0
  821. homeassistant/components/habitica/translations/el.json +17 -0
  822. homeassistant/components/habitica/translations/en-GB.json +41 -0
  823. homeassistant/components/habitica/translations/en.json +41 -0
  824. homeassistant/components/habitica/translations/es.json +41 -0
  825. homeassistant/components/habitica/translations/et.json +41 -0
  826. homeassistant/components/habitica/translations/ga.json +17 -0
  827. homeassistant/components/habitica/translations/it.json +1 -0
  828. homeassistant/components/habitica/translations/lt.json +41 -0
  829. homeassistant/components/habitica/translations/pt.json +41 -0
  830. homeassistant/components/habitica/translations/sk.json +41 -0
  831. homeassistant/components/habitica/translations/zh-Hans.json +41 -0
  832. homeassistant/components/habitica/translations/zh-Hant.json +41 -0
  833. homeassistant/components/habitica/util.py +9 -0
  834. homeassistant/components/hassio/__init__.py +2 -1
  835. homeassistant/components/hassio/const.py +21 -0
  836. homeassistant/components/hassio/coordinator.py +13 -0
  837. homeassistant/components/hassio/http.py +1 -1
  838. homeassistant/components/hassio/ingress.py +21 -14
  839. homeassistant/components/hassio/issues.py +30 -5
  840. homeassistant/components/hassio/manifest.json +1 -1
  841. homeassistant/components/hassio/repairs.py +3 -13
  842. homeassistant/components/hassio/strings.json +16 -4
  843. homeassistant/components/hassio/switch.py +90 -0
  844. homeassistant/components/hassio/translations/ca.json +0 -2
  845. homeassistant/components/hassio/translations/cs.json +15 -3
  846. homeassistant/components/hassio/translations/de.json +23 -11
  847. homeassistant/components/hassio/translations/el.json +8 -8
  848. homeassistant/components/hassio/translations/en-GB.json +16 -4
  849. homeassistant/components/hassio/translations/en.json +16 -4
  850. homeassistant/components/hassio/translations/es.json +12 -4
  851. homeassistant/components/hassio/translations/et.json +12 -4
  852. homeassistant/components/hassio/translations/fi.json +0 -2
  853. homeassistant/components/hassio/translations/fr.json +12 -8
  854. homeassistant/components/hassio/translations/fy.json +3 -0
  855. homeassistant/components/hassio/translations/ga.json +8 -8
  856. homeassistant/components/hassio/translations/he.json +16 -4
  857. homeassistant/components/hassio/translations/hu.json +0 -8
  858. homeassistant/components/hassio/translations/id.json +0 -8
  859. homeassistant/components/hassio/translations/it.json +0 -2
  860. homeassistant/components/hassio/translations/ja.json +0 -8
  861. homeassistant/components/hassio/translations/ko.json +0 -7
  862. homeassistant/components/hassio/translations/lt.json +16 -4
  863. homeassistant/components/hassio/translations/mk.json +8 -0
  864. homeassistant/components/hassio/translations/nb.json +0 -2
  865. homeassistant/components/hassio/translations/nl.json +8 -8
  866. homeassistant/components/hassio/translations/pl.json +0 -2
  867. homeassistant/components/hassio/translations/pt-BR.json +0 -2
  868. homeassistant/components/hassio/translations/pt.json +12 -4
  869. homeassistant/components/hassio/translations/ro.json +0 -2
  870. homeassistant/components/hassio/translations/ru.json +12 -4
  871. homeassistant/components/hassio/translations/sk.json +15 -3
  872. homeassistant/components/hassio/translations/sl.json +0 -8
  873. homeassistant/components/hassio/translations/sv.json +0 -8
  874. homeassistant/components/hassio/translations/tr.json +0 -8
  875. homeassistant/components/hassio/translations/uk.json +3 -2
  876. homeassistant/components/hassio/translations/vi.json +0 -8
  877. homeassistant/components/hassio/translations/zh-Hans.json +16 -4
  878. homeassistant/components/hassio/translations/zh-Hant.json +16 -4
  879. homeassistant/components/heos/media_player.py +2 -2
  880. homeassistant/components/here_travel_time/__init__.py +31 -1
  881. homeassistant/components/here_travel_time/sensor.py +1 -1
  882. homeassistant/components/here_travel_time/strings.json +6 -0
  883. homeassistant/components/here_travel_time/translations/cs.json +6 -0
  884. homeassistant/components/here_travel_time/translations/de.json +6 -0
  885. homeassistant/components/here_travel_time/translations/en-GB.json +6 -0
  886. homeassistant/components/here_travel_time/translations/en.json +6 -0
  887. homeassistant/components/here_travel_time/translations/fr.json +2 -1
  888. homeassistant/components/here_travel_time/translations/lt.json +6 -0
  889. homeassistant/components/here_travel_time/translations/sk.json +6 -0
  890. homeassistant/components/here_travel_time/translations/zh-Hans.json +6 -0
  891. homeassistant/components/here_travel_time/translations/zh-Hant.json +6 -0
  892. homeassistant/components/history_stats/config_flow.py +65 -29
  893. homeassistant/components/history_stats/diagnostics.py +23 -0
  894. homeassistant/components/history_stats/strings.json +10 -0
  895. homeassistant/components/history_stats/translations/bg.json +6 -0
  896. homeassistant/components/history_stats/translations/ca.json +10 -0
  897. homeassistant/components/history_stats/translations/cs.json +10 -0
  898. homeassistant/components/history_stats/translations/de.json +10 -0
  899. homeassistant/components/history_stats/translations/el.json +10 -0
  900. homeassistant/components/history_stats/translations/en-GB.json +10 -0
  901. homeassistant/components/history_stats/translations/en.json +10 -0
  902. homeassistant/components/history_stats/translations/es.json +10 -0
  903. homeassistant/components/history_stats/translations/et.json +10 -0
  904. homeassistant/components/history_stats/translations/ga.json +10 -0
  905. homeassistant/components/history_stats/translations/he.json +10 -0
  906. homeassistant/components/history_stats/translations/it.json +10 -0
  907. homeassistant/components/history_stats/translations/lt.json +10 -0
  908. homeassistant/components/history_stats/translations/pt.json +10 -0
  909. homeassistant/components/history_stats/translations/ru.json +10 -0
  910. homeassistant/components/history_stats/translations/sk.json +10 -0
  911. homeassistant/components/history_stats/translations/zh-Hans.json +10 -0
  912. homeassistant/components/history_stats/translations/zh-Hant.json +10 -0
  913. homeassistant/components/holiday/manifest.json +1 -1
  914. homeassistant/components/home_connect/__init__.py +0 -1
  915. homeassistant/components/home_connect/application_credentials.py +0 -10
  916. homeassistant/components/home_connect/coordinator.py +0 -14
  917. homeassistant/components/home_connect/icons.json +8 -8
  918. homeassistant/components/home_connect/strings.json +0 -5
  919. homeassistant/components/home_connect/translations/ca.json +0 -5
  920. homeassistant/components/home_connect/translations/cs.json +0 -5
  921. homeassistant/components/home_connect/translations/de.json +0 -5
  922. homeassistant/components/home_connect/translations/el.json +0 -5
  923. homeassistant/components/home_connect/translations/en-GB.json +0 -5
  924. homeassistant/components/home_connect/translations/en.json +0 -5
  925. homeassistant/components/home_connect/translations/es.json +0 -5
  926. homeassistant/components/home_connect/translations/et.json +0 -5
  927. homeassistant/components/home_connect/translations/fr.json +0 -5
  928. homeassistant/components/home_connect/translations/ga.json +0 -5
  929. homeassistant/components/home_connect/translations/hu.json +0 -5
  930. homeassistant/components/home_connect/translations/it.json +0 -5
  931. homeassistant/components/home_connect/translations/ja.json +0 -5
  932. homeassistant/components/home_connect/translations/lt.json +0 -5
  933. homeassistant/components/home_connect/translations/nl.json +0 -5
  934. homeassistant/components/home_connect/translations/pt.json +3 -8
  935. homeassistant/components/home_connect/translations/ru.json +0 -5
  936. homeassistant/components/home_connect/translations/sk.json +0 -5
  937. homeassistant/components/home_connect/translations/sv.json +0 -5
  938. homeassistant/components/home_connect/translations/tr.json +0 -5
  939. homeassistant/components/home_connect/translations/zh-Hans.json +0 -5
  940. homeassistant/components/home_connect/translations/zh-Hant.json +0 -5
  941. homeassistant/components/homeassistant/__init__.py +1 -1
  942. homeassistant/components/homeassistant/exposed_entities.py +1 -1
  943. homeassistant/components/homeassistant/scene.py +1 -1
  944. homeassistant/components/homeassistant/translations/uk.json +4 -0
  945. homeassistant/components/homeassistant_connect_zbt2/__init__.py +71 -0
  946. homeassistant/components/homeassistant_connect_zbt2/config_flow.py +207 -0
  947. homeassistant/components/homeassistant_connect_zbt2/const.py +19 -0
  948. homeassistant/components/homeassistant_connect_zbt2/hardware.py +42 -0
  949. homeassistant/components/homeassistant_connect_zbt2/manifest.json +18 -0
  950. homeassistant/components/homeassistant_connect_zbt2/quality_scale.yaml +68 -0
  951. homeassistant/components/homeassistant_connect_zbt2/strings.json +228 -0
  952. homeassistant/components/homeassistant_connect_zbt2/translations/bg.json +76 -0
  953. homeassistant/components/homeassistant_connect_zbt2/translations/ca.json +144 -0
  954. homeassistant/components/homeassistant_connect_zbt2/translations/cs.json +228 -0
  955. homeassistant/components/homeassistant_connect_zbt2/translations/de.json +228 -0
  956. homeassistant/components/homeassistant_connect_zbt2/translations/el.json +166 -0
  957. homeassistant/components/homeassistant_connect_zbt2/translations/en-GB.json +228 -0
  958. homeassistant/components/homeassistant_connect_zbt2/translations/en.json +228 -0
  959. homeassistant/components/homeassistant_connect_zbt2/translations/es.json +228 -0
  960. homeassistant/components/homeassistant_connect_zbt2/translations/et.json +228 -0
  961. homeassistant/components/homeassistant_connect_zbt2/translations/fr.json +166 -0
  962. homeassistant/components/homeassistant_connect_zbt2/translations/ga.json +228 -0
  963. homeassistant/components/homeassistant_connect_zbt2/translations/he.json +165 -0
  964. homeassistant/components/homeassistant_connect_zbt2/translations/lt.json +228 -0
  965. homeassistant/components/homeassistant_connect_zbt2/translations/mk.json +80 -0
  966. homeassistant/components/homeassistant_connect_zbt2/translations/nl.json +136 -0
  967. homeassistant/components/homeassistant_connect_zbt2/translations/pl.json +50 -0
  968. homeassistant/components/homeassistant_connect_zbt2/translations/pt.json +228 -0
  969. homeassistant/components/homeassistant_connect_zbt2/translations/ru.json +163 -0
  970. homeassistant/components/homeassistant_connect_zbt2/translations/sk.json +228 -0
  971. homeassistant/components/homeassistant_connect_zbt2/translations/zh-Hans.json +228 -0
  972. homeassistant/components/homeassistant_connect_zbt2/translations/zh-Hant.json +228 -0
  973. homeassistant/components/homeassistant_connect_zbt2/update.py +214 -0
  974. homeassistant/components/homeassistant_connect_zbt2/util.py +22 -0
  975. homeassistant/components/homeassistant_hardware/firmware_config_flow.py +352 -257
  976. homeassistant/components/homeassistant_hardware/manifest.json +1 -1
  977. homeassistant/components/homeassistant_hardware/strings.json +35 -4
  978. homeassistant/components/homeassistant_hardware/translations/bg.json +0 -12
  979. homeassistant/components/homeassistant_hardware/translations/ca.json +0 -7
  980. homeassistant/components/homeassistant_hardware/translations/cs.json +35 -4
  981. homeassistant/components/homeassistant_hardware/translations/de.json +35 -4
  982. homeassistant/components/homeassistant_hardware/translations/el.json +0 -8
  983. homeassistant/components/homeassistant_hardware/translations/en-GB.json +35 -4
  984. homeassistant/components/homeassistant_hardware/translations/en.json +35 -4
  985. homeassistant/components/homeassistant_hardware/translations/es.json +35 -4
  986. homeassistant/components/homeassistant_hardware/translations/et.json +35 -4
  987. homeassistant/components/homeassistant_hardware/translations/fr.json +4 -4
  988. homeassistant/components/homeassistant_hardware/translations/ga.json +32 -5
  989. homeassistant/components/homeassistant_hardware/translations/he.json +0 -8
  990. homeassistant/components/homeassistant_hardware/translations/hu.json +0 -8
  991. homeassistant/components/homeassistant_hardware/translations/id.json +0 -8
  992. homeassistant/components/homeassistant_hardware/translations/it.json +0 -9
  993. homeassistant/components/homeassistant_hardware/translations/ja.json +0 -8
  994. homeassistant/components/homeassistant_hardware/translations/ko.json +0 -8
  995. homeassistant/components/homeassistant_hardware/translations/lt.json +35 -4
  996. homeassistant/components/homeassistant_hardware/translations/mk.json +41 -0
  997. homeassistant/components/homeassistant_hardware/translations/nl.json +0 -7
  998. homeassistant/components/homeassistant_hardware/translations/pl.json +0 -12
  999. homeassistant/components/homeassistant_hardware/translations/pt.json +36 -5
  1000. homeassistant/components/homeassistant_hardware/translations/ru.json +35 -4
  1001. homeassistant/components/homeassistant_hardware/translations/sk.json +35 -4
  1002. homeassistant/components/homeassistant_hardware/translations/sv.json +0 -8
  1003. homeassistant/components/homeassistant_hardware/translations/tr.json +0 -8
  1004. homeassistant/components/homeassistant_hardware/translations/zh-Hans.json +35 -4
  1005. homeassistant/components/homeassistant_hardware/translations/zh-Hant.json +35 -4
  1006. homeassistant/components/homeassistant_sky_connect/config_flow.py +1 -1
  1007. homeassistant/components/homeassistant_sky_connect/strings.json +64 -2
  1008. homeassistant/components/homeassistant_sky_connect/translations/cs.json +70 -8
  1009. homeassistant/components/homeassistant_sky_connect/translations/de.json +70 -8
  1010. homeassistant/components/homeassistant_sky_connect/translations/en-GB.json +70 -8
  1011. homeassistant/components/homeassistant_sky_connect/translations/en.json +70 -8
  1012. homeassistant/components/homeassistant_sky_connect/translations/es.json +70 -8
  1013. homeassistant/components/homeassistant_sky_connect/translations/et.json +70 -8
  1014. homeassistant/components/homeassistant_sky_connect/translations/fr.json +8 -8
  1015. homeassistant/components/homeassistant_sky_connect/translations/ga.json +64 -2
  1016. homeassistant/components/homeassistant_sky_connect/translations/lt.json +70 -8
  1017. homeassistant/components/homeassistant_sky_connect/translations/mk.json +76 -0
  1018. homeassistant/components/homeassistant_sky_connect/translations/pt.json +72 -10
  1019. homeassistant/components/homeassistant_sky_connect/translations/ru.json +70 -8
  1020. homeassistant/components/homeassistant_sky_connect/translations/sk.json +70 -8
  1021. homeassistant/components/homeassistant_sky_connect/translations/zh-Hans.json +70 -8
  1022. homeassistant/components/homeassistant_sky_connect/translations/zh-Hant.json +70 -8
  1023. homeassistant/components/homeassistant_yellow/config_flow.py +2 -2
  1024. homeassistant/components/homeassistant_yellow/strings.json +32 -1
  1025. homeassistant/components/homeassistant_yellow/translations/cs.json +35 -4
  1026. homeassistant/components/homeassistant_yellow/translations/de.json +35 -4
  1027. homeassistant/components/homeassistant_yellow/translations/en-GB.json +35 -4
  1028. homeassistant/components/homeassistant_yellow/translations/en.json +35 -4
  1029. homeassistant/components/homeassistant_yellow/translations/es.json +35 -4
  1030. homeassistant/components/homeassistant_yellow/translations/et.json +35 -4
  1031. homeassistant/components/homeassistant_yellow/translations/fa.json +11 -0
  1032. homeassistant/components/homeassistant_yellow/translations/fr.json +4 -4
  1033. homeassistant/components/homeassistant_yellow/translations/ga.json +32 -1
  1034. homeassistant/components/homeassistant_yellow/translations/lt.json +35 -4
  1035. homeassistant/components/homeassistant_yellow/translations/mk.json +41 -0
  1036. homeassistant/components/homeassistant_yellow/translations/pt.json +36 -5
  1037. homeassistant/components/homeassistant_yellow/translations/ru.json +35 -4
  1038. homeassistant/components/homeassistant_yellow/translations/sk.json +35 -4
  1039. homeassistant/components/homeassistant_yellow/translations/zh-Hans.json +35 -4
  1040. homeassistant/components/homeassistant_yellow/translations/zh-Hant.json +35 -4
  1041. homeassistant/components/homee/alarm_control_panel.py +18 -7
  1042. homeassistant/components/homee/binary_sensor.py +20 -8
  1043. homeassistant/components/homee/button.py +16 -6
  1044. homeassistant/components/homee/climate.py +16 -6
  1045. homeassistant/components/homee/cover.py +14 -6
  1046. homeassistant/components/homee/event.py +16 -6
  1047. homeassistant/components/homee/fan.py +16 -6
  1048. homeassistant/components/homee/helpers.py +31 -0
  1049. homeassistant/components/homee/light.py +15 -5
  1050. homeassistant/components/homee/lock.py +18 -8
  1051. homeassistant/components/homee/manifest.json +1 -1
  1052. homeassistant/components/homee/number.py +16 -6
  1053. homeassistant/components/homee/quality_scale.yaml +1 -1
  1054. homeassistant/components/homee/select.py +16 -6
  1055. homeassistant/components/homee/sensor.py +40 -23
  1056. homeassistant/components/homee/siren.py +18 -7
  1057. homeassistant/components/homee/switch.py +25 -16
  1058. homeassistant/components/homee/translations/pt.json +1 -1
  1059. homeassistant/components/homee/valve.py +16 -6
  1060. homeassistant/components/homekit/type_switches.py +56 -4
  1061. homeassistant/components/homekit_controller/connection.py +41 -21
  1062. homeassistant/components/homekit_controller/manifest.json +1 -1
  1063. homeassistant/components/homekit_controller/translations/mk.json +11 -0
  1064. homeassistant/components/homekit_controller/utils.py +1 -1
  1065. homeassistant/components/homematic/strings.json +5 -5
  1066. homeassistant/components/homematic/translations/fr.json +1 -0
  1067. homeassistant/components/homematic/translations/ru.json +5 -0
  1068. homeassistant/components/homematicip_cloud/services.py +1 -1
  1069. homeassistant/components/homewizard/number.py +1 -1
  1070. homeassistant/components/homewizard/sensor.py +11 -8
  1071. homeassistant/components/honeywell/strings.json +1 -1
  1072. homeassistant/components/honeywell/translations/cs.json +1 -1
  1073. homeassistant/components/honeywell/translations/de.json +1 -1
  1074. homeassistant/components/honeywell/translations/el.json +0 -3
  1075. homeassistant/components/honeywell/translations/en-GB.json +1 -1
  1076. homeassistant/components/honeywell/translations/en.json +1 -1
  1077. homeassistant/components/honeywell/translations/es.json +1 -1
  1078. homeassistant/components/honeywell/translations/fi.json +0 -3
  1079. homeassistant/components/honeywell/translations/ga.json +0 -3
  1080. homeassistant/components/honeywell/translations/gl.json +0 -3
  1081. homeassistant/components/honeywell/translations/hu.json +0 -3
  1082. homeassistant/components/honeywell/translations/ja.json +0 -3
  1083. homeassistant/components/honeywell/translations/lt.json +1 -1
  1084. homeassistant/components/honeywell/translations/sk.json +1 -1
  1085. homeassistant/components/honeywell/translations/sv.json +0 -3
  1086. homeassistant/components/honeywell/translations/tr.json +0 -3
  1087. homeassistant/components/honeywell/translations/zh-Hans.json +1 -1
  1088. homeassistant/components/html5/translations/pt.json +1 -1
  1089. homeassistant/components/html5/translations/uk.json +29 -0
  1090. homeassistant/components/huawei_lte/quality_scale.yaml +88 -0
  1091. homeassistant/components/hue/event.py +28 -3
  1092. homeassistant/components/hue/manifest.json +2 -2
  1093. homeassistant/components/hue/services.py +1 -1
  1094. homeassistant/components/hue/strings.json +1 -1
  1095. homeassistant/components/hue/v2/binary_sensor.py +127 -4
  1096. homeassistant/components/hue/v2/device.py +7 -4
  1097. homeassistant/components/hue/v2/group.py +11 -2
  1098. homeassistant/components/hue/v2/helpers.py +6 -5
  1099. homeassistant/components/hue/v2/light.py +25 -15
  1100. homeassistant/components/hue/v2/sensor.py +67 -2
  1101. homeassistant/components/humidifier/translations/mk.json +13 -0
  1102. homeassistant/components/hunterdouglas_powerview/manifest.json +1 -1
  1103. homeassistant/components/husqvarna_automower/coordinator.py +19 -20
  1104. homeassistant/components/husqvarna_automower/translations/pt.json +1 -1
  1105. homeassistant/components/husqvarna_automower_ble/config_flow.py +43 -35
  1106. homeassistant/components/icloud/manifest.json +1 -1
  1107. homeassistant/components/icloud/strings.json +8 -7
  1108. homeassistant/components/icloud/translations/bg.json +3 -0
  1109. homeassistant/components/icloud/translations/ca.json +3 -6
  1110. homeassistant/components/icloud/translations/cs.json +11 -10
  1111. homeassistant/components/icloud/translations/da.json +1 -4
  1112. homeassistant/components/icloud/translations/de.json +10 -9
  1113. homeassistant/components/icloud/translations/el.json +3 -8
  1114. homeassistant/components/icloud/translations/en-GB.json +11 -10
  1115. homeassistant/components/icloud/translations/en.json +11 -10
  1116. homeassistant/components/icloud/translations/es-419.json +1 -6
  1117. homeassistant/components/icloud/translations/es.json +11 -10
  1118. homeassistant/components/icloud/translations/et.json +11 -10
  1119. homeassistant/components/icloud/translations/fi.json +1 -5
  1120. homeassistant/components/icloud/translations/fr.json +3 -8
  1121. homeassistant/components/icloud/translations/ga.json +2 -8
  1122. homeassistant/components/icloud/translations/he.json +3 -4
  1123. homeassistant/components/icloud/translations/hu.json +1 -10
  1124. homeassistant/components/icloud/translations/id.json +1 -9
  1125. homeassistant/components/icloud/translations/it.json +1 -9
  1126. homeassistant/components/icloud/translations/ja.json +1 -9
  1127. homeassistant/components/icloud/translations/ko.json +1 -5
  1128. homeassistant/components/icloud/translations/lb.json +1 -4
  1129. homeassistant/components/icloud/translations/lt.json +11 -10
  1130. homeassistant/components/icloud/translations/mk.json +14 -0
  1131. homeassistant/components/icloud/translations/nb.json +1 -4
  1132. homeassistant/components/icloud/translations/nl.json +2 -7
  1133. homeassistant/components/icloud/translations/pl.json +1 -4
  1134. homeassistant/components/icloud/translations/pt-BR.json +1 -5
  1135. homeassistant/components/icloud/translations/pt.json +12 -11
  1136. homeassistant/components/icloud/translations/ro.json +1 -4
  1137. homeassistant/components/icloud/translations/ru.json +11 -10
  1138. homeassistant/components/icloud/translations/sk.json +11 -10
  1139. homeassistant/components/icloud/translations/sl.json +1 -5
  1140. homeassistant/components/icloud/translations/sv.json +1 -10
  1141. homeassistant/components/icloud/translations/tr.json +1 -10
  1142. homeassistant/components/icloud/translations/uk.json +1 -5
  1143. homeassistant/components/icloud/translations/vi.json +2 -6
  1144. homeassistant/components/icloud/translations/zh-Hans.json +10 -9
  1145. homeassistant/components/icloud/translations/zh-Hant.json +11 -10
  1146. homeassistant/components/image/__init__.py +14 -0
  1147. homeassistant/components/image_upload/__init__.py +2 -2
  1148. homeassistant/components/image_upload/const.py +1 -0
  1149. homeassistant/components/image_upload/media_source.py +13 -2
  1150. homeassistant/components/imeon_inverter/const.py +8 -0
  1151. homeassistant/components/imeon_inverter/icons.json +5 -0
  1152. homeassistant/components/imeon_inverter/manifest.json +1 -1
  1153. homeassistant/components/imeon_inverter/select.py +72 -0
  1154. homeassistant/components/imeon_inverter/strings.json +12 -1
  1155. homeassistant/components/imeon_inverter/translations/bg.json +9 -0
  1156. homeassistant/components/imeon_inverter/translations/cs.json +12 -1
  1157. homeassistant/components/imeon_inverter/translations/de.json +12 -1
  1158. homeassistant/components/imeon_inverter/translations/en-GB.json +12 -1
  1159. homeassistant/components/imeon_inverter/translations/en.json +12 -1
  1160. homeassistant/components/imeon_inverter/translations/es.json +12 -1
  1161. homeassistant/components/imeon_inverter/translations/et.json +12 -1
  1162. homeassistant/components/imeon_inverter/translations/fr.json +0 -1
  1163. homeassistant/components/imeon_inverter/translations/ga.json +12 -1
  1164. homeassistant/components/imeon_inverter/translations/it.json +10 -0
  1165. homeassistant/components/imeon_inverter/translations/lt.json +12 -1
  1166. homeassistant/components/imeon_inverter/translations/pt.json +12 -1
  1167. homeassistant/components/imeon_inverter/translations/sk.json +12 -1
  1168. homeassistant/components/imeon_inverter/translations/zh-Hans.json +12 -1
  1169. homeassistant/components/imeon_inverter/translations/zh-Hant.json +12 -1
  1170. homeassistant/components/imgw_pib/manifest.json +1 -1
  1171. homeassistant/components/immich/media_source.py +1 -2
  1172. homeassistant/components/improv_ble/strings.json +1 -1
  1173. homeassistant/components/improv_ble/translations/ca.json +0 -1
  1174. homeassistant/components/improv_ble/translations/cs.json +1 -1
  1175. homeassistant/components/improv_ble/translations/de.json +5 -5
  1176. homeassistant/components/improv_ble/translations/el.json +0 -1
  1177. homeassistant/components/improv_ble/translations/en-GB.json +1 -1
  1178. homeassistant/components/improv_ble/translations/en.json +1 -1
  1179. homeassistant/components/improv_ble/translations/es.json +1 -1
  1180. homeassistant/components/improv_ble/translations/et.json +1 -1
  1181. homeassistant/components/improv_ble/translations/fi.json +0 -1
  1182. homeassistant/components/improv_ble/translations/fr.json +1 -1
  1183. homeassistant/components/improv_ble/translations/ga.json +0 -1
  1184. homeassistant/components/improv_ble/translations/gl.json +1 -2
  1185. homeassistant/components/improv_ble/translations/he.json +0 -1
  1186. homeassistant/components/improv_ble/translations/hu.json +0 -1
  1187. homeassistant/components/improv_ble/translations/id.json +0 -1
  1188. homeassistant/components/improv_ble/translations/it.json +0 -1
  1189. homeassistant/components/improv_ble/translations/ja.json +0 -1
  1190. homeassistant/components/improv_ble/translations/ko.json +0 -1
  1191. homeassistant/components/improv_ble/translations/lt.json +1 -1
  1192. homeassistant/components/improv_ble/translations/pt.json +1 -1
  1193. homeassistant/components/improv_ble/translations/ru.json +1 -1
  1194. homeassistant/components/improv_ble/translations/sk.json +1 -1
  1195. homeassistant/components/improv_ble/translations/sv.json +0 -1
  1196. homeassistant/components/improv_ble/translations/tr.json +0 -1
  1197. homeassistant/components/improv_ble/translations/zh-Hans.json +1 -1
  1198. homeassistant/components/improv_ble/translations/zh-Hant.json +1 -1
  1199. homeassistant/components/input_select/services.yaml +4 -1
  1200. homeassistant/components/insteon/translations/de.json +1 -1
  1201. homeassistant/components/integration/__init__.py +1 -8
  1202. homeassistant/components/integration/config_flow.py +1 -0
  1203. homeassistant/components/intellifire/translations/pt.json +1 -1
  1204. homeassistant/components/intent/manifest.json +1 -1
  1205. homeassistant/components/ipma/translations/uk.json +3 -0
  1206. homeassistant/components/irm_kmi/__init__.py +40 -0
  1207. homeassistant/components/irm_kmi/config_flow.py +132 -0
  1208. homeassistant/components/irm_kmi/const.py +102 -0
  1209. homeassistant/components/irm_kmi/coordinator.py +95 -0
  1210. homeassistant/components/irm_kmi/data.py +17 -0
  1211. homeassistant/components/irm_kmi/entity.py +28 -0
  1212. homeassistant/components/irm_kmi/manifest.json +13 -0
  1213. homeassistant/components/irm_kmi/quality_scale.yaml +86 -0
  1214. homeassistant/components/irm_kmi/strings.json +50 -0
  1215. homeassistant/components/irm_kmi/translations/cs.json +50 -0
  1216. homeassistant/components/irm_kmi/translations/de.json +50 -0
  1217. homeassistant/components/irm_kmi/translations/en-GB.json +50 -0
  1218. homeassistant/components/irm_kmi/translations/en.json +50 -0
  1219. homeassistant/components/irm_kmi/translations/es.json +50 -0
  1220. homeassistant/components/irm_kmi/translations/et.json +50 -0
  1221. homeassistant/components/irm_kmi/translations/he.json +39 -0
  1222. homeassistant/components/irm_kmi/translations/lt.json +50 -0
  1223. homeassistant/components/irm_kmi/translations/nl.json +39 -0
  1224. homeassistant/components/irm_kmi/translations/pt.json +50 -0
  1225. homeassistant/components/irm_kmi/translations/sk.json +50 -0
  1226. homeassistant/components/irm_kmi/translations/zh-Hans.json +50 -0
  1227. homeassistant/components/irm_kmi/translations/zh-Hant.json +50 -0
  1228. homeassistant/components/irm_kmi/utils.py +18 -0
  1229. homeassistant/components/irm_kmi/weather.py +158 -0
  1230. homeassistant/components/iron_os/manifest.json +1 -1
  1231. homeassistant/components/isal/manifest.json +1 -1
  1232. homeassistant/components/iskra/manifest.json +1 -1
  1233. homeassistant/components/ista_ecotrend/manifest.json +1 -1
  1234. homeassistant/components/ista_ecotrend/translations/pt.json +3 -3
  1235. homeassistant/components/jewish_calendar/quality_scale.yaml +100 -0
  1236. homeassistant/components/jewish_calendar/translations/pt.json +1 -1
  1237. homeassistant/components/kitchen_sink/__init__.py +15 -0
  1238. homeassistant/components/kitchen_sink/translations/de.json +2 -2
  1239. homeassistant/components/knx/diagnostics.py +4 -2
  1240. homeassistant/components/knx/storage/entity_store_schema.py +13 -9
  1241. homeassistant/components/knx/translations/pt.json +1 -1
  1242. homeassistant/components/kodi/config_flow.py +0 -22
  1243. homeassistant/components/kodi/media_player.py +3 -101
  1244. homeassistant/components/lacrosse/sensor.py +1 -1
  1245. homeassistant/components/lamarzocco/__init__.py +34 -24
  1246. homeassistant/components/lamarzocco/config_flow.py +13 -4
  1247. homeassistant/components/lamarzocco/const.py +1 -0
  1248. homeassistant/components/lamarzocco/manifest.json +1 -1
  1249. homeassistant/components/lannouncer/notify.py +20 -2
  1250. homeassistant/components/lannouncer/strings.json +8 -0
  1251. homeassistant/components/lannouncer/translations/cs.json +8 -0
  1252. homeassistant/components/lannouncer/translations/de.json +8 -0
  1253. homeassistant/components/lannouncer/translations/en-GB.json +8 -0
  1254. homeassistant/components/lannouncer/translations/en.json +8 -0
  1255. homeassistant/components/lannouncer/translations/es.json +8 -0
  1256. homeassistant/components/lannouncer/translations/et.json +8 -0
  1257. homeassistant/components/lannouncer/translations/ga.json +8 -0
  1258. homeassistant/components/lannouncer/translations/it.json +8 -0
  1259. homeassistant/components/lannouncer/translations/lt.json +8 -0
  1260. homeassistant/components/lannouncer/translations/pt.json +8 -0
  1261. homeassistant/components/lannouncer/translations/sk.json +8 -0
  1262. homeassistant/components/lannouncer/translations/zh-Hans.json +8 -0
  1263. homeassistant/components/lannouncer/translations/zh-Hant.json +8 -0
  1264. homeassistant/components/lawn_mower/intent.py +37 -0
  1265. homeassistant/components/lcn/manifest.json +1 -1
  1266. homeassistant/components/lcn/strings.json +0 -52
  1267. homeassistant/components/lcn/translations/bg.json +0 -52
  1268. homeassistant/components/lcn/translations/ca.json +0 -52
  1269. homeassistant/components/lcn/translations/cs.json +0 -52
  1270. homeassistant/components/lcn/translations/de.json +0 -52
  1271. homeassistant/components/lcn/translations/el.json +0 -52
  1272. homeassistant/components/lcn/translations/en-GB.json +0 -52
  1273. homeassistant/components/lcn/translations/en.json +0 -52
  1274. homeassistant/components/lcn/translations/es.json +0 -52
  1275. homeassistant/components/lcn/translations/et.json +0 -52
  1276. homeassistant/components/lcn/translations/fi.json +0 -52
  1277. homeassistant/components/lcn/translations/ga.json +0 -52
  1278. homeassistant/components/lcn/translations/gl.json +0 -10
  1279. homeassistant/components/lcn/translations/hu.json +0 -52
  1280. homeassistant/components/lcn/translations/it.json +0 -52
  1281. homeassistant/components/lcn/translations/ja.json +0 -52
  1282. homeassistant/components/lcn/translations/ko.json +0 -52
  1283. homeassistant/components/lcn/translations/lt.json +0 -52
  1284. homeassistant/components/lcn/translations/nl.json +0 -7
  1285. homeassistant/components/lcn/translations/pt.json +0 -52
  1286. homeassistant/components/lcn/translations/ru.json +0 -52
  1287. homeassistant/components/lcn/translations/sk.json +0 -52
  1288. homeassistant/components/lcn/translations/sv.json +0 -52
  1289. homeassistant/components/lcn/translations/tr.json +0 -52
  1290. homeassistant/components/lcn/translations/vi.json +0 -11
  1291. homeassistant/components/lcn/translations/zh-Hans.json +0 -52
  1292. homeassistant/components/lcn/translations/zh-Hant.json +0 -52
  1293. homeassistant/components/letpot/__init__.py +1 -0
  1294. homeassistant/components/letpot/icons.json +8 -0
  1295. homeassistant/components/letpot/number.py +136 -0
  1296. homeassistant/components/letpot/strings.json +10 -1
  1297. homeassistant/components/letpot/translations/cs.json +9 -0
  1298. homeassistant/components/letpot/translations/de.json +9 -0
  1299. homeassistant/components/letpot/translations/en-GB.json +9 -0
  1300. homeassistant/components/letpot/translations/en.json +9 -0
  1301. homeassistant/components/letpot/translations/es.json +0 -1
  1302. homeassistant/components/letpot/translations/et.json +0 -1
  1303. homeassistant/components/letpot/translations/fr.json +0 -1
  1304. homeassistant/components/letpot/translations/ga.json +0 -1
  1305. homeassistant/components/letpot/translations/it.json +0 -1
  1306. homeassistant/components/letpot/translations/lt.json +0 -1
  1307. homeassistant/components/letpot/translations/pt.json +1 -2
  1308. homeassistant/components/letpot/translations/sk.json +9 -0
  1309. homeassistant/components/letpot/translations/sv.json +0 -1
  1310. homeassistant/components/letpot/translations/zh-Hans.json +0 -1
  1311. homeassistant/components/letpot/translations/zh-Hant.json +10 -1
  1312. homeassistant/components/lg_thinq/coordinator.py +4 -0
  1313. homeassistant/components/lg_thinq/entity.py +6 -1
  1314. homeassistant/components/lg_thinq/icons.json +9 -0
  1315. homeassistant/components/lg_thinq/manifest.json +1 -1
  1316. homeassistant/components/lg_thinq/sensor.py +143 -3
  1317. homeassistant/components/lg_thinq/strings.json +9 -0
  1318. homeassistant/components/lg_thinq/translations/cs.json +9 -0
  1319. homeassistant/components/lg_thinq/translations/de.json +9 -0
  1320. homeassistant/components/lg_thinq/translations/en-GB.json +9 -0
  1321. homeassistant/components/lg_thinq/translations/en.json +9 -0
  1322. homeassistant/components/lg_thinq/translations/es.json +9 -0
  1323. homeassistant/components/lg_thinq/translations/et.json +9 -0
  1324. homeassistant/components/lg_thinq/translations/lt.json +9 -0
  1325. homeassistant/components/lg_thinq/translations/nl.json +9 -0
  1326. homeassistant/components/lg_thinq/translations/pt.json +19 -10
  1327. homeassistant/components/lg_thinq/translations/sk.json +9 -0
  1328. homeassistant/components/lg_thinq/translations/uk.json +38 -0
  1329. homeassistant/components/lg_thinq/translations/zh-Hans.json +9 -0
  1330. homeassistant/components/lg_thinq/translations/zh-Hant.json +9 -0
  1331. homeassistant/components/libre_hardware_monitor/__init__.py +34 -0
  1332. homeassistant/components/libre_hardware_monitor/config_flow.py +63 -0
  1333. homeassistant/components/libre_hardware_monitor/const.py +6 -0
  1334. homeassistant/components/libre_hardware_monitor/coordinator.py +130 -0
  1335. homeassistant/components/libre_hardware_monitor/manifest.json +10 -0
  1336. homeassistant/components/libre_hardware_monitor/quality_scale.yaml +81 -0
  1337. homeassistant/components/libre_hardware_monitor/sensor.py +95 -0
  1338. homeassistant/components/libre_hardware_monitor/strings.json +23 -0
  1339. homeassistant/components/libre_hardware_monitor/translations/ca.json +19 -0
  1340. homeassistant/components/libre_hardware_monitor/translations/cs.json +23 -0
  1341. homeassistant/components/libre_hardware_monitor/translations/de.json +23 -0
  1342. homeassistant/components/libre_hardware_monitor/translations/el.json +19 -0
  1343. homeassistant/components/libre_hardware_monitor/translations/en-GB.json +23 -0
  1344. homeassistant/components/libre_hardware_monitor/translations/en.json +23 -0
  1345. homeassistant/components/libre_hardware_monitor/translations/es.json +23 -0
  1346. homeassistant/components/libre_hardware_monitor/translations/et.json +23 -0
  1347. homeassistant/components/libre_hardware_monitor/translations/ga.json +23 -0
  1348. homeassistant/components/libre_hardware_monitor/translations/he.json +19 -0
  1349. homeassistant/components/libre_hardware_monitor/translations/it.json +23 -0
  1350. homeassistant/components/libre_hardware_monitor/translations/lt.json +23 -0
  1351. homeassistant/components/libre_hardware_monitor/translations/nl.json +19 -0
  1352. homeassistant/components/libre_hardware_monitor/translations/pl.json +19 -0
  1353. homeassistant/components/libre_hardware_monitor/translations/pt.json +23 -0
  1354. homeassistant/components/libre_hardware_monitor/translations/ru.json +23 -0
  1355. homeassistant/components/libre_hardware_monitor/translations/sk.json +23 -0
  1356. homeassistant/components/libre_hardware_monitor/translations/zh-Hans.json +23 -0
  1357. homeassistant/components/libre_hardware_monitor/translations/zh-Hant.json +23 -0
  1358. homeassistant/components/lidarr/coordinator.py +1 -1
  1359. homeassistant/components/lidarr/translations/pt.json +1 -1
  1360. homeassistant/components/lifx/services.yaml +7 -0
  1361. homeassistant/components/lifx/strings.json +4 -0
  1362. homeassistant/components/lifx/translations/cs.json +4 -0
  1363. homeassistant/components/lifx/translations/de.json +4 -0
  1364. homeassistant/components/lifx/translations/en-GB.json +4 -0
  1365. homeassistant/components/lifx/translations/en.json +4 -0
  1366. homeassistant/components/lifx/translations/es.json +4 -0
  1367. homeassistant/components/lifx/translations/et.json +4 -0
  1368. homeassistant/components/lifx/translations/ga.json +4 -0
  1369. homeassistant/components/lifx/translations/it.json +4 -0
  1370. homeassistant/components/lifx/translations/lt.json +4 -0
  1371. homeassistant/components/lifx/translations/pt.json +4 -0
  1372. homeassistant/components/lifx/translations/sk.json +4 -0
  1373. homeassistant/components/lifx/translations/sv.json +3 -0
  1374. homeassistant/components/lifx/translations/zh-Hans.json +4 -0
  1375. homeassistant/components/lifx/translations/zh-Hant.json +4 -0
  1376. homeassistant/components/light/translations/ca.json +2 -1
  1377. homeassistant/components/light/translations/uk.json +19 -0
  1378. homeassistant/components/lightwave/sensor.py +2 -2
  1379. homeassistant/components/litterrobot/icons.json +18 -0
  1380. homeassistant/components/litterrobot/manifest.json +1 -1
  1381. homeassistant/components/litterrobot/select.py +66 -27
  1382. homeassistant/components/litterrobot/sensor.py +28 -1
  1383. homeassistant/components/litterrobot/strings.json +35 -0
  1384. homeassistant/components/litterrobot/switch.py +86 -18
  1385. homeassistant/components/litterrobot/translations/bg.json +9 -0
  1386. homeassistant/components/litterrobot/translations/ca.json +13 -0
  1387. homeassistant/components/litterrobot/translations/cs.json +35 -0
  1388. homeassistant/components/litterrobot/translations/da.json +8 -0
  1389. homeassistant/components/litterrobot/translations/de.json +35 -0
  1390. homeassistant/components/litterrobot/translations/el.json +14 -0
  1391. homeassistant/components/litterrobot/translations/en-GB.json +35 -0
  1392. homeassistant/components/litterrobot/translations/en.json +35 -0
  1393. homeassistant/components/litterrobot/translations/es.json +35 -0
  1394. homeassistant/components/litterrobot/translations/et.json +35 -0
  1395. homeassistant/components/litterrobot/translations/ga.json +35 -0
  1396. homeassistant/components/litterrobot/translations/he.json +14 -0
  1397. homeassistant/components/litterrobot/translations/it.json +24 -0
  1398. homeassistant/components/litterrobot/translations/lt.json +35 -0
  1399. homeassistant/components/litterrobot/translations/mk.json +5 -0
  1400. homeassistant/components/litterrobot/translations/nl.json +22 -0
  1401. homeassistant/components/litterrobot/translations/pl.json +16 -0
  1402. homeassistant/components/litterrobot/translations/pt.json +35 -0
  1403. homeassistant/components/litterrobot/translations/ru.json +20 -0
  1404. homeassistant/components/litterrobot/translations/sk.json +35 -0
  1405. homeassistant/components/litterrobot/translations/uk.json +26 -0
  1406. homeassistant/components/litterrobot/translations/zh-Hans.json +35 -0
  1407. homeassistant/components/litterrobot/translations/zh-Hant.json +35 -0
  1408. homeassistant/components/local_todo/todo.py +1 -1
  1409. homeassistant/components/logbook/helpers.py +34 -9
  1410. homeassistant/components/logbook/manifest.json +1 -1
  1411. homeassistant/components/logbook/strings.json +5 -5
  1412. homeassistant/components/logbook/translations/bg.json +1 -2
  1413. homeassistant/components/logbook/translations/ca.json +1 -6
  1414. homeassistant/components/logbook/translations/cs.json +5 -5
  1415. homeassistant/components/logbook/translations/de.json +5 -5
  1416. homeassistant/components/logbook/translations/el.json +1 -6
  1417. homeassistant/components/logbook/translations/en-GB.json +5 -5
  1418. homeassistant/components/logbook/translations/en.json +5 -5
  1419. homeassistant/components/logbook/translations/es.json +1 -6
  1420. homeassistant/components/logbook/translations/et.json +1 -6
  1421. homeassistant/components/logbook/translations/fi.json +1 -6
  1422. homeassistant/components/logbook/translations/fr.json +1 -5
  1423. homeassistant/components/logbook/translations/ga.json +1 -6
  1424. homeassistant/components/logbook/translations/gl.json +0 -4
  1425. homeassistant/components/logbook/translations/he.json +5 -5
  1426. homeassistant/components/logbook/translations/hu.json +1 -6
  1427. homeassistant/components/logbook/translations/id.json +1 -6
  1428. homeassistant/components/logbook/translations/it.json +1 -6
  1429. homeassistant/components/logbook/translations/ja.json +1 -6
  1430. homeassistant/components/logbook/translations/ko.json +1 -6
  1431. homeassistant/components/logbook/translations/lt.json +5 -5
  1432. homeassistant/components/logbook/translations/nb.json +1 -2
  1433. homeassistant/components/logbook/translations/nl.json +1 -6
  1434. homeassistant/components/logbook/translations/pl.json +1 -4
  1435. homeassistant/components/logbook/translations/pt-BR.json +1 -6
  1436. homeassistant/components/logbook/translations/pt.json +1 -6
  1437. homeassistant/components/logbook/translations/ru.json +1 -6
  1438. homeassistant/components/logbook/translations/sk.json +4 -4
  1439. homeassistant/components/logbook/translations/sl.json +1 -6
  1440. homeassistant/components/logbook/translations/sv.json +1 -6
  1441. homeassistant/components/logbook/translations/tr.json +1 -6
  1442. homeassistant/components/logbook/translations/vi.json +1 -6
  1443. homeassistant/components/logbook/translations/zh-Hans.json +5 -5
  1444. homeassistant/components/logbook/translations/zh-Hant.json +5 -5
  1445. homeassistant/components/lovelace/dashboard.py +2 -2
  1446. homeassistant/components/lutron_caseta/__init__.py +4 -1
  1447. homeassistant/components/lutron_caseta/const.py +1 -0
  1448. homeassistant/components/lutron_caseta/cover.py +44 -2
  1449. homeassistant/components/lutron_caseta/device_trigger.py +2 -1
  1450. homeassistant/components/lutron_caseta/entity.py +5 -1
  1451. homeassistant/components/lutron_caseta/manifest.json +1 -1
  1452. homeassistant/components/mastodon/const.py +1 -0
  1453. homeassistant/components/mastodon/services.py +4 -0
  1454. homeassistant/components/mastodon/services.yaml +203 -0
  1455. homeassistant/components/mastodon/strings.json +4 -0
  1456. homeassistant/components/mastodon/translations/cs.json +4 -0
  1457. homeassistant/components/mastodon/translations/de.json +4 -0
  1458. homeassistant/components/mastodon/translations/en-GB.json +4 -0
  1459. homeassistant/components/mastodon/translations/en.json +4 -0
  1460. homeassistant/components/mastodon/translations/es.json +4 -0
  1461. homeassistant/components/mastodon/translations/et.json +4 -0
  1462. homeassistant/components/mastodon/translations/lt.json +4 -0
  1463. homeassistant/components/mastodon/translations/pt.json +4 -0
  1464. homeassistant/components/mastodon/translations/sk.json +4 -0
  1465. homeassistant/components/mastodon/translations/zh-Hans.json +4 -0
  1466. homeassistant/components/mastodon/translations/zh-Hant.json +4 -0
  1467. homeassistant/components/matter/climate.py +16 -18
  1468. homeassistant/components/matter/discovery.py +7 -0
  1469. homeassistant/components/matter/light.py +1 -0
  1470. homeassistant/components/matter/models.py +3 -0
  1471. homeassistant/components/matter/number.py +16 -1
  1472. homeassistant/components/matter/select.py +1 -1
  1473. homeassistant/components/matter/sensor.py +31 -0
  1474. homeassistant/components/matter/strings.json +6 -3
  1475. homeassistant/components/matter/translations/ca.json +3 -0
  1476. homeassistant/components/matter/translations/cs.json +6 -3
  1477. homeassistant/components/matter/translations/de.json +6 -3
  1478. homeassistant/components/matter/translations/en-GB.json +6 -3
  1479. homeassistant/components/matter/translations/en.json +6 -3
  1480. homeassistant/components/matter/translations/es.json +3 -3
  1481. homeassistant/components/matter/translations/et.json +3 -3
  1482. homeassistant/components/matter/translations/fr.json +9 -3
  1483. homeassistant/components/matter/translations/ga.json +3 -3
  1484. homeassistant/components/matter/translations/he.json +12 -3
  1485. homeassistant/components/matter/translations/hu.json +0 -3
  1486. homeassistant/components/matter/translations/it.json +3 -0
  1487. homeassistant/components/matter/translations/lt.json +6 -3
  1488. homeassistant/components/matter/translations/pt.json +9 -3
  1489. homeassistant/components/matter/translations/ru.json +6 -3
  1490. homeassistant/components/matter/translations/sk.json +6 -3
  1491. homeassistant/components/matter/translations/tr.json +0 -3
  1492. homeassistant/components/matter/translations/zh-Hans.json +6 -3
  1493. homeassistant/components/matter/translations/zh-Hant.json +6 -3
  1494. homeassistant/components/mcp/manifest.json +1 -1
  1495. homeassistant/components/mcp_server/http.py +13 -9
  1496. homeassistant/components/mcp_server/manifest.json +1 -1
  1497. homeassistant/components/mcp_server/server.py +1 -1
  1498. homeassistant/components/mcp_server/session.py +2 -2
  1499. homeassistant/components/media_extractor/manifest.json +1 -1
  1500. homeassistant/components/media_player/intent.py +0 -2
  1501. homeassistant/components/media_player/translations/pt.json +1 -1
  1502. homeassistant/components/media_source/__init__.py +19 -165
  1503. homeassistant/components/media_source/helper.py +103 -0
  1504. homeassistant/components/media_source/http.py +79 -0
  1505. homeassistant/components/media_source/local_source.py +144 -97
  1506. homeassistant/components/melcloud/translations/pt.json +2 -2
  1507. homeassistant/components/met/coordinator.py +3 -1
  1508. homeassistant/components/metoffice/sensor.py +11 -0
  1509. homeassistant/components/metoffice/translations/pt.json +1 -1
  1510. homeassistant/components/miele/const.py +252 -170
  1511. homeassistant/components/miele/coordinator.py +18 -2
  1512. homeassistant/components/miele/icons.json +1 -1
  1513. homeassistant/components/miele/manifest.json +2 -2
  1514. homeassistant/components/miele/quality_scale.yaml +6 -14
  1515. homeassistant/components/miele/sensor.py +95 -18
  1516. homeassistant/components/miele/services.py +4 -3
  1517. homeassistant/components/miele/strings.json +1 -0
  1518. homeassistant/components/miele/translations/cs.json +1 -0
  1519. homeassistant/components/miele/translations/de.json +1 -0
  1520. homeassistant/components/miele/translations/en-GB.json +1 -0
  1521. homeassistant/components/miele/translations/en.json +1 -0
  1522. homeassistant/components/miele/translations/es.json +1 -0
  1523. homeassistant/components/miele/translations/et.json +1 -0
  1524. homeassistant/components/miele/translations/he.json +1 -0
  1525. homeassistant/components/miele/translations/lt.json +1 -0
  1526. homeassistant/components/miele/translations/nl.json +1 -0
  1527. homeassistant/components/miele/translations/pt.json +4 -3
  1528. homeassistant/components/miele/translations/ru.json +5 -0
  1529. homeassistant/components/miele/translations/sk.json +1 -0
  1530. homeassistant/components/miele/translations/sv.json +3 -3
  1531. homeassistant/components/miele/translations/zh-Hans.json +1 -0
  1532. homeassistant/components/miele/translations/zh-Hant.json +1 -0
  1533. homeassistant/components/miele/vacuum.py +1 -2
  1534. homeassistant/components/min_max/sensor.py +12 -6
  1535. homeassistant/components/mobile_app/manifest.json +1 -1
  1536. homeassistant/components/modbus/__init__.py +3 -2
  1537. homeassistant/components/modbus/binary_sensor.py +3 -3
  1538. homeassistant/components/modbus/climate.py +18 -16
  1539. homeassistant/components/modbus/const.py +1 -0
  1540. homeassistant/components/modbus/cover.py +11 -5
  1541. homeassistant/components/modbus/entity.py +8 -8
  1542. homeassistant/components/modbus/fan.py +2 -2
  1543. homeassistant/components/modbus/light.py +6 -6
  1544. homeassistant/components/modbus/manifest.json +1 -1
  1545. homeassistant/components/modbus/modbus.py +35 -41
  1546. homeassistant/components/modbus/sensor.py +3 -3
  1547. homeassistant/components/modbus/switch.py +2 -2
  1548. homeassistant/components/modbus/validators.py +1 -1
  1549. homeassistant/components/monarch_money/translations/pt.json +2 -2
  1550. homeassistant/components/monoprice/media_player.py +1 -1
  1551. homeassistant/components/motionmount/select.py +11 -3
  1552. homeassistant/components/motionmount/strings.json +1 -1
  1553. homeassistant/components/motionmount/translations/lt.json +4 -1
  1554. homeassistant/components/motionmount/translations/pt.json +4 -1
  1555. homeassistant/components/motionmount/translations/ru.json +4 -1
  1556. homeassistant/components/mqtt/abbreviations.py +1 -0
  1557. homeassistant/components/mqtt/config_flow.py +571 -495
  1558. homeassistant/components/mqtt/const.py +6 -0
  1559. homeassistant/components/mqtt/device_automation.py +3 -1
  1560. homeassistant/components/mqtt/entity.py +56 -3
  1561. homeassistant/components/mqtt/image.py +9 -8
  1562. homeassistant/components/mqtt/light/schema_json.py +0 -2
  1563. homeassistant/components/mqtt/manifest.json +1 -0
  1564. homeassistant/components/mqtt/schemas.py +2 -0
  1565. homeassistant/components/mqtt/strings.json +32 -3
  1566. homeassistant/components/mqtt/tag.py +3 -1
  1567. homeassistant/components/mqtt/translations/cs.json +30 -1
  1568. homeassistant/components/mqtt/translations/de.json +32 -3
  1569. homeassistant/components/mqtt/translations/el.json +4 -0
  1570. homeassistant/components/mqtt/translations/en-GB.json +30 -1
  1571. homeassistant/components/mqtt/translations/en.json +30 -1
  1572. homeassistant/components/mqtt/translations/es.json +12 -2
  1573. homeassistant/components/mqtt/translations/et.json +11 -1
  1574. homeassistant/components/mqtt/translations/fr.json +16 -0
  1575. homeassistant/components/mqtt/translations/ga.json +4 -1
  1576. homeassistant/components/mqtt/translations/he.json +19 -1
  1577. homeassistant/components/mqtt/translations/hu.json +0 -1
  1578. homeassistant/components/mqtt/translations/it.json +0 -1
  1579. homeassistant/components/mqtt/translations/lt.json +32 -2
  1580. homeassistant/components/mqtt/translations/nl.json +0 -1
  1581. homeassistant/components/mqtt/translations/pt.json +13 -3
  1582. homeassistant/components/mqtt/translations/ru.json +11 -0
  1583. homeassistant/components/mqtt/translations/sk.json +30 -1
  1584. homeassistant/components/mqtt/translations/sv.json +1 -1
  1585. homeassistant/components/mqtt/translations/zh-Hans.json +30 -1
  1586. homeassistant/components/mqtt/translations/zh-Hant.json +30 -1
  1587. homeassistant/components/mqtt/util.py +8 -2
  1588. homeassistant/components/music_assistant/__init__.py +47 -16
  1589. homeassistant/components/music_assistant/config_flow.py +34 -8
  1590. homeassistant/components/music_assistant/const.py +1 -0
  1591. homeassistant/components/music_assistant/media_browser.py +1 -1
  1592. homeassistant/components/music_assistant/translations/pt.json +1 -1
  1593. homeassistant/components/nam/icons.json +0 -3
  1594. homeassistant/components/nam/sensor.py +1 -0
  1595. homeassistant/components/nanoleaf/translations/de.json +1 -1
  1596. homeassistant/components/nederlandse_spoorwegen/__init__.py +56 -1
  1597. homeassistant/components/nederlandse_spoorwegen/config_flow.py +176 -0
  1598. homeassistant/components/nederlandse_spoorwegen/const.py +17 -0
  1599. homeassistant/components/nederlandse_spoorwegen/manifest.json +3 -1
  1600. homeassistant/components/nederlandse_spoorwegen/sensor.py +99 -54
  1601. homeassistant/components/nederlandse_spoorwegen/strings.json +74 -0
  1602. homeassistant/components/nederlandse_spoorwegen/translations/bg.json +28 -0
  1603. homeassistant/components/nederlandse_spoorwegen/translations/ca.json +28 -0
  1604. homeassistant/components/nederlandse_spoorwegen/translations/cs.json +74 -0
  1605. homeassistant/components/nederlandse_spoorwegen/translations/de.json +74 -0
  1606. homeassistant/components/nederlandse_spoorwegen/translations/el.json +28 -0
  1607. homeassistant/components/nederlandse_spoorwegen/translations/en-GB.json +74 -0
  1608. homeassistant/components/nederlandse_spoorwegen/translations/en.json +74 -0
  1609. homeassistant/components/nederlandse_spoorwegen/translations/es.json +74 -0
  1610. homeassistant/components/nederlandse_spoorwegen/translations/et.json +74 -0
  1611. homeassistant/components/nederlandse_spoorwegen/translations/ga.json +74 -0
  1612. homeassistant/components/nederlandse_spoorwegen/translations/he.json +28 -0
  1613. homeassistant/components/nederlandse_spoorwegen/translations/lt.json +74 -0
  1614. homeassistant/components/nederlandse_spoorwegen/translations/nl.json +72 -0
  1615. homeassistant/components/nederlandse_spoorwegen/translations/pt.json +74 -0
  1616. homeassistant/components/nederlandse_spoorwegen/translations/sk.json +74 -0
  1617. homeassistant/components/nederlandse_spoorwegen/translations/uk.json +18 -0
  1618. homeassistant/components/nederlandse_spoorwegen/translations/zh-Hans.json +74 -0
  1619. homeassistant/components/nederlandse_spoorwegen/translations/zh-Hant.json +74 -0
  1620. homeassistant/components/neo/__init__.py +1 -0
  1621. homeassistant/components/neo/manifest.json +6 -0
  1622. homeassistant/components/ness_alarm/manifest.json +1 -1
  1623. homeassistant/components/netgear/translations/de.json +1 -1
  1624. homeassistant/components/nextdns/manifest.json +1 -0
  1625. homeassistant/components/nextdns/quality_scale.yaml +88 -0
  1626. homeassistant/components/nibe_heatpump/manifest.json +1 -1
  1627. homeassistant/components/nice_go/translations/pt.json +2 -2
  1628. homeassistant/components/nightscout/translations/de.json +1 -1
  1629. homeassistant/components/nordpool/__init__.py +1 -1
  1630. homeassistant/components/nordpool/coordinator.py +37 -13
  1631. homeassistant/components/nordpool/sensor.py +5 -2
  1632. homeassistant/components/nordpool/strings.json +6 -0
  1633. homeassistant/components/nordpool/translations/cs.json +6 -0
  1634. homeassistant/components/nordpool/translations/de.json +6 -0
  1635. homeassistant/components/nordpool/translations/en-GB.json +6 -0
  1636. homeassistant/components/nordpool/translations/en.json +6 -0
  1637. homeassistant/components/nordpool/translations/es.json +6 -0
  1638. homeassistant/components/nordpool/translations/et.json +6 -0
  1639. homeassistant/components/nordpool/translations/lt.json +6 -0
  1640. homeassistant/components/nordpool/translations/pt.json +6 -0
  1641. homeassistant/components/nordpool/translations/sk.json +6 -0
  1642. homeassistant/components/nordpool/translations/zh-Hans.json +6 -0
  1643. homeassistant/components/nordpool/translations/zh-Hant.json +6 -0
  1644. homeassistant/components/notion/translations/uk.json +13 -0
  1645. homeassistant/components/ntfy/__init__.py +1 -1
  1646. homeassistant/components/ntfy/config_flow.py +73 -2
  1647. homeassistant/components/ntfy/const.py +6 -0
  1648. homeassistant/components/ntfy/entity.py +43 -0
  1649. homeassistant/components/ntfy/event.py +172 -0
  1650. homeassistant/components/ntfy/icons.json +10 -0
  1651. homeassistant/components/ntfy/manifest.json +1 -1
  1652. homeassistant/components/ntfy/notify.py +70 -30
  1653. homeassistant/components/ntfy/quality_scale.yaml +6 -18
  1654. homeassistant/components/ntfy/repairs.py +56 -0
  1655. homeassistant/components/ntfy/services.yaml +90 -0
  1656. homeassistant/components/ntfy/strings.json +146 -1
  1657. homeassistant/components/ntfy/translations/bg.json +52 -1
  1658. homeassistant/components/ntfy/translations/ca.json +25 -0
  1659. homeassistant/components/ntfy/translations/cs.json +168 -1
  1660. homeassistant/components/ntfy/translations/de.json +168 -1
  1661. homeassistant/components/ntfy/translations/el.json +45 -1
  1662. homeassistant/components/ntfy/translations/en-GB.json +168 -1
  1663. homeassistant/components/ntfy/translations/en.json +168 -1
  1664. homeassistant/components/ntfy/translations/es.json +168 -1
  1665. homeassistant/components/ntfy/translations/et.json +168 -1
  1666. homeassistant/components/ntfy/translations/ga.json +168 -1
  1667. homeassistant/components/ntfy/translations/he.json +20 -0
  1668. homeassistant/components/ntfy/translations/it.json +12 -0
  1669. homeassistant/components/ntfy/translations/lt.json +168 -1
  1670. homeassistant/components/ntfy/translations/nl.json +42 -0
  1671. homeassistant/components/ntfy/translations/pt.json +168 -1
  1672. homeassistant/components/ntfy/translations/ru.json +247 -1
  1673. homeassistant/components/ntfy/translations/sk.json +168 -1
  1674. homeassistant/components/ntfy/translations/zh-Hans.json +168 -1
  1675. homeassistant/components/ntfy/translations/zh-Hant.json +168 -1
  1676. homeassistant/components/number/__init__.py +6 -3
  1677. homeassistant/components/number/const.py +20 -8
  1678. homeassistant/components/number/icons.json +3 -0
  1679. homeassistant/components/nut/strings.json +1 -1
  1680. homeassistant/components/nut/translations/pt.json +1 -1
  1681. homeassistant/components/ohme/translations/pt.json +1 -1
  1682. homeassistant/components/onedrive/translations/pt.json +1 -1
  1683. homeassistant/components/onewire/translations/vi.json +5 -0
  1684. homeassistant/components/onvif/strings.json +2 -2
  1685. homeassistant/components/onvif/translations/de.json +1 -1
  1686. homeassistant/components/onvif/translations/he.json +3 -1
  1687. homeassistant/components/onvif/translations/pt.json +3 -1
  1688. homeassistant/components/onvif/translations/ru.json +3 -1
  1689. homeassistant/components/openai_conversation/__init__.py +1 -1
  1690. homeassistant/components/openai_conversation/ai_task.py +73 -4
  1691. homeassistant/components/openai_conversation/const.py +9 -0
  1692. homeassistant/components/openai_conversation/entity.py +64 -20
  1693. homeassistant/components/openai_conversation/manifest.json +1 -1
  1694. homeassistant/components/openai_conversation/strings.json +6 -0
  1695. homeassistant/components/openai_conversation/translations/cs.json +6 -0
  1696. homeassistant/components/openai_conversation/translations/de.json +6 -0
  1697. homeassistant/components/openai_conversation/translations/en-GB.json +6 -0
  1698. homeassistant/components/openai_conversation/translations/en.json +6 -0
  1699. homeassistant/components/openai_conversation/translations/es.json +6 -0
  1700. homeassistant/components/openai_conversation/translations/et.json +6 -0
  1701. homeassistant/components/openai_conversation/translations/fr.json +6 -0
  1702. homeassistant/components/openai_conversation/translations/ga.json +6 -0
  1703. homeassistant/components/openai_conversation/translations/lt.json +6 -0
  1704. homeassistant/components/openai_conversation/translations/pt.json +7 -1
  1705. homeassistant/components/openai_conversation/translations/sk.json +6 -0
  1706. homeassistant/components/openai_conversation/translations/zh-Hans.json +6 -0
  1707. homeassistant/components/openai_conversation/translations/zh-Hant.json +6 -0
  1708. homeassistant/components/opentherm_gw/translations/mk.json +9 -0
  1709. homeassistant/components/openuv/__init__.py +9 -5
  1710. homeassistant/components/openuv/binary_sensor.py +19 -22
  1711. homeassistant/components/openuv/coordinator.py +91 -1
  1712. homeassistant/components/openweathermap/config_flow.py +29 -39
  1713. homeassistant/components/openweathermap/strings.json +12 -0
  1714. homeassistant/components/openweathermap/translations/cs.json +12 -0
  1715. homeassistant/components/openweathermap/translations/de.json +12 -0
  1716. homeassistant/components/openweathermap/translations/en-GB.json +12 -0
  1717. homeassistant/components/openweathermap/translations/en.json +12 -0
  1718. homeassistant/components/openweathermap/translations/es.json +12 -0
  1719. homeassistant/components/openweathermap/translations/et.json +12 -0
  1720. homeassistant/components/openweathermap/translations/fr.json +12 -0
  1721. homeassistant/components/openweathermap/translations/ga.json +12 -0
  1722. homeassistant/components/openweathermap/translations/lt.json +12 -0
  1723. homeassistant/components/openweathermap/translations/pt.json +12 -0
  1724. homeassistant/components/openweathermap/translations/sk.json +12 -0
  1725. homeassistant/components/openweathermap/translations/zh-Hans.json +12 -0
  1726. homeassistant/components/openweathermap/translations/zh-Hant.json +12 -0
  1727. homeassistant/components/opnsense/__init__.py +13 -12
  1728. homeassistant/components/opnsense/const.py +8 -0
  1729. homeassistant/components/opnsense/device_tracker.py +29 -21
  1730. homeassistant/components/opnsense/manifest.json +1 -1
  1731. homeassistant/components/opower/manifest.json +2 -1
  1732. homeassistant/components/opower/quality_scale.yaml +79 -0
  1733. homeassistant/components/otbr/config_flow.py +1 -4
  1734. homeassistant/components/otp/manifest.json +1 -1
  1735. homeassistant/components/overkiz/climate/atlantic_electrical_heater_with_adjustable_temperature_setpoint.py +1 -0
  1736. homeassistant/components/overkiz/const.py +1 -0
  1737. homeassistant/components/overkiz/strings.json +1 -1
  1738. homeassistant/components/overkiz/switch.py +9 -0
  1739. homeassistant/components/overkiz/translations/fr.json +2 -1
  1740. homeassistant/components/owntracks/manifest.json +1 -1
  1741. homeassistant/components/p1_monitor/config_flow.py +1 -1
  1742. homeassistant/components/p1_monitor/manifest.json +1 -1
  1743. homeassistant/components/paperless_ngx/manifest.json +1 -1
  1744. homeassistant/components/paperless_ngx/quality_scale.yaml +4 -1
  1745. homeassistant/components/person/translations/mk.json +9 -0
  1746. homeassistant/components/philips_js/manifest.json +1 -1
  1747. homeassistant/components/playstation_network/manifest.json +1 -1
  1748. homeassistant/components/playstation_network/translations/pt.json +1 -1
  1749. homeassistant/components/plugwise/translations/mk.json +11 -0
  1750. homeassistant/components/plugwise/translations/uk.json +6 -0
  1751. homeassistant/components/plum_lightpad/translations/pt.json +1 -1
  1752. homeassistant/components/pooldose/config_flow.py +79 -43
  1753. homeassistant/components/pooldose/coordinator.py +1 -0
  1754. homeassistant/components/pooldose/entity.py +11 -3
  1755. homeassistant/components/pooldose/manifest.json +5 -0
  1756. homeassistant/components/pooldose/quality_scale.yaml +2 -6
  1757. homeassistant/components/pooldose/strings.json +8 -1
  1758. homeassistant/components/pooldose/translations/cs.json +8 -1
  1759. homeassistant/components/pooldose/translations/de.json +8 -1
  1760. homeassistant/components/pooldose/translations/en-GB.json +8 -1
  1761. homeassistant/components/pooldose/translations/en.json +8 -1
  1762. homeassistant/components/pooldose/translations/es.json +8 -1
  1763. homeassistant/components/pooldose/translations/et.json +8 -1
  1764. homeassistant/components/pooldose/translations/he.json +2 -1
  1765. homeassistant/components/pooldose/translations/lt.json +8 -1
  1766. homeassistant/components/pooldose/translations/nl.json +2 -1
  1767. homeassistant/components/pooldose/translations/pt.json +8 -1
  1768. homeassistant/components/pooldose/translations/sk.json +8 -1
  1769. homeassistant/components/pooldose/translations/zh-Hans.json +8 -1
  1770. homeassistant/components/pooldose/translations/zh-Hant.json +8 -1
  1771. homeassistant/components/poolsense/translations/pt.json +1 -1
  1772. homeassistant/components/portainer/__init__.py +40 -0
  1773. homeassistant/components/portainer/binary_sensor.py +146 -0
  1774. homeassistant/components/portainer/config_flow.py +95 -0
  1775. homeassistant/components/portainer/const.py +4 -0
  1776. homeassistant/components/portainer/coordinator.py +137 -0
  1777. homeassistant/components/portainer/entity.py +73 -0
  1778. homeassistant/components/portainer/manifest.json +10 -0
  1779. homeassistant/components/portainer/quality_scale.yaml +80 -0
  1780. homeassistant/components/portainer/strings.json +49 -0
  1781. homeassistant/components/portainer/translations/bg.json +27 -0
  1782. homeassistant/components/portainer/translations/ca.json +21 -0
  1783. homeassistant/components/portainer/translations/cs.json +49 -0
  1784. homeassistant/components/portainer/translations/de.json +49 -0
  1785. homeassistant/components/portainer/translations/el.json +21 -0
  1786. homeassistant/components/portainer/translations/en-GB.json +49 -0
  1787. homeassistant/components/portainer/translations/en.json +49 -0
  1788. homeassistant/components/portainer/translations/es.json +49 -0
  1789. homeassistant/components/portainer/translations/et.json +49 -0
  1790. homeassistant/components/portainer/translations/ga.json +49 -0
  1791. homeassistant/components/portainer/translations/he.json +21 -0
  1792. homeassistant/components/portainer/translations/lt.json +49 -0
  1793. homeassistant/components/portainer/translations/nl.json +21 -0
  1794. homeassistant/components/portainer/translations/pt.json +49 -0
  1795. homeassistant/components/portainer/translations/ru.json +49 -0
  1796. homeassistant/components/portainer/translations/sk.json +49 -0
  1797. homeassistant/components/portainer/translations/sl.json +49 -0
  1798. homeassistant/components/portainer/translations/zh-Hans.json +49 -0
  1799. homeassistant/components/portainer/translations/zh-Hant.json +49 -0
  1800. homeassistant/components/powerfox/translations/pt.json +2 -2
  1801. homeassistant/components/powerwall/translations/uk.json +6 -0
  1802. homeassistant/components/profiler/__init__.py +17 -0
  1803. homeassistant/components/profiler/icons.json +3 -0
  1804. homeassistant/components/profiler/services.yaml +1 -0
  1805. homeassistant/components/profiler/strings.json +4 -0
  1806. homeassistant/components/profiler/translations/cs.json +4 -0
  1807. homeassistant/components/profiler/translations/de.json +4 -0
  1808. homeassistant/components/profiler/translations/en-GB.json +4 -0
  1809. homeassistant/components/profiler/translations/en.json +4 -0
  1810. homeassistant/components/profiler/translations/lt.json +4 -0
  1811. homeassistant/components/profiler/translations/sk.json +4 -0
  1812. homeassistant/components/profiler/translations/zh-Hans.json +4 -0
  1813. homeassistant/components/profiler/translations/zh-Hant.json +4 -0
  1814. homeassistant/components/prowl/const.py +3 -0
  1815. homeassistant/components/prowl/manifest.json +4 -1
  1816. homeassistant/components/prowl/notify.py +37 -33
  1817. homeassistant/components/prusalink/coordinator.py +7 -0
  1818. homeassistant/components/prusalink/manifest.json +1 -1
  1819. homeassistant/components/purpleair/coordinator.py +1 -1
  1820. homeassistant/components/pushover/const.py +2 -0
  1821. homeassistant/components/pushover/notify.py +18 -15
  1822. homeassistant/components/pvoutput/translations/de.json +2 -2
  1823. homeassistant/components/pvpc_hourly_pricing/__init__.py +0 -15
  1824. homeassistant/components/pvpc_hourly_pricing/config_flow.py +2 -2
  1825. homeassistant/components/pvpc_hourly_pricing/coordinator.py +7 -4
  1826. homeassistant/components/qbus/entity.py +1 -1
  1827. homeassistant/components/qnap/translations/uk.json +19 -0
  1828. homeassistant/components/radarr/coordinator.py +1 -1
  1829. homeassistant/components/radio_browser/media_source.py +65 -3
  1830. homeassistant/components/rainbird/translations/fr.json +2 -1
  1831. homeassistant/components/random/translations/es.json +1 -1
  1832. homeassistant/components/random/translations/sv.json +1 -1
  1833. homeassistant/components/recorder/models/statistics.py +1 -0
  1834. homeassistant/components/recorder/services.py +5 -5
  1835. homeassistant/components/recorder/statistics.py +5 -0
  1836. homeassistant/components/recorder/translations/vi.json +5 -0
  1837. homeassistant/components/recorder/util.py +8 -1
  1838. homeassistant/components/recorder/websocket_api.py +4 -0
  1839. homeassistant/components/rehlko/translations/pt.json +1 -1
  1840. homeassistant/components/remote/translations/ca.json +3 -0
  1841. homeassistant/components/renault/manifest.json +1 -1
  1842. homeassistant/components/renault/translations/pt.json +1 -1
  1843. homeassistant/components/reolink/__init__.py +4 -2
  1844. homeassistant/components/reolink/binary_sensor.py +6 -6
  1845. homeassistant/components/reolink/entity.py +41 -4
  1846. homeassistant/components/reolink/icons.json +6 -0
  1847. homeassistant/components/reolink/light.py +34 -4
  1848. homeassistant/components/reolink/manifest.json +1 -1
  1849. homeassistant/components/reolink/number.py +42 -6
  1850. homeassistant/components/reolink/select.py +66 -20
  1851. homeassistant/components/reolink/sensor.py +1 -0
  1852. homeassistant/components/reolink/services.py +1 -1
  1853. homeassistant/components/reolink/siren.py +54 -2
  1854. homeassistant/components/reolink/strings.json +7 -1
  1855. homeassistant/components/reolink/switch.py +41 -3
  1856. homeassistant/components/reolink/translations/cs.json +6 -0
  1857. homeassistant/components/reolink/translations/de.json +6 -0
  1858. homeassistant/components/reolink/translations/en-GB.json +6 -0
  1859. homeassistant/components/reolink/translations/en.json +6 -0
  1860. homeassistant/components/reolink/translations/es.json +6 -0
  1861. homeassistant/components/reolink/translations/et.json +6 -0
  1862. homeassistant/components/reolink/translations/ga.json +6 -0
  1863. homeassistant/components/reolink/translations/it.json +6 -0
  1864. homeassistant/components/reolink/translations/lt.json +6 -0
  1865. homeassistant/components/reolink/translations/mk.json +5 -0
  1866. homeassistant/components/reolink/translations/pt.json +9 -0
  1867. homeassistant/components/reolink/translations/sk.json +6 -0
  1868. homeassistant/components/reolink/translations/zh-Hans.json +6 -0
  1869. homeassistant/components/reolink/translations/zh-Hant.json +6 -0
  1870. homeassistant/components/reolink/views.py +1 -1
  1871. homeassistant/components/rhasspy/manifest.json +1 -1
  1872. homeassistant/components/ridwell/manifest.json +1 -1
  1873. homeassistant/components/rituals_perfume_genie/translations/pt.json +1 -1
  1874. homeassistant/components/roborock/__init__.py +6 -2
  1875. homeassistant/components/roborock/config_flow.py +8 -0
  1876. homeassistant/components/roborock/const.py +1 -0
  1877. homeassistant/components/roborock/coordinator.py +9 -4
  1878. homeassistant/components/roborock/manifest.json +1 -1
  1879. homeassistant/components/roborock/select.py +1 -1
  1880. homeassistant/components/roborock/strings.json +4 -2
  1881. homeassistant/components/roborock/translations/cs.json +2 -0
  1882. homeassistant/components/roborock/translations/de.json +4 -2
  1883. homeassistant/components/roborock/translations/en-GB.json +2 -0
  1884. homeassistant/components/roborock/translations/en.json +2 -0
  1885. homeassistant/components/roborock/translations/es.json +2 -0
  1886. homeassistant/components/roborock/translations/et.json +2 -0
  1887. homeassistant/components/roborock/translations/ga.json +2 -0
  1888. homeassistant/components/roborock/translations/it.json +4 -0
  1889. homeassistant/components/roborock/translations/lt.json +2 -0
  1890. homeassistant/components/roborock/translations/pt.json +3 -1
  1891. homeassistant/components/roborock/translations/ru.json +2 -0
  1892. homeassistant/components/roborock/translations/sk.json +2 -0
  1893. homeassistant/components/roborock/translations/zh-Hans.json +2 -0
  1894. homeassistant/components/roborock/translations/zh-Hant.json +2 -0
  1895. homeassistant/components/roku/browse_media.py +1 -1
  1896. homeassistant/components/route_b_smart_meter/__init__.py +28 -0
  1897. homeassistant/components/route_b_smart_meter/config_flow.py +116 -0
  1898. homeassistant/components/route_b_smart_meter/const.py +12 -0
  1899. homeassistant/components/route_b_smart_meter/coordinator.py +75 -0
  1900. homeassistant/components/route_b_smart_meter/manifest.json +17 -0
  1901. homeassistant/components/route_b_smart_meter/quality_scale.yaml +82 -0
  1902. homeassistant/components/route_b_smart_meter/sensor.py +109 -0
  1903. homeassistant/components/route_b_smart_meter/strings.json +42 -0
  1904. homeassistant/components/route_b_smart_meter/translations/cs.json +42 -0
  1905. homeassistant/components/route_b_smart_meter/translations/de.json +42 -0
  1906. homeassistant/components/route_b_smart_meter/translations/en-GB.json +42 -0
  1907. homeassistant/components/route_b_smart_meter/translations/en.json +42 -0
  1908. homeassistant/components/route_b_smart_meter/translations/he.json +24 -0
  1909. homeassistant/components/route_b_smart_meter/translations/sk.json +42 -0
  1910. homeassistant/components/route_b_smart_meter/translations/zh-Hant.json +42 -0
  1911. homeassistant/components/ruckus_unleashed/translations/de.json +1 -1
  1912. homeassistant/components/rympro/translations/pt.json +1 -1
  1913. homeassistant/components/samsungtv/manifest.json +1 -1
  1914. homeassistant/components/samsungtv/quality_scale.yaml +1 -3
  1915. homeassistant/components/satel_integra/__init__.py +139 -79
  1916. homeassistant/components/satel_integra/alarm_control_panel.py +27 -24
  1917. homeassistant/components/satel_integra/binary_sensor.py +58 -40
  1918. homeassistant/components/satel_integra/config_flow.py +496 -0
  1919. homeassistant/components/satel_integra/const.py +38 -0
  1920. homeassistant/components/satel_integra/diagnostics.py +26 -0
  1921. homeassistant/components/satel_integra/manifest.json +4 -2
  1922. homeassistant/components/satel_integra/strings.json +210 -0
  1923. homeassistant/components/satel_integra/switch.py +31 -29
  1924. homeassistant/components/satel_integra/translations/ca.json +119 -0
  1925. homeassistant/components/satel_integra/translations/cs.json +210 -0
  1926. homeassistant/components/satel_integra/translations/de.json +210 -0
  1927. homeassistant/components/satel_integra/translations/el.json +125 -0
  1928. homeassistant/components/satel_integra/translations/en-GB.json +210 -0
  1929. homeassistant/components/satel_integra/translations/en.json +210 -0
  1930. homeassistant/components/satel_integra/translations/es.json +210 -0
  1931. homeassistant/components/satel_integra/translations/et.json +209 -0
  1932. homeassistant/components/satel_integra/translations/ga.json +210 -0
  1933. homeassistant/components/satel_integra/translations/he.json +132 -0
  1934. homeassistant/components/satel_integra/translations/lt.json +210 -0
  1935. homeassistant/components/satel_integra/translations/nl.json +125 -0
  1936. homeassistant/components/satel_integra/translations/pl.json +9 -0
  1937. homeassistant/components/satel_integra/translations/pt.json +210 -0
  1938. homeassistant/components/satel_integra/translations/sk.json +210 -0
  1939. homeassistant/components/satel_integra/translations/uk.json +62 -0
  1940. homeassistant/components/satel_integra/translations/zh-Hans.json +210 -0
  1941. homeassistant/components/satel_integra/translations/zh-Hant.json +210 -0
  1942. homeassistant/components/scrape/__init__.py +4 -7
  1943. homeassistant/components/scrape/config_flow.py +1 -0
  1944. homeassistant/components/scrape/coordinator.py +13 -0
  1945. homeassistant/components/script/translations/de.json +1 -1
  1946. homeassistant/components/select/services.yaml +4 -1
  1947. homeassistant/components/sense/translations/pt.json +1 -1
  1948. homeassistant/components/sensor/__init__.py +44 -26
  1949. homeassistant/components/sensor/const.py +23 -7
  1950. homeassistant/components/sensor/device_condition.py +3 -0
  1951. homeassistant/components/sensor/device_trigger.py +3 -0
  1952. homeassistant/components/sensor/icons.json +3 -0
  1953. homeassistant/components/sensor/strings.json +2 -0
  1954. homeassistant/components/sensor/translations/cs.json +2 -0
  1955. homeassistant/components/sensor/translations/de.json +2 -0
  1956. homeassistant/components/sensor/translations/en-GB.json +2 -0
  1957. homeassistant/components/sensor/translations/en.json +2 -0
  1958. homeassistant/components/sensor/translations/es.json +2 -0
  1959. homeassistant/components/sensor/translations/et.json +2 -0
  1960. homeassistant/components/sensor/translations/fr.json +2 -0
  1961. homeassistant/components/sensor/translations/ga.json +2 -0
  1962. homeassistant/components/sensor/translations/he.json +2 -0
  1963. homeassistant/components/sensor/translations/lt.json +2 -0
  1964. homeassistant/components/sensor/translations/pt.json +2 -0
  1965. homeassistant/components/sensor/translations/ru.json +2 -0
  1966. homeassistant/components/sensor/translations/sk.json +2 -0
  1967. homeassistant/components/sensor/translations/zh-Hans.json +2 -0
  1968. homeassistant/components/sensor/translations/zh-Hant.json +2 -0
  1969. homeassistant/components/sensorpush_cloud/translations/pt.json +1 -1
  1970. homeassistant/components/sensoterra/translations/pt.json +2 -2
  1971. homeassistant/components/sftp_storage/__init__.py +155 -0
  1972. homeassistant/components/sftp_storage/backup.py +153 -0
  1973. homeassistant/components/sftp_storage/client.py +311 -0
  1974. homeassistant/components/sftp_storage/config_flow.py +236 -0
  1975. homeassistant/components/sftp_storage/const.py +27 -0
  1976. homeassistant/components/sftp_storage/manifest.json +13 -0
  1977. homeassistant/components/sftp_storage/quality_scale.yaml +140 -0
  1978. homeassistant/components/sftp_storage/strings.json +37 -0
  1979. homeassistant/components/sftp_storage/translations/bg.json +18 -0
  1980. homeassistant/components/sftp_storage/translations/ca.json +14 -0
  1981. homeassistant/components/sftp_storage/translations/cs.json +37 -0
  1982. homeassistant/components/sftp_storage/translations/de.json +37 -0
  1983. homeassistant/components/sftp_storage/translations/el.json +14 -0
  1984. homeassistant/components/sftp_storage/translations/en-GB.json +37 -0
  1985. homeassistant/components/sftp_storage/translations/en.json +37 -0
  1986. homeassistant/components/sftp_storage/translations/es.json +37 -0
  1987. homeassistant/components/sftp_storage/translations/et.json +37 -0
  1988. homeassistant/components/sftp_storage/translations/fr.json +37 -0
  1989. homeassistant/components/sftp_storage/translations/ga.json +37 -0
  1990. homeassistant/components/sftp_storage/translations/he.json +18 -0
  1991. homeassistant/components/sftp_storage/translations/it.json +37 -0
  1992. homeassistant/components/sftp_storage/translations/lt.json +37 -0
  1993. homeassistant/components/sftp_storage/translations/nl.json +17 -0
  1994. homeassistant/components/sftp_storage/translations/pl.json +19 -0
  1995. homeassistant/components/sftp_storage/translations/pt.json +37 -0
  1996. homeassistant/components/sftp_storage/translations/ru.json +34 -0
  1997. homeassistant/components/sftp_storage/translations/sk.json +37 -0
  1998. homeassistant/components/sftp_storage/translations/zh-Hans.json +37 -0
  1999. homeassistant/components/sftp_storage/translations/zh-Hant.json +37 -0
  2000. homeassistant/components/shelly/__init__.py +5 -0
  2001. homeassistant/components/shelly/binary_sensor.py +44 -11
  2002. homeassistant/components/shelly/button.py +103 -14
  2003. homeassistant/components/shelly/climate.py +3 -2
  2004. homeassistant/components/shelly/const.py +22 -5
  2005. homeassistant/components/shelly/coordinator.py +5 -0
  2006. homeassistant/components/shelly/cover.py +30 -0
  2007. homeassistant/components/shelly/entity.py +6 -9
  2008. homeassistant/components/shelly/icons.json +6 -0
  2009. homeassistant/components/shelly/light.py +94 -60
  2010. homeassistant/components/shelly/manifest.json +2 -2
  2011. homeassistant/components/shelly/number.py +8 -5
  2012. homeassistant/components/shelly/repairs.py +46 -5
  2013. homeassistant/components/shelly/select.py +4 -0
  2014. homeassistant/components/shelly/sensor.py +224 -44
  2015. homeassistant/components/shelly/strings.json +25 -24
  2016. homeassistant/components/shelly/switch.py +4 -0
  2017. homeassistant/components/shelly/text.py +4 -0
  2018. homeassistant/components/shelly/translations/bg.json +3 -11
  2019. homeassistant/components/shelly/translations/ca.json +7 -14
  2020. homeassistant/components/shelly/translations/cs.json +25 -24
  2021. homeassistant/components/shelly/translations/de.json +25 -24
  2022. homeassistant/components/shelly/translations/el.json +0 -24
  2023. homeassistant/components/shelly/translations/en-GB.json +25 -24
  2024. homeassistant/components/shelly/translations/en.json +25 -24
  2025. homeassistant/components/shelly/translations/es.json +25 -24
  2026. homeassistant/components/shelly/translations/et.json +25 -24
  2027. homeassistant/components/shelly/translations/fi.json +0 -14
  2028. homeassistant/components/shelly/translations/fr.json +18 -24
  2029. homeassistant/components/shelly/translations/ga.json +25 -24
  2030. homeassistant/components/shelly/translations/gl.json +0 -12
  2031. homeassistant/components/shelly/translations/he.json +7 -14
  2032. homeassistant/components/shelly/translations/hu.json +0 -24
  2033. homeassistant/components/shelly/translations/id.json +0 -14
  2034. homeassistant/components/shelly/translations/is.json +0 -13
  2035. homeassistant/components/shelly/translations/it.json +0 -14
  2036. homeassistant/components/shelly/translations/ja.json +0 -14
  2037. homeassistant/components/shelly/translations/ko.json +0 -14
  2038. homeassistant/components/shelly/translations/lt.json +25 -24
  2039. homeassistant/components/shelly/translations/lv.json +0 -14
  2040. homeassistant/components/shelly/translations/mk.json +13 -0
  2041. homeassistant/components/shelly/translations/nb.json +0 -14
  2042. homeassistant/components/shelly/translations/nl.json +12 -24
  2043. homeassistant/components/shelly/translations/pl.json +27 -16
  2044. homeassistant/components/shelly/translations/pt-BR.json +0 -14
  2045. homeassistant/components/shelly/translations/pt.json +26 -25
  2046. homeassistant/components/shelly/translations/ro.json +0 -14
  2047. homeassistant/components/shelly/translations/ru.json +15 -24
  2048. homeassistant/components/shelly/translations/sk.json +25 -24
  2049. homeassistant/components/shelly/translations/sl.json +0 -22
  2050. homeassistant/components/shelly/translations/sv.json +0 -24
  2051. homeassistant/components/shelly/translations/tr.json +0 -14
  2052. homeassistant/components/shelly/translations/uk.json +15 -14
  2053. homeassistant/components/shelly/translations/zh-Hans.json +25 -24
  2054. homeassistant/components/shelly/translations/zh-Hant.json +25 -24
  2055. homeassistant/components/shelly/utils.py +66 -16
  2056. homeassistant/components/shopping_list/intent.py +0 -1
  2057. homeassistant/components/sia/strings.json +3 -3
  2058. homeassistant/components/sia/translations/he.json +2 -1
  2059. homeassistant/components/sia/translations/ru.json +2 -1
  2060. homeassistant/components/signal_messenger/notify.py +5 -2
  2061. homeassistant/components/simplisafe/__init__.py +1 -1
  2062. homeassistant/components/simplisafe/translations/uk.json +7 -0
  2063. homeassistant/components/skybell/translations/pt.json +1 -1
  2064. homeassistant/components/sleep_as_android/manifest.json +1 -1
  2065. homeassistant/components/sleep_as_android/sensor.py +6 -0
  2066. homeassistant/components/sleep_as_android/translations/pt.json +1 -1
  2067. homeassistant/components/slide_local/coordinator.py +10 -7
  2068. homeassistant/components/slide_local/cover.py +0 -2
  2069. homeassistant/components/sma/config_flow.py +2 -2
  2070. homeassistant/components/smarla/translations/pt.json +1 -1
  2071. homeassistant/components/smartthings/__init__.py +3 -0
  2072. homeassistant/components/smartthings/climate.py +31 -8
  2073. homeassistant/components/smartthings/icons.json +7 -0
  2074. homeassistant/components/smartthings/strings.json +22 -4
  2075. homeassistant/components/smartthings/switch.py +7 -0
  2076. homeassistant/components/smartthings/translations/cs.json +19 -1
  2077. homeassistant/components/smartthings/translations/de.json +18 -0
  2078. homeassistant/components/smartthings/translations/el.json +0 -3
  2079. homeassistant/components/smartthings/translations/en-GB.json +19 -1
  2080. homeassistant/components/smartthings/translations/en.json +19 -1
  2081. homeassistant/components/smartthings/translations/es.json +3 -6
  2082. homeassistant/components/smartthings/translations/et.json +3 -6
  2083. homeassistant/components/smartthings/translations/fr.json +28 -3
  2084. homeassistant/components/smartthings/translations/ga.json +3 -6
  2085. homeassistant/components/smartthings/translations/he.json +5 -0
  2086. homeassistant/components/smartthings/translations/hu.json +0 -6
  2087. homeassistant/components/smartthings/translations/it.json +5 -0
  2088. homeassistant/components/smartthings/translations/ko.json +0 -2
  2089. homeassistant/components/smartthings/translations/lt.json +3 -6
  2090. homeassistant/components/smartthings/translations/pt.json +4 -7
  2091. homeassistant/components/smartthings/translations/sk.json +19 -1
  2092. homeassistant/components/smartthings/translations/sv.json +0 -6
  2093. homeassistant/components/smartthings/translations/tr.json +0 -6
  2094. homeassistant/components/smartthings/translations/uk.json +16 -0
  2095. homeassistant/components/smartthings/translations/zh-Hans.json +3 -6
  2096. homeassistant/components/smartthings/translations/zh-Hant.json +19 -1
  2097. homeassistant/components/smarttub/translations/pt.json +1 -1
  2098. homeassistant/components/snmp/device_tracker.py +7 -0
  2099. homeassistant/components/snooz/translations/es.json +1 -1
  2100. homeassistant/components/solarlog/manifest.json +1 -1
  2101. homeassistant/components/sonos/__init__.py +3 -0
  2102. homeassistant/components/sonos/const.py +1 -0
  2103. homeassistant/components/sonos/manifest.json +2 -1
  2104. homeassistant/components/sonos/media_browser.py +1 -1
  2105. homeassistant/components/sonos/media_player.py +46 -129
  2106. homeassistant/components/sonos/services.py +143 -0
  2107. homeassistant/components/sql/__init__.py +52 -15
  2108. homeassistant/components/sql/config_flow.py +115 -76
  2109. homeassistant/components/sql/const.py +1 -0
  2110. homeassistant/components/sql/sensor.py +6 -6
  2111. homeassistant/components/sql/strings.json +51 -29
  2112. homeassistant/components/sql/translations/bg.json +5 -14
  2113. homeassistant/components/sql/translations/ca.json +0 -26
  2114. homeassistant/components/sql/translations/cs.json +50 -28
  2115. homeassistant/components/sql/translations/de.json +50 -28
  2116. homeassistant/components/sql/translations/el.json +2 -34
  2117. homeassistant/components/sql/translations/en-GB.json +50 -28
  2118. homeassistant/components/sql/translations/en.json +50 -28
  2119. homeassistant/components/sql/translations/es.json +50 -28
  2120. homeassistant/components/sql/translations/et.json +50 -28
  2121. homeassistant/components/sql/translations/fi.json +0 -26
  2122. homeassistant/components/sql/translations/fr.json +52 -26
  2123. homeassistant/components/sql/translations/ga.json +47 -29
  2124. homeassistant/components/sql/translations/gl.json +1 -14
  2125. homeassistant/components/sql/translations/he.json +16 -26
  2126. homeassistant/components/sql/translations/hu.json +2 -34
  2127. homeassistant/components/sql/translations/id.json +0 -21
  2128. homeassistant/components/sql/translations/it.json +5 -26
  2129. homeassistant/components/sql/translations/ja.json +2 -34
  2130. homeassistant/components/sql/translations/ko.json +0 -26
  2131. homeassistant/components/sql/translations/lt.json +50 -28
  2132. homeassistant/components/sql/translations/nb.json +0 -23
  2133. homeassistant/components/sql/translations/nl.json +19 -24
  2134. homeassistant/components/sql/translations/pl.json +0 -22
  2135. homeassistant/components/sql/translations/pt-BR.json +0 -25
  2136. homeassistant/components/sql/translations/pt.json +52 -26
  2137. homeassistant/components/sql/translations/ro.json +0 -25
  2138. homeassistant/components/sql/translations/ru.json +49 -28
  2139. homeassistant/components/sql/translations/sk.json +50 -28
  2140. homeassistant/components/sql/translations/sl.json +4 -28
  2141. homeassistant/components/sql/translations/sv.json +2 -34
  2142. homeassistant/components/sql/translations/tr.json +2 -34
  2143. homeassistant/components/sql/translations/uk.json +1 -26
  2144. homeassistant/components/sql/translations/vi.json +0 -24
  2145. homeassistant/components/sql/translations/zh-Hans.json +50 -28
  2146. homeassistant/components/sql/translations/zh-Hant.json +50 -28
  2147. homeassistant/components/squeezebox/browse_media.py +8 -2
  2148. homeassistant/components/squeezebox/update.py +1 -1
  2149. homeassistant/components/ssdp/server.py +47 -43
  2150. homeassistant/components/starlink/coordinator.py +5 -11
  2151. homeassistant/components/starlink/sensor.py +61 -19
  2152. homeassistant/components/statistics/__init__.py +1 -6
  2153. homeassistant/components/statistics/config_flow.py +1 -0
  2154. homeassistant/components/stookwijzer/translations/es.json +1 -1
  2155. homeassistant/components/switch/translations/ca.json +3 -0
  2156. homeassistant/components/switchbot/__init__.py +12 -2
  2157. homeassistant/components/switchbot/config_flow.py +87 -5
  2158. homeassistant/components/switchbot/const.py +18 -0
  2159. homeassistant/components/switchbot/entity.py +4 -0
  2160. homeassistant/components/switchbot/icons.json +24 -1
  2161. homeassistant/components/switchbot/manifest.json +1 -1
  2162. homeassistant/components/switchbot/sensor.py +34 -8
  2163. homeassistant/components/switchbot/strings.json +42 -1
  2164. homeassistant/components/switchbot/switch.py +61 -2
  2165. homeassistant/components/switchbot/translations/bg.json +35 -3
  2166. homeassistant/components/switchbot/translations/ca.json +6 -0
  2167. homeassistant/components/switchbot/translations/cs.json +43 -2
  2168. homeassistant/components/switchbot/translations/de.json +43 -2
  2169. homeassistant/components/switchbot/translations/el.json +10 -8
  2170. homeassistant/components/switchbot/translations/en-GB.json +43 -2
  2171. homeassistant/components/switchbot/translations/en.json +43 -2
  2172. homeassistant/components/switchbot/translations/es.json +44 -3
  2173. homeassistant/components/switchbot/translations/et.json +43 -2
  2174. homeassistant/components/switchbot/translations/fr.json +0 -5
  2175. homeassistant/components/switchbot/translations/ga.json +43 -2
  2176. homeassistant/components/switchbot/translations/he.json +6 -0
  2177. homeassistant/components/switchbot/translations/hu.json +0 -8
  2178. homeassistant/components/switchbot/translations/it.json +26 -0
  2179. homeassistant/components/switchbot/translations/ja.json +0 -8
  2180. homeassistant/components/switchbot/translations/lt.json +44 -3
  2181. homeassistant/components/switchbot/translations/nl.json +20 -6
  2182. homeassistant/components/switchbot/translations/pl.json +0 -5
  2183. homeassistant/components/switchbot/translations/pt-BR.json +0 -5
  2184. homeassistant/components/switchbot/translations/pt.json +43 -2
  2185. homeassistant/components/switchbot/translations/ru.json +19 -1
  2186. homeassistant/components/switchbot/translations/sk.json +43 -2
  2187. homeassistant/components/switchbot/translations/sv.json +0 -8
  2188. homeassistant/components/switchbot/translations/tr.json +0 -8
  2189. homeassistant/components/switchbot/translations/uk.json +26 -0
  2190. homeassistant/components/switchbot/translations/zh-Hans.json +43 -2
  2191. homeassistant/components/switchbot/translations/zh-Hant.json +43 -2
  2192. homeassistant/components/switchbot_cloud/__init__.py +46 -1
  2193. homeassistant/components/switchbot_cloud/binary_sensor.py +46 -0
  2194. homeassistant/components/switchbot_cloud/climate.py +47 -6
  2195. homeassistant/components/switchbot_cloud/const.py +24 -0
  2196. homeassistant/components/switchbot_cloud/humidifier.py +155 -0
  2197. homeassistant/components/switchbot_cloud/icons.json +33 -0
  2198. homeassistant/components/switchbot_cloud/light.py +8 -2
  2199. homeassistant/components/switchbot_cloud/manifest.json +7 -2
  2200. homeassistant/components/switchbot_cloud/sensor.py +61 -1
  2201. homeassistant/components/switchbot_cloud/strings.json +21 -0
  2202. homeassistant/components/switchbot_cloud/switch.py +2 -5
  2203. homeassistant/components/switchbot_cloud/translations/ca.json +13 -0
  2204. homeassistant/components/switchbot_cloud/translations/cs.json +21 -0
  2205. homeassistant/components/switchbot_cloud/translations/de.json +21 -0
  2206. homeassistant/components/switchbot_cloud/translations/el.json +13 -0
  2207. homeassistant/components/switchbot_cloud/translations/en-GB.json +21 -0
  2208. homeassistant/components/switchbot_cloud/translations/en.json +21 -0
  2209. homeassistant/components/switchbot_cloud/translations/es.json +21 -0
  2210. homeassistant/components/switchbot_cloud/translations/et.json +21 -0
  2211. homeassistant/components/switchbot_cloud/translations/ga.json +21 -0
  2212. homeassistant/components/switchbot_cloud/translations/he.json +13 -0
  2213. homeassistant/components/switchbot_cloud/translations/it.json +18 -0
  2214. homeassistant/components/switchbot_cloud/translations/lt.json +21 -0
  2215. homeassistant/components/switchbot_cloud/translations/nl.json +13 -0
  2216. homeassistant/components/switchbot_cloud/translations/pt.json +21 -0
  2217. homeassistant/components/switchbot_cloud/translations/ru.json +15 -0
  2218. homeassistant/components/switchbot_cloud/translations/sk.json +21 -0
  2219. homeassistant/components/switchbot_cloud/translations/zh-Hans.json +21 -0
  2220. homeassistant/components/switchbot_cloud/translations/zh-Hant.json +21 -0
  2221. homeassistant/components/synology_dsm/__init__.py +5 -2
  2222. homeassistant/components/synology_dsm/binary_sensor.py +5 -2
  2223. homeassistant/components/synology_dsm/button.py +6 -4
  2224. homeassistant/components/synology_dsm/camera.py +11 -5
  2225. homeassistant/components/synology_dsm/coordinator.py +7 -4
  2226. homeassistant/components/synology_dsm/entity.py +22 -14
  2227. homeassistant/components/synology_dsm/media_source.py +16 -9
  2228. homeassistant/components/synology_dsm/sensor.py +64 -38
  2229. homeassistant/components/synology_dsm/services.py +3 -2
  2230. homeassistant/components/synology_dsm/switch.py +13 -9
  2231. homeassistant/components/synology_dsm/update.py +8 -5
  2232. homeassistant/components/system_bridge/manifest.json +1 -1
  2233. homeassistant/components/system_bridge/sensor.py +9 -0
  2234. homeassistant/components/system_bridge/strings.json +3 -0
  2235. homeassistant/components/system_bridge/translations/cs.json +3 -0
  2236. homeassistant/components/system_bridge/translations/de.json +3 -0
  2237. homeassistant/components/system_bridge/translations/en-GB.json +3 -0
  2238. homeassistant/components/system_bridge/translations/en.json +3 -0
  2239. homeassistant/components/system_bridge/translations/es.json +3 -0
  2240. homeassistant/components/system_bridge/translations/et.json +3 -0
  2241. homeassistant/components/system_bridge/translations/ga.json +3 -0
  2242. homeassistant/components/system_bridge/translations/lt.json +3 -0
  2243. homeassistant/components/system_bridge/translations/nl.json +3 -0
  2244. homeassistant/components/system_bridge/translations/pt.json +3 -0
  2245. homeassistant/components/system_bridge/translations/ru.json +3 -0
  2246. homeassistant/components/system_bridge/translations/sk.json +3 -0
  2247. homeassistant/components/system_bridge/translations/zh-Hans.json +3 -0
  2248. homeassistant/components/system_bridge/translations/zh-Hant.json +3 -0
  2249. homeassistant/components/systemmonitor/binary_sensor.py +3 -9
  2250. homeassistant/components/systemmonitor/const.py +4 -0
  2251. homeassistant/components/systemmonitor/coordinator.py +27 -3
  2252. homeassistant/components/systemmonitor/sensor.py +25 -110
  2253. homeassistant/components/systemmonitor/util.py +0 -6
  2254. homeassistant/components/tado/translations/it.json +6 -0
  2255. homeassistant/components/tag/manifest.json +1 -1
  2256. homeassistant/components/tasmota/camera.py +110 -0
  2257. homeassistant/components/tasmota/const.py +1 -0
  2258. homeassistant/components/tasmota/manifest.json +1 -1
  2259. homeassistant/components/tautulli/translations/de.json +2 -2
  2260. homeassistant/components/technove/translations/de.json +1 -1
  2261. homeassistant/components/tedee/translations/de.json +2 -2
  2262. homeassistant/components/telegram_bot/__init__.py +39 -0
  2263. homeassistant/components/telegram_bot/bot.py +22 -0
  2264. homeassistant/components/telegram_bot/const.py +14 -0
  2265. homeassistant/components/telegram_bot/icons.json +3 -0
  2266. homeassistant/components/telegram_bot/services.yaml +32 -0
  2267. homeassistant/components/telegram_bot/strings.json +37 -0
  2268. homeassistant/components/telegram_bot/translations/cs.json +37 -0
  2269. homeassistant/components/telegram_bot/translations/de.json +37 -0
  2270. homeassistant/components/telegram_bot/translations/el.json +11 -0
  2271. homeassistant/components/telegram_bot/translations/en-GB.json +37 -0
  2272. homeassistant/components/telegram_bot/translations/en.json +37 -0
  2273. homeassistant/components/telegram_bot/translations/es.json +37 -0
  2274. homeassistant/components/telegram_bot/translations/et.json +37 -0
  2275. homeassistant/components/telegram_bot/translations/ga.json +37 -0
  2276. homeassistant/components/telegram_bot/translations/he.json +15 -0
  2277. homeassistant/components/telegram_bot/translations/lt.json +37 -0
  2278. homeassistant/components/telegram_bot/translations/nl.json +11 -0
  2279. homeassistant/components/telegram_bot/translations/pt.json +39 -2
  2280. homeassistant/components/telegram_bot/translations/ru.json +34 -0
  2281. homeassistant/components/telegram_bot/translations/sk.json +37 -0
  2282. homeassistant/components/telegram_bot/translations/zh-Hans.json +37 -0
  2283. homeassistant/components/telegram_bot/translations/zh-Hant.json +37 -0
  2284. homeassistant/components/template/config.py +35 -10
  2285. homeassistant/components/template/config_flow.py +1 -1
  2286. homeassistant/components/template/strings.json +20 -20
  2287. homeassistant/components/template/translations/ca.json +17 -0
  2288. homeassistant/components/template/translations/cs.json +4 -4
  2289. homeassistant/components/template/translations/de.json +4 -4
  2290. homeassistant/components/template/translations/el.json +10 -2
  2291. homeassistant/components/template/translations/en-GB.json +4 -4
  2292. homeassistant/components/template/translations/en.json +4 -4
  2293. homeassistant/components/template/translations/es.json +5 -5
  2294. homeassistant/components/template/translations/et.json +4 -4
  2295. homeassistant/components/template/translations/fr.json +5 -4
  2296. homeassistant/components/template/translations/ga.json +4 -4
  2297. homeassistant/components/template/translations/he.json +4 -4
  2298. homeassistant/components/template/translations/it.json +16 -0
  2299. homeassistant/components/template/translations/lt.json +20 -6
  2300. homeassistant/components/template/translations/nl.json +4 -2
  2301. homeassistant/components/template/translations/pt.json +6 -6
  2302. homeassistant/components/template/translations/ru.json +4 -4
  2303. homeassistant/components/template/translations/sk.json +4 -4
  2304. homeassistant/components/template/translations/sv.json +1 -1
  2305. homeassistant/components/template/translations/zh-Hans.json +4 -4
  2306. homeassistant/components/template/translations/zh-Hant.json +4 -4
  2307. homeassistant/components/template/trigger_entity.py +17 -5
  2308. homeassistant/components/tesla_fleet/strings.json +2 -2
  2309. homeassistant/components/teslemetry/icons.json +3 -0
  2310. homeassistant/components/teslemetry/services.py +3 -3
  2311. homeassistant/components/teslemetry/strings.json +3 -0
  2312. homeassistant/components/teslemetry/switch.py +50 -27
  2313. homeassistant/components/teslemetry/translations/cs.json +3 -0
  2314. homeassistant/components/teslemetry/translations/de.json +4 -1
  2315. homeassistant/components/teslemetry/translations/en-GB.json +3 -0
  2316. homeassistant/components/teslemetry/translations/en.json +3 -0
  2317. homeassistant/components/teslemetry/translations/es.json +3 -0
  2318. homeassistant/components/teslemetry/translations/et.json +3 -0
  2319. homeassistant/components/teslemetry/translations/ga.json +3 -0
  2320. homeassistant/components/teslemetry/translations/it.json +5 -0
  2321. homeassistant/components/teslemetry/translations/ko.json +5 -0
  2322. homeassistant/components/teslemetry/translations/lt.json +3 -0
  2323. homeassistant/components/teslemetry/translations/pt.json +5 -2
  2324. homeassistant/components/teslemetry/translations/sk.json +3 -0
  2325. homeassistant/components/teslemetry/translations/zh-Hans.json +3 -0
  2326. homeassistant/components/teslemetry/translations/zh-Hant.json +3 -0
  2327. homeassistant/components/thread/discovery.py +1 -0
  2328. homeassistant/components/threshold/__init__.py +1 -8
  2329. homeassistant/components/threshold/config_flow.py +1 -0
  2330. homeassistant/components/tibber/manifest.json +1 -1
  2331. homeassistant/components/tibber/sensor.py +3 -4
  2332. homeassistant/components/tibber/services.py +0 -1
  2333. homeassistant/components/tile/translations/pt.json +1 -1
  2334. homeassistant/components/tod/translations/sv.json +2 -2
  2335. homeassistant/components/todo/intent.py +0 -2
  2336. homeassistant/components/togrill/__init__.py +6 -1
  2337. homeassistant/components/togrill/icons.json +21 -0
  2338. homeassistant/components/togrill/number.py +79 -26
  2339. homeassistant/components/togrill/select.py +176 -0
  2340. homeassistant/components/togrill/strings.json +40 -0
  2341. homeassistant/components/togrill/translations/ca.json +10 -0
  2342. homeassistant/components/togrill/translations/cs.json +40 -0
  2343. homeassistant/components/togrill/translations/de.json +40 -0
  2344. homeassistant/components/togrill/translations/el.json +6 -0
  2345. homeassistant/components/togrill/translations/en-GB.json +40 -0
  2346. homeassistant/components/togrill/translations/en.json +40 -0
  2347. homeassistant/components/togrill/translations/es.json +40 -0
  2348. homeassistant/components/togrill/translations/et.json +40 -0
  2349. homeassistant/components/togrill/translations/ga.json +40 -0
  2350. homeassistant/components/togrill/translations/he.json +15 -0
  2351. homeassistant/components/togrill/translations/it.json +44 -0
  2352. homeassistant/components/togrill/translations/lt.json +40 -0
  2353. homeassistant/components/togrill/translations/nl.json +21 -0
  2354. homeassistant/components/togrill/translations/pl.json +18 -1
  2355. homeassistant/components/togrill/translations/pt.json +40 -0
  2356. homeassistant/components/togrill/translations/sk.json +40 -0
  2357. homeassistant/components/togrill/translations/sv.json +13 -0
  2358. homeassistant/components/togrill/translations/zh-Hans.json +40 -0
  2359. homeassistant/components/togrill/translations/zh-Hant.json +40 -0
  2360. homeassistant/components/tolo/config_flow.py +47 -17
  2361. homeassistant/components/tolo/strings.json +2 -1
  2362. homeassistant/components/tolo/translations/cs.json +2 -1
  2363. homeassistant/components/tolo/translations/de.json +2 -1
  2364. homeassistant/components/tolo/translations/en-GB.json +2 -1
  2365. homeassistant/components/tolo/translations/en.json +2 -1
  2366. homeassistant/components/tolo/translations/et.json +2 -1
  2367. homeassistant/components/tolo/translations/he.json +2 -1
  2368. homeassistant/components/tolo/translations/lt.json +2 -1
  2369. homeassistant/components/tolo/translations/pt.json +2 -1
  2370. homeassistant/components/tolo/translations/sk.json +2 -1
  2371. homeassistant/components/tolo/translations/zh-Hans.json +2 -1
  2372. homeassistant/components/tolo/translations/zh-Hant.json +2 -1
  2373. homeassistant/components/tomorrowio/translations/vi.json +1 -0
  2374. homeassistant/components/totalconnect/translations/pt.json +1 -1
  2375. homeassistant/components/tractive/translations/de.json +1 -1
  2376. homeassistant/components/tractive/translations/pt.json +1 -1
  2377. homeassistant/components/trafikverket_ferry/translations/uk.json +22 -0
  2378. homeassistant/components/trafikverket_train/translations/pt.json +1 -1
  2379. homeassistant/components/trafikverket_weatherstation/translations/uk.json +13 -0
  2380. homeassistant/components/tts/__init__.py +101 -31
  2381. homeassistant/components/tuya/__init__.py +11 -75
  2382. homeassistant/components/tuya/alarm_control_panel.py +7 -11
  2383. homeassistant/components/tuya/binary_sensor.py +39 -88
  2384. homeassistant/components/tuya/button.py +8 -14
  2385. homeassistant/components/tuya/camera.py +8 -14
  2386. homeassistant/components/tuya/climate.py +12 -24
  2387. homeassistant/components/tuya/const.py +527 -0
  2388. homeassistant/components/tuya/cover.py +63 -36
  2389. homeassistant/components/tuya/diagnostics.py +7 -9
  2390. homeassistant/components/tuya/entity.py +4 -2
  2391. homeassistant/components/tuya/event.py +10 -13
  2392. homeassistant/components/tuya/fan.py +12 -23
  2393. homeassistant/components/tuya/humidifier.py +8 -14
  2394. homeassistant/components/tuya/light.py +45 -96
  2395. homeassistant/components/tuya/manifest.json +1 -1
  2396. homeassistant/components/tuya/number.py +61 -70
  2397. homeassistant/components/tuya/scene.py +3 -3
  2398. homeassistant/components/tuya/select.py +52 -76
  2399. homeassistant/components/tuya/sensor.py +214 -168
  2400. homeassistant/components/tuya/siren.py +11 -22
  2401. homeassistant/components/tuya/strings.json +116 -3
  2402. homeassistant/components/tuya/switch.py +168 -145
  2403. homeassistant/components/tuya/translations/bg.json +32 -0
  2404. homeassistant/components/tuya/translations/ca.json +6 -0
  2405. homeassistant/components/tuya/translations/cs.json +113 -0
  2406. homeassistant/components/tuya/translations/de.json +113 -0
  2407. homeassistant/components/tuya/translations/el.json +28 -0
  2408. homeassistant/components/tuya/translations/en-GB.json +113 -0
  2409. homeassistant/components/tuya/translations/en.json +113 -0
  2410. homeassistant/components/tuya/translations/es.json +104 -0
  2411. homeassistant/components/tuya/translations/et.json +104 -0
  2412. homeassistant/components/tuya/translations/fr.json +6 -0
  2413. homeassistant/components/tuya/translations/ga.json +104 -0
  2414. homeassistant/components/tuya/translations/he.json +32 -0
  2415. homeassistant/components/tuya/translations/it.json +68 -0
  2416. homeassistant/components/tuya/translations/lt.json +113 -0
  2417. homeassistant/components/tuya/translations/nl.json +29 -0
  2418. homeassistant/components/tuya/translations/pt.json +113 -0
  2419. homeassistant/components/tuya/translations/ru.json +12 -0
  2420. homeassistant/components/tuya/translations/sk.json +113 -0
  2421. homeassistant/components/tuya/translations/sl.json +25 -0
  2422. homeassistant/components/tuya/translations/uk.json +11 -0
  2423. homeassistant/components/tuya/translations/zh-Hans.json +113 -0
  2424. homeassistant/components/tuya/translations/zh-Hant.json +113 -0
  2425. homeassistant/components/tuya/vacuum.py +6 -6
  2426. homeassistant/components/tuya/valve.py +12 -11
  2427. homeassistant/components/twitch/coordinator.py +3 -0
  2428. homeassistant/components/unifi/manifest.json +1 -1
  2429. homeassistant/components/unifiprotect/repairs.py +2 -11
  2430. homeassistant/components/unifiprotect/translations/pt.json +1 -1
  2431. homeassistant/components/universal/media_player.py +1 -1
  2432. homeassistant/components/upcloud/manifest.json +1 -1
  2433. homeassistant/components/update/translations/ca.json +3 -0
  2434. homeassistant/components/uptimerobot/binary_sensor.py +23 -11
  2435. homeassistant/components/uptimerobot/config_flow.py +27 -0
  2436. homeassistant/components/uptimerobot/quality_scale.yaml +2 -6
  2437. homeassistant/components/uptimerobot/sensor.py +32 -14
  2438. homeassistant/components/uptimerobot/strings.json +9 -0
  2439. homeassistant/components/uptimerobot/switch.py +23 -11
  2440. homeassistant/components/uptimerobot/translations/bg.json +6 -0
  2441. homeassistant/components/uptimerobot/translations/ca.json +6 -0
  2442. homeassistant/components/uptimerobot/translations/cs.json +9 -0
  2443. homeassistant/components/uptimerobot/translations/de.json +9 -0
  2444. homeassistant/components/uptimerobot/translations/el.json +9 -0
  2445. homeassistant/components/uptimerobot/translations/en-GB.json +9 -0
  2446. homeassistant/components/uptimerobot/translations/en.json +9 -0
  2447. homeassistant/components/uptimerobot/translations/es.json +9 -0
  2448. homeassistant/components/uptimerobot/translations/et.json +9 -0
  2449. homeassistant/components/uptimerobot/translations/ga.json +9 -0
  2450. homeassistant/components/uptimerobot/translations/he.json +6 -0
  2451. homeassistant/components/uptimerobot/translations/it.json +9 -0
  2452. homeassistant/components/uptimerobot/translations/lt.json +9 -0
  2453. homeassistant/components/uptimerobot/translations/nl.json +6 -0
  2454. homeassistant/components/uptimerobot/translations/pt.json +9 -0
  2455. homeassistant/components/uptimerobot/translations/ru.json +9 -0
  2456. homeassistant/components/uptimerobot/translations/sk.json +9 -0
  2457. homeassistant/components/uptimerobot/translations/zh-Hans.json +9 -0
  2458. homeassistant/components/uptimerobot/translations/zh-Hant.json +9 -0
  2459. homeassistant/components/usage_prediction/__init__.py +89 -0
  2460. homeassistant/components/usage_prediction/common_control.py +239 -0
  2461. homeassistant/components/usage_prediction/const.py +13 -0
  2462. homeassistant/components/usage_prediction/manifest.json +10 -0
  2463. homeassistant/components/usage_prediction/models.py +24 -0
  2464. homeassistant/components/usage_prediction/strings.json +3 -0
  2465. homeassistant/components/usage_prediction/translations/cs.json +3 -0
  2466. homeassistant/components/usage_prediction/translations/de.json +3 -0
  2467. homeassistant/components/usage_prediction/translations/en-GB.json +3 -0
  2468. homeassistant/components/usage_prediction/translations/en.json +3 -0
  2469. homeassistant/components/usage_prediction/translations/es.json +3 -0
  2470. homeassistant/components/usage_prediction/translations/ga.json +3 -0
  2471. homeassistant/components/usage_prediction/translations/lt.json +3 -0
  2472. homeassistant/components/usage_prediction/translations/pt.json +3 -0
  2473. homeassistant/components/usage_prediction/translations/sk.json +3 -0
  2474. homeassistant/components/usage_prediction/translations/zh-Hans.json +3 -0
  2475. homeassistant/components/usage_prediction/translations/zh-Hant.json +3 -0
  2476. homeassistant/components/vacuum/intent.py +3 -1
  2477. homeassistant/components/vallox/translations/mk.json +9 -0
  2478. homeassistant/components/valve/translations/pl.json +1 -0
  2479. homeassistant/components/velbus/translations/de.json +1 -1
  2480. homeassistant/components/verisure/alarm_control_panel.py +18 -7
  2481. homeassistant/components/verisure/lock.py +28 -27
  2482. homeassistant/components/verisure/switch.py +1 -1
  2483. homeassistant/components/verisure/translations/pt.json +2 -2
  2484. homeassistant/components/vesync/__init__.py +20 -50
  2485. homeassistant/components/vesync/binary_sensor.py +14 -7
  2486. homeassistant/components/vesync/common.py +14 -26
  2487. homeassistant/components/vesync/config_flow.py +42 -12
  2488. homeassistant/components/vesync/const.py +10 -87
  2489. homeassistant/components/vesync/coordinator.py +17 -10
  2490. homeassistant/components/vesync/diagnostics.py +37 -29
  2491. homeassistant/components/vesync/entity.py +2 -2
  2492. homeassistant/components/vesync/fan.py +74 -74
  2493. homeassistant/components/vesync/humidifier.py +32 -34
  2494. homeassistant/components/vesync/light.py +24 -16
  2495. homeassistant/components/vesync/manifest.json +4 -3
  2496. homeassistant/components/vesync/number.py +27 -13
  2497. homeassistant/components/vesync/select.py +42 -25
  2498. homeassistant/components/vesync/sensor.py +34 -85
  2499. homeassistant/components/vesync/switch.py +21 -17
  2500. homeassistant/components/vesync/translations/pt.json +2 -2
  2501. homeassistant/components/vicare/sensor.py +9 -0
  2502. homeassistant/components/vicare/strings.json +3 -0
  2503. homeassistant/components/vicare/translations/cs.json +3 -0
  2504. homeassistant/components/vicare/translations/de.json +3 -0
  2505. homeassistant/components/vicare/translations/en-GB.json +3 -0
  2506. homeassistant/components/vicare/translations/en.json +3 -0
  2507. homeassistant/components/vicare/translations/es.json +3 -0
  2508. homeassistant/components/vicare/translations/et.json +3 -0
  2509. homeassistant/components/vicare/translations/ga.json +3 -0
  2510. homeassistant/components/vicare/translations/it.json +3 -0
  2511. homeassistant/components/vicare/translations/lt.json +3 -0
  2512. homeassistant/components/vicare/translations/pt.json +4 -1
  2513. homeassistant/components/vicare/translations/sk.json +3 -0
  2514. homeassistant/components/vicare/translations/zh-Hans.json +3 -0
  2515. homeassistant/components/vicare/translations/zh-Hant.json +3 -0
  2516. homeassistant/components/victron_remote_monitoring/__init__.py +34 -0
  2517. homeassistant/components/victron_remote_monitoring/config_flow.py +255 -0
  2518. homeassistant/components/victron_remote_monitoring/const.py +9 -0
  2519. homeassistant/components/victron_remote_monitoring/coordinator.py +98 -0
  2520. homeassistant/components/victron_remote_monitoring/manifest.json +11 -0
  2521. homeassistant/components/victron_remote_monitoring/quality_scale.yaml +66 -0
  2522. homeassistant/components/victron_remote_monitoring/sensor.py +250 -0
  2523. homeassistant/components/victron_remote_monitoring/strings.json +102 -0
  2524. homeassistant/components/victron_remote_monitoring/translations/ca.json +25 -0
  2525. homeassistant/components/victron_remote_monitoring/translations/cs.json +102 -0
  2526. homeassistant/components/victron_remote_monitoring/translations/de.json +102 -0
  2527. homeassistant/components/victron_remote_monitoring/translations/en-GB.json +102 -0
  2528. homeassistant/components/victron_remote_monitoring/translations/en.json +102 -0
  2529. homeassistant/components/victron_remote_monitoring/translations/es.json +102 -0
  2530. homeassistant/components/victron_remote_monitoring/translations/et.json +102 -0
  2531. homeassistant/components/victron_remote_monitoring/translations/fy.json +24 -0
  2532. homeassistant/components/victron_remote_monitoring/translations/ga.json +102 -0
  2533. homeassistant/components/victron_remote_monitoring/translations/he.json +25 -0
  2534. homeassistant/components/victron_remote_monitoring/translations/lt.json +102 -0
  2535. homeassistant/components/victron_remote_monitoring/translations/mk.json +60 -0
  2536. homeassistant/components/victron_remote_monitoring/translations/nl.json +25 -0
  2537. homeassistant/components/victron_remote_monitoring/translations/pt.json +102 -0
  2538. homeassistant/components/victron_remote_monitoring/translations/ru.json +40 -0
  2539. homeassistant/components/victron_remote_monitoring/translations/sk.json +102 -0
  2540. homeassistant/components/victron_remote_monitoring/translations/zh-Hans.json +102 -0
  2541. homeassistant/components/victron_remote_monitoring/translations/zh-Hant.json +102 -0
  2542. homeassistant/components/voip/manifest.json +1 -1
  2543. homeassistant/components/voip/translations/cs.json +1 -1
  2544. homeassistant/components/voip/translations/de.json +1 -1
  2545. homeassistant/components/voip/translations/fr.json +1 -1
  2546. homeassistant/components/voip/translations/he.json +1 -1
  2547. homeassistant/components/voip/translations/it.json +1 -1
  2548. homeassistant/components/voip/translations/lt.json +1 -1
  2549. homeassistant/components/voip/translations/pt.json +2 -2
  2550. homeassistant/components/voip/translations/ru.json +1 -1
  2551. homeassistant/components/voip/translations/zh-Hans.json +1 -1
  2552. homeassistant/components/volvo/__init__.py +19 -17
  2553. homeassistant/components/volvo/api.py +18 -0
  2554. homeassistant/components/volvo/binary_sensor.py +1 -1
  2555. homeassistant/components/volvo/coordinator.py +92 -53
  2556. homeassistant/components/volvo/entity.py +1 -1
  2557. homeassistant/components/volvo/sensor.py +1 -1
  2558. homeassistant/components/volvo/translations/en-GB.json +1 -1
  2559. homeassistant/components/volvo/translations/pt.json +1 -1
  2560. homeassistant/components/volvooncall/__init__.py +30 -55
  2561. homeassistant/components/volvooncall/config_flow.py +5 -111
  2562. homeassistant/components/volvooncall/const.py +1 -64
  2563. homeassistant/components/volvooncall/manifest.json +2 -3
  2564. homeassistant/components/volvooncall/strings.json +8 -13
  2565. homeassistant/components/volvooncall/translations/bg.json +1 -21
  2566. homeassistant/components/volvooncall/translations/bn.json +1 -7
  2567. homeassistant/components/volvooncall/translations/ca.json +1 -21
  2568. homeassistant/components/volvooncall/translations/cs.json +8 -13
  2569. homeassistant/components/volvooncall/translations/da.json +1 -20
  2570. homeassistant/components/volvooncall/translations/de.json +8 -13
  2571. homeassistant/components/volvooncall/translations/el.json +1 -23
  2572. homeassistant/components/volvooncall/translations/en-GB.json +8 -13
  2573. homeassistant/components/volvooncall/translations/en.json +8 -13
  2574. homeassistant/components/volvooncall/translations/es.json +8 -13
  2575. homeassistant/components/volvooncall/translations/et.json +8 -13
  2576. homeassistant/components/volvooncall/translations/fi.json +1 -21
  2577. homeassistant/components/volvooncall/translations/fr.json +1 -21
  2578. homeassistant/components/volvooncall/translations/fy.json +1 -21
  2579. homeassistant/components/volvooncall/translations/ga.json +1 -21
  2580. homeassistant/components/volvooncall/translations/he.json +1 -20
  2581. homeassistant/components/volvooncall/translations/hu.json +1 -21
  2582. homeassistant/components/volvooncall/translations/id.json +1 -21
  2583. homeassistant/components/volvooncall/translations/it.json +1 -21
  2584. homeassistant/components/volvooncall/translations/ja.json +1 -21
  2585. homeassistant/components/volvooncall/translations/ko.json +1 -21
  2586. homeassistant/components/volvooncall/translations/lt.json +8 -13
  2587. homeassistant/components/volvooncall/translations/lv.json +1 -19
  2588. homeassistant/components/volvooncall/translations/nb.json +1 -21
  2589. homeassistant/components/volvooncall/translations/nl.json +1 -21
  2590. homeassistant/components/volvooncall/translations/pl.json +1 -21
  2591. homeassistant/components/volvooncall/translations/pt-BR.json +1 -21
  2592. homeassistant/components/volvooncall/translations/pt.json +8 -13
  2593. homeassistant/components/volvooncall/translations/ro.json +1 -21
  2594. homeassistant/components/volvooncall/translations/ru.json +8 -11
  2595. homeassistant/components/volvooncall/translations/sk.json +8 -13
  2596. homeassistant/components/volvooncall/translations/sl.json +1 -20
  2597. homeassistant/components/volvooncall/translations/sv.json +1 -21
  2598. homeassistant/components/volvooncall/translations/tr.json +1 -21
  2599. homeassistant/components/volvooncall/translations/uk.json +1 -21
  2600. homeassistant/components/volvooncall/translations/vi.json +1 -7
  2601. homeassistant/components/volvooncall/translations/zh-Hans.json +8 -13
  2602. homeassistant/components/volvooncall/translations/zh-Hant.json +8 -13
  2603. homeassistant/components/wake_on_lan/__init__.py +0 -6
  2604. homeassistant/components/wake_on_lan/config_flow.py +1 -0
  2605. homeassistant/components/waterfurnace/manifest.json +1 -1
  2606. homeassistant/components/watergate/translations/de.json +2 -2
  2607. homeassistant/components/weatherflow/__init__.py +1 -0
  2608. homeassistant/components/weatherflow/event.py +104 -0
  2609. homeassistant/components/weatherflow/icons.json +8 -0
  2610. homeassistant/components/weatherflow/strings.json +8 -0
  2611. homeassistant/components/weatherflow/translations/cs.json +8 -0
  2612. homeassistant/components/weatherflow/translations/de.json +8 -0
  2613. homeassistant/components/weatherflow/translations/en-GB.json +8 -0
  2614. homeassistant/components/weatherflow/translations/en.json +8 -0
  2615. homeassistant/components/weatherflow/translations/es.json +9 -1
  2616. homeassistant/components/weatherflow/translations/et.json +8 -0
  2617. homeassistant/components/weatherflow/translations/ga.json +8 -0
  2618. homeassistant/components/weatherflow/translations/lt.json +8 -0
  2619. homeassistant/components/weatherflow/translations/nl.json +8 -0
  2620. homeassistant/components/weatherflow/translations/pt.json +8 -0
  2621. homeassistant/components/weatherflow/translations/sk.json +8 -0
  2622. homeassistant/components/weatherflow/translations/zh-Hans.json +8 -0
  2623. homeassistant/components/weatherflow/translations/zh-Hant.json +8 -0
  2624. homeassistant/components/webhook/trigger.py +10 -3
  2625. homeassistant/components/webostv/translations/de.json +2 -2
  2626. homeassistant/components/whirlpool/binary_sensor.py +1 -0
  2627. homeassistant/components/whirlpool/climate.py +24 -29
  2628. homeassistant/components/whirlpool/entity.py +32 -6
  2629. homeassistant/components/whirlpool/manifest.json +2 -2
  2630. homeassistant/components/whirlpool/quality_scale.yaml +5 -15
  2631. homeassistant/components/whirlpool/sensor.py +1 -0
  2632. homeassistant/components/whirlpool/strings.json +3 -0
  2633. homeassistant/components/whirlpool/translations/cs.json +3 -0
  2634. homeassistant/components/whirlpool/translations/de.json +3 -0
  2635. homeassistant/components/whirlpool/translations/en-GB.json +3 -0
  2636. homeassistant/components/whirlpool/translations/en.json +3 -0
  2637. homeassistant/components/whirlpool/translations/es.json +3 -0
  2638. homeassistant/components/whirlpool/translations/et.json +3 -0
  2639. homeassistant/components/whirlpool/translations/ga.json +3 -0
  2640. homeassistant/components/whirlpool/translations/it.json +5 -0
  2641. homeassistant/components/whirlpool/translations/lt.json +3 -0
  2642. homeassistant/components/whirlpool/translations/pt.json +3 -0
  2643. homeassistant/components/whirlpool/translations/ru.json +3 -0
  2644. homeassistant/components/whirlpool/translations/sk.json +3 -0
  2645. homeassistant/components/whirlpool/translations/zh-Hans.json +3 -0
  2646. homeassistant/components/whirlpool/translations/zh-Hant.json +3 -0
  2647. homeassistant/components/wmspro/cover.py +24 -11
  2648. homeassistant/components/workday/calendar.py +104 -0
  2649. homeassistant/components/workday/const.py +1 -1
  2650. homeassistant/components/workday/manifest.json +1 -1
  2651. homeassistant/components/workday/strings.json +5 -0
  2652. homeassistant/components/workday/translations/ca.json +5 -0
  2653. homeassistant/components/workday/translations/cs.json +5 -0
  2654. homeassistant/components/workday/translations/de.json +5 -0
  2655. homeassistant/components/workday/translations/el.json +5 -0
  2656. homeassistant/components/workday/translations/en-GB.json +5 -0
  2657. homeassistant/components/workday/translations/en.json +5 -0
  2658. homeassistant/components/workday/translations/es.json +5 -0
  2659. homeassistant/components/workday/translations/et.json +5 -0
  2660. homeassistant/components/workday/translations/fr.json +5 -0
  2661. homeassistant/components/workday/translations/ga.json +5 -0
  2662. homeassistant/components/workday/translations/he.json +5 -0
  2663. homeassistant/components/workday/translations/lt.json +5 -0
  2664. homeassistant/components/workday/translations/nl.json +5 -0
  2665. homeassistant/components/workday/translations/pt.json +5 -0
  2666. homeassistant/components/workday/translations/ru.json +5 -0
  2667. homeassistant/components/workday/translations/sk.json +5 -0
  2668. homeassistant/components/workday/translations/uk.json +7 -0
  2669. homeassistant/components/workday/translations/zh-Hans.json +5 -0
  2670. homeassistant/components/workday/translations/zh-Hant.json +5 -0
  2671. homeassistant/components/wyoming/manifest.json +1 -1
  2672. homeassistant/components/wyoming/translations/cs.json +1 -1
  2673. homeassistant/components/wyoming/translations/de.json +1 -1
  2674. homeassistant/components/wyoming/translations/fr.json +1 -1
  2675. homeassistant/components/wyoming/translations/he.json +1 -1
  2676. homeassistant/components/wyoming/translations/it.json +1 -1
  2677. homeassistant/components/wyoming/translations/lt.json +1 -1
  2678. homeassistant/components/wyoming/translations/pt.json +1 -1
  2679. homeassistant/components/wyoming/translations/ru.json +1 -1
  2680. homeassistant/components/wyoming/translations/zh-Hans.json +1 -1
  2681. homeassistant/components/yale/lock.py +13 -19
  2682. homeassistant/components/yale/manifest.json +1 -1
  2683. homeassistant/components/yale_smart_alarm/translations/pt.json +1 -1
  2684. homeassistant/components/yalexs_ble/__init__.py +0 -12
  2685. homeassistant/components/yalexs_ble/config_flow.py +2 -2
  2686. homeassistant/components/yalexs_ble/translations/pt.json +2 -2
  2687. homeassistant/components/yalexs_ble/translations/ru.json +12 -0
  2688. homeassistant/components/zabbix/manifest.json +1 -1
  2689. homeassistant/components/zeroconf/manifest.json +1 -1
  2690. homeassistant/components/zha/__init__.py +1 -1
  2691. homeassistant/components/zha/api.py +1 -1
  2692. homeassistant/components/zha/config_flow.py +251 -76
  2693. homeassistant/components/zha/cover.py +1 -15
  2694. homeassistant/components/zha/manifest.json +1 -1
  2695. homeassistant/components/zha/radio_manager.py +81 -82
  2696. homeassistant/components/zha/repairs/network_settings_inconsistent.py +1 -1
  2697. homeassistant/components/zha/strings.json +80 -7
  2698. homeassistant/components/zha/translations/bg.json +0 -5
  2699. homeassistant/components/zha/translations/bn.json +1 -2
  2700. homeassistant/components/zha/translations/ca.json +1 -5
  2701. homeassistant/components/zha/translations/cs.json +81 -8
  2702. homeassistant/components/zha/translations/da.json +1 -6
  2703. homeassistant/components/zha/translations/de.json +81 -8
  2704. homeassistant/components/zha/translations/el.json +0 -4
  2705. homeassistant/components/zha/translations/en-GB.json +81 -8
  2706. homeassistant/components/zha/translations/en.json +81 -8
  2707. homeassistant/components/zha/translations/es.json +0 -5
  2708. homeassistant/components/zha/translations/et.json +0 -5
  2709. homeassistant/components/zha/translations/fi.json +1 -6
  2710. homeassistant/components/zha/translations/fr.json +74 -5
  2711. homeassistant/components/zha/translations/fy.json +0 -3
  2712. homeassistant/components/zha/translations/ga.json +0 -5
  2713. homeassistant/components/zha/translations/gsw.json +1 -4
  2714. homeassistant/components/zha/translations/he.json +0 -3
  2715. homeassistant/components/zha/translations/hu.json +0 -5
  2716. homeassistant/components/zha/translations/id.json +1 -6
  2717. homeassistant/components/zha/translations/it.json +1 -6
  2718. homeassistant/components/zha/translations/ja.json +0 -5
  2719. homeassistant/components/zha/translations/ko.json +1 -6
  2720. homeassistant/components/zha/translations/lt.json +81 -8
  2721. homeassistant/components/zha/translations/nb.json +1 -3
  2722. homeassistant/components/zha/translations/nl.json +0 -5
  2723. homeassistant/components/zha/translations/pl.json +4 -2
  2724. homeassistant/components/zha/translations/pt-BR.json +1 -4
  2725. homeassistant/components/zha/translations/pt.json +0 -5
  2726. homeassistant/components/zha/translations/ro.json +1 -4
  2727. homeassistant/components/zha/translations/ru.json +0 -5
  2728. homeassistant/components/zha/translations/sk.json +81 -8
  2729. homeassistant/components/zha/translations/sl.json +0 -4
  2730. homeassistant/components/zha/translations/sv.json +0 -5
  2731. homeassistant/components/zha/translations/tr.json +0 -5
  2732. homeassistant/components/zha/translations/uk.json +16 -3
  2733. homeassistant/components/zha/translations/zh-Hans.json +81 -8
  2734. homeassistant/components/zha/translations/zh-Hant.json +81 -8
  2735. homeassistant/components/zhong_hong/climate.py +25 -3
  2736. homeassistant/components/zimi/manifest.json +1 -1
  2737. homeassistant/components/zimi/translations/pt.json +1 -1
  2738. homeassistant/components/zone/translations/uk.json +1 -0
  2739. homeassistant/components/zwave_js/__init__.py +25 -7
  2740. homeassistant/components/zwave_js/config_flow.py +102 -24
  2741. homeassistant/components/zwave_js/const.py +3 -0
  2742. homeassistant/components/zwave_js/device_trigger.py +6 -4
  2743. homeassistant/components/zwave_js/strings.json +7 -2
  2744. homeassistant/components/zwave_js/translations/ca.json +0 -1
  2745. homeassistant/components/zwave_js/translations/cs.json +6 -1
  2746. homeassistant/components/zwave_js/translations/de.json +6 -1
  2747. homeassistant/components/zwave_js/translations/el.json +0 -1
  2748. homeassistant/components/zwave_js/translations/en-GB.json +6 -1
  2749. homeassistant/components/zwave_js/translations/en.json +6 -1
  2750. homeassistant/components/zwave_js/translations/es.json +5 -1
  2751. homeassistant/components/zwave_js/translations/et.json +5 -1
  2752. homeassistant/components/zwave_js/translations/fi.json +0 -1
  2753. homeassistant/components/zwave_js/translations/fr.json +1 -1
  2754. homeassistant/components/zwave_js/translations/ga.json +4 -1
  2755. homeassistant/components/zwave_js/translations/hu.json +0 -1
  2756. homeassistant/components/zwave_js/translations/id.json +0 -1
  2757. homeassistant/components/zwave_js/translations/it.json +6 -1
  2758. homeassistant/components/zwave_js/translations/ja.json +0 -1
  2759. homeassistant/components/zwave_js/translations/ko.json +0 -1
  2760. homeassistant/components/zwave_js/translations/lt.json +6 -1
  2761. homeassistant/components/zwave_js/translations/nb.json +0 -1
  2762. homeassistant/components/zwave_js/translations/nl.json +0 -1
  2763. homeassistant/components/zwave_js/translations/pl.json +0 -1
  2764. homeassistant/components/zwave_js/translations/pt-BR.json +0 -1
  2765. homeassistant/components/zwave_js/translations/pt.json +7 -3
  2766. homeassistant/components/zwave_js/translations/ro.json +0 -1
  2767. homeassistant/components/zwave_js/translations/ru.json +1 -1
  2768. homeassistant/components/zwave_js/translations/sk.json +6 -1
  2769. homeassistant/components/zwave_js/translations/sv.json +0 -1
  2770. homeassistant/components/zwave_js/translations/tr.json +0 -1
  2771. homeassistant/components/zwave_js/translations/uk.json +20 -1
  2772. homeassistant/components/zwave_js/translations/vi.json +0 -1
  2773. homeassistant/components/zwave_js/translations/zh-Hans.json +6 -1
  2774. homeassistant/components/zwave_js/translations/zh-Hant.json +6 -1
  2775. homeassistant/components/zwave_js/triggers/event.py +143 -116
  2776. homeassistant/components/zwave_js/triggers/value_updated.py +66 -39
  2777. homeassistant/config_entries.py +38 -7
  2778. homeassistant/const.py +10 -50
  2779. homeassistant/data_entry_flow.py +140 -2
  2780. homeassistant/generated/application_credentials.py +1 -0
  2781. homeassistant/generated/config_flows.py +13 -0
  2782. homeassistant/generated/dhcp.py +8 -0
  2783. homeassistant/generated/entity_platforms.py +54 -0
  2784. homeassistant/generated/integrations.json +84 -20
  2785. homeassistant/generated/usb.py +6 -0
  2786. homeassistant/generated/zeroconf.py +5 -0
  2787. homeassistant/helpers/condition.py +7 -2
  2788. homeassistant/helpers/config_validation.py +22 -5
  2789. homeassistant/helpers/deprecation.py +35 -0
  2790. homeassistant/helpers/device_registry.py +97 -40
  2791. homeassistant/helpers/entity_component.py +2 -48
  2792. homeassistant/helpers/entity_platform.py +1 -1
  2793. homeassistant/helpers/entity_registry.py +2 -1
  2794. homeassistant/helpers/event.py +2 -1
  2795. homeassistant/helpers/intent.py +18 -21
  2796. homeassistant/helpers/llm.py +4 -3
  2797. homeassistant/helpers/schema_config_entry_flow.py +21 -0
  2798. homeassistant/helpers/selector.py +81 -87
  2799. homeassistant/helpers/service.py +87 -36
  2800. homeassistant/helpers/service_info/esphome.py +26 -0
  2801. homeassistant/helpers/target.py +3 -6
  2802. homeassistant/helpers/{template.py → template/__init__.py} +113 -806
  2803. homeassistant/helpers/template/context.py +45 -0
  2804. homeassistant/helpers/template/extensions/__init__.py +17 -0
  2805. homeassistant/helpers/template/extensions/base.py +60 -0
  2806. homeassistant/helpers/template/extensions/base64.py +50 -0
  2807. homeassistant/helpers/template/extensions/collection.py +191 -0
  2808. homeassistant/helpers/template/extensions/crypto.py +64 -0
  2809. homeassistant/helpers/template/extensions/math.py +329 -0
  2810. homeassistant/helpers/template/extensions/regex.py +109 -0
  2811. homeassistant/helpers/template/extensions/string.py +58 -0
  2812. homeassistant/helpers/template/helpers.py +16 -0
  2813. homeassistant/helpers/template/render_info.py +155 -0
  2814. homeassistant/helpers/trigger.py +86 -11
  2815. homeassistant/helpers/trigger_template_entity.py +2 -2
  2816. homeassistant/package_constraints.txt +15 -15
  2817. homeassistant/runner.py +115 -0
  2818. homeassistant/strings.json +1 -1
  2819. homeassistant/util/unit_conversion.py +29 -0
  2820. homeassistant/util/unit_system.py +6 -0
  2821. {homeassistant-2025.9.3.dist-info → homeassistant-2025.10.0b0.dist-info}/METADATA +6 -6
  2822. {homeassistant-2025.9.3.dist-info → homeassistant-2025.10.0b0.dist-info}/RECORD +2827 -2439
  2823. homeassistant/components/google_gemini/__init__.py +0 -1
  2824. homeassistant/components/google_gemini/manifest.json +0 -6
  2825. homeassistant/components/home_connect/repairs.py +0 -60
  2826. homeassistant/components/home_connect/time.py +0 -172
  2827. homeassistant/components/logbook/translations/da.json +0 -3
  2828. homeassistant/components/volvooncall/binary_sensor.py +0 -79
  2829. homeassistant/components/volvooncall/coordinator.py +0 -40
  2830. homeassistant/components/volvooncall/device_tracker.py +0 -72
  2831. homeassistant/components/volvooncall/entity.py +0 -88
  2832. homeassistant/components/volvooncall/errors.py +0 -7
  2833. homeassistant/components/volvooncall/lock.py +0 -80
  2834. homeassistant/components/volvooncall/models.py +0 -100
  2835. homeassistant/components/volvooncall/sensor.py +0 -72
  2836. homeassistant/components/volvooncall/switch.py +0 -78
  2837. {homeassistant-2025.9.3.dist-info → homeassistant-2025.10.0b0.dist-info}/WHEEL +0 -0
  2838. {homeassistant-2025.9.3.dist-info → homeassistant-2025.10.0b0.dist-info}/entry_points.txt +0 -0
  2839. {homeassistant-2025.9.3.dist-info → homeassistant-2025.10.0b0.dist-info}/licenses/LICENSE.md +0 -0
  2840. {homeassistant-2025.9.3.dist-info → homeassistant-2025.10.0b0.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  2841. {homeassistant-2025.9.3.dist-info → homeassistant-2025.10.0b0.dist-info}/top_level.txt +0 -0
@@ -4,15 +4,11 @@ from __future__ import annotations
4
4
 
5
5
  from ast import literal_eval
6
6
  import asyncio
7
- import base64
8
7
  import collections.abc
9
- from collections.abc import Callable, Generator, Iterable, MutableSequence
10
- from contextlib import AbstractContextManager
11
- from contextvars import ContextVar
8
+ from collections.abc import Callable, Generator, Iterable
12
9
  from copy import deepcopy
13
10
  from datetime import date, datetime, time, timedelta
14
11
  from functools import cache, lru_cache, partial, wraps
15
- import hashlib
16
12
  import json
17
13
  import logging
18
14
  import math
@@ -20,26 +16,15 @@ from operator import contains
20
16
  import pathlib
21
17
  import random
22
18
  import re
23
- import statistics
24
19
  from struct import error as StructError, pack, unpack_from
25
20
  import sys
26
- from types import CodeType, TracebackType
27
- from typing import (
28
- TYPE_CHECKING,
29
- Any,
30
- Concatenate,
31
- Literal,
32
- NoReturn,
33
- Self,
34
- cast,
35
- overload,
36
- )
37
- from urllib.parse import urlencode as urllib_urlencode
21
+ from types import CodeType
22
+ from typing import TYPE_CHECKING, Any, Concatenate, Literal, NoReturn, Self, overload
38
23
  import weakref
39
24
 
40
25
  from awesomeversion import AwesomeVersion
41
26
  import jinja2
42
- from jinja2 import pass_context, pass_environment, pass_eval_context
27
+ from jinja2 import pass_context, pass_eval_context
43
28
  from jinja2.runtime import AsyncLoopContext, LoopContext
44
29
  from jinja2.sandbox import ImmutableSandboxedEnvironment
45
30
  from jinja2.utils import Namespace
@@ -66,37 +51,39 @@ from homeassistant.core import (
66
51
  ServiceResponse,
67
52
  State,
68
53
  callback,
69
- split_entity_id,
70
54
  valid_domain,
71
55
  valid_entity_id,
72
56
  )
73
57
  from homeassistant.exceptions import TemplateError
74
- from homeassistant.loader import bind_hass
75
- from homeassistant.util import (
76
- convert,
77
- dt as dt_util,
78
- location as location_util,
79
- slugify as slugify_util,
58
+ from homeassistant.helpers import (
59
+ area_registry as ar,
60
+ device_registry as dr,
61
+ entity_registry as er,
62
+ floor_registry as fr,
63
+ issue_registry as ir,
64
+ label_registry as lr,
65
+ location as loc_helper,
80
66
  )
67
+ from homeassistant.helpers.deprecation import deprecated_function
68
+ from homeassistant.helpers.singleton import singleton
69
+ from homeassistant.helpers.translation import async_translate_state
70
+ from homeassistant.helpers.typing import TemplateVarsType
71
+ from homeassistant.loader import bind_hass
72
+ from homeassistant.util import convert, dt as dt_util, location as location_util
81
73
  from homeassistant.util.async_ import run_callback_threadsafe
82
74
  from homeassistant.util.hass_dict import HassKey
83
75
  from homeassistant.util.json import JSON_DECODE_EXCEPTIONS, json_loads
84
76
  from homeassistant.util.read_only_dict import ReadOnlyDict
85
77
  from homeassistant.util.thread import ThreadWithException
86
78
 
87
- from . import (
88
- area_registry,
89
- device_registry,
90
- entity_registry,
91
- floor_registry as fr,
92
- issue_registry,
93
- label_registry,
94
- location as loc_helper,
79
+ from .context import (
80
+ TemplateContextManager as TemplateContextManager,
81
+ render_with_context,
82
+ template_context_manager,
83
+ template_cv,
95
84
  )
96
- from .deprecation import deprecated_function
97
- from .singleton import singleton
98
- from .translation import async_translate_state
99
- from .typing import TemplateVarsType
85
+ from .helpers import raise_no_default
86
+ from .render_info import RenderInfo, render_info_cv
100
87
 
101
88
  if TYPE_CHECKING:
102
89
  from _typeshed import OptExcInfo
@@ -137,15 +124,6 @@ _COLLECTABLE_STATE_ATTRIBUTES = {
137
124
  "name",
138
125
  }
139
126
 
140
- ALL_STATES_RATE_LIMIT = 60 # seconds
141
- DOMAIN_STATES_RATE_LIMIT = 1 # seconds
142
-
143
- _render_info: ContextVar[RenderInfo | None] = ContextVar("_render_info", default=None)
144
-
145
-
146
- template_cv: ContextVar[tuple[str, str] | None] = ContextVar(
147
- "template_cv", default=None
148
- )
149
127
 
150
128
  #
151
129
  # CACHED_TEMPLATE_STATES is a rough estimate of the number of entities
@@ -210,7 +188,7 @@ def async_setup(hass: HomeAssistant) -> bool:
210
188
  if new_size > current_size:
211
189
  lru.set_size(new_size)
212
190
 
213
- from .event import async_track_time_interval # noqa: PLC0415
191
+ from homeassistant.helpers.event import async_track_time_interval # noqa: PLC0415
214
192
 
215
193
  cancel = async_track_time_interval(
216
194
  hass, _async_adjust_lru_sizes, timedelta(minutes=10)
@@ -344,14 +322,6 @@ RESULT_WRAPPERS: dict[type, type] = {kls: gen_result_wrapper(kls) for kls in _ty
344
322
  RESULT_WRAPPERS[tuple] = TupleWrapper
345
323
 
346
324
 
347
- def _true(arg: str) -> bool:
348
- return True
349
-
350
-
351
- def _false(arg: str) -> bool:
352
- return False
353
-
354
-
355
325
  @lru_cache(maxsize=EVAL_CACHE_SIZE)
356
326
  def _cached_parse_result(render_result: str) -> Any:
357
327
  """Parse a result and cache the result."""
@@ -381,126 +351,6 @@ def _cached_parse_result(render_result: str) -> Any:
381
351
  return render_result
382
352
 
383
353
 
384
- class RenderInfo:
385
- """Holds information about a template render."""
386
-
387
- __slots__ = (
388
- "_result",
389
- "all_states",
390
- "all_states_lifecycle",
391
- "domains",
392
- "domains_lifecycle",
393
- "entities",
394
- "exception",
395
- "filter",
396
- "filter_lifecycle",
397
- "has_time",
398
- "is_static",
399
- "rate_limit",
400
- "template",
401
- )
402
-
403
- def __init__(self, template: Template) -> None:
404
- """Initialise."""
405
- self.template = template
406
- # Will be set sensibly once frozen.
407
- self.filter_lifecycle: Callable[[str], bool] = _true
408
- self.filter: Callable[[str], bool] = _true
409
- self._result: str | None = None
410
- self.is_static = False
411
- self.exception: TemplateError | None = None
412
- self.all_states = False
413
- self.all_states_lifecycle = False
414
- self.domains: collections.abc.Set[str] = set()
415
- self.domains_lifecycle: collections.abc.Set[str] = set()
416
- self.entities: collections.abc.Set[str] = set()
417
- self.rate_limit: float | None = None
418
- self.has_time = False
419
-
420
- def __repr__(self) -> str:
421
- """Representation of RenderInfo."""
422
- return (
423
- f"<RenderInfo {self.template}"
424
- f" all_states={self.all_states}"
425
- f" all_states_lifecycle={self.all_states_lifecycle}"
426
- f" domains={self.domains}"
427
- f" domains_lifecycle={self.domains_lifecycle}"
428
- f" entities={self.entities}"
429
- f" rate_limit={self.rate_limit}"
430
- f" has_time={self.has_time}"
431
- f" exception={self.exception}"
432
- f" is_static={self.is_static}"
433
- ">"
434
- )
435
-
436
- def _filter_domains_and_entities(self, entity_id: str) -> bool:
437
- """Template should re-render if the entity state changes.
438
-
439
- Only when we match specific domains or entities.
440
- """
441
- return (
442
- split_entity_id(entity_id)[0] in self.domains or entity_id in self.entities
443
- )
444
-
445
- def _filter_entities(self, entity_id: str) -> bool:
446
- """Template should re-render if the entity state changes.
447
-
448
- Only when we match specific entities.
449
- """
450
- return entity_id in self.entities
451
-
452
- def _filter_lifecycle_domains(self, entity_id: str) -> bool:
453
- """Template should re-render if the entity is added or removed.
454
-
455
- Only with domains watched.
456
- """
457
- return split_entity_id(entity_id)[0] in self.domains_lifecycle
458
-
459
- def result(self) -> str:
460
- """Results of the template computation."""
461
- if self.exception is not None:
462
- raise self.exception
463
- return cast(str, self._result)
464
-
465
- def _freeze_static(self) -> None:
466
- self.is_static = True
467
- self._freeze_sets()
468
- self.all_states = False
469
-
470
- def _freeze_sets(self) -> None:
471
- self.entities = frozenset(self.entities)
472
- self.domains = frozenset(self.domains)
473
- self.domains_lifecycle = frozenset(self.domains_lifecycle)
474
-
475
- def _freeze(self) -> None:
476
- self._freeze_sets()
477
-
478
- if self.rate_limit is None:
479
- if self.all_states or self.exception:
480
- self.rate_limit = ALL_STATES_RATE_LIMIT
481
- elif self.domains or self.domains_lifecycle:
482
- self.rate_limit = DOMAIN_STATES_RATE_LIMIT
483
-
484
- if self.exception:
485
- return
486
-
487
- if not self.all_states_lifecycle:
488
- if self.domains_lifecycle:
489
- self.filter_lifecycle = self._filter_lifecycle_domains
490
- else:
491
- self.filter_lifecycle = _false
492
-
493
- if self.all_states:
494
- return
495
-
496
- if self.domains:
497
- self.filter = self._filter_domains_and_entities
498
- elif self.entities:
499
- self.filter = self._filter_entities
500
- else:
501
- self.filter = _false
502
-
503
-
504
354
  class Template:
505
355
  """Class to hold a template and manage caching and rendering."""
506
356
 
@@ -525,7 +375,10 @@ class Template:
525
375
  Note: A valid hass instance should always be passed in. The hass parameter
526
376
  will be non optional in Home Assistant Core 2025.10.
527
377
  """
528
- from .frame import ReportBehavior, report_usage # noqa: PLC0415
378
+ from homeassistant.helpers.frame import ( # noqa: PLC0415
379
+ ReportBehavior,
380
+ report_usage,
381
+ )
529
382
 
530
383
  if not isinstance(template, str):
531
384
  raise TypeError("Expected template to be a string")
@@ -579,7 +432,7 @@ class Template:
579
432
  self._compiled_code = compiled
580
433
  return
581
434
 
582
- with _template_context_manager as cm:
435
+ with template_context_manager as cm:
583
436
  cm.set_template(self.template, "compiling")
584
437
  try:
585
438
  self._compiled_code = self._env.compile(self.template)
@@ -638,7 +491,7 @@ class Template:
638
491
  kwargs.update(variables)
639
492
 
640
493
  try:
641
- render_result = _render_with_context(self.template, compiled, **kwargs)
494
+ render_result = render_with_context(self.template, compiled, **kwargs)
642
495
  except Exception as err:
643
496
  raise TemplateError(err) from err
644
497
 
@@ -700,7 +553,7 @@ class Template:
700
553
  def _render_template() -> None:
701
554
  assert self.hass is not None, "hass variable not set on template"
702
555
  try:
703
- _render_with_context(self.template, compiled, **kwargs)
556
+ render_with_context(self.template, compiled, **kwargs)
704
557
  except TimeoutError:
705
558
  pass
706
559
  except Exception: # noqa: BLE001
@@ -741,7 +594,7 @@ class Template:
741
594
  if not self.hass:
742
595
  raise RuntimeError(f"hass not set while rendering {self}")
743
596
 
744
- if _render_info.get() is not None:
597
+ if render_info_cv.get() is not None:
745
598
  raise RuntimeError(
746
599
  f"RenderInfo already set while rendering {self}, "
747
600
  "this usually indicates the template is being rendered "
@@ -753,7 +606,7 @@ class Template:
753
606
  render_info._freeze_static() # noqa: SLF001
754
607
  return render_info
755
608
 
756
- token = _render_info.set(render_info)
609
+ token = render_info_cv.set(render_info)
757
610
  try:
758
611
  render_info._result = self.async_render( # noqa: SLF001
759
612
  variables, strict=strict, log_fn=log_fn, **kwargs
@@ -761,7 +614,7 @@ class Template:
761
614
  except TemplateError as ex:
762
615
  render_info.exception = ex
763
616
  finally:
764
- _render_info.reset(token)
617
+ render_info_cv.reset(token)
765
618
 
766
619
  render_info._freeze() # noqa: SLF001
767
620
  return render_info
@@ -811,7 +664,7 @@ class Template:
811
664
  pass
812
665
 
813
666
  try:
814
- render_result = _render_with_context(
667
+ render_result = render_with_context(
815
668
  self.template, compiled, **variables
816
669
  ).strip()
817
670
  except jinja2.TemplateError as ex:
@@ -918,11 +771,11 @@ class AllStates:
918
771
  __getitem__ = __getattr__
919
772
 
920
773
  def _collect_all(self) -> None:
921
- if (render_info := _render_info.get()) is not None:
774
+ if (render_info := render_info_cv.get()) is not None:
922
775
  render_info.all_states = True
923
776
 
924
777
  def _collect_all_lifecycle(self) -> None:
925
- if (render_info := _render_info.get()) is not None:
778
+ if (render_info := render_info_cv.get()) is not None:
926
779
  render_info.all_states_lifecycle = True
927
780
 
928
781
  def __iter__(self) -> Generator[TemplateState]:
@@ -973,7 +826,7 @@ class StateTranslated:
973
826
  state_value = state.state
974
827
  domain = state.domain
975
828
  device_class = state.attributes.get("device_class")
976
- entry = entity_registry.async_get(self._hass).async_get(entity_id)
829
+ entry = er.async_get(self._hass).async_get(entity_id)
977
830
  platform = None if entry is None else entry.platform
978
831
  translation_key = None if entry is None else entry.translation_key
979
832
 
@@ -1008,11 +861,11 @@ class DomainStates:
1008
861
  __getitem__ = __getattr__
1009
862
 
1010
863
  def _collect_domain(self) -> None:
1011
- if (entity_collect := _render_info.get()) is not None:
864
+ if (entity_collect := render_info_cv.get()) is not None:
1012
865
  entity_collect.domains.add(self._domain) # type: ignore[attr-defined]
1013
866
 
1014
867
  def _collect_domain_lifecycle(self) -> None:
1015
- if (entity_collect := _render_info.get()) is not None:
868
+ if (entity_collect := render_info_cv.get()) is not None:
1016
869
  entity_collect.domains_lifecycle.add(self._domain) # type: ignore[attr-defined]
1017
870
 
1018
871
  def __iter__(self) -> Generator[TemplateState]:
@@ -1050,7 +903,7 @@ class TemplateStateBase(State):
1050
903
  self._cache: dict[str, Any] = {}
1051
904
 
1052
905
  def _collect_state(self) -> None:
1053
- if self._collect and (render_info := _render_info.get()):
906
+ if self._collect and (render_info := render_info_cv.get()):
1054
907
  render_info.entities.add(self._entity_id) # type: ignore[attr-defined]
1055
908
 
1056
909
  # Jinja will try __getitem__ first and it avoids the need
@@ -1059,7 +912,7 @@ class TemplateStateBase(State):
1059
912
  """Return a property as an attribute for jinja."""
1060
913
  if item in _COLLECTABLE_STATE_ATTRIBUTES:
1061
914
  # _collect_state inlined here for performance
1062
- if self._collect and (render_info := _render_info.get()):
915
+ if self._collect and (render_info := render_info_cv.get()):
1063
916
  render_info.entities.add(self._entity_id) # type: ignore[attr-defined]
1064
917
  return getattr(self._state, item)
1065
918
  if item == "entity_id":
@@ -1201,7 +1054,7 @@ _create_template_state_no_collect = partial(TemplateState, collect=False)
1201
1054
 
1202
1055
 
1203
1056
  def _collect_state(hass: HomeAssistant, entity_id: str) -> None:
1204
- if (entity_collect := _render_info.get()) is not None:
1057
+ if (entity_collect := render_info_cv.get()) is not None:
1205
1058
  entity_collect.entities.add(entity_id) # type: ignore[attr-defined]
1206
1059
 
1207
1060
 
@@ -1274,7 +1127,7 @@ def forgiving_boolean[_T](
1274
1127
  """Try to convert value to a boolean."""
1275
1128
  try:
1276
1129
  # Import here, not at top-level to avoid circular import
1277
- from . import config_validation as cv # noqa: PLC0415
1130
+ from homeassistant.helpers import config_validation as cv # noqa: PLC0415
1278
1131
 
1279
1132
  return cv.boolean(value)
1280
1133
  except vol.Invalid:
@@ -1299,7 +1152,7 @@ def result_as_boolean(template_result: Any | None) -> bool:
1299
1152
  def expand(hass: HomeAssistant, *args: Any) -> Iterable[State]:
1300
1153
  """Expand out any groups and zones into entity states."""
1301
1154
  # circular import.
1302
- from . import entity as entity_helper # noqa: PLC0415
1155
+ from homeassistant.helpers import entity as entity_helper # noqa: PLC0415
1303
1156
 
1304
1157
  search = list(args)
1305
1158
  found = {}
@@ -1341,8 +1194,8 @@ def expand(hass: HomeAssistant, *args: Any) -> Iterable[State]:
1341
1194
 
1342
1195
  def device_entities(hass: HomeAssistant, _device_id: str) -> Iterable[str]:
1343
1196
  """Get entity ids for entities tied to a device."""
1344
- entity_reg = entity_registry.async_get(hass)
1345
- entries = entity_registry.async_entries_for_device(entity_reg, _device_id)
1197
+ entity_reg = er.async_get(hass)
1198
+ entries = er.async_entries_for_device(entity_reg, _device_id)
1346
1199
  return [entry.entity_id for entry in entries]
1347
1200
 
1348
1201
 
@@ -1360,19 +1213,17 @@ def integration_entities(hass: HomeAssistant, entry_name: str) -> Iterable[str]:
1360
1213
 
1361
1214
  # first try if there are any config entries with a matching title
1362
1215
  entities: list[str] = []
1363
- ent_reg = entity_registry.async_get(hass)
1216
+ ent_reg = er.async_get(hass)
1364
1217
  for entry in hass.config_entries.async_entries():
1365
1218
  if entry.title != entry_name:
1366
1219
  continue
1367
- entries = entity_registry.async_entries_for_config_entry(
1368
- ent_reg, entry.entry_id
1369
- )
1220
+ entries = er.async_entries_for_config_entry(ent_reg, entry.entry_id)
1370
1221
  entities.extend(entry.entity_id for entry in entries)
1371
1222
  if entities:
1372
1223
  return entities
1373
1224
 
1374
1225
  # fallback to just returning all entities for a domain
1375
- from .entity import entity_sources # noqa: PLC0415
1226
+ from homeassistant.helpers.entity import entity_sources # noqa: PLC0415
1376
1227
 
1377
1228
  return [
1378
1229
  entity_id
@@ -1383,7 +1234,7 @@ def integration_entities(hass: HomeAssistant, entry_name: str) -> Iterable[str]:
1383
1234
 
1384
1235
  def config_entry_id(hass: HomeAssistant, entity_id: str) -> str | None:
1385
1236
  """Get an config entry ID from an entity ID."""
1386
- entity_reg = entity_registry.async_get(hass)
1237
+ entity_reg = er.async_get(hass)
1387
1238
  if entity := entity_reg.async_get(entity_id):
1388
1239
  return entity.config_entry_id
1389
1240
  return None
@@ -1391,12 +1242,12 @@ def config_entry_id(hass: HomeAssistant, entity_id: str) -> str | None:
1391
1242
 
1392
1243
  def device_id(hass: HomeAssistant, entity_id_or_device_name: str) -> str | None:
1393
1244
  """Get a device ID from an entity ID or device name."""
1394
- entity_reg = entity_registry.async_get(hass)
1245
+ entity_reg = er.async_get(hass)
1395
1246
  entity = entity_reg.async_get(entity_id_or_device_name)
1396
1247
  if entity is not None:
1397
1248
  return entity.device_id
1398
1249
 
1399
- dev_reg = device_registry.async_get(hass)
1250
+ dev_reg = dr.async_get(hass)
1400
1251
  return next(
1401
1252
  (
1402
1253
  device_id
@@ -1410,13 +1261,13 @@ def device_id(hass: HomeAssistant, entity_id_or_device_name: str) -> str | None:
1410
1261
 
1411
1262
  def device_name(hass: HomeAssistant, lookup_value: str) -> str | None:
1412
1263
  """Get the device name from an device id, or entity id."""
1413
- device_reg = device_registry.async_get(hass)
1264
+ device_reg = dr.async_get(hass)
1414
1265
  if device := device_reg.async_get(lookup_value):
1415
1266
  return device.name_by_user or device.name
1416
1267
 
1417
- ent_reg = entity_registry.async_get(hass)
1268
+ ent_reg = er.async_get(hass)
1418
1269
  # Import here, not at top-level to avoid circular import
1419
- from . import config_validation as cv # noqa: PLC0415
1270
+ from homeassistant.helpers import config_validation as cv # noqa: PLC0415
1420
1271
 
1421
1272
  try:
1422
1273
  cv.entity_id(lookup_value)
@@ -1432,7 +1283,7 @@ def device_name(hass: HomeAssistant, lookup_value: str) -> str | None:
1432
1283
 
1433
1284
  def device_attr(hass: HomeAssistant, device_or_entity_id: str, attr_name: str) -> Any:
1434
1285
  """Get the device specific attribute."""
1435
- device_reg = device_registry.async_get(hass)
1286
+ device_reg = dr.async_get(hass)
1436
1287
  if not isinstance(device_or_entity_id, str):
1437
1288
  raise TemplateError("Must provide a device or entity ID")
1438
1289
  device = None
@@ -1475,14 +1326,14 @@ def is_device_attr(
1475
1326
 
1476
1327
  def issues(hass: HomeAssistant) -> dict[tuple[str, str], dict[str, Any]]:
1477
1328
  """Return all open issues."""
1478
- current_issues = issue_registry.async_get(hass).issues
1329
+ current_issues = ir.async_get(hass).issues
1479
1330
  # Use JSON for safe representation
1480
1331
  return {k: v.to_json() for (k, v) in current_issues.items()}
1481
1332
 
1482
1333
 
1483
1334
  def issue(hass: HomeAssistant, domain: str, issue_id: str) -> dict[str, Any] | None:
1484
1335
  """Get issue by domain and issue_id."""
1485
- result = issue_registry.async_get(hass).async_get_issue(domain, issue_id)
1336
+ result = ir.async_get(hass).async_get_issue(domain, issue_id)
1486
1337
  if result:
1487
1338
  return result.to_json()
1488
1339
  return None
@@ -1505,7 +1356,7 @@ def floor_id(hass: HomeAssistant, lookup_value: Any) -> str | None:
1505
1356
  return floors_list[0].floor_id
1506
1357
 
1507
1358
  if aid := area_id(hass, lookup_value):
1508
- area_reg = area_registry.async_get(hass)
1359
+ area_reg = ar.async_get(hass)
1509
1360
  if area := area_reg.async_get_area(aid):
1510
1361
  return area.floor_id
1511
1362
 
@@ -1519,7 +1370,7 @@ def floor_name(hass: HomeAssistant, lookup_value: str) -> str | None:
1519
1370
  return floor.name
1520
1371
 
1521
1372
  if aid := area_id(hass, lookup_value):
1522
- area_reg = area_registry.async_get(hass)
1373
+ area_reg = ar.async_get(hass)
1523
1374
  if (
1524
1375
  (area := area_reg.async_get_area(aid))
1525
1376
  and area.floor_id
@@ -1542,8 +1393,8 @@ def floor_areas(hass: HomeAssistant, floor_id_or_name: str) -> Iterable[str]:
1542
1393
  if _floor_id is None:
1543
1394
  return []
1544
1395
 
1545
- area_reg = area_registry.async_get(hass)
1546
- entries = area_registry.async_entries_for_floor(area_reg, _floor_id)
1396
+ area_reg = ar.async_get(hass)
1397
+ entries = ar.async_entries_for_floor(area_reg, _floor_id)
1547
1398
  return [entry.id for entry in entries if entry.id]
1548
1399
 
1549
1400
 
@@ -1558,12 +1409,12 @@ def floor_entities(hass: HomeAssistant, floor_id_or_name: str) -> Iterable[str]:
1558
1409
 
1559
1410
  def areas(hass: HomeAssistant) -> Iterable[str | None]:
1560
1411
  """Return all areas."""
1561
- return list(area_registry.async_get(hass).areas)
1412
+ return list(ar.async_get(hass).areas)
1562
1413
 
1563
1414
 
1564
1415
  def area_id(hass: HomeAssistant, lookup_value: str) -> str | None:
1565
1416
  """Get the area ID from an area name, alias, device id, or entity id."""
1566
- area_reg = area_registry.async_get(hass)
1417
+ area_reg = ar.async_get(hass)
1567
1418
  lookup_str = str(lookup_value)
1568
1419
  if area := area_reg.async_get_area_by_name(lookup_str):
1569
1420
  return area.id
@@ -1571,10 +1422,10 @@ def area_id(hass: HomeAssistant, lookup_value: str) -> str | None:
1571
1422
  if areas_list:
1572
1423
  return areas_list[0].id
1573
1424
 
1574
- ent_reg = entity_registry.async_get(hass)
1575
- dev_reg = device_registry.async_get(hass)
1425
+ ent_reg = er.async_get(hass)
1426
+ dev_reg = dr.async_get(hass)
1576
1427
  # Import here, not at top-level to avoid circular import
1577
- from . import config_validation as cv # noqa: PLC0415
1428
+ from homeassistant.helpers import config_validation as cv # noqa: PLC0415
1578
1429
 
1579
1430
  try:
1580
1431
  cv.entity_id(lookup_value)
@@ -1596,7 +1447,7 @@ def area_id(hass: HomeAssistant, lookup_value: str) -> str | None:
1596
1447
  return None
1597
1448
 
1598
1449
 
1599
- def _get_area_name(area_reg: area_registry.AreaRegistry, valid_area_id: str) -> str:
1450
+ def _get_area_name(area_reg: ar.AreaRegistry, valid_area_id: str) -> str:
1600
1451
  """Get area name from valid area ID."""
1601
1452
  area = area_reg.async_get_area(valid_area_id)
1602
1453
  assert area
@@ -1605,14 +1456,14 @@ def _get_area_name(area_reg: area_registry.AreaRegistry, valid_area_id: str) ->
1605
1456
 
1606
1457
  def area_name(hass: HomeAssistant, lookup_value: str) -> str | None:
1607
1458
  """Get the area name from an area id, device id, or entity id."""
1608
- area_reg = area_registry.async_get(hass)
1459
+ area_reg = ar.async_get(hass)
1609
1460
  if area := area_reg.async_get_area(lookup_value):
1610
1461
  return area.name
1611
1462
 
1612
- dev_reg = device_registry.async_get(hass)
1613
- ent_reg = entity_registry.async_get(hass)
1463
+ dev_reg = dr.async_get(hass)
1464
+ ent_reg = er.async_get(hass)
1614
1465
  # Import here, not at top-level to avoid circular import
1615
- from . import config_validation as cv # noqa: PLC0415
1466
+ from homeassistant.helpers import config_validation as cv # noqa: PLC0415
1616
1467
 
1617
1468
  try:
1618
1469
  cv.entity_id(lookup_value)
@@ -1649,19 +1500,18 @@ def area_entities(hass: HomeAssistant, area_id_or_name: str) -> Iterable[str]:
1649
1500
  _area_id = area_id_or_name
1650
1501
  if _area_id is None:
1651
1502
  return []
1652
- ent_reg = entity_registry.async_get(hass)
1503
+ ent_reg = er.async_get(hass)
1653
1504
  entity_ids = [
1654
- entry.entity_id
1655
- for entry in entity_registry.async_entries_for_area(ent_reg, _area_id)
1505
+ entry.entity_id for entry in er.async_entries_for_area(ent_reg, _area_id)
1656
1506
  ]
1657
- dev_reg = device_registry.async_get(hass)
1507
+ dev_reg = dr.async_get(hass)
1658
1508
  # We also need to add entities tied to a device in the area that don't themselves
1659
1509
  # have an area specified since they inherit the area from the device.
1660
1510
  entity_ids.extend(
1661
1511
  [
1662
1512
  entity.entity_id
1663
- for device in device_registry.async_entries_for_area(dev_reg, _area_id)
1664
- for entity in entity_registry.async_entries_for_device(ent_reg, device.id)
1513
+ for device in dr.async_entries_for_area(dev_reg, _area_id)
1514
+ for entity in er.async_entries_for_device(ent_reg, device.id)
1665
1515
  if entity.area_id is None
1666
1516
  ]
1667
1517
  )
@@ -1679,21 +1529,21 @@ def area_devices(hass: HomeAssistant, area_id_or_name: str) -> Iterable[str]:
1679
1529
  _area_id = area_id(hass, area_id_or_name)
1680
1530
  if _area_id is None:
1681
1531
  return []
1682
- dev_reg = device_registry.async_get(hass)
1683
- entries = device_registry.async_entries_for_area(dev_reg, _area_id)
1532
+ dev_reg = dr.async_get(hass)
1533
+ entries = dr.async_entries_for_area(dev_reg, _area_id)
1684
1534
  return [entry.id for entry in entries]
1685
1535
 
1686
1536
 
1687
1537
  def labels(hass: HomeAssistant, lookup_value: Any = None) -> Iterable[str | None]:
1688
1538
  """Return all labels, or those from a area ID, device ID, or entity ID."""
1689
- label_reg = label_registry.async_get(hass)
1539
+ label_reg = lr.async_get(hass)
1690
1540
  if lookup_value is None:
1691
1541
  return list(label_reg.labels)
1692
1542
 
1693
- ent_reg = entity_registry.async_get(hass)
1543
+ ent_reg = er.async_get(hass)
1694
1544
 
1695
1545
  # Import here, not at top-level to avoid circular import
1696
- from . import config_validation as cv # noqa: PLC0415
1546
+ from homeassistant.helpers import config_validation as cv # noqa: PLC0415
1697
1547
 
1698
1548
  lookup_value = str(lookup_value)
1699
1549
 
@@ -1706,12 +1556,12 @@ def labels(hass: HomeAssistant, lookup_value: Any = None) -> Iterable[str | None
1706
1556
  return list(entity.labels)
1707
1557
 
1708
1558
  # Check if this could be a device ID
1709
- dev_reg = device_registry.async_get(hass)
1559
+ dev_reg = dr.async_get(hass)
1710
1560
  if device := dev_reg.async_get(lookup_value):
1711
1561
  return list(device.labels)
1712
1562
 
1713
1563
  # Check if this could be a area ID
1714
- area_reg = area_registry.async_get(hass)
1564
+ area_reg = ar.async_get(hass)
1715
1565
  if area := area_reg.async_get_area(lookup_value):
1716
1566
  return list(area.labels)
1717
1567
 
@@ -1720,7 +1570,7 @@ def labels(hass: HomeAssistant, lookup_value: Any = None) -> Iterable[str | None
1720
1570
 
1721
1571
  def label_id(hass: HomeAssistant, lookup_value: Any) -> str | None:
1722
1572
  """Get the label ID from a label name."""
1723
- label_reg = label_registry.async_get(hass)
1573
+ label_reg = lr.async_get(hass)
1724
1574
  if label := label_reg.async_get_label_by_name(str(lookup_value)):
1725
1575
  return label.label_id
1726
1576
  return None
@@ -1728,7 +1578,7 @@ def label_id(hass: HomeAssistant, lookup_value: Any) -> str | None:
1728
1578
 
1729
1579
  def label_name(hass: HomeAssistant, lookup_value: str) -> str | None:
1730
1580
  """Get the label name from a label ID."""
1731
- label_reg = label_registry.async_get(hass)
1581
+ label_reg = lr.async_get(hass)
1732
1582
  if label := label_reg.async_get_label(lookup_value):
1733
1583
  return label.name
1734
1584
  return None
@@ -1736,7 +1586,7 @@ def label_name(hass: HomeAssistant, lookup_value: str) -> str | None:
1736
1586
 
1737
1587
  def label_description(hass: HomeAssistant, lookup_value: str) -> str | None:
1738
1588
  """Get the label description from a label ID."""
1739
- label_reg = label_registry.async_get(hass)
1589
+ label_reg = lr.async_get(hass)
1740
1590
  if label := label_reg.async_get_label(lookup_value):
1741
1591
  return label.description
1742
1592
  return None
@@ -1755,8 +1605,8 @@ def label_areas(hass: HomeAssistant, label_id_or_name: str) -> Iterable[str]:
1755
1605
  """Return areas for a given label ID or name."""
1756
1606
  if (_label_id := _label_id_or_name(hass, label_id_or_name)) is None:
1757
1607
  return []
1758
- area_reg = area_registry.async_get(hass)
1759
- entries = area_registry.async_entries_for_label(area_reg, _label_id)
1608
+ area_reg = ar.async_get(hass)
1609
+ entries = ar.async_entries_for_label(area_reg, _label_id)
1760
1610
  return [entry.id for entry in entries]
1761
1611
 
1762
1612
 
@@ -1764,8 +1614,8 @@ def label_devices(hass: HomeAssistant, label_id_or_name: str) -> Iterable[str]:
1764
1614
  """Return device IDs for a given label ID or name."""
1765
1615
  if (_label_id := _label_id_or_name(hass, label_id_or_name)) is None:
1766
1616
  return []
1767
- dev_reg = device_registry.async_get(hass)
1768
- entries = device_registry.async_entries_for_label(dev_reg, _label_id)
1617
+ dev_reg = dr.async_get(hass)
1618
+ entries = dr.async_entries_for_label(dev_reg, _label_id)
1769
1619
  return [entry.id for entry in entries]
1770
1620
 
1771
1621
 
@@ -1773,8 +1623,8 @@ def label_entities(hass: HomeAssistant, label_id_or_name: str) -> Iterable[str]:
1773
1623
  """Return entities for a given label ID or name."""
1774
1624
  if (_label_id := _label_id_or_name(hass, label_id_or_name)) is None:
1775
1625
  return []
1776
- ent_reg = entity_registry.async_get(hass)
1777
- entries = entity_registry.async_entries_for_label(ent_reg, _label_id)
1626
+ ent_reg = er.async_get(hass)
1627
+ entries = er.async_entries_for_label(ent_reg, _label_id)
1778
1628
  return [entry.entity_id for entry in entries]
1779
1629
 
1780
1630
 
@@ -1913,7 +1763,7 @@ def distance(hass: HomeAssistant, *args: Any) -> float | None:
1913
1763
 
1914
1764
  def is_hidden_entity(hass: HomeAssistant, entity_id: str) -> bool:
1915
1765
  """Test if an entity is hidden."""
1916
- entity_reg = entity_registry.async_get(hass)
1766
+ entity_reg = er.async_get(hass)
1917
1767
  entry = entity_reg.async_get(entity_id)
1918
1768
  return entry is not None and entry.hidden
1919
1769
 
@@ -1955,7 +1805,7 @@ def has_value(hass: HomeAssistant, entity_id: str) -> bool:
1955
1805
 
1956
1806
  def now(hass: HomeAssistant) -> datetime:
1957
1807
  """Record fetching now."""
1958
- if (render_info := _render_info.get()) is not None:
1808
+ if (render_info := render_info_cv.get()) is not None:
1959
1809
  render_info.has_time = True
1960
1810
 
1961
1811
  return dt_util.now()
@@ -1963,21 +1813,12 @@ def now(hass: HomeAssistant) -> datetime:
1963
1813
 
1964
1814
  def utcnow(hass: HomeAssistant) -> datetime:
1965
1815
  """Record fetching utcnow."""
1966
- if (render_info := _render_info.get()) is not None:
1816
+ if (render_info := render_info_cv.get()) is not None:
1967
1817
  render_info.has_time = True
1968
1818
 
1969
1819
  return dt_util.utcnow()
1970
1820
 
1971
1821
 
1972
- def raise_no_default(function: str, value: Any) -> NoReturn:
1973
- """Log warning if no default is specified."""
1974
- template, action = template_cv.get() or ("", "rendering or compiling")
1975
- raise ValueError(
1976
- f"Template error: {function} got invalid input '{value}' when {action} template"
1977
- f" '{template}' but no default was specified"
1978
- )
1979
-
1980
-
1981
1822
  def forgiving_round(value, precision=0, method="common", default=_SENTINEL):
1982
1823
  """Filter to round a value."""
1983
1824
  try:
@@ -2050,121 +1891,11 @@ def as_function(macro: jinja2.runtime.Macro) -> Callable[..., Any]:
2050
1891
  return wrapper
2051
1892
 
2052
1893
 
2053
- def logarithm(value, base=math.e, default=_SENTINEL):
2054
- """Filter and function to get logarithm of the value with a specific base."""
2055
- try:
2056
- base_float = float(base)
2057
- except (ValueError, TypeError):
2058
- if default is _SENTINEL:
2059
- raise_no_default("log", base)
2060
- return default
2061
- try:
2062
- value_float = float(value)
2063
- return math.log(value_float, base_float)
2064
- except (ValueError, TypeError):
2065
- if default is _SENTINEL:
2066
- raise_no_default("log", value)
2067
- return default
2068
-
2069
-
2070
- def sine(value, default=_SENTINEL):
2071
- """Filter and function to get sine of the value."""
2072
- try:
2073
- return math.sin(float(value))
2074
- except (ValueError, TypeError):
2075
- if default is _SENTINEL:
2076
- raise_no_default("sin", value)
2077
- return default
2078
-
2079
-
2080
- def cosine(value, default=_SENTINEL):
2081
- """Filter and function to get cosine of the value."""
2082
- try:
2083
- return math.cos(float(value))
2084
- except (ValueError, TypeError):
2085
- if default is _SENTINEL:
2086
- raise_no_default("cos", value)
2087
- return default
2088
-
2089
-
2090
- def tangent(value, default=_SENTINEL):
2091
- """Filter and function to get tangent of the value."""
2092
- try:
2093
- return math.tan(float(value))
2094
- except (ValueError, TypeError):
2095
- if default is _SENTINEL:
2096
- raise_no_default("tan", value)
2097
- return default
2098
-
2099
-
2100
- def arc_sine(value, default=_SENTINEL):
2101
- """Filter and function to get arc sine of the value."""
2102
- try:
2103
- return math.asin(float(value))
2104
- except (ValueError, TypeError):
2105
- if default is _SENTINEL:
2106
- raise_no_default("asin", value)
2107
- return default
2108
-
2109
-
2110
- def arc_cosine(value, default=_SENTINEL):
2111
- """Filter and function to get arc cosine of the value."""
2112
- try:
2113
- return math.acos(float(value))
2114
- except (ValueError, TypeError):
2115
- if default is _SENTINEL:
2116
- raise_no_default("acos", value)
2117
- return default
2118
-
2119
-
2120
- def arc_tangent(value, default=_SENTINEL):
2121
- """Filter and function to get arc tangent of the value."""
2122
- try:
2123
- return math.atan(float(value))
2124
- except (ValueError, TypeError):
2125
- if default is _SENTINEL:
2126
- raise_no_default("atan", value)
2127
- return default
2128
-
2129
-
2130
- def arc_tangent2(*args, default=_SENTINEL):
2131
- """Filter and function to calculate four quadrant arc tangent of y / x.
2132
-
2133
- The parameters to atan2 may be passed either in an iterable or as separate arguments
2134
- The default value may be passed either as a positional or in a keyword argument
2135
- """
2136
- try:
2137
- if 1 <= len(args) <= 2 and isinstance(args[0], (list, tuple)):
2138
- if len(args) == 2 and default is _SENTINEL:
2139
- # Default value passed as a positional argument
2140
- default = args[1]
2141
- args = args[0]
2142
- elif len(args) == 3 and default is _SENTINEL:
2143
- # Default value passed as a positional argument
2144
- default = args[2]
2145
-
2146
- return math.atan2(float(args[0]), float(args[1]))
2147
- except (ValueError, TypeError):
2148
- if default is _SENTINEL:
2149
- raise_no_default("atan2", args)
2150
- return default
2151
-
2152
-
2153
1894
  def version(value):
2154
1895
  """Filter and function to get version object of the value."""
2155
1896
  return AwesomeVersion(value)
2156
1897
 
2157
1898
 
2158
- def square_root(value, default=_SENTINEL):
2159
- """Filter and function to get square root of the value."""
2160
- try:
2161
- return math.sqrt(float(value))
2162
- except (ValueError, TypeError):
2163
- if default is _SENTINEL:
2164
- raise_no_default("sqrt", value)
2165
- return default
2166
-
2167
-
2168
1899
  def timestamp_custom(value, date_format=DATE_STR_FORMAT, local=True, default=_SENTINEL):
2169
1900
  """Filter to convert given timestamp to format."""
2170
1901
  try:
@@ -2318,118 +2049,6 @@ def fail_when_undefined(value):
2318
2049
  return value
2319
2050
 
2320
2051
 
2321
- def min_max_from_filter(builtin_filter: Any, name: str) -> Any:
2322
- """Convert a built-in min/max Jinja filter to a global function.
2323
-
2324
- The parameters may be passed as an iterable or as separate arguments.
2325
- """
2326
-
2327
- @pass_environment
2328
- @wraps(builtin_filter)
2329
- def wrapper(environment: jinja2.Environment, *args: Any, **kwargs: Any) -> Any:
2330
- if len(args) == 0:
2331
- raise TypeError(f"{name} expected at least 1 argument, got 0")
2332
-
2333
- if len(args) == 1:
2334
- if isinstance(args[0], Iterable):
2335
- return builtin_filter(environment, args[0], **kwargs)
2336
-
2337
- raise TypeError(f"'{type(args[0]).__name__}' object is not iterable")
2338
-
2339
- return builtin_filter(environment, args, **kwargs)
2340
-
2341
- return pass_environment(wrapper)
2342
-
2343
-
2344
- def average(*args: Any, default: Any = _SENTINEL) -> Any:
2345
- """Filter and function to calculate the arithmetic mean.
2346
-
2347
- Calculates of an iterable or of two or more arguments.
2348
-
2349
- The parameters may be passed as an iterable or as separate arguments.
2350
- """
2351
- if len(args) == 0:
2352
- raise TypeError("average expected at least 1 argument, got 0")
2353
-
2354
- # If first argument is iterable and more than 1 argument provided but not a named
2355
- # default, then use 2nd argument as default.
2356
- if isinstance(args[0], Iterable):
2357
- average_list = args[0]
2358
- if len(args) > 1 and default is _SENTINEL:
2359
- default = args[1]
2360
- elif len(args) == 1:
2361
- raise TypeError(f"'{type(args[0]).__name__}' object is not iterable")
2362
- else:
2363
- average_list = args
2364
-
2365
- try:
2366
- return statistics.fmean(average_list)
2367
- except (TypeError, statistics.StatisticsError):
2368
- if default is _SENTINEL:
2369
- raise_no_default("average", args)
2370
- return default
2371
-
2372
-
2373
- def median(*args: Any, default: Any = _SENTINEL) -> Any:
2374
- """Filter and function to calculate the median.
2375
-
2376
- Calculates median of an iterable of two or more arguments.
2377
-
2378
- The parameters may be passed as an iterable or as separate arguments.
2379
- """
2380
- if len(args) == 0:
2381
- raise TypeError("median expected at least 1 argument, got 0")
2382
-
2383
- # If first argument is a list or tuple and more than 1 argument provided but not a named
2384
- # default, then use 2nd argument as default.
2385
- if isinstance(args[0], Iterable):
2386
- median_list = args[0]
2387
- if len(args) > 1 and default is _SENTINEL:
2388
- default = args[1]
2389
- elif len(args) == 1:
2390
- raise TypeError(f"'{type(args[0]).__name__}' object is not iterable")
2391
- else:
2392
- median_list = args
2393
-
2394
- try:
2395
- return statistics.median(median_list)
2396
- except (TypeError, statistics.StatisticsError):
2397
- if default is _SENTINEL:
2398
- raise_no_default("median", args)
2399
- return default
2400
-
2401
-
2402
- def statistical_mode(*args: Any, default: Any = _SENTINEL) -> Any:
2403
- """Filter and function to calculate the statistical mode.
2404
-
2405
- Calculates mode of an iterable of two or more arguments.
2406
-
2407
- The parameters may be passed as an iterable or as separate arguments.
2408
- """
2409
- if not args:
2410
- raise TypeError("statistical_mode expected at least 1 argument, got 0")
2411
-
2412
- # If first argument is a list or tuple and more than 1 argument provided but not a named
2413
- # default, then use 2nd argument as default.
2414
- if len(args) == 1 and isinstance(args[0], Iterable):
2415
- mode_list = args[0]
2416
- elif isinstance(args[0], list | tuple):
2417
- mode_list = args[0]
2418
- if len(args) > 1 and default is _SENTINEL:
2419
- default = args[1]
2420
- elif len(args) == 1:
2421
- raise TypeError(f"'{type(args[0]).__name__}' object is not iterable")
2422
- else:
2423
- mode_list = args
2424
-
2425
- try:
2426
- return statistics.mode(mode_list)
2427
- except (TypeError, statistics.StatisticsError):
2428
- if default is _SENTINEL:
2429
- raise_no_default("statistical_mode", args)
2430
- return default
2431
-
2432
-
2433
2052
  def forgiving_float(value, default=_SENTINEL):
2434
2053
  """Try to convert value to a float."""
2435
2054
  try:
@@ -2477,31 +2096,6 @@ def is_number(value):
2477
2096
  return True
2478
2097
 
2479
2098
 
2480
- def _is_list(value: Any) -> bool:
2481
- """Return whether a value is a list."""
2482
- return isinstance(value, list)
2483
-
2484
-
2485
- def _is_set(value: Any) -> bool:
2486
- """Return whether a value is a set."""
2487
- return isinstance(value, set)
2488
-
2489
-
2490
- def _is_tuple(value: Any) -> bool:
2491
- """Return whether a value is a tuple."""
2492
- return isinstance(value, tuple)
2493
-
2494
-
2495
- def _to_set(value: Any) -> set[Any]:
2496
- """Convert value to set."""
2497
- return set(value)
2498
-
2499
-
2500
- def _to_tuple(value):
2501
- """Convert value to tuple."""
2502
- return tuple(value)
2503
-
2504
-
2505
2099
  def _is_datetime(value: Any) -> bool:
2506
2100
  """Return whether a value is a datetime."""
2507
2101
  return isinstance(value, datetime)
@@ -2512,61 +2106,6 @@ def _is_string_like(value: Any) -> bool:
2512
2106
  return isinstance(value, (str, bytes, bytearray))
2513
2107
 
2514
2108
 
2515
- def regex_match(value, find="", ignorecase=False):
2516
- """Match value using regex."""
2517
- if not isinstance(value, str):
2518
- value = str(value)
2519
- flags = re.IGNORECASE if ignorecase else 0
2520
- return bool(_regex_cache(find, flags).match(value))
2521
-
2522
-
2523
- _regex_cache = lru_cache(maxsize=128)(re.compile)
2524
-
2525
-
2526
- def regex_replace(value="", find="", replace="", ignorecase=False):
2527
- """Replace using regex."""
2528
- if not isinstance(value, str):
2529
- value = str(value)
2530
- flags = re.IGNORECASE if ignorecase else 0
2531
- return _regex_cache(find, flags).sub(replace, value)
2532
-
2533
-
2534
- def regex_search(value, find="", ignorecase=False):
2535
- """Search using regex."""
2536
- if not isinstance(value, str):
2537
- value = str(value)
2538
- flags = re.IGNORECASE if ignorecase else 0
2539
- return bool(_regex_cache(find, flags).search(value))
2540
-
2541
-
2542
- def regex_findall_index(value, find="", index=0, ignorecase=False):
2543
- """Find all matches using regex and then pick specific match index."""
2544
- return regex_findall(value, find, ignorecase)[index]
2545
-
2546
-
2547
- def regex_findall(value, find="", ignorecase=False):
2548
- """Find all matches using regex."""
2549
- if not isinstance(value, str):
2550
- value = str(value)
2551
- flags = re.IGNORECASE if ignorecase else 0
2552
- return _regex_cache(find, flags).findall(value)
2553
-
2554
-
2555
- def bitwise_and(first_value, second_value):
2556
- """Perform a bitwise and operation."""
2557
- return first_value & second_value
2558
-
2559
-
2560
- def bitwise_or(first_value, second_value):
2561
- """Perform a bitwise or operation."""
2562
- return first_value | second_value
2563
-
2564
-
2565
- def bitwise_xor(first_value, second_value):
2566
- """Perform a bitwise xor operation."""
2567
- return first_value ^ second_value
2568
-
2569
-
2570
2109
  def struct_pack(value: Any | None, format_string: str) -> bytes | None:
2571
2110
  """Pack an object into a bytes object."""
2572
2111
  try:
@@ -2608,32 +2147,6 @@ def from_hex(value: str) -> bytes:
2608
2147
  return bytes.fromhex(value)
2609
2148
 
2610
2149
 
2611
- def base64_encode(value: str | bytes) -> str:
2612
- """Perform base64 encode."""
2613
- if isinstance(value, str):
2614
- value = value.encode("utf-8")
2615
- return base64.b64encode(value).decode("utf-8")
2616
-
2617
-
2618
- def base64_decode(value: str, encoding: str | None = "utf-8") -> str | bytes:
2619
- """Perform base64 decode."""
2620
- decoded = base64.b64decode(value)
2621
- if encoding:
2622
- return decoded.decode(encoding)
2623
-
2624
- return decoded
2625
-
2626
-
2627
- def ordinal(value):
2628
- """Perform ordinal conversion."""
2629
- suffixes = ["th", "st", "nd", "rd"] + ["th"] * 6 # codespell:ignore nd
2630
- return str(value) + (
2631
- suffixes[(int(str(value)[-1])) % 10]
2632
- if int(str(value)[-2:]) % 100 not in range(11, 14)
2633
- else "th"
2634
- )
2635
-
2636
-
2637
2150
  def from_json(value, default=_SENTINEL):
2638
2151
  """Convert a JSON string to an object."""
2639
2152
  try:
@@ -2694,7 +2207,7 @@ def random_every_time(context, values):
2694
2207
 
2695
2208
  def today_at(hass: HomeAssistant, time_str: str = "") -> datetime:
2696
2209
  """Record fetching now where the time has been replaced with value."""
2697
- if (render_info := _render_info.get()) is not None:
2210
+ if (render_info := render_info_cv.get()) is not None:
2698
2211
  render_info.has_time = True
2699
2212
 
2700
2213
  today = dt_util.start_of_local_day()
@@ -2724,7 +2237,7 @@ def relative_time(hass: HomeAssistant, value: Any) -> Any:
2724
2237
  supported so as not to break old templates.
2725
2238
  """
2726
2239
 
2727
- if (render_info := _render_info.get()) is not None:
2240
+ if (render_info := render_info_cv.get()) is not None:
2728
2241
  render_info.has_time = True
2729
2242
 
2730
2243
  if not isinstance(value, datetime):
@@ -2745,7 +2258,7 @@ def time_since(hass: HomeAssistant, value: Any | datetime, precision: int = 1) -
2745
2258
 
2746
2259
  If the value not a datetime object the input will be returned unmodified.
2747
2260
  """
2748
- if (render_info := _render_info.get()) is not None:
2261
+ if (render_info := render_info_cv.get()) is not None:
2749
2262
  render_info.has_time = True
2750
2263
 
2751
2264
  if not isinstance(value, datetime):
@@ -2767,7 +2280,7 @@ def time_until(hass: HomeAssistant, value: Any | datetime, precision: int = 1) -
2767
2280
 
2768
2281
  If the value not a datetime object the input will be returned unmodified.
2769
2282
  """
2770
- if (render_info := _render_info.get()) is not None:
2283
+ if (render_info := render_info_cv.get()) is not None:
2771
2284
  render_info.has_time = True
2772
2285
 
2773
2286
  if not isinstance(value, datetime):
@@ -2780,16 +2293,6 @@ def time_until(hass: HomeAssistant, value: Any | datetime, precision: int = 1) -
2780
2293
  return dt_util.get_time_remaining(value, precision)
2781
2294
 
2782
2295
 
2783
- def urlencode(value):
2784
- """Urlencode dictionary and return as UTF-8 string."""
2785
- return urllib_urlencode(value).encode("utf-8")
2786
-
2787
-
2788
- def slugify(value, separator="_"):
2789
- """Convert a string into a slug, such as what is used for entity ids."""
2790
- return slugify_util(value, separator=separator)
2791
-
2792
-
2793
2296
  def iif(
2794
2297
  value: Any, if_true: Any = True, if_false: Any = False, if_none: Any = _SENTINEL
2795
2298
  ) -> Any:
@@ -2810,98 +2313,11 @@ def iif(
2810
2313
  return if_false
2811
2314
 
2812
2315
 
2813
- def shuffle(*args: Any, seed: Any = None) -> MutableSequence[Any]:
2814
- """Shuffle a list, either with a seed or without."""
2815
- if not args:
2816
- raise TypeError("shuffle expected at least 1 argument, got 0")
2817
-
2818
- # If first argument is iterable and more than 1 argument provided
2819
- # but not a named seed, then use 2nd argument as seed.
2820
- if isinstance(args[0], Iterable):
2821
- items = list(args[0])
2822
- if len(args) > 1 and seed is None:
2823
- seed = args[1]
2824
- elif len(args) == 1:
2825
- raise TypeError(f"'{type(args[0]).__name__}' object is not iterable")
2826
- else:
2827
- items = list(args)
2828
-
2829
- if seed:
2830
- r = random.Random(seed)
2831
- r.shuffle(items)
2832
- else:
2833
- random.shuffle(items)
2834
- return items
2835
-
2836
-
2837
2316
  def typeof(value: Any) -> Any:
2838
2317
  """Return the type of value passed to debug types."""
2839
2318
  return value.__class__.__name__
2840
2319
 
2841
2320
 
2842
- def flatten(value: Iterable[Any], levels: int | None = None) -> list[Any]:
2843
- """Flattens list of lists."""
2844
- if not isinstance(value, Iterable) or isinstance(value, str):
2845
- raise TypeError(f"flatten expected a list, got {type(value).__name__}")
2846
-
2847
- flattened: list[Any] = []
2848
- for item in value:
2849
- if isinstance(item, Iterable) and not isinstance(item, str):
2850
- if levels is None:
2851
- flattened.extend(flatten(item))
2852
- elif levels >= 1:
2853
- flattened.extend(flatten(item, levels=(levels - 1)))
2854
- else:
2855
- flattened.append(item)
2856
- else:
2857
- flattened.append(item)
2858
- return flattened
2859
-
2860
-
2861
- def intersect(value: Iterable[Any], other: Iterable[Any]) -> list[Any]:
2862
- """Return the common elements between two lists."""
2863
- if not isinstance(value, Iterable) or isinstance(value, str):
2864
- raise TypeError(f"intersect expected a list, got {type(value).__name__}")
2865
- if not isinstance(other, Iterable) or isinstance(other, str):
2866
- raise TypeError(f"intersect expected a list, got {type(other).__name__}")
2867
-
2868
- return list(set(value) & set(other))
2869
-
2870
-
2871
- def difference(value: Iterable[Any], other: Iterable[Any]) -> list[Any]:
2872
- """Return elements in first list that are not in second list."""
2873
- if not isinstance(value, Iterable) or isinstance(value, str):
2874
- raise TypeError(f"difference expected a list, got {type(value).__name__}")
2875
- if not isinstance(other, Iterable) or isinstance(other, str):
2876
- raise TypeError(f"difference expected a list, got {type(other).__name__}")
2877
-
2878
- return list(set(value) - set(other))
2879
-
2880
-
2881
- def union(value: Iterable[Any], other: Iterable[Any]) -> list[Any]:
2882
- """Return all unique elements from both lists combined."""
2883
- if not isinstance(value, Iterable) or isinstance(value, str):
2884
- raise TypeError(f"union expected a list, got {type(value).__name__}")
2885
- if not isinstance(other, Iterable) or isinstance(other, str):
2886
- raise TypeError(f"union expected a list, got {type(other).__name__}")
2887
-
2888
- return list(set(value) | set(other))
2889
-
2890
-
2891
- def symmetric_difference(value: Iterable[Any], other: Iterable[Any]) -> list[Any]:
2892
- """Return elements that are in either list but not in both."""
2893
- if not isinstance(value, Iterable) or isinstance(value, str):
2894
- raise TypeError(
2895
- f"symmetric_difference expected a list, got {type(value).__name__}"
2896
- )
2897
- if not isinstance(other, Iterable) or isinstance(other, str):
2898
- raise TypeError(
2899
- f"symmetric_difference expected a list, got {type(other).__name__}"
2900
- )
2901
-
2902
- return list(set(value) ^ set(other))
2903
-
2904
-
2905
2321
  def combine(*args: Any, recursive: bool = False) -> dict[Any, Any]:
2906
2322
  """Combine multiple dictionaries into one."""
2907
2323
  if not args:
@@ -2928,55 +2344,6 @@ def combine(*args: Any, recursive: bool = False) -> dict[Any, Any]:
2928
2344
  return result
2929
2345
 
2930
2346
 
2931
- def md5(value: str) -> str:
2932
- """Generate md5 hash from a string."""
2933
- return hashlib.md5(value.encode()).hexdigest()
2934
-
2935
-
2936
- def sha1(value: str) -> str:
2937
- """Generate sha1 hash from a string."""
2938
- return hashlib.sha1(value.encode()).hexdigest()
2939
-
2940
-
2941
- def sha256(value: str) -> str:
2942
- """Generate sha256 hash from a string."""
2943
- return hashlib.sha256(value.encode()).hexdigest()
2944
-
2945
-
2946
- def sha512(value: str) -> str:
2947
- """Generate sha512 hash from a string."""
2948
- return hashlib.sha512(value.encode()).hexdigest()
2949
-
2950
-
2951
- class TemplateContextManager(AbstractContextManager):
2952
- """Context manager to store template being parsed or rendered in a ContextVar."""
2953
-
2954
- def set_template(self, template_str: str, action: str) -> None:
2955
- """Store template being parsed or rendered in a Contextvar to aid error handling."""
2956
- template_cv.set((template_str, action))
2957
-
2958
- def __exit__(
2959
- self,
2960
- exc_type: type[BaseException] | None,
2961
- exc_value: BaseException | None,
2962
- traceback: TracebackType | None,
2963
- ) -> None:
2964
- """Raise any exception triggered within the runtime context."""
2965
- template_cv.set(None)
2966
-
2967
-
2968
- _template_context_manager = TemplateContextManager()
2969
-
2970
-
2971
- def _render_with_context(
2972
- template_str: str, template: jinja2.Template, **kwargs: Any
2973
- ) -> str:
2974
- """Store template being rendered in a ContextVar to aid error handling."""
2975
- with _template_context_manager as cm:
2976
- cm.set_template(template_str, "rendering")
2977
- return template.render(**kwargs)
2978
-
2979
-
2980
2347
  def make_logging_undefined(
2981
2348
  strict: bool | None, log_fn: Callable[[int, str], None] | None
2982
2349
  ) -> type[jinja2.Undefined]:
@@ -3096,64 +2463,42 @@ class TemplateEnvironment(ImmutableSandboxedEnvironment):
3096
2463
  """Initialise template environment."""
3097
2464
  super().__init__(undefined=make_logging_undefined(strict, log_fn))
3098
2465
  self.hass = hass
2466
+ self.limited = limited
3099
2467
  self.template_cache: weakref.WeakValueDictionary[
3100
2468
  str | jinja2.nodes.Template, CodeType | None
3101
2469
  ] = weakref.WeakValueDictionary()
3102
2470
  self.add_extension("jinja2.ext.loopcontrols")
3103
2471
  self.add_extension("jinja2.ext.do")
2472
+ self.add_extension("homeassistant.helpers.template.extensions.Base64Extension")
2473
+ self.add_extension(
2474
+ "homeassistant.helpers.template.extensions.CollectionExtension"
2475
+ )
2476
+ self.add_extension("homeassistant.helpers.template.extensions.CryptoExtension")
2477
+ self.add_extension("homeassistant.helpers.template.extensions.MathExtension")
2478
+ self.add_extension("homeassistant.helpers.template.extensions.RegexExtension")
2479
+ self.add_extension("homeassistant.helpers.template.extensions.StringExtension")
3104
2480
 
3105
- self.globals["acos"] = arc_cosine
2481
+ self.globals["apply"] = apply
3106
2482
  self.globals["as_datetime"] = as_datetime
3107
2483
  self.globals["as_function"] = as_function
3108
2484
  self.globals["as_local"] = dt_util.as_local
3109
2485
  self.globals["as_timedelta"] = as_timedelta
3110
2486
  self.globals["as_timestamp"] = forgiving_as_timestamp
3111
- self.globals["asin"] = arc_sine
3112
- self.globals["atan"] = arc_tangent
3113
- self.globals["atan2"] = arc_tangent2
3114
- self.globals["average"] = average
3115
2487
  self.globals["bool"] = forgiving_boolean
3116
2488
  self.globals["combine"] = combine
3117
- self.globals["cos"] = cosine
3118
- self.globals["difference"] = difference
3119
- self.globals["e"] = math.e
3120
- self.globals["flatten"] = flatten
3121
2489
  self.globals["float"] = forgiving_float
3122
2490
  self.globals["iif"] = iif
3123
2491
  self.globals["int"] = forgiving_int
3124
- self.globals["intersect"] = intersect
3125
2492
  self.globals["is_number"] = is_number
3126
- self.globals["log"] = logarithm
3127
- self.globals["max"] = min_max_from_filter(self.filters["max"], "max")
3128
- self.globals["md5"] = md5
3129
- self.globals["median"] = median
3130
2493
  self.globals["merge_response"] = merge_response
3131
- self.globals["min"] = min_max_from_filter(self.filters["min"], "min")
3132
2494
  self.globals["pack"] = struct_pack
3133
- self.globals["pi"] = math.pi
3134
- self.globals["set"] = _to_set
3135
- self.globals["sha1"] = sha1
3136
- self.globals["sha256"] = sha256
3137
- self.globals["sha512"] = sha512
3138
- self.globals["shuffle"] = shuffle
3139
- self.globals["sin"] = sine
3140
- self.globals["slugify"] = slugify
3141
- self.globals["sqrt"] = square_root
3142
- self.globals["statistical_mode"] = statistical_mode
3143
2495
  self.globals["strptime"] = strptime
3144
- self.globals["symmetric_difference"] = symmetric_difference
3145
- self.globals["tan"] = tangent
3146
- self.globals["tau"] = math.pi * 2
3147
2496
  self.globals["timedelta"] = timedelta
3148
- self.globals["tuple"] = _to_tuple
3149
2497
  self.globals["typeof"] = typeof
3150
- self.globals["union"] = union
3151
2498
  self.globals["unpack"] = struct_unpack
3152
- self.globals["urlencode"] = urlencode
3153
2499
  self.globals["version"] = version
3154
2500
  self.globals["zip"] = zip
3155
2501
 
3156
- self.filters["acos"] = arc_cosine
3157
2502
  self.filters["add"] = add
3158
2503
  self.filters["apply"] = apply
3159
2504
  self.filters["as_datetime"] = as_datetime
@@ -3161,59 +2506,26 @@ class TemplateEnvironment(ImmutableSandboxedEnvironment):
3161
2506
  self.filters["as_local"] = dt_util.as_local
3162
2507
  self.filters["as_timedelta"] = as_timedelta
3163
2508
  self.filters["as_timestamp"] = forgiving_as_timestamp
3164
- self.filters["asin"] = arc_sine
3165
- self.filters["atan"] = arc_tangent
3166
- self.filters["atan2"] = arc_tangent2
3167
- self.filters["average"] = average
3168
- self.filters["base64_decode"] = base64_decode
3169
- self.filters["base64_encode"] = base64_encode
3170
- self.filters["bitwise_and"] = bitwise_and
3171
- self.filters["bitwise_or"] = bitwise_or
3172
- self.filters["bitwise_xor"] = bitwise_xor
3173
2509
  self.filters["bool"] = forgiving_boolean
3174
2510
  self.filters["combine"] = combine
3175
2511
  self.filters["contains"] = contains
3176
- self.filters["cos"] = cosine
3177
- self.filters["difference"] = difference
3178
- self.filters["flatten"] = flatten
3179
2512
  self.filters["float"] = forgiving_float_filter
3180
2513
  self.filters["from_json"] = from_json
3181
2514
  self.filters["from_hex"] = from_hex
3182
2515
  self.filters["iif"] = iif
3183
2516
  self.filters["int"] = forgiving_int_filter
3184
- self.filters["intersect"] = intersect
3185
2517
  self.filters["is_defined"] = fail_when_undefined
3186
2518
  self.filters["is_number"] = is_number
3187
- self.filters["log"] = logarithm
3188
- self.filters["md5"] = md5
3189
- self.filters["median"] = median
3190
2519
  self.filters["multiply"] = multiply
3191
2520
  self.filters["ord"] = ord
3192
- self.filters["ordinal"] = ordinal
3193
2521
  self.filters["pack"] = struct_pack
3194
2522
  self.filters["random"] = random_every_time
3195
- self.filters["regex_findall_index"] = regex_findall_index
3196
- self.filters["regex_findall"] = regex_findall
3197
- self.filters["regex_match"] = regex_match
3198
- self.filters["regex_replace"] = regex_replace
3199
- self.filters["regex_search"] = regex_search
3200
2523
  self.filters["round"] = forgiving_round
3201
- self.filters["sha1"] = sha1
3202
- self.filters["sha256"] = sha256
3203
- self.filters["sha512"] = sha512
3204
- self.filters["shuffle"] = shuffle
3205
- self.filters["sin"] = sine
3206
- self.filters["slugify"] = slugify
3207
- self.filters["sqrt"] = square_root
3208
- self.filters["statistical_mode"] = statistical_mode
3209
- self.filters["symmetric_difference"] = symmetric_difference
3210
- self.filters["tan"] = tangent
3211
2524
  self.filters["timestamp_custom"] = timestamp_custom
3212
2525
  self.filters["timestamp_local"] = timestamp_local
3213
2526
  self.filters["timestamp_utc"] = timestamp_utc
3214
2527
  self.filters["to_json"] = to_json
3215
2528
  self.filters["typeof"] = typeof
3216
- self.filters["union"] = union
3217
2529
  self.filters["unpack"] = struct_unpack
3218
2530
  self.filters["version"] = version
3219
2531
 
@@ -3221,12 +2533,7 @@ class TemplateEnvironment(ImmutableSandboxedEnvironment):
3221
2533
  self.tests["contains"] = contains
3222
2534
  self.tests["datetime"] = _is_datetime
3223
2535
  self.tests["is_number"] = is_number
3224
- self.tests["list"] = _is_list
3225
- self.tests["match"] = regex_match
3226
- self.tests["search"] = regex_search
3227
- self.tests["set"] = _is_set
3228
2536
  self.tests["string_like"] = _is_string_like
3229
- self.tests["tuple"] = _is_tuple
3230
2537
 
3231
2538
  if hass is None:
3232
2539
  return