Compare commits

..

999 Commits

Author SHA1 Message Date
Erik
f0c079222b Remove explicit templating of knx service data 2024-10-21 14:54:13 +02:00
epenet
6bfed5c98c Use new reauth helpers in yale_smart_alarm (#128836) 2024-10-20 23:52:37 +02:00
Alexander Knöbel
f01231277b Add humidity to KNX climate (#128844) 2024-10-20 22:17:00 +02:00
Oliver Woodings
94534f714c Reduce the size of the Nest event media storage cache (#128855)
Reduce max media items per nest device
2024-10-20 10:58:27 -07:00
Christopher Fenner
1f9c06e606 Align consumption sensor names in ViCare integration (#127888) 2024-10-20 17:17:46 +02:00
LunaBytesBack
711c448242 Add Twitch stream viewer as readable data for integration (#128787) 2024-10-20 16:07:43 +02:00
peteS-UK
0c6a640e50 Add New Music Category for Media Browser (#128147) 2024-10-20 16:00:55 +02:00
epenet
11d9a71e5d Use new reauth helpers in withings (#128826) 2024-10-20 15:54:04 +02:00
epenet
eed842fff1 Use new reauth helpers in yalexs_ble (#128831) 2024-10-20 15:53:46 +02:00
Joost Lekkerkerker
49fafcc68a Add Spotify to strict typing (#128846) 2024-10-20 15:51:06 +02:00
Marc Mueller
c46cccc3cd Update attrs to 24.2.0 (#126656) 2024-10-20 15:48:42 +02:00
epenet
dd714cc95e Use new reauth helpers in yolink (#128834) 2024-10-20 15:36:13 +02:00
epenet
f9ce8fa368 Use new reauth helpers in youtube (#128835) 2024-10-20 15:34:37 +02:00
epenet
4fc872a4cb Use new reauth helpers in weheat (#128824) 2024-10-20 15:30:49 +02:00
Bouwe Westerdijk
c8556f69e7 Bump plugwise to v1.4.3 (#128773) 2024-10-20 15:25:13 +02:00
Franck Nijhof
0b3f660626 Auto lower case username for Schlage auth flows (#128730) 2024-10-20 12:48:18 +02:00
epenet
7fa359764d Use new reauth helpers in vicare (#128779) 2024-10-20 10:07:42 +02:00
Marc Mueller
2bc642ae6f Update zhong-hong-hvac to 1.0.13 (#128822) 2024-10-20 10:07:14 +02:00
epenet
5228aa5e5c Use new reauth helpers in yale (#128828) 2024-10-20 10:01:53 +02:00
epenet
d9c61a37bb Use new reauth helpers in xiaomi_ble (#128827) 2024-10-20 10:01:18 +02:00
tronikos
5f662988ff Handle invalid zeroconf messages in Android TV Remote (#128819) 2024-10-20 09:56:30 +02:00
epenet
87c9c0c3b1 Use new reauth helpers in whirlpool (#128825) 2024-10-20 09:55:16 +02:00
epenet
0ede15dcbf Use new reauth helpers in webostv (#128823) 2024-10-20 09:54:23 +02:00
Joost Lekkerkerker
8ceecec5b8 Bump spotifyaio to 0.7.1 (#128807) 2024-10-20 09:49:23 +02:00
Paulus Schoutsen
28ff138370 Simplify custom component loading (#128813) 2024-10-20 09:47:27 +02:00
epenet
e8acb48b1e Use new reauth helpers in wallbox (#128820) 2024-10-20 09:45:55 +02:00
epenet
b588bd6e4f Use new reauth helpers in weatherflow_cloud (#128821) 2024-10-20 09:43:55 +02:00
Allen Porter
d9fd2c28b0 Bump google-nest-sdm to 6.1.0 (#128812) 2024-10-20 09:42:14 +02:00
Marc Mueller
0a02ed2a39 Update eq3btsmart to 1.2.0 (#128808) 2024-10-20 09:37:11 +02:00
epenet
b13e1b3d44 Use new reauth helpers in teslemetry (#128759) 2024-10-19 22:05:13 +02:00
epenet
98732cb033 Use new reauth helpers in tessie (#128760) 2024-10-19 22:04:52 +02:00
J. Diego Rodríguez Royo
eaa4a43458 Remove erroneous switch entity description at Home Connect (#128576) 2024-10-19 19:30:00 +02:00
epenet
6af6b73c89 Use new reauth helpers in volvooncall (#128782) 2024-10-19 19:22:20 +02:00
epenet
990987ac92 Use new reauth helpers in verisure (#128778) 2024-10-19 19:21:43 +02:00
epenet
fd8f5b9ff0 Use new reauth helpers in unifiprotect (#128775) 2024-10-19 19:21:09 +02:00
Raj Laud
062b61affb Bump pysqueezebox to v0.10.0 (#128774) 2024-10-19 19:17:43 +02:00
Luke Lashley
311aa74dd3 Fix device data roborock (#128792) 2024-10-19 13:10:23 -04:00
epenet
0704c3ccb9 Use new reauth_helpers in nest (#128699)
Use reauth_confirm in nest
2024-10-19 09:57:18 -07:00
epenet
d375dca1f1 Use new reauth helpers in smarttub (#128743) 2024-10-19 17:12:48 +02:00
epenet
5f04a6239e Use new reauth helpers in vodafone_station (#128781) 2024-10-19 16:42:01 +02:00
epenet
6f9c99ac6c Use new reauth helpers in vlc_telnet (#128780) 2024-10-19 16:03:45 +02:00
epenet
3c50b00a9a Use new reauth helpers in tankerkoenig (#128756) 2024-10-19 16:00:05 +02:00
epenet
ce8893ef6b Use new reauth helpers in switcher_kis (#128750) 2024-10-19 16:26:55 +03:00
epenet
5fb7bb50e0 Use new reauth helpers in tautulli (#128758) 2024-10-19 14:58:46 +02:00
epenet
15bd5bf6f6 Use new reauth helpers in sunweg (#128747) 2024-10-19 14:57:32 +02:00
epenet
b35c1d852e Use new reauth helpers in steam_online (#128746) 2024-10-19 14:56:47 +02:00
epenet
93ec127245 Use new reauth helpers in sonarr (#128745) 2024-10-19 14:56:13 +02:00
epenet
42613dbcf8 Use new reauth helpers in smlight (#128744) 2024-10-19 14:54:52 +02:00
epenet
a9ec5f5c38 Use new reauth helpers in sleepiq (#128742) 2024-10-19 14:54:00 +02:00
epenet
10b04f41df Use new reauth helpers in skybell (#128741) 2024-10-19 14:44:06 +02:00
epenet
8a16504988 Use new reauth helpers in tailwind (#128755) 2024-10-19 14:43:31 +02:00
epenet
703e51d500 Use new reauth helpers in sensibo (#128738) 2024-10-19 14:43:14 +02:00
epenet
f97d6b552b Use new reauth helpers in tailscale (#128752) 2024-10-19 14:43:08 +02:00
epenet
f592c64c6a Use new reauth helpers in thethingsnetwork (#128761) 2024-10-19 14:42:31 +02:00
epenet
5d5355bc41 Use new reauth helpers in tplink_omada (#128762) 2024-10-19 14:42:03 +02:00
Marc Mueller
f02c14d327 Update ha-ffmpeg to 3.2.1 (#128769) 2024-10-19 14:41:16 +02:00
Álvaro Fernández Rojas
ca4f971eb4 Fix Airzone Cloud climate temperature range (#128740) 2024-10-19 14:38:15 +02:00
epenet
e43bf3b05a Use new reauth helpers in sfr_box (#128739) 2024-10-19 14:37:40 +02:00
Ville Skyttä
38e7dcfd12 Bump upcloud-api to 2.6.0 (#128734) 2024-10-19 14:35:57 +02:00
epenet
6ccb4b726a Use new reauth helpers in schlage (#128736) 2024-10-19 14:34:44 +02:00
Joost Lekkerkerker
ecf167e889 Bump spotifyaio to 0.7.0 (#128751) 2024-10-19 14:34:01 +02:00
epenet
dce819f57b Use new reauth helpers in trafikverket_ferry (#128763) 2024-10-19 14:33:47 +02:00
epenet
fe7328b92e Use new reauth helpers in trafikverket_train (#128764) 2024-10-19 14:33:10 +02:00
epenet
46fa9e6b82 Use new reauth helpers in transmission (#128765) 2024-10-19 14:32:26 +02:00
Álvaro Fernández Rojas
76712439ee Fix Airzone climate temperature range (#128737) 2024-10-19 14:31:52 +02:00
epenet
5a2830a654 Use new reauth helpers in tuya (#128766) 2024-10-19 14:27:11 +02:00
epenet
b34ca9a521 Use new reauth helpers in twitch (#128767) 2024-10-19 14:26:49 +02:00
epenet
7fc4a65868 Use new reauth helpers in tplink (#128768) 2024-10-19 14:25:53 +02:00
epenet
85899a59c0 Use new reauth helpers in surepetcare (#128748) 2024-10-19 13:41:45 +02:00
Ville Skyttä
73214be565 Bump huawei-lte-api to 1.9.3 (#128731) 2024-10-19 11:09:18 +00:00
starkillerOG
175a87f948 Catch Reolink LoginFirmwareError (#128590) 2024-10-19 13:02:29 +02:00
Kuba Kaflik
201aab9f73 Allow SSL security_protocol configuration property in apache_kafka component (#128651) 2024-10-19 12:05:37 +02:00
epenet
0581d614f6 Use new reauth helpers in rympro (#128728) 2024-10-19 11:34:11 +02:00
epenet
9622a11b2e Use new reauth helpers in pvpc_hourly_pricing (#128721) 2024-10-19 11:25:00 +02:00
epenet
f17c5bc334 Use new reauth helpers in samsungtv (#128729) 2024-10-19 11:24:41 +02:00
epenet
ed9f40fc4c Use new reauth helpers in roborock (#128726) 2024-10-19 11:15:58 +02:00
epenet
31a58a21c6 Use new reauth helpers in ruckus_unleashed (#128727) 2024-10-19 11:01:17 +02:00
Joost Lekkerkerker
061ece55f3 Add coordinator to Twitch (#127724) 2024-10-19 10:59:37 +02:00
epenet
391f278ee5 Use new reauth helpers in radarr (#128725) 2024-10-19 10:54:34 +02:00
epenet
004b323fd4 Use new reauth helpers in purpleair (#128719) 2024-10-19 10:37:01 +02:00
epenet
088cfed794 Use new reauth helpers in prosegur (#128718) 2024-10-19 10:36:27 +02:00
epenet
908f649ea7 Use new reauth helpers in powerwall (#128717) 2024-10-19 10:36:01 +02:00
epenet
c214adcdf0 Use new reauth helpers in point (#128716) 2024-10-19 10:35:32 +02:00
epenet
097ba07f20 Use new reauth helpers in pi_hole (#128715) 2024-10-19 10:34:40 +02:00
epenet
0c04373b79 Use new reauth helpers in philips_js (#128714) 2024-10-19 10:15:59 +02:00
epenet
dd8f1800df Use new reauth_helpers in nextcloud (#128700) 2024-10-19 10:15:29 +02:00
epenet
81b918c392 Use new reauth_helpers in motioneye (#128695) 2024-10-19 10:14:36 +02:00
epenet
43038564fe Use new reauth_helpers in monzo (#128694) 2024-10-19 10:13:48 +02:00
epenet
bcd77de328 Use new reauth helpers in pvoutput (#128720) 2024-10-19 10:12:22 +02:00
epenet
0d90d6586e Use new reauth_helpers in openexchangerates (#128706)
Use reauth_confirm in openexchangerates
2024-10-19 10:10:08 +02:00
epenet
2324bccbe7 Use new reauth_helpers in nextdns (#128701) 2024-10-19 10:07:55 +02:00
epenet
0cb07f511a Use new reauth_helpers in mikrotik (#128693) 2024-10-19 10:07:41 +02:00
Franck Nijhof
e22fb444d3 Merge branch 'master' into dev 2024-10-19 09:59:09 +02:00
epenet
9a09c1b027 Use new reauth_helpers in nice_go (#128702) 2024-10-19 09:56:36 +02:00
epenet
a94968b6bb Use reauth helpers in google (#128580) 2024-10-19 09:55:39 +02:00
epenet
3ac05f1fa9 Use new reauth_helpers in microbees (#128692) 2024-10-19 09:54:29 +02:00
epenet
ad3effa7d1 Use new reauth_helpers in notion (#128703) 2024-10-19 09:51:31 +02:00
epenet
d094c0d2b3 Use new reauth_helpers in oncue (#128704) 2024-10-19 09:50:58 +02:00
epenet
157e7f9f78 Use new reauth_helpers in onvif (#128705) 2024-10-19 09:50:05 +02:00
Allen Porter
5816342bed Remove dead code and increase test coverage for google config flow (#128690) 2024-10-19 09:48:36 +02:00
epenet
22491afa58 Use reauth_confirm in mqtt (#128696) 2024-10-19 09:30:57 +02:00
epenet
a023b71ce0 Use reauth_confirm in opower (#128707) 2024-10-19 00:20:27 -07:00
epenet
392848c885 Use reauth_confirm in myuplink (#128697) 2024-10-19 09:16:06 +02:00
Hans Kröner
a815661de1 Add lighting effects to Hue lights managed by deCONZ (#128292)
* Add more effects for Philips Hue lights

* Update tests for light effects
2024-10-19 09:09:01 +02:00
epenet
ff6261ccc8 Use reauth_confirm in nanoleaf (#128698) 2024-10-19 08:54:29 +02:00
J. Nick Koston
7e68368d0a Bump yarl to 1.15.5 (#128681)
changelog: https://github.com/aio-libs/yarl/compare/v1.15.4...v1.15.5
2024-10-18 22:17:48 -04:00
Michael Hansen
f21c8d895f Block until config is retrieved when adding satellite entity to HA (#128685)
Block until config is retrieved
2024-10-18 16:01:18 -04:00
epenet
120e17fa1e Improve logic for detecting unused ignore translations (#128441) 2024-10-18 17:59:06 +02:00
epenet
42e6ac4f6d Use reauth helpers in ista_ecotrend (#128647) 2024-10-18 17:28:01 +02:00
epenet
7a77a3d7ce Use reauth helpers in jellyfin (#128648) 2024-10-18 17:24:26 +02:00
epenet
bf9b35d670 Use reauth helpers in intellifire (#128646) 2024-10-18 17:23:47 +02:00
epenet
e0a14cdeea Use reauth helpers in lametric (#128656) 2024-10-18 17:23:11 +02:00
epenet
099a3f4f90 Use reauth helpers in lidarr (#128657) 2024-10-18 17:22:14 +02:00
epenet
4d41f82794 Use reauth helpers in litterrobot (#128659) 2024-10-18 17:21:29 +02:00
Steven B.
1d24bfb99d Bump ring-doorbell library to 0.9.8 (#128662) 2024-10-18 17:20:33 +02:00
epenet
47b809c7b7 Use reauth helpers in linear_garage_door (#128658) 2024-10-18 17:17:31 +02:00
epenet
f3f6cb03e6 Use reauth helpers in lacrosse_view (#128655) 2024-10-18 17:16:38 +02:00
epenet
d6703b20d3 Use new reauth helpers in overkiz (#128666)
* Use reauth_confirm in overkiz

* Just use new helpers
2024-10-18 16:32:37 +02:00
epenet
8c4b076746 Refactor rainforest_raven coordinator tests (#128591)
* Refactor rainforest_raven tests

* Remove assert

* Cleanup freezer

* Drop un-needed coordinator properties

* Cleanup remaining coordinator tests

* Improve

* Revert _DEVICE_TIMEOUT

* Ensure 100% coverage

* Use async_fire_time_changed
2024-10-18 16:00:42 +02:00
epenet
356e09091d Add model_id to rainforest_raven device info (#128652)
* Remove single-use rainforest properties

* Add model_id
2024-10-18 15:50:34 +02:00
epenet
d4c9841e44 Use reauth helpers in ring (#128663) 2024-10-18 15:18:41 +02:00
epenet
bea13d039f Use reauth_confirm in osoenergy (#128665) 2024-10-18 15:17:39 +02:00
Duco Sebel
1f8fd52103 Fix reload not triggered on DisabledError in HomeWizard (#128636)
* Fix reload not triggered on DisabledError in HomeWizard

* Update homeassistant/components/homewizard/coordinator.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Use helper and fix merge issue

* Add test to detect reload on DisabledError

* Wait until next update instead of a direct call to update

* Add doc why we reload

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-10-18 14:48:41 +02:00
epenet
94506c3c90 Use reauth helpers in imap (#128645) 2024-10-18 14:27:21 +02:00
epenet
3cf9e2d9f6 Use reauth helpers in justnimbus (#128649) 2024-10-18 13:12:39 +02:00
epenet
080842e44c Use reauth helpers in jvc_projector (#128650) 2024-10-18 13:12:01 +02:00
Claudio Ruggeri - CR-Tech
49d534e779 Add list as possible values for State On/Off ModBus Switch (#127444)
* add possibility to set multiple val on state

* Add support for list also in state_off
2024-10-18 10:10:47 +02:00
epenet
5a0ef149a5 Use reauth helpers in google_sheets (#128587) 2024-10-18 10:04:03 +02:00
epenet
d2eb0e1fde Use reauth helpers in glances (#128579) 2024-10-18 10:01:20 +02:00
starkillerOG
2d90ffcbf0 Update Reolink config entry port info if needed (#128589) 2024-10-18 10:00:28 +02:00
epenet
5580c3fda0 Use snapshot assertion in rainforest_raven diagnostic tests (#128602) 2024-10-18 09:57:38 +02:00
epenet
10d26bf734 Use snapshot assertion in rainforest_raven sensor tests (#128604) 2024-10-18 09:50:04 +02:00
MarkGodwin
57ef175050 Add sensors to Omada (#127767)
Co-authored-by: Joostlek <joostlek@outlook.com>
2024-10-18 09:48:06 +02:00
epenet
275c86a0a9 Use reauth helpers in fibaro (#128567) 2024-10-18 09:36:57 +02:00
epenet
5fa6202111 Use reauth helpers in frontier_silicon (#128569) 2024-10-18 09:35:21 +02:00
Jordan Zucker
1e001469f6 Add asdf tools dot file to gitignore (#128608) 2024-10-18 09:34:22 +02:00
Duco Sebel
4251389c12 Remove ExternalDevice 'invalid ID' migration in HomeWizard (#128634) 2024-10-18 09:33:53 +02:00
G Johansson
6ff2ce1895 Use shorthand attribute in derivative sensor (#128610) 2024-10-18 09:33:02 +02:00
starkillerOG
1abc953cad Bump reolink_aio to 0.10.0 (#128578) 2024-10-18 09:28:31 +02:00
epenet
c696a3b789 Use reauth helpers in homewizard (#128628) 2024-10-18 09:22:31 +02:00
G Johansson
5986646af4 Use shorthand attribute in trend binary sensor (#128614)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-10-18 09:21:07 +02:00
epenet
5674c1d82f Use reauth helpers in google_mail (#128584) 2024-10-18 09:04:55 +02:00
epenet
c1c0a281cf Use reauth helpers in google_tasks (#128586) 2024-10-18 09:04:01 +02:00
epenet
84d4a1ce34 Use reauth helpers in google_photos (#128585) 2024-10-18 09:02:44 +02:00
epenet
8a4d72e3b1 Refactor duplicate host check in homeworks config flow (#128627) 2024-10-18 08:49:06 +02:00
epenet
a7b5e4323e Use reauth helpers in honeywell (#128629) 2024-10-18 08:46:49 +02:00
epenet
409f1bb644 Use reauth helpers in huawei_lte (#128630) 2024-10-18 08:46:21 +02:00
epenet
1d5821abca Use reauth helpers in husqvarna_automower (#128631) 2024-10-18 08:45:51 +02:00
epenet
b3eca73e48 Use reauth helpers in hydrawise (#128632) 2024-10-18 08:44:25 +02:00
Sid
7694326a4e Bump ruff to 0.7.0 (#128626) 2024-10-18 08:42:22 +02:00
Noah Husby
9c026bc442 Bump aiostreammagic to 2.8.1 (#128542) 2024-10-18 08:23:40 +02:00
G Johansson
b812306bd7 Use shorthand attribute in threshold binary sensor (#128612)
Small refactor threshold
2024-10-18 08:01:32 +02:00
epenet
0e667dfe36 Use reauth helpers in co2signal (#128566)
Do not cache reauth entry in co2signal
2024-10-17 22:10:57 -04:00
Markus Jacobsen
9037421a85 Bump mozart-api to 4.1.1.116.0 (#128573)
Bump API
Fix testing
2024-10-17 22:05:28 -04:00
Michael Hansen
1a9c6deb0d Remove metadata and cover art using ffmpeg proxy conversion (#128603)
Remove metadata and cover art
2024-10-17 16:41:44 -04:00
epenet
f08d2716ae Use reauth helpers in fitbit (#128568) 2024-10-17 22:04:34 +02:00
epenet
f37c0e0548 Use reauth helpers in fyta (#128571) 2024-10-17 22:03:19 +02:00
puddly
be2c3217dc Rename the SkyConnect integration to Connect ZBT-1 (#128599) 2024-10-17 21:59:10 +02:00
epenet
937d15d7e1 Use reauth helpers in fujitsu_fglair (#128570) 2024-10-17 21:53:09 +02:00
Jan Morawiec
35ff3afa12 Refactor unittest tests to use pytest (#127770)
* Refactor unittest tests to use pytest

* Add type annotations

* Use caplog to assert logs

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2024-10-17 21:28:14 +02:00
epenet
536d702d96 Use reauth helpers in google_generative_ai_conversation (#128583) 2024-10-17 10:19:24 -07:00
epenet
420070a1ee Use reauth helpers in google_assistant_sdk (#128582) 2024-10-17 10:18:18 -07:00
mvn23
cd4a13ca55 Bump pyotgw to 2.2.2 (#128594) 2024-10-17 18:57:22 +02:00
Erik Montnemery
9d0701a62b Improve camera tests (#128545) 2024-10-17 16:36:42 +02:00
puddly
7c9a198c6d Use the same ZHA database path during startup and when loading device triggers (#128130)
Use the same zigpy database path source as in the radio manager
2024-10-17 07:17:20 -04:00
David F. Mulcahey
065577c9ca Keep ZHA entity enabled setting in sync with lib (#125472)
* Add ability to enable / disable entities in the ZHA lib

* disable entities at startup that are not enabled in HA

* fix IEEE lookup

* wrap in async_on_unload

* add test and correct lookup
2024-10-17 07:16:48 -04:00
Petar Petrov
8533f853c8 Increase Z-Wave fallback thermostat range to 0-50 C (#128543)
* Z-Wave JS: Increase fallback thermostat range to 0-50 C

* update test
2024-10-17 12:41:23 +02:00
Sid
2f60395ba9 Fix schema violations in manifest.json files (#128561) 2024-10-17 12:29:16 +02:00
epenet
906cecf087 Cleanup unused snapshots (#128549)
* Cleanup unused snapshots

* Cleanup a few more

* Cleanup systemmonitor

* Cleanup voip
2024-10-17 10:41:57 +02:00
Marc Mueller
cb1b917aa6 Update mypy-dev to 1.13.0a1 (#128548) 2024-10-17 10:30:42 +02:00
J. Nick Koston
006d511d47 Bump yarl to 1.15.4 (#128536)
changelog: https://github.com/aio-libs/yarl/compare/v1.15.3...v1.15.4
2024-10-16 22:15:16 -04:00
puddly
f6270d9cfc Bump ZHA dependencies (#128539)
* Bump ZHA dependencies

* Remove unused ZHA color modes

* Rename `cluster` to `ota_cluster` in update tests to unshadow `cluster` in `endpoint_reply`

---------

Co-authored-by: TheJulianJES <TheJulianJES@users.noreply.github.com>
2024-10-16 22:15:00 -04:00
Julian
72f1c358d9 Fix translation string in guardian (#128535) 2024-10-16 22:09:15 +02:00
karwosts
3cbadb1bd2 Add a missing translation for energy error (#128413)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2024-10-16 22:04:59 +02:00
Brett Adams
5d058c29a2 Add missing description placeholder in Tessie (#128481) 2024-10-16 21:56:51 +02:00
Jan-Philipp Benecke
4964470e9c Remove deprecated panel_iframe integration (#128532) 2024-10-16 21:34:43 +02:00
Julian
f4dfe7868b Fix translation string in hyperion (#128384) 2024-10-16 21:28:17 +02:00
Jan-Philipp Benecke
82e9792b4d Remove deprecated map integration (#128529) 2024-10-16 20:46:00 +02:00
Noah Husby
af41a41046 Add select entity to Cambridge Audio (#128527)
* Add select entity to Cambridge Audio

* Add select entity to Cambridge Audio

* Update test name
2024-10-16 19:57:10 +02:00
Steven B.
59e5eb9a1c Always use uv from virtual environment at runtime (#128371) 2024-10-16 19:42:25 +02:00
Klaas Schoute
a0637a6ff8 Add port to config flow of P1 Monitor integration (#128324) 2024-10-16 19:40:20 +02:00
Joost Lekkerkerker
5497697cf2 Add diagnostics to Spotify (#128521) 2024-10-16 19:33:28 +02:00
Olaf van Zandwijk
b07682e43c Update terminology for built-in blueprints (#128383) 2024-10-16 19:14:09 +02:00
epenet
0bc572787a Add check for valid error code in translation checks in flows (#128445) 2024-10-16 19:03:24 +02:00
Noah Husby
15fc4a8ae4 Bump aiostreammagic to 2.7.0 (#128525) 2024-10-16 19:00:19 +02:00
Louis Christ
8bf7243549 Bump pyblu to 1.0.4 (#128482) 2024-10-16 18:59:03 +02:00
epenet
66395d5fe5 Use runtime_data in rainforest_raven (#128517) 2024-10-16 18:24:35 +02:00
Robert Resch
f9509d2b38 Bump uv to 0.4.22 (#128518) 2024-10-16 18:23:24 +02:00
Álvaro Fernández Rojas
7c50b8185d Update aioairzone-cloud to v0.6.7 (#128231) 2024-10-16 18:11:02 +02:00
epenet
350a27575f Prevent leak of current_entry context variable (#128145) 2024-10-16 18:02:37 +02:00
Joost Lekkerkerker
494511e099 Migrate spotify to aiospotify (#127728) 2024-10-16 17:04:05 +02:00
Michael Hansen
11ac8f8006 Add conversation agent to Wyoming (#124373)
* Add conversation agent to Wyoming

* Remove error

* Remove conversation platform from satellite list

* Clean up

* Update homeassistant/components/wyoming/conversation.py

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* Remove unnecessary attribute

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-10-16 09:07:56 -05:00
Michael Hansen
bcac851677 Migrate Wyoming satellite to Assist satellite entity (#128488)
* Migrate Wyoming satellite to Assist satellite entity

* Fix tests

* Update homeassistant/components/wyoming/assist_satellite.py

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* Update homeassistant/components/wyoming/assist_satellite.py

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-10-16 08:59:44 -05:00
Noah Husby
c294130080 Bump aiostreammagic to 2.6.0 (#128498) 2024-10-16 15:08:40 +02:00
Joost Lekkerkerker
c0f19dd963 Reorder Google Assistant Traits (#127646) 2024-10-16 15:04:46 +02:00
epenet
e5a07da0c9 Add checks for config entry state in async_config_entry_first_refresh (#128148) 2024-10-16 14:06:25 +02:00
Marc Mueller
1ad3a96643 Update build-system (#128256) 2024-10-16 14:05:18 +02:00
Jan Bouwhuis
ac6d893758 Correct type hints on MQTT tests (#128299) 2024-10-16 13:49:18 +02:00
epenet
9f2bdca9ad Use unique_id_mismatch in aseko_pool_live reauth (#128339) 2024-10-16 13:47:33 +02:00
epenet
c5046f7809 Add check for valid abort reason translation in option flows (#128444) 2024-10-16 13:41:15 +02:00
epenet
f7897bbd64 Fix incorrect error strings in weatherflow (#128447) 2024-10-16 13:40:31 +02:00
epenet
6442625a9d Fix incorrect error strings in webmin (#128448) 2024-10-16 13:39:46 +02:00
epenet
5d079aacd6 Fix incorrect error strings in triggercmd (#128450) 2024-10-16 13:38:15 +02:00
epenet
0e7297873c Add SOURCE_HASSIO to DISCOVERY_SOURCES (#128454) 2024-10-16 13:34:28 +02:00
Robert Resch
dfb94d8917 Rename host to url in go2rtc config flow (#128508) 2024-10-16 13:33:47 +02:00
Joost Lekkerkerker
ed445d0ab8 Add even more tests to Spotify (#128298) 2024-10-16 13:20:57 +02:00
Barry vd. Heuvel
dddc1906c2 Add missing Weheat temperature sensors (#128452)
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-10-16 11:53:39 +02:00
Christopher Fenner
144454b8c3 Remove duplicate oauth2 token validity check (#128419)
* remove duplicate validity check

* Apply suggestions from code review

* add leftover

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2024-10-16 11:42:44 +02:00
epenet
8ae8fa7ec9 Add SOURCE_SYSTEM to DISCOVERY_SOURCES (#128457) 2024-10-16 11:27:48 +02:00
Petar Petrov
1ff1b82fc7 Mark custom components that overwrite core (#127937) 2024-10-16 09:28:19 +02:00
J. Nick Koston
5d590bc2cf Bump yarl to 1.15.3 (#128499)
changelog: https://github.com/aio-libs/yarl/compare/v1.15.2...v1.15.3
2024-10-16 08:46:19 +02:00
Artur Pragacz
866f1e70a4 Fix default conversation agent tests (#128490) 2024-10-15 22:21:18 -05:00
Julian
e273148a89 Fix translation string in lyric (#128386)
* Fix translation string in lyric

* Remove ignore_translations from lyric config_flow test
2024-10-15 22:10:56 +02:00
Michael Schäfer
c5f8d823ce Add missing translation string in unifi (#128062)
Add missing translation string in unigi
2024-10-15 20:23:26 +02:00
Joakim Sørensen
25e887b457 Move backup plaform loading to the base class (#128449) 2024-10-15 12:44:13 -04:00
DJ
aac5ac6057 Replace webexteamssdk with webexpythonsdk (#127928) 2024-10-15 17:54:59 +02:00
Michael Hansen
36a1eaedcf Trim the text of todo and shopping list items in intents (#128456) 2024-10-15 11:44:32 -04:00
Artur Pragacz
bb9f534259 Improve intent recognition in default conversation agent (#124282)
Use the same logic for custom sentences.
Prefer higher quality (longer) names.
2024-10-15 09:14:31 -05:00
hahn-th
cf9e5ae5a0 Add support HmIP-BSL after firmware update to 2.0 to homematicip_cloud (#117657)
* Rebase

* Fix number of loaded entities

* Reduce redundant code

* Remove unneccessary import in test_light
2024-10-15 15:26:33 +02:00
Jordan Zucker
d2db25c7dd Refactor prometheus integration tests (#113849)
* Starting with a simple change

* And trying again but actually adding the new area to this

* And that's getting interesting

* Wanted to add some small things to gitignore too

* More metrics clean up

* The linter is harsh

* Need to adjust a ton of tests

* I was finally able to commit

* Trying to abstract metrics into a helper class

* Fixed some tests at least

* Making progress on tests

* Getting really close now

* Only 1 or 2 tests left to fix

* Only 1.5 tests left

* That's more than enough for tonight

* Got all the tests passing!

* Another pass at test clean up

* Fixed up all the tests, again

* More clean up needed

* Got device_class working just need to fix one test I broke

* Got all the existing tests working!

* Refactored helpers into a separate file

* I added some new tests! For the helpers, ironically

* Don't touch those files

* Don't include that either

* Added my first real test

* Rolling back some logic changes to focus solely on tests

* Curious what happens when I run the tests now

* Getting closer to making things pass

* Getting closer to a working pr now

* Keeping up with test fixes

* Getting much closer to something useful

* Saving piecemeal

* Getting closer to a final working version

* Now that's an improvement

* And moving a little forward

* And now I'm really inching closer

* Saving more complex test case fix

* And now only 3 tests left

* Getting close and only a few tests left

* I think I'm close with only 1 test left

* Does this mean the tests actually work now

* Was not using the helper classes anymore

* Now I'm really curious

* Need to rename the recently renamed class

* Was it really that easy? (No, it wasn't)

* Is this finally enough

* Also added another full percentage point of tests

* Trying to clean things up a bit more

* Now how does this look?

* Just a little more clean up

* Added a few more tests for the new helper functions

* Last pass on much better tests for this

* Oops, forgot to remove redundant tests

* Fix the fixtures

* Getting closer to something decent, I hope

* Another pass on the formatting of the number 1

* And yet another pass on these tests

* Tests cleaned up a bit more

* Minor updates as suggested

* Another pass on assert with metrics helper

* Now this is fully tested
2024-10-15 14:22:36 +02:00
epenet
2542ddd30a Improve check for user-visible flows when checking translations in tests (#128434)
* Improve check for user-visible flows when checking translations in tests

* Fix nest (from DHCP)

* Ignore homeassistant_hardware

* Improve logic
2024-10-15 14:09:53 +02:00
Julian
260d919f80 Fix translation string in spotify (#128440)
* Fix translation string in spotify

* Remove ignore_translations from spotify config_flow test

* Fix formatting in config flow test for spotify
2024-10-15 14:00:34 +02:00
dependabot[bot]
fa8284d360 Bump github/codeql-action from 3.26.12 to 3.26.13 (#128420)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-15 13:52:46 +02:00
Joakim Sørensen
fb7bed2ea0 Add WS endpoint to fetch the details of a backup (#128430)
* Add WS endpoint to fetch the details of a backup

* Shorten

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Adjust

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-10-15 13:00:34 +02:00
epenet
84b2c74057 Fail on unused ignore_translations fixture (#128422)
* Fail on unused ignore_translations fixture

* Cleanup melcloud

* Use pytest.fail

* Cleanup tplink

* Cleanup matter
2024-10-15 12:40:47 +02:00
Joakim Sørensen
a14cb13194 Add BaseBackupManager as a common interface for backup managers (#126611)
* Add BaseBackupManager as a common interface for backup managers

* Document the key

* Update homeassistant/components/backup/manager.py

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2024-10-15 12:31:12 +02:00
Marc Mueller
78fce90178 Fix pytest workflow for testing multiple Python versions [ci] (#128412) 2024-10-15 12:28:52 +02:00
Julian
a158e893e0 Fix translation string in matter (#128364)
* Fix translation string in matter

* Reorder strings.json for matter component
2024-10-15 11:56:56 +02:00
epenet
117bc67a4c Adjust homewizard translation strings (#128423)
* Add missing translation for homewizard

* Adjust
2024-10-15 11:34:20 +02:00
epenet
9930473390 Add missing translation for youtube (#128431) 2024-10-15 11:29:17 +02:00
Julian
b41ef73ecb Fix translation string in iotty (#128385) 2024-10-15 10:59:25 +02:00
Julian
52b6574240 Fix translation string in rova (#128402) 2024-10-15 10:53:58 +02:00
Brett Adams
0d857d3e6a Fix reauth strings in Teslemetry (#128426)
* config strings

* remove entry_data
2024-10-15 10:47:26 +02:00
epenet
3ba3fbf4a5 Add tests/components/conftest.py to core files (#128425) 2024-10-15 10:34:54 +02:00
Cyrill Raccaud
c3e7fcc153 Response type should not contain datetime for Swiss Public Transport (#128391)
* response type should not contain datetime

* use isoformat
2024-10-15 07:35:05 +02:00
Marc Mueller
2c00cd489e Fix go2rtc test RuntimeWarnings (#128411) 2024-10-15 01:11:01 +02:00
Oliver
df52f3f0e1 Fix initialization of some denonavr receivers when telnet API is enabled (#127882)
Suppress `denonavr.exceptions.AvrProcessingError` when connecting to telnet API
2024-10-14 23:23:44 +02:00
Thomas55555
11e8e56e05 Improve internal naming (#128390)
* Improve internal naming

* revert select
2024-10-14 23:15:02 +02:00
Julian
a5ecbd547c Fix translation string in gardena_bluetooth (#128387) 2024-10-14 21:53:36 +02:00
Simon Lamon
866912d3f7 Keep the provided name when creating a tag (#128240)
* Keep the name

* Add patch

* Update homeassistant/components/tag/__init__.py

Co-authored-by: G Johansson <goran.johansson@shiftit.se>

---------

Co-authored-by: G Johansson <goran.johansson@shiftit.se>
2024-10-14 21:22:12 +02:00
Julian
56e550f136 Fix translation string in eq3btsmart (#128319) 2024-10-14 18:46:38 +02:00
Julian
1e179adcf2 Fix translation string in lifx (#128362) 2024-10-14 18:45:42 +02:00
Julian
c5fe7ea0ea Fix translation string in weatherflow (#128321) 2024-10-14 18:15:40 +02:00
epenet
fdda0cc9cc Use reauth/reconfigure helpers in tedee config flow (#128025)
* Use reauth/reconfigure helpers in tedee config flow

* Also cleanup unnecessary reconfigure_confirm
2024-10-14 18:01:47 +02:00
epenet
f9dfc64c6f Use long option for pytest numprocesses (#128354) 2024-10-14 17:20:58 +02:00
epenet
f41494b7cc Ensure config_flow abort reasons have translations (#128140)
* Ensure config_flow abort reasons have translations

* Ignore fake_integration in application_credentials

* Mark gardena_bluetooth as needs fixing

* Mark google as needs fixing

* Mark google_assistant_sdk as needs fixing

* Mark homewizard as needs fixing

* Mark homeworks as needs fixing

* Mark honeywell as needs fixing

* Mark jewish_calendar as needs fixing

* Mark lg_netcast as needs fixing

* Mark lifx as needs fixing

* Mark lyric as needs fixing

* Mark madvr as needs fixing

* Mark matter as needs fixing

* Mark melcloud as needs fixing

* Mark motioneye as needs fixing

* Mark ollama as needs fixing

* Mark philips_js as needs fixing

* Mark spotify as needs fixing

* Mark srp_energy as needs fixing

* Mark subaru as needs fixing

* Mark tplink as needs fixing

* Mark yolink as needs fixing

* Mark youtube as needs fixing

* Fix incorrect comment
2024-10-14 16:39:10 +02:00
Julian
821d9abc56 Fix translation string in melcloud (#128363)
* Fix translation strings in melcloud

* Fix wrong key reference for "invalid_auth"
2024-10-14 16:03:53 +02:00
Robert Resch
f5b55d5eb3 Rewrite go2rtc binary handling to be async (#128078) 2024-10-14 15:32:00 +02:00
Josef Zweck
cdb1b1df15 Add model_id to tedee (#128356) 2024-10-14 14:56:27 +02:00
Julian
8e6b41e637 Fix translation string in yolink (#128353) 2024-10-14 14:45:14 +02:00
Julian
1f7cc5f5ec Fix translation string in tplink (#128352) 2024-10-14 14:01:27 +02:00
epenet
1a0c3a49b9 Use async_update_reload_and_abort in awair (#128345) 2024-10-14 13:27:04 +02:00
epenet
c4e2e9c4f0 Use reauth_confirm in azure_devops (#128349) 2024-10-14 13:24:08 +02:00
Andrew Jackson
7df973648c Strip path from Mastodon base url (#127994) 2024-10-14 13:20:25 +02:00
epenet
25aea140be Cleanup unnecessary reconfigure_confirm from config flows (#128086) 2024-10-14 12:57:15 +02:00
Julian
8d2cf0cf38 Fix translation string in tankerkoenig (#128320) 2024-10-14 12:33:13 +02:00
epenet
d2bbfe1282 Refactor abode config flow tests (#128334)
* Refactor abode config flow tests

* Cleanup
2024-10-14 12:13:47 +02:00
epenet
6d72391ee1 Use reauth helpers in airvisual (#128335)
* Use reauth helpers in airvisual

* Cleanup unused code in tests
2024-10-14 11:46:14 +02:00
tronikos
a53e02b51b Bump opower to 0.8.4 (#128338) 2024-10-14 11:45:38 +02:00
epenet
401e334c28 Remove single-use variable in aussie-broadband (#128340) 2024-10-14 11:45:12 +02:00
Josef Zweck
4c10ce6f40 Add model_id to lamarzocco (#128344) 2024-10-14 11:45:02 +02:00
J. Nick Koston
fed6a4689f Bump yarl to 1.15.2 (#128309)
changelog: https://github.com/aio-libs/yarl/compare/v1.15.1...v1.15.2
2024-10-14 08:14:38 +02:00
Julian
6dc5a9efde Fix translation string in knocki (#128318)
* Fix translation string in knocki

* Update homeassistant/components/knocki/strings.json

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-10-13 22:18:08 +02:00
Chris Talkington
cb1e5a2412 Fix playing media via roku (#128133)
* re-support playing media via roku

* fixes

* test fixes

* Update test_media_player.py

* always send media type

* add description to options flow
2024-10-13 12:41:51 -05:00
Hans Kröner
f47a012c62 Bump pydeconz to v118 (#128289) 2024-10-13 19:37:02 +02:00
Elias Wernicke
e6e22dc0bf Refactor todo tests (#128251)
refactor todo tests
2024-10-13 08:17:15 -07:00
G Johansson
d8589113c3 Fix state for litterrobot (#128297) 2024-10-13 16:31:53 +02:00
dontinelli
188e503070 Bump solarlog_cli to 0.3.2 (#128293) 2024-10-13 16:04:58 +02:00
Simone Chemelli
e4f7ac6236 Add switch entity for Shelly scripts (#108171)
* introduce script switch only

* chore: add script switch test

* chore: apply review comments

* chore: fix tests

* chore: apply review comments
2024-10-13 15:11:40 +02:00
G Johansson
7178943223 Add translatable title to statistics (#128286) 2024-10-13 14:37:57 +02:00
G Johansson
27c76e746a Add translatable title to history_stats (#128287) 2024-10-13 14:33:12 +02:00
epenet
de47776ea5 Do not use async_config_entry_first_refresh in fastdotcom (#128152)
Do not use async_config_entry_first_refresh in fastdocom
2024-10-13 14:17:11 +02:00
epenet
7e56b595a0 Do not link nextbus coordinator to config entry (#128151)
* Do not link nextbus coordinator to config entry

* Refactor tests and add specific failure test

* Use ConfigEntryNotReady

* Cleanup coordinator
2024-10-13 14:13:37 +02:00
Adam Petrovic
d15a9a4359 Fix daikin entities not refreshing quickly (#128230)
* Fix daikin entities not refreshing quickly

* Update homeassistant/components/daikin/switch.py

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-10-13 13:20:16 +02:00
Sid
c4ff3f731b Use entry.runtime_data for caldav (#128278) 2024-10-13 13:09:20 +02:00
Allen Porter
886399284b Bump gcal_sync to 6.1.6 (#128270) 2024-10-13 12:47:27 +02:00
J. Nick Koston
bf73e09918 Bump yarl to 1.15.1 (#128268)
changelog: https://github.com/aio-libs/yarl/compare/v1.15.0...v1.15.1
2024-10-13 12:47:00 +02:00
Álvaro Fernández Rojas
fef36e677d Update aioairzone to v0.9.5 (#128265)
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2024-10-13 12:45:53 +02:00
Julian
441fdc35b2 Fix translation string in google (#128237) 2024-10-12 18:40:35 -07:00
Maciej Bieniek
801c73ef94 Bump gios to version 5.0.0 (#128257) 2024-10-13 01:01:58 +03:00
epenet
3e56185a39 Use reconfigure helpers in axis config flow (#127976)
* Use reconfigure helpers in axis config flow

* Add string

* Update strings.json
2024-10-12 23:31:12 +02:00
Michael
caf85fe61d Fix printer uptime fluctuations in IPP (#127725)
* decrease uptime accuracy from seconds to minutes

* adjust tests

* calc uptime timestamp in coordinator

* bump pyipp to 0.17.0

* revert changes, just use the new printer.booted_at property

---------

Co-authored-by: Chris Talkington <chris@talkingtontech.com>
2024-10-12 13:22:03 -05:00
Jan Bouwhuis
3112682923 Mark mqtt as integration with single config entry (#128202) 2024-10-12 19:55:39 +02:00
Jan Bouwhuis
edb30af441 Fix hassio data fetching over list[Repository] (#128206)
* Fix hassio data fetching over list[Repository]

* Parameterize store mock and add store data to sensor tests
2024-10-12 14:44:26 +02:00
J. Diego Rodríguez Royo
b5a6bb74ce Fix binary sensor at Home Connect (#128234) 2024-10-12 11:30:38 +02:00
Michael
8236a9529f Mark integrations as single_config_entry in manifest [k-r] (#128191)
* mark integrations as single_config_entry in manifest

* fix owntracks test
2024-10-12 09:03:17 +02:00
Michael
c50d0646ab Mark integrations as single_config_entry in manifest [a-i] (#128189)
* mark integrations as single_config_entry in manifest

* fix ecobee tests

* fix iaqualink test
2024-10-12 08:59:57 +02:00
J. Nick Koston
1484a9c0ee Bump yarl to 1.15.0 (#128215)
changelog: https://github.com/aio-libs/yarl/compare/v1.14.0...v1.15.0
2024-10-12 08:52:12 +02:00
epenet
abe02c3843 Cleanup unnecessary reconfigure_confirm in fritzbox config flow (#128087) 2024-10-12 08:42:59 +02:00
Michael
8e9e738bb8 Fix ci (dhcp tests) (#128207)
remove unused import
2024-10-12 02:20:54 +02:00
__JosephAbbey
bd97a0dfe3 Add to-do list response target for ListAddItemIntent (#121970)
* Add todo list response target for ListAddItemIntent

* Delete .vscode/settings.json

* Fix imports

* Add test

* Formatting

* Fix test

---------

Co-authored-by: Tom Harris <tomharris@harrisnj.net>
Co-authored-by: Michael Hansen <mike@rhasspy.org>
2024-10-11 17:23:20 -05:00
Michael
9a59cba7f3 Mark integrations as single_config_entry in manifest [system integrations] (#128201)
mark integrations as single_config_entry in manifest
2024-10-11 23:50:44 +02:00
Michael
07021dbd65 Use single_instance_allowed in hassio (#128060)
* use single_instance_allowed

* mark hassio as `single_config_entry`
2024-10-11 23:37:14 +02:00
Michael Hansen
8ee8421af7 Use device area/floor in HassGetState intent (#128197)
Use preferred area/floor in HassGetState intent
2024-10-11 16:08:43 -05:00
G Johansson
f983446355 Remove not used issue strings in tessie (#128178) 2024-10-11 22:12:23 +02:00
Marc Hörsken
6650d32055 Improve discovery of WMS WebControl pro by updating IP address (#128007) 2024-10-11 20:40:03 +02:00
Jan-Philipp Benecke
0badff98c6 Remove deprecated yaml support from lg_netcast (#128114) 2024-10-11 20:36:37 +02:00
Jan-Philipp Benecke
1630bf5de7 Remove legacy notify service from ecobee (#128115) 2024-10-11 20:26:13 +02:00
G Johansson
2b2820018c Remove legacy knx notify service (#128185) 2024-10-11 20:19:15 +02:00
Manu
8540343d7f Add tests for Habitica integration (#126445)
* Add tests for sensor platform

* Add tests for switch platform

* Add tests for button platform

* Add tests for todo platform

* Add tests for todo platform

* Load json data fixtures

* Update snapshot

* Add fixtures

* test move todo

* parametrize todo tests, test drop notification

* test todo exceptions

* some minor improvements

* test setup retry

* Test update failed

* Test coordinator rate limit

* Test date utils

* Reduce scope of PR

* remove unused assert_mock_called_with  function

* update snapshot

* Update tests/components/habitica/test_init.py

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-10-11 20:03:23 +02:00
Joost Lekkerkerker
e52b347b18 Bump yt-dlp to 2024.10.07 (#128182) 2024-10-11 19:54:10 +02:00
Michael Hansen
67e0ccf677 Use exposed error messages in Assist (#127503)
* Use exposed error messages

* Report expose errors

* Remove comment

* Relative import

* Rework expose check logic

* Delay creation of all names list, and skip config/hidden entities

* Clean up commented code and type issue

* Fix test

* Move assistant check
2024-10-11 13:06:03 -04:00
Mike Degatano
ba6bcf86ca Bump aiohasupervisor to 0.2.0b0 (#128173) 2024-10-11 19:03:32 +02:00
G Johansson
a85d7af9e7 Remove deprecated notify service in ecobee (#128177) 2024-10-11 18:21:28 +02:00
G Johansson
39e63aee0c Remove config entry import from lg_netcast (#128179) 2024-10-11 18:20:50 +02:00
J. Diego Rodríguez Royo
6a12a24d73 Migrate device models to entity descriptions and add localization & icons at Home Connect (#127870)
* Delete device models and use entity descriptions

* Home Connect localization & icons

* Update homeassistant/components/home_connect/strings.json

* Update homeassistant/components/home_connect/icons.json

* Fix tests

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-10-11 17:52:06 +02:00
Marc Jay
1739647768 Fix grammar in Template Helper creation dialog (#128174) 2024-10-11 17:51:47 +02:00
Manu
38fc0bd889 Add x-client headers to Habitica API calls (#127952)
Add x-client headers
2024-10-11 17:28:22 +02:00
epenet
63391717e7 Replace ValueError with deprecation in data update coordinator (#128082)
* Replace ValueError with deprecation in data update coordinator

* Rephrase
2024-10-11 17:24:47 +02:00
Steven B.
554629f37a Fix ring realtime events (#128083) 2024-10-11 17:17:32 +02:00
Christopher Fenner
791c3cd955 Fix preset handling issue in ViCare (#128167)
* add test case

* fix test case

* fix issue

* change order
2024-10-11 17:15:16 +02:00
Thomas55555
6e53c93271 Fix model in Husqvarna Automower (#128168) 2024-10-11 17:05:13 +02:00
epenet
7097315079 Cleanup unnecessary reconfigure_confirm in fritz config flow (#128089) 2024-10-11 15:54:28 +02:00
Joost Lekkerkerker
d50758197e Add test for Spotify select source (#128160) 2024-10-11 14:33:34 +02:00
Erik Montnemery
9ff35d5a5a Minor improvement of entity platform tests (#128158)
* Minor improvement of entity platform tests

* Fix snapshot
2024-10-11 14:14:29 +02:00
Joost Lekkerkerker
00f7bdbfaa Add more Spotify tests for the media player (#127999)
* Add more Spotify tests for the media player

* Fix comments

* Rename test
2024-10-11 14:06:52 +02:00
Erik Montnemery
e682d3461f Remove parameter add_config_entry from DeviceRegistry.async_update_device (#128139) 2024-10-11 14:01:14 +02:00
Joost Lekkerkerker
71898d0c8c Add snapshot testing to Spotify (#128032)
* Add snapshot testing to Spotify

* Fix
2024-10-11 13:58:04 +02:00
Erik Montnemery
416ead5311 Improve docstring of EntityComponent and EntityPlatform (#128135) 2024-10-11 13:43:20 +02:00
Raj Laud
c7882450ac Remove stale references in squeezebox services.yaml (#127739) 2024-10-11 13:39:33 +02:00
Teemu R.
1eea5b8a58 Increase tplink climate precision (#127996) 2024-10-11 13:15:30 +02:00
Antoine Reversat
7341337b5f Fix europe authentication in Fujitsu FGLair (#127947) 2024-10-11 13:14:47 +02:00
Matthias Alphart
964d87ae10 Update xknxproject to 3.8.1 (#128057) 2024-10-11 12:50:15 +02:00
epenet
cb02c723e0 Do not use async_config_entry_first_refresh in fronius (#128153) 2024-10-11 12:49:01 +02:00
Álvaro Fernández Rojas
4c1b7add39 Update aioairzone to v0.9.4 (#127792) 2024-10-11 12:39:39 +02:00
tronikos
252aa1410b Remove some redundant code in Opower's coordinator from the fix in #128141 (#128150) 2024-10-11 12:37:23 +02:00
Teemu R.
64693eaca2 Add reboot button for tplink (#127935)
* Add reboot button for tplink

* Add device_class, remove unnecessary translation and update fixtures

* update snapshot
2024-10-11 12:21:36 +02:00
tronikos
c39a1596d5 Log exceptions in the config flow of Opower (#128146)
log exceptions
2024-10-11 12:19:34 +02:00
tronikos
46184188e4 Fix regression in Opower that was introduced in 2024.10.0 (#128141)
* Avoid KeyError when statistics have gaps

* fix break

* Remove unnecessary check
2024-10-11 12:10:07 +02:00
tronikos
d9f4f424fd Bump opower to 0.8.3 (#128144) 2024-10-11 12:02:11 +02:00
Thomas55555
6b3f18cb5d Bump aioautomower to 2024.10.0 (#128137)
Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
2024-10-11 10:43:01 +02:00
J. Nick Koston
75c22b6a6f Bump aiohttp to 3.10.10 (#128128)
Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
2024-10-11 10:33:14 +02:00
Marc Mueller
19e7fdfdb0 Fix license script for ftfy (#128138) 2024-10-11 09:59:43 +02:00
Erik Montnemery
8ba14ef113 Minor improvement of device_registry (#128075)
* Minor improvement of device_registry

* Remove uncovered line
2024-10-10 22:41:44 +02:00
kevdliu
50025971d8 Support open next and close next actions for shades (#125097)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-10-10 15:09:52 -05:00
BlueMöhre
bcbba04f27 Add deCONZ IKEA RODRET device trigger (#128121)
add config for RODRET
2024-10-10 21:49:55 +02:00
Erik Montnemery
74ba8877d4 Improve entity registry test coverage (#128073) 2024-10-10 21:16:39 +02:00
Bram Kragten
ec91d74456 Update frontend to 20241002.3 (#128106) 2024-10-10 13:14:20 -04:00
Brett Adams
cb014cf255 Bump tesla-fleet-api to 0.8.4 (#127995)
Bump tesla-fleet-api
2024-10-10 18:43:37 +02:00
BlueMöhre
af08b73280 Add deconz IKEA SOMRIG device trigger (#127464)
add config for SOMRIG
2024-10-10 18:24:23 +02:00
Michael
e86d568536 Add missing already_configured strings (#128058)
* add missing already_configured string

* revert hassio
2024-10-10 17:52:00 +02:00
Jan-Philipp Benecke
9f7eb36a1f Remove deprecated speed limit lock entity from tessie (#128043)
Remove deprecated speedlimit lock entity from tessie
2024-10-10 17:51:10 +02:00
Phill (pssc)
0fcbfa996f Add squeezebox API failure test (#128066)
* add api failure test

* Update tests/components/squeezebox/test_init.py

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-10-10 17:38:14 +02:00
G Johansson
2ab5e5d267 Remove deprecated restart service in modbus (#128059) 2024-10-10 17:30:50 +02:00
Erik Montnemery
5b7bd6a52f Minor improvement of device registry tests (#128095) 2024-10-10 17:28:57 +02:00
David Knowles
ebb8ec954d Increase Hydrawise polling interval to 60 seconds (#128090) 2024-10-10 16:35:33 +02:00
Robert Resch
dd856a9116 Use custom function instead mashumaro in WebRTC dataclasses (#128099) 2024-10-10 16:15:09 +02:00
Marc Hörsken
5e38bb7a32 Add scene support to WMS WebControl pro (#126081)
* Add scene support to WMS WebControl pro

* Update homeassistant/components/wmspro/scene.py

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>

* Create a device per room instead of scene

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-10-10 15:44:18 +02:00
AlCalzone
f446e42317 Support non-dimmable color lights in Z-Wave JS (#127808)
* Z-Wave JS: support non-dimmable color lights

* remove black_is_off light, support on/off/color

* fix: tests for on/off light

* fix: typo

* remove commented out old test code

* add test for off and on

* support colored lights without separate brightness control

* add test for color-only light

* refactor: extract color only light

* fix: preserve color when changing brightness

* extend tests

* refactor again

* refactor scale check

* refactor: remove impossible check

* review feedback

* review feedback

* fix discovery to handle all 3 switch CCs, limit search to same endpoint

* Update homeassistant/components/zwave_js/discovery.py

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* Update homeassistant/components/zwave_js/discovery.py

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* add test for Smart Switch 7 state

* Add type annotations

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2024-10-10 14:36:37 +02:00
kingy444
67f67a02f8 Fix casing on Powerview Gen3 zeroconf discovery (#128076) 2024-10-10 07:22:14 -05:00
Mike Degatano
a9aa5ad229 Use aiohasupervisor for store APIs (#126780)
* Use aiohasupervosor for store addon info

* Use aiohasupervisor install addon

* Use aiohasupervisor for store info API

* Fix onboarding test

* Changes from feedback

* Move get_supervisor_client out of constructor

* Mock supervisor_client in tests

* Make property private
2024-10-10 10:27:20 +02:00
epenet
f504c27972 Add ability to pass the config entry explicitly in data update coordinators (#127980)
* Add ability to pass the config entry explicitely in data update coordinators

* Implement in accuweather

* Raise if config entry not set

* Move accuweather models

* Fix gogogate2

* Fix rainforest_raven
2024-10-10 10:20:15 +02:00
dependabot[bot]
9b3f92e265 Bump actions/upload-artifact from 4.4.2 to 4.4.3 (#128074)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-10 10:07:44 +02:00
Ian Hattendorf
4efb747389 Add Jellyfin remote entity (#126461)
* jellyfin: Add remote entity

This allows sending general commands via the
"Sessions/{sessionId}/Command" endpoint

* jellyfin: Add remote entity tests
2024-10-10 09:30:05 +02:00
Michael
347440019e Use snapshot platform test helper in IPP (#127734)
* use snapshot_platform

* we don't need to check for amount of entities anymore
2024-10-09 19:28:22 -05:00
epenet
39891ffe60 Drop reconfigure_confirm step in trafikverket_camera (#128031)
* Drop reconfigure_confirm step in trafikverket_camera

* Update strings.json
2024-10-09 22:14:34 +02:00
G Johansson
9bbbb2cd3c End deprecation for config entry import for folder watcher (#128056) 2024-10-09 21:25:55 +02:00
Michael
2a171fb08c Add missing translation string in enphase envoy (#128053) 2024-10-09 21:24:31 +02:00
Steven B.
9f6412a976 Fix missing reauth name translation placeholder in ring integration (#128048) 2024-10-09 21:23:23 +02:00
Michael
8a6a13db0e Add missing translation string for re-auth flows (#128055) 2024-10-09 21:12:00 +02:00
epenet
fbec61662b Use reauth/reconfigure helpers in shelly config flow (#128019) 2024-10-09 22:05:45 +03:00
G Johansson
9d7f0e77f1 Add missing translations strings in trafikverket_camera (#128037) 2024-10-09 21:02:43 +02:00
Owen Voke
983607e683 Add state class to qBittorrent UL / DL speed (#127988) 2024-10-09 19:30:53 +01:00
Marc Mueller
c3cbdd0eb9 Update RestrictedPython to 7.4 (#128039) 2024-10-09 14:17:44 -04:00
Jan-Philipp Benecke
b56fa7b406 Extend deprecation period for hass.helpers by 6 months (#128038) 2024-10-09 14:16:56 -04:00
Marc Mueller
dabc38dbff Fix StateType imports (#128042) 2024-10-09 20:16:14 +02:00
Marc Mueller
e6bba49bcd Add strict typing for govee_ble (#128044) 2024-10-09 19:29:42 +02:00
Steven B.
23a1046a8f Allow single use of device class translations in tplink snapshot tests (#128022) 2024-10-09 18:12:21 +02:00
epenet
7c6b517672 Use reconfigure helpers in fronius config flow (#128001)
* Use reconfigure helpers in fronius

* Drop _async_abort_entries_match
2024-10-09 17:52:30 +02:00
epenet
f6188949f3 Use reconfigure helpers in enphase envoy config flow (#127977) 2024-10-09 17:33:34 +02:00
epenet
ff1ea46c46 Do not cache the reconfigure entry in feedreader config flow (#127989) 2024-10-09 17:32:08 +02:00
epenet
e8bc07d40f Use reauth/reconfigure helpers in fritzbox config flow (#127993) 2024-10-09 17:31:49 +02:00
epenet
fa717699f5 Use reconfigure helpers in mealie config flow (#128013) 2024-10-09 17:29:01 +02:00
epenet
8dfb8ebe5c Use reauth/reconfigure helpers in reolink config flow (#128018) 2024-10-09 17:26:08 +02:00
epenet
7b6cac558d Use reconfigure helpers in melcloud config flow (#128014) 2024-10-09 17:25:13 +02:00
epenet
f13f4a4851 Do not cache reauth/reconfigure entry in solarlog config flow (#128023) 2024-10-09 17:24:19 +02:00
epenet
11245dbb82 Do not cache the entry in lamarzocco config flow (#128010) 2024-10-09 17:22:53 +02:00
Marc Hörsken
805bed092e Fix discovery of WMS WebControl pro by using IP address (#127939) 2024-10-09 17:18:58 +02:00
epenet
b38694fbcd Do not cache the reconfigure entry in here travel time config flow (#128003) 2024-10-09 17:12:46 +02:00
epenet
ac7dc03603 Do not cache the reconfigure entry in holiday config flow (#128005) 2024-10-09 17:09:24 +02:00
epenet
253a5e3e4b Use reauth/reconfigure helpers in fritz config flow (#127990) 2024-10-09 17:07:49 +02:00
dontinelli
b8131cee2e Add missing translation string in solarlog (#128015) 2024-10-09 16:58:16 +02:00
epenet
c8178ab915 Do not cache reconfigure entry in vallox config flow (#128029) 2024-10-09 16:50:17 +02:00
epenet
577ae6923a Do not cache reconfigure entry in waze_travel_time config flow (#128030) 2024-10-09 16:31:11 +02:00
epenet
fcaec2c3f4 Use reconfigure helpers in lcn config flow (#128011) 2024-10-09 16:21:36 +02:00
epenet
78f4b28697 Use reauth/reconfigure helpers in trafikverket_weatherstation config flow (#128028) 2024-10-09 16:14:56 +02:00
epenet
acd32b500c Use reauth/reconfigure helpers in trafikverket_camera config flow (#128026) 2024-10-09 16:08:45 +02:00
epenet
168d0f11ab Do not cache the reconfigure entry in homeworks config flow (#128006) 2024-10-09 16:07:47 +02:00
epenet
6da8b69ff8 Do not cache reconfigure entry in smhi config flow (#128021) 2024-10-09 16:06:59 +02:00
epenet
3fa460a42a Use reconfigure helpers in madvr config flow (#128012) 2024-10-09 16:05:14 +02:00
epenet
021e7ce49b Do not cache reauth/reconfigure entry in pyload config flow (#128017) 2024-10-09 16:03:19 +02:00
Marc Mueller
2d093e9692 Enable strict typing for switch_as_x (#127998) 2024-10-09 16:00:45 +02:00
epenet
30a244de7a Do not cache reconfigure entry in tado config flow (#128024) 2024-10-09 15:56:07 +02:00
epenet
195398713b Use reconfigure helpers in nam config flow (#128016) 2024-10-09 15:40:47 +02:00
epenet
3d1e57766a Simplify jewish_calendar reconfigure flow (#128008)
* Simplify jewish_calendar reconfigure flow

* Adjust
2024-10-09 15:34:11 +02:00
epenet
dd08381167 Do not cache the reconfigure entry in google travel time config flow (#128002) 2024-10-09 15:07:48 +02:00
Joost Lekkerkerker
c096cc23df Add tests for the Spotify media browser (#127857)
* Add tests for the Spotify media browser

* Add tests for the Spotify media browser

* Fix

* Fix comment

* Revert "Add tests for the Spotify media browser"

This reverts commit 59de6725d22b9c8797a187f7e2d598375bd372c4.

* Add comment

* Add comment
2024-10-09 13:39:03 +02:00
azerty9971
d8d000f279 Fix wrong DPTypes returned by Tuya's cloud (#127860)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-10-09 12:24:09 +02:00
Maikel Punie
5dd91db5c0 Bump pyduotecno to 2024.10.0 (#127979) 2024-10-09 12:20:27 +02:00
Joost Lekkerkerker
c97be4d0d1 Add Spotify media player tests (#127839)
* Improve Spotify mock

* Add Spotify media player tests

* Remove extra changes

* Remove available markets

* Remove available markets

* Fix tests
2024-10-09 12:09:42 +02:00
Manu
fa53ec40d6 Remove deprecated yaml import from Habitica (#127946) 2024-10-09 11:17:19 +02:00
epenet
413a4cd7bd Use reconfigure helpers in brother config flow (#127975)
* Use reconfigure helpers in brother config flow

* Don't abort on unique_id mismatch
2024-10-09 11:17:08 +02:00
Erik Montnemery
c22bbc5b91 Improve IssueRegistryItemSnapshot (#127949) 2024-10-09 10:57:04 +02:00
G Johansson
6f45e376da Don't error with missing information in systemmonitor diagnostics (#127868) 2024-10-09 10:44:54 +02:00
Lenn
5e6a38769d Bump motionblindsble to 0.1.2 (#127954) 2024-10-09 10:33:29 +02:00
Marc Hörsken
f5797e3799 Update pywmspro to 0.2.1 to fix handling of unknown products (#127942) 2024-10-09 10:31:44 +02:00
Johan Gustafsson
bbbbd0810a Bump auroranoaa to 0.0.5 (#127965) 2024-10-09 10:30:19 +02:00
epenet
053e2a52b8 Fix firmware version parsing in venstar (#127974) 2024-10-09 09:56:53 +02:00
epenet
99eb466223 Add updates argument to update_reload_and_abort helper (#127781)
* Add updates argument to update_reload_and_abort helper

* Also apply to airvisual_pro

* Rename argument

* docstring

* Use modern syntax

Co-authored-by: Erik Montnemery <erik@montnemery.com>

* Apply suggestion

Co-authored-by: Erik Montnemery <erik@montnemery.com>

* Apply suggestion

* Docstring

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-10-09 07:47:18 +02:00
Raman Gupta
2dec36f210 Fix zwave_js config validation for values (#127972) 2024-10-09 07:35:41 +02:00
dependabot[bot]
8b46c8bf20 Bump actions/upload-artifact from 4.4.1 to 4.4.2 (#127962) 2024-10-08 23:54:44 +02:00
dependabot[bot]
77d83bffee Bump actions/cache from 4.1.0 to 4.1.1 (#127961) 2024-10-08 23:53:33 +02:00
G Johansson
666e8e133e Cover state is enum (#127144)
* Change light state to use enum

* Adjust cover tests

* Update cover

* Fix covers

* Some tests

* More tests

* Fix tests

* Fix
2024-10-08 18:39:04 +02:00
G Johansson
959898e0fc Fix merge_response template not mutate original object (#127865)
* Fix merge_response template not mutate original object

* Add comment
2024-10-08 18:35:06 +02:00
Ricardo Marques
d41b9beb71 Fix custom account config flow setup (#127750) 2024-10-08 17:44:59 +02:00
Joost Lekkerkerker
00a037c786 Snapshot more platforms for Matter (#127541)
* Snapshot more platforms for Matter

* Fix

* Fix

* Fix

* Fix tests
2024-10-08 16:17:21 +02:00
epenet
d8b51b4f2c Avoid unknown error translation strings in anthropic (#127823) 2024-10-08 15:59:45 +02:00
Steven B.
4d003f51c3 Bump python-kasa to 0.7.5 (#127934) 2024-10-08 15:47:12 +02:00
Erik Montnemery
e01512e469 Update integrations to use new UnitOfConductivity enums (#127932) 2024-10-08 15:20:26 +02:00
epenet
5836a85340 Prevent async_create_entry from reauth/reconfigure flows (#127527)
* Prevent `async_create_entry` from reauth/reconfigure flows

* Adjust message

* Don't raise just yet

* Adjust message

* Fix string

* Remove invalid comment

* Add parameter

* Use count parameter

* Remove another branching
2024-10-08 15:19:58 +02:00
epenet
4e15556eeb Cleanup unused variable in tests (#127930) 2024-10-08 15:14:23 +02:00
Erik Montnemery
0956dbb578 Rename UnitOfConductivity enum members (#127919)
* Rename UnitOfConductivity enum members

* Update test snapshots
2024-10-08 14:44:01 +02:00
Erik Montnemery
0c0ff855b1 Warn when async_update_entry creates a unique_id collision (#127929) 2024-10-08 14:42:41 +02:00
Andre Lengwenus
017ba509a6 Add device_class for LCN sensors (#127921)
* Add device_class for lcn sensor

* Rename device_class mapping dictionary
2024-10-08 14:24:48 +02:00
Joost Lekkerkerker
9d9b5af97f Deprecate hassio service to update addon (#127927)
* Deprecate hassio service to update addon

* Update homeassistant/components/hassio/strings.json

Co-authored-by: Stefan Agner <stefan@agner.ch>

* service -> action

* service -> action; in the title as well

---------

Co-authored-by: Stefan Agner <stefan@agner.ch>
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-10-08 14:23:29 +02:00
Manu
dd5e5323f1 Add support of due date calculation for grey dailies in Habitica integration (#127923)
Fix grey dailies due date calculation
2024-10-08 14:08:16 +02:00
Erik Montnemery
cee7017d20 Reinitialize hassio discovery flow on config entry removal (#127088)
* Reinitialize hassio discovery flow on config entry removal

* Address review comments
2024-10-08 14:07:05 +02:00
J. Nick Koston
c9311ea3c9 Bump yarl to 1.14.0 (#127924) 2024-10-08 14:01:37 +02:00
Maciej Bieniek
92f08be416 Bump imgw_pib library to version 1.0.6 (#127925)
Bump `imgw_pib`
2024-10-08 13:58:03 +02:00
epenet
4478f64002 Remove dead reconfigure code (#127398)
* Remove dead reconfigure code

* Adjust

* Start cleaning up test

* Prevent duplicate flows

* Add missing string

* Adjust two more tests

* Only filter out reauth flows

* Update strings.json

* Update config_entries.py

* Adjust tests

* Remove all checks - but add comment in tests

* Simplify PR
2024-10-08 13:35:04 +02:00
Robert Resch
b56e22d4ee Use homeassistant STUN server (#127922) 2024-10-08 12:25:20 +02:00
Erik Montnemery
d6ee10a543 Make FlowHandler.context a typed dict (#126291)
* Make FlowHandler.context a typed dict

* Adjust typing

* Adjust typing

* Avoid calling ConfigFlowContext constructor in hot path
2024-10-08 12:18:45 +02:00
Johan Gustafsson
217165208b Fix aurora alert sensor always Off (#127780) 2024-10-08 11:31:59 +02:00
epenet
2c664efb3c Add new helper for matching reauth/reconfigure config flows (#127565) 2024-10-08 10:07:36 +02:00
epenet
15a1a83729 Add missing translation string in tesla_fleet (#127915) 2024-10-08 09:48:06 +02:00
Erik Montnemery
c87415023c Correct cleanup of sensor statistics repairs (#127826) 2024-10-08 09:39:21 +02:00
Simone Rescio
86fddf2ec1 Fix devContainer startup (#127042) 2024-10-08 09:32:26 +02:00
epenet
1eb8d0fa1c Don't abort on unknown error in nina config flow (#127908) 2024-10-08 09:10:26 +02:00
dependabot[bot]
6df77ef94b Bump actions/upload-artifact from 4.4.0 to 4.4.1 (#127905)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-08 09:05:12 +02:00
G Johansson
bff66dbbd3 Use separate constants in slide cover (#127852) 2024-10-08 09:03:43 +02:00
epenet
646f457637 Add missing translation string in otbr (#127909) 2024-10-08 09:00:45 +02:00
dependabot[bot]
b37d9179e6 Bump github/codeql-action from 3.26.11 to 3.26.12 (#127904)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-08 08:59:48 +02:00
dependabot[bot]
eff9d568a2 Bump actions/checkout from 4.2.0 to 4.2.1 (#127903)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-08 08:59:34 +02:00
epenet
11793f04c1 Add missing translation string in cloudflare (#127906) 2024-10-08 08:57:21 +02:00
epenet
79e8a694ad Don't cache reauth entry in aseko_pool_live config flow (#127902) 2024-10-08 08:56:30 +02:00
epenet
4a202eca59 Add missing and fix incorrect translation string in permobil (#127910) 2024-10-08 08:54:53 +02:00
epenet
70fcca824b Add missing translation string in tile (#127911) 2024-10-08 08:53:41 +02:00
epenet
f2e0190b68 Add missing translation string in yamaha_musiccast (#127912) 2024-10-08 08:52:54 +02:00
epenet
20205d7ff4 Fix incorrect translation key in crownstone (#127913) 2024-10-08 08:51:53 +02:00
epenet
3b195f61da Fix incorrect translation string in fivem (#127907) 2024-10-08 08:51:11 +02:00
dontinelli
99a40ae49f Reverse unintended change of unique_id for solarlog (#127845) 2024-10-08 08:46:49 +02:00
epenet
ba4ed5a1bb Fix incorrect translation string in analytics_insights (#127815) 2024-10-08 08:45:41 +02:00
Michael
ac42ff5d73 Fix translation strings in geonetnz_volcano (#127872) 2024-10-08 08:44:46 +02:00
epenet
4bb3d69631 Fix incorrect translation string in azure event hub (#127820) 2024-10-08 08:44:23 +02:00
epenet
e6aac6a77f Add missing and fix incorrect translation string in alarmdecoder (#127814) 2024-10-08 08:43:40 +02:00
epenet
bb4e8e5717 Fix incorrect translation string in bryant_evolution (#127830) 2024-10-08 08:42:34 +02:00
Michael
c963e280ca Add missing translation string in AVM Fritz!Smarthome (#127864) 2024-10-08 08:40:58 +02:00
epenet
ea1ce6a263 Don't cache reauth entry in androidtv_remote config flow (#127900)
Don't cache reauth entry in androidtv_remote
2024-10-07 23:22:55 -07:00
Marc Mueller
412acf943d Enable strict typing for panel_custom (#127855) 2024-10-08 08:16:58 +02:00
epenet
1984989564 Add missing and fix incorrect translation string in duotecno (#127834) 2024-10-08 08:16:43 +02:00
epenet
e1988cd6fc Add missing and fix incorrect translation string in aurora (#127818) 2024-10-08 08:15:46 +02:00
J. Nick Koston
6269ce36b3 Bump propcache to 0.2.0 (#127816) 2024-10-08 08:14:37 +02:00
epenet
9ab81eb444 Add missing translation string in deluge (#127831) 2024-10-08 08:13:54 +02:00
epenet
b75ed5b8f1 Add missing translation string in blebox (#127827) 2024-10-08 08:13:16 +02:00
Erik Montnemery
fbd9502474 Use SensorDeviceClass.CONDUCTIVITY for xiaomi_ble conductivity sensors (#127880) 2024-10-08 08:12:39 +02:00
epenet
b32c4a8fbb Add missing translation string in kitchen_sink (#127838) 2024-10-08 08:12:21 +02:00
dcmeglio
3755f598a2 Bump pyeconet to 0.1.23 (#127896) 2024-10-08 08:11:25 +02:00
epenet
af7a9ff591 Add missing translation string in broadlink (#127829) 2024-10-08 08:10:25 +02:00
epenet
55376ea7f0 Add missing translation string in awair (#127819) 2024-10-08 08:10:01 +02:00
G Johansson
3a2843b9fa Bump holidays library to 0.58 (#127876) 2024-10-08 08:09:03 +02:00
Jon Seager
6dbfce0095 Bump pytouchlinesl to 0.1.8 (#127859) 2024-10-08 08:07:45 +02:00
G Johansson
1613b3c0df Use separate constants in template cover (#127853) 2024-10-08 08:06:44 +02:00
Marc Mueller
00ee2b4478 Enable strict typing for openai_conversation (#127854) 2024-10-08 08:06:05 +02:00
functionpointer
9a0cb59830 Clean up Tibber service tests (#127334)
* Tibber: cleanup tests

* Tibber: cleanup tests
2024-10-08 07:56:21 +02:00
Richard Kroegel
54c4fb5f56 BMW: Add reconfiguration flow (#127726)
* BMW: Add reconfiguration flow

* Implement requested changes

--------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Abort if unique_id changes, small adjustments

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-10-08 07:42:10 +02:00
Marc Mueller
c3bf1dde7e Enable strict typing for shell_command (#127856) 2024-10-08 02:05:41 +03:00
Shay Levy
963bba63d0 Bump aioshelly to 12.0.0 (#127884) 2024-10-08 02:05:23 +03:00
JEMcats
eac930ad7f Add Tesla Fleet grid status (#126438)
* Make Changes.

* Change to match suggested changes.

* add Possible States to island status

* remove storm watch active sensor.

* Update the test_*.ambr files

* Update *.ambr files

* Add more infromation to Grid Status

* Remove storm mode strings and icons
2024-10-07 22:18:40 +02:00
epenet
4c175a3ed9 Add missing translation string in dnsip (#127833) 2024-10-07 21:03:52 +02:00
Michael
ec39ec69bb Add missing translation string in AVM Fritz!Tools (#127863)
add missing translation string
2024-10-07 20:49:30 +02:00
Marc Mueller
3107785947 Update fritzconnection to 1.14.0 (#127793)
* Update fritzconnection to 1.14.0

* fix fritz image tests

---------

Co-authored-by: mib1185 <mail@mib85.de>
2024-10-07 20:00:24 +02:00
Joost Lekkerkerker
fe130b62c8 Replace Spotify fixtures (#127850)
Replace fixtures with real life ones
2024-10-07 18:00:54 +02:00
Joost Lekkerkerker
f0363ac221 Improve Spotify mock (#127825)
* Improve Spotify mock

* Fix comments

* Fix comments

* Fix comments

* Fix comments

* Fix comments

* Fix comments

* Fix comments

* Fix comments
2024-10-07 17:36:39 +02:00
epenet
75936fcb9c Add missing translation string in axis (#127822) 2024-10-07 16:12:09 +02:00
epenet
ffbb894dd6 Fix incorrect translation string in airvisual (#127813) 2024-10-07 08:03:00 -06:00
epenet
7271a64ac2 Add missing translation string in electric_kiwi (#127835) 2024-10-07 15:48:57 +02:00
epenet
ee65f60222 Fix incorrect translation string in blink (#127828) 2024-10-07 15:48:33 +02:00
epenet
c41e3cbf93 Fix incorrect translation string in august (#127817) 2024-10-07 15:27:23 +02:00
epenet
599076d6f4 Add missing patch in dnsip test (#127802) 2024-10-07 14:24:51 +02:00
TimL
06170592bd Bump pysmlight to v0.1.3 (#127804)
Bump pysmlight v0.1.3

Co-authored-by: Tim Lunn <tim@feathertop.org>
2024-10-07 14:24:26 +02:00
epenet
14111188c0 Fix incorrect string in amberlectric (#127807) 2024-10-07 14:15:23 +02:00
Marc Mueller
d185f230b9 Enable strict typing for workday (#127797) 2024-10-07 12:48:12 +02:00
Marc Mueller
079ba2a529 Add strict typing to radio_browser (#127799) 2024-10-07 12:47:08 +02:00
epenet
d99429463b Use reauth helpers in permobil config flow (#127530) 2024-10-07 11:37:28 +02:00
Erik Montnemery
563de82707 Bump pychromecast to 14.0.4 (#127791) 2024-10-07 11:34:39 +02:00
epenet
8c0e96e6e6 Extend update_entry_and_reload tests (#127776) 2024-10-07 11:23:48 +02:00
Álvaro Fernández Rojas
550858092c Update aioairzone-cloud to v0.6.6 (#127789) 2024-10-07 11:19:34 +02:00
Brett Adams
ae6add1e77 Fix Island status in Teslemetry (#127504) 2024-10-07 10:15:25 +02:00
Arie Catsman
927943e07a Add option to disable keep-alive for Enphase Envoy connections (#127603) 2024-10-07 10:13:23 +02:00
Marc Mueller
4cfb1c573e Update pre-commit to 4.0.0 (#127782) 2024-10-07 10:07:26 +02:00
Erik Montnemery
a36b516070 Bump pychromecast to 14.0.3 (#127778) 2024-10-07 10:04:54 +02:00
Marc Mueller
cb0ae29308 Update types packages (#127783) 2024-10-07 10:04:02 +02:00
AJ Jordan
6ee452aef3 Disable SELinux enforcement on dev containers (#127774) 2024-10-07 09:27:48 +02:00
Marc Mueller
bce274155c Update ephem to 4.1.6 (#127761) 2024-10-07 09:22:21 +02:00
dontinelli
019aff88ca Bump solarlog_cli to 0.3.1 (#127753) 2024-10-07 09:21:25 +02:00
epenet
c87a2ca335 Add default reconfigure reason in update_reload_and_abort (#127756)
* Add default reconfigure reason in async_update_reload_and_abort

* Simplify

* Fix test

* Add sample usage

* Remove multi-line ternary
2024-10-07 09:02:58 +02:00
Michael
4e650ec1ba Increase connection timeout in CalDAV (#127727) 2024-10-07 08:43:32 +02:00
Erik Montnemery
7ec911c4df Correct typing in rediscovery tests (#127777) 2024-10-07 08:42:04 +02:00
René Klomp
605aaf955c Migrate SMA unique id to str (#127732) 2024-10-07 08:19:55 +02:00
Joost Lekkerkerker
e78a3f7939 Add translation string for Withings wrong account (#127719) 2024-10-07 08:14:19 +02:00
Simon Lamon
54401bc0a5 Bump python-linkplay to 0.0.15 (#127748) 2024-10-07 08:10:48 +02:00
AJ Jordan
a02ef0dbc8 Fix typo (#127775) 2024-10-07 08:08:53 +02:00
J. Nick Koston
34c464e8d0 Bump DoorBirdPy to 3.0.4 (#127760)
changelog: https://gitlab.com/klikini/doorbirdpy/-/compare/3.0.3...eea287316c6fd84b63cc67fd743cc1128ea14568?from_project_id=7409088&straight=false

fixes #126598
2024-10-06 17:07:27 -05:00
Joost Lekkerkerker
32570c59c8 Bump NYT Games to 0.4.3 (#127717) 2024-10-06 22:45:13 +02:00
Joost Lekkerkerker
4721f8ef5f Bump airgradient to 0.9.1 (#127718) 2024-10-06 19:21:48 +02:00
Joost Lekkerkerker
3c458353f0 Fix typo in HDMI CEC (#127714) 2024-10-06 19:21:19 +02:00
Joost Lekkerkerker
59e3c4874d Fix Withings log message (#127716) 2024-10-06 19:21:07 +02:00
Johan Gustafsson
4693f436a5 Fix Aurora integration casts longitude and latitude to integer (#127740)
Fix Aurora integration casts longitude and latitude to integer (#100817)
2024-10-06 17:33:54 +02:00
Brandon Rothweiler
b4dfd08bc4 Update A. O. Smith integration to reflect upstream API changes (#127678) 2024-10-06 17:16:29 +02:00
Thomas55555
3cda93d001 Add work area sensors to Husqvarna Automower (#126931)
* Add work area sensors to Husqvarna Automower

* add exists function

* fix tests

* add icons

* docstring

* Update homeassistant/components/husqvarna_automower/sensor.py

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-10-06 16:10:26 +02:00
epenet
e705ca83b2 Use reconfigure helpers in config tests (#127534)
Use async_update_reload_and_abort in config test
2024-10-06 16:06:55 +02:00
Joost Lekkerkerker
f90ed9e9db Remove expected lingering test fixture from Matter (#127713) 2024-10-06 16:00:40 +02:00
Michael
808d93d767 Remove obsolete entity count safeguards when using snapshot_platform test helper (#127736)
remove obsolete safeguards
2024-10-06 15:50:16 +02:00
J. Diego Rodríguez Royo
0d795aad16 Use BSH keys as unique ID's suffix at Home Connect (#126143)
* Use BSH keys as as unique id suffix instead of the simple description

* Update tests/components/home_connect/test_init.py

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-10-06 12:40:13 +02:00
Manu
3e8bc98f23 Add cast skill action to Habitica integration (#127000)
* Add cast skill action for task skills

* exceptions

* task not found exception

* request refresh to update mana/xp sensors

* Changes

* remove service_call prefix

* fixes
2024-10-06 10:33:32 +02:00
dontinelli
546d0b25b0 Bump fyta_cli to 0.6.7 (#127650) 2024-10-06 10:03:16 +02:00
J. Nick Koston
1f04723d8d Bump uiprotect to 6.3.1 (#127702)
* Bump uiprotect to 6.3.0

changelog: https://github.com/uilibs/uiprotect/compare/v6.2.0...v6.3.0

* Apply suggestions from code review
2024-10-06 10:02:34 +02:00
Joost Lekkerkerker
cd78e2fc43 Bump syrupy to 4.7.2 (#127710) 2024-10-06 09:59:13 +02:00
David Knowles
f6850c36fc Fix problems with automatic management of Schlage locks (#127689)
Use the correct identifiers for existing lock devices
2024-10-06 07:42:39 +02:00
J. Nick Koston
8f96256e86 Bump cached-ipaddress to 0.8.0 (#127703)
changelog: https://github.com/bdraco/cached-ipaddress/compare/v0.7.0...v0.8.0
2024-10-06 07:28:48 +02:00
J. Nick Koston
4404fb72bd Bump yalexs to 8.10.0 (#127704)
* Bump yalexs to 8.10.0

changelog: https://github.com/bdraco/yalexs/compare/v8.9.0...v8.10.0

* Update homeassistant/components/august/manifest.json
2024-10-06 07:28:23 +02:00
Marc Mueller
8ae3b430c8 Update yalexs-ble to 2.5.0 (#127696) 2024-10-05 21:06:43 -05:00
Marc Mueller
e6bc1f0730 Update bleak-esphome to 1.1.0 (#127692) 2024-10-06 03:20:04 +02:00
Marc Mueller
747f7a1b04 Update habluetooth to 3.5.0 (#127690) 2024-10-06 02:28:06 +02:00
Marc Mueller
01e7c45664 Update home-assistant-bluetooth to 1.13.0 (#127691) 2024-10-06 02:15:05 +02:00
Marc Mueller
65c0d49c3b Update bleak to 0.22.3 (#127688) 2024-10-06 01:51:53 +02:00
Marc Mueller
cba9e5845d Update bleak-retry-connector to 3.6.0 (#127686) 2024-10-06 01:21:39 +02:00
Marc Mueller
c6e5011a98 Update bluetooth-adapters to 0.20.0 (#127684) 2024-10-06 00:54:23 +02:00
Marc Mueller
229ad8be83 Revert "Fix enum lookup (#125220)" (#127680)
This reverts commit 1bc63a61be.
2024-10-06 00:46:50 +02:00
Marc Mueller
d58b2d1b32 Update dbus-fast to 2.24.3 (#127683) 2024-10-06 00:22:42 +02:00
David Bonnes
b69f2856bf Add tests for evohome water_heater entities (#127611)
* initial commit

* move get_entity* helper to test

* parameterize with TEST_INSTALLS_WITH_DHW

* remove if from tests
2024-10-05 22:34:06 +01:00
David Bonnes
76a59338eb Add tests for evohome climate entities (#127612)
* initial commit

* rename symbol (zon -> zone)

* move get_entity* helper function to test

* update snapshot
2024-10-05 22:32:12 +01:00
Brian Rogers
4003e93999 Replace Rachio warning with debug logging (#127673) 2024-10-05 15:40:42 -05:00
Manu
fe9ae0d8bd Add sensors for gems and mystic hourglasses to Habitica integration (#127651)
Add sensors for gems and mystic hourglasses
2024-10-05 21:27:42 +02:00
J. Nick Koston
0326e58c8a Remove automatic linkage of doorbells to HomeKit accessories via device class occupancy (#127668) 2024-10-05 14:24:58 -05:00
Michael
c043142b86 Improve handling of call deflection switches in AVM Fritz!Tools (#127592)
improve handling of call_deflection switches
2024-10-05 19:16:34 +02:00
Louis Christ
c28edb1117 Bump pyblu to 1.0.3 (#127571) 2024-10-05 19:14:57 +02:00
Thomas55555
204bea8947 Return an error if no error key is provided in Husqvarna Automower (#127584)
return error
2024-10-05 19:13:21 +02:00
Steven Looman
39e65c8586 Bump async-upnp-client to 0.41.0 (#127642) 2024-10-05 09:07:10 -05:00
Jan Bouwhuis
e54031e318 Improve mqtt sensor options validion logging (#127631)
* Improve mqtt sensor options validion logging

* Fix test
2024-10-05 13:31:42 +02:00
J. Nick Koston
24fbc366a6 Restore __slots__ to registry entries (#127481) 2024-10-05 12:16:52 +02:00
Erik Montnemery
c104e66964 Fix snooz tests (#127468) 2024-10-05 12:13:52 +02:00
Marc Mueller
00df42ba39 Fix grpcio wheel build (#127533) 2024-10-05 12:13:09 +02:00
epenet
c4fb4eb61b Use common reconfigure string in bryant_evolution (#127561) 2024-10-05 12:12:14 +02:00
Thomas55555
a9495aceb4 Fix Husqvarna Automower reauth title (#127583) 2024-10-05 12:11:40 +02:00
Joost Lekkerkerker
0999297e58 Introduce Jellyfin client/server base entities (#127572) 2024-10-05 12:06:54 +02:00
Richard Cox
62ae2a3bd5 Update Radarr config flow to standardize ports (#127620) 2024-10-05 12:05:11 +02:00
Brett Adams
213cc14494 Fix wake up in Tesla Fleet (#127615) 2024-10-05 12:04:10 +02:00
dependabot[bot]
59ebb94d24 Bump actions/cache from 4.0.2 to 4.1.0 (#127627)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-05 11:58:55 +02:00
dependabot[bot]
a11b32dae5 Bump sigstore/cosign-installer from 3.6.0 to 3.7.0 (#127628)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-05 11:48:17 +02:00
J. Nick Koston
0177facbf0 Fix blocking stat call in local media_source (#127587) 2024-10-05 03:17:07 -05:00
Franck Nijhof
b8d252273d Merge branch 'master' into dev 2024-10-05 10:07:24 +02:00
Sid
b942569ce0 Remove enigma2 yaml import (#127597) 2024-10-05 10:00:23 +02:00
Noah Husby
275b9ce718 Bump aiostreammagic to 2.5.0 (#127595) 2024-10-05 08:19:22 +02:00
J. Nick Koston
58d0dbb542 Bump aiohttp to 3.10.9 (#127594)
https://github.com/aio-libs/aiohttp/releases/tag/v3.10.9

changelog: https://github.com/aio-libs/aiohttp/compare/v3.10.8...v3.10.9

This is a technically breaking change, the default connect timeout is now 30s to
fix a bug where the next ip would not be tried within the default timeout
period of 150s. I expect this will not be a problem but I wanted to
point it out.
2024-10-05 07:48:13 +02:00
tronikos
f84a01d840 Bump opower to 0.8.2 (#127598)
* Bump opower to 0.8.1 to fix enmax

* Update manifest.json

* Update requirements_all.txt

* Update requirements_test_all.txt
2024-10-04 22:07:51 -07:00
TimL
6ee03460d6 Disable by default smlight auto zigbee update switch (#126707)
disable by default auto zigbee update switch

Co-authored-by: Shay Levy <levyshay1@gmail.com>
2024-10-05 00:56:11 +03:00
Sid
d01fb914a9 Bump ruff to 0.6.9 (#127596) 2024-10-04 15:42:02 -05:00
Tudor Sandu
d9b077154e Blueprints for template entities (#126971)
* Template domain blueprints

* Default blueprint for templates

* Some linting

* Template entity updates

* Load and use blueprints in config

* Added missing mapping methods for templates

* Linting

* Added tests

* Wrong schema type

* Hassfest errors

* More linting issues

* Refactor based on desired schema

In the [architecture discussion](https://github.com/home-assistant/architecture/discussions/1027), the template blueprint instance did not specify the platform (e.g. `binary_sensor`), but the initial implementation assumed that schema.

* Create default template blueprints on first run

* Moved TemplateConfig definition

This is to avoid circular references

* Corrected methods to find templates based on blueprints

* Corrected missing entity config information

* Added tests

* Don't use hass.data

Address comments https://github.com/home-assistant/core/pull/126971/#discussion_r1780097187

* Prevent creating blueprints during testing

* Combine 2 ifs

Address comment https://github.com/home-assistant/core/pull/126971/#discussion_r1780160870

* Improve test coverage

* Prevent template component from dirtying test env

* Remove useless hard-coded validation

* Improve code coverage to 100%

* Address review comments

* Moved helpers in helpers.py

As per comment https://github.com/home-assistant/core/pull/126971#discussion_r1786539889

* Fix blueprint source URL

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2024-10-04 16:47:29 +02:00
epenet
7e6c106869 Use HassKey in auth (#127573) 2024-10-04 16:34:04 +02:00
Raj Laud
c3e37ef9a0 Add codeowners for Squeezebox (#127564)
* Add codeowners for Squeezebox

* Update CODEOWNERS
2024-10-04 16:31:55 +02:00
epenet
8bbbaae290 Use HassKey in backup (#127546)
* Use HassKey in backup

* Use DATA_MANAGER
2024-10-04 16:01:50 +02:00
Joost Lekkerkerker
79de27544c Simplify Jellyfin (#127353)
* Simplify Jellyfin

* Fix comment
2024-10-04 15:59:11 +02:00
Steven B.
e30db943db Bump ring-doorbell to 0.9.7 (#127554) 2024-10-04 13:43:54 +02:00
Joost Lekkerkerker
e2b4a24a35 Revert "Bump pychromecast to 14.0.2 (#127333)" (#127555)
This reverts commit 2ab66f62fa.
2024-10-04 13:42:35 +02:00
Franck Nijhof
20e3291eb9 Revert Alexa Media Player block (#127553) 2024-10-04 13:13:18 +02:00
Joost Lekkerkerker
ebfa2fb1d0 Strip the NYT Games token (#127548) 2024-10-04 12:53:35 +02:00
Joost Lekkerkerker
ae8219dc97 Create new clientsession for NYT Games (#127547) 2024-10-04 12:04:33 +02:00
robinostlund
64ea02983b Fix int value in unique_id for Tellduslive (#127526)
Fix int in unique_id
2024-10-04 12:02:33 +02:00
Franck Nijhof
f1b6ae8784 Adjust polling rate of Rituals Perfume Genie (#127544) 2024-10-04 11:21:22 +02:00
epenet
8b9b65d3f1 Use reauth helpers in spotify config flow (#127532)
Use async_update_reload_and_abort in spotify
2024-10-04 11:13:03 +02:00
Klaas Schoute
e82368ec85 Add entity icons for Autarco integration (#127505) 2024-10-04 11:12:24 +02:00
Paarth Shah
d1bee8fe61 Bump matrix-nio to 0.25.2 (#127535) 2024-10-04 11:11:39 +02:00
Joost Lekkerkerker
07704b8511 Add more fixtures to the matter fixture (#126761)
* Add more fixtures to the matter fixture

* Add Valve
2024-10-04 09:24:06 +02:00
epenet
6a44d66fed Fix reolink tests (#127525) 2024-10-04 09:16:49 +02:00
dependabot[bot]
10895514c6 Bump github/codeql-action from 3.26.10 to 3.26.11 (#127524)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-04 09:07:41 +02:00
Maciej Bieniek
1290f18ed4 Add support for Shelly CCT light (#126989)
* Initial support for cct lights

* Move properties to the RpcShellyCctLight class

* Fix entity names

* Add async_remove_orphaned_entities() function

* Do not return

* Fix tests

* Combine async_remove_orphaned_virtual_entities and async_remove_orphaned_entities

* Remove SHELLY_PLUS_RGBW_CHANNELS from const

* Add tests

* Use _attr*

* Check ColorMode.COLOR_TEMP

* Add sensors for CCT light

* Remove removal condition

* Remove orphaned sensors

* Cleaning

* Add device temperature sensor for CCT light

* Simplify async_remove_orphaned_entities()

* Comment

* Add COMPONENT_ID_PATTERN const

* Call async_add_entities once

* Suggested change

* Better type for keys

* Do not call keys()
2024-10-04 08:49:35 +02:00
David Bonnes
49e634a62f Convert evohome's test factory into an async generator (#126925) 2024-10-04 08:29:36 +02:00
Erik Montnemery
8754b54d81 Fix config entry unique_id collision in tplink tests (#127522) 2024-10-04 08:24:56 +02:00
epenet
c191a7cfdb Fix lingering tasks in snooz tests (#127523) 2024-10-04 08:24:01 +02:00
J. Nick Koston
6eb49991a4 Add pylint rule for cached_property (#127482) 2024-10-03 17:53:55 -05:00
Michael
1dd59375f6 Add re-authemtication flow to AVM FRITZ!Box Call Monitor (#127497) 2024-10-03 22:36:41 +02:00
J. Nick Koston
c3f0f30910 Prepare websocket writer for aiohttp 3.11 (#127043) 2024-10-03 22:29:29 +02:00
J. Nick Koston
10c033e580 Migrate config_entries to use propcache cached_property (#127495) 2024-10-03 22:28:00 +02:00
Erik Montnemery
48a07d531c Remove assumption in ConfigEntryItems about unique unique_id (#127399) 2024-10-03 22:27:15 +02:00
G Johansson
80582a128a Fix preview available in statistics (#127349) 2024-10-03 22:27:01 +02:00
J. Nick Koston
db494de809 Restore __slots__ to core objects (#127441) 2024-10-03 22:23:47 +02:00
epenet
68d58212a9 Adjust type hints in hyperion config_flow (#127273) 2024-10-03 22:20:20 +02:00
Joost Lekkerkerker
48a6dabc5b Remove Spider integration (#127346) 2024-10-03 21:44:30 +02:00
Erik Montnemery
0ae0047246 Fix config entry unique_id collision in lamarzocco tests (#127484) 2024-10-03 21:39:39 +02:00
epenet
49dec1577e Use reauth helpers in elmax config flow (#127417) 2024-10-03 21:38:04 +02:00
J. Nick Koston
4e30bf705c Bump uiprotect to 6.2.0 (#127477) 2024-10-03 13:12:04 -05:00
J. Nick Koston
4e9a91d03f Bump yalexs to 8.9.0 (#127474) 2024-10-03 13:11:50 -05:00
J. Nick Koston
2f8c9d4f93 Bump cached-ipaddress to 0.7.0 (#127475) 2024-10-03 13:11:35 -05:00
J. Nick Koston
0f29fd3e10 Switch to using fast cached_property implementation in propcache (#127339) 2024-10-03 13:11:02 -05:00
epenet
58f786f6d0 Use _get_reauth_entry in cloudflare config flow (#127385) 2024-10-03 19:56:54 +02:00
J. Nick Koston
e2b1ef053f Cache serialization of config entry storage (#127435) 2024-10-03 19:51:09 +02:00
epenet
0bbca596a9 Use reauth helpers in braviatv config flow (#127437) 2024-10-03 19:49:28 +02:00
epenet
09014e3390 Use reauth helpers in brunt config flow (#127438) 2024-10-03 19:48:47 +02:00
epenet
c634f6067a Use reauth helpers in caldav config flow (#127440) 2024-10-03 19:48:09 +02:00
epenet
255cf6b305 Use reauth helpers in deluge config flow (#127445) 2024-10-03 19:45:09 +02:00
epenet
07bc9f6477 Use reauth helpers in dormakaba_dkey config flow (#127446) 2024-10-03 19:44:44 +02:00
Klaas Schoute
464da23d4e Bump p1monitor to 3.1.0 (#127459) 2024-10-03 19:44:11 +02:00
Erik Montnemery
a2c85a0ac2 Remove test workaround from snooz (#127465) 2024-10-03 18:18:08 +02:00
epenet
f837369ef0 Use reauth helpers in electric_kiwi config flow (#127414)
* Mark electric_kiwi as single_config_entry

* Adjust

* Use reauth helpers in electric_kiwi config flow
2024-10-03 18:02:55 +02:00
epenet
153b3fbfc8 Use reauth helpers in comelit config flow (#127443)
* Use reauth helpers in comelit config flow

* Fix
2024-10-03 17:56:00 +02:00
epenet
c7739a7760 Align async_step_reconfigure type hints (#127450) 2024-10-03 17:54:51 +02:00
J. Nick Koston
41fcf58b80 Fix bluetooth tests to not create the same config entry twice (#127461) 2024-10-03 10:37:34 -05:00
Andrew Jackson
13e7af7762 Bump aiomealie to 0.9.3 (#127454) 2024-10-03 17:35:46 +02:00
Allen Porter
c38f23400c Don't add the same config entry id twice in google tests (#127457)
Don't add the same config entry id twice in the test
2024-10-03 17:23:58 +02:00
Erik Montnemery
62b449e52c Fix config entry unique_id collision in proximity (#127456) 2024-10-03 17:22:40 +02:00
starkillerOG
85ae66d276 Reolink auto add new cameras/chimes (#126268) 2024-10-03 16:51:27 +02:00
Stefan Agner
e15ae6bea3 Cancel listen task when setting the Matter fabric label fails (#127423)
When setting the Matter fabric label fails, the listen task should be
cancelled to prevent the task from running indefinitely.

Follow up for #127252.
2024-10-03 15:37:29 +02:00
epenet
bbf8a49ac8 Use reauth helpers in efergy config flow (#127447) 2024-10-03 15:31:16 +02:00
epenet
b95fc7e782 Use reauth helpers in ezviz config flow (#127448) 2024-10-03 15:29:18 +02:00
J. Nick Koston
7cd4f78767 Make go2rtc supported streams a frozenset (#127439)
Avoids the linear search of the tuple
2024-10-03 15:08:17 +02:00
epenet
49882112ac Use async_update_reload_and_abort in bosch_shc config flow (#127436) 2024-10-03 14:41:07 +02:00
epenet
c957c7a515 Use reauth helpers in blue_current config flow (#127434)
* Use async_update_reload_and_abort in blue_current config flow

* Adjust
2024-10-03 14:40:12 +02:00
epenet
045d96cdd1 Use async_update_reload_and_abort in aseko_pool_live config flow (#127433)
* Use async_update_reload_and_abort in aseko_pool_live config flow

* block_till_done
2024-10-03 14:39:17 +02:00
epenet
a218f4adc3 Use reauth helpers in esphome config flow (#127419)
Use _get_reauth_entry in esphome config flow
2024-10-03 14:38:14 +02:00
epenet
9ba58233ec Use reauth helpers in aosmith config flow (#127432)
Use async_update_reload_and_abort in aosmith config flow
2024-10-03 14:34:42 +02:00
Joost Lekkerkerker
4aedf662e9 Fix AMP block (#127424)
Fix Alexa block
2024-10-03 14:15:27 +02:00
epenet
59e486848c Use async_update_reload_and_abort in airvisual (#127429)
Use async_update_reload_and_abort in arivisual
2024-10-03 14:14:48 +02:00
epenet
4cef435089 Use async_update_reload_and_abort in airvisual_pro (#127430) 2024-10-03 14:14:36 +02:00
epenet
d128ba544f Use async_update_reload_and_abort in abode (#127426) 2024-10-03 14:14:17 +02:00
epenet
372a827ecd Use _get_reauth_entry in devolo_home_network config flow (#127389) 2024-10-03 14:03:47 +02:00
Joost Lekkerkerker
0eec6447e4 Block Alexa Media Player v4.13.3 (#127412) 2024-10-03 13:43:48 +02:00
myztillx
13d72ac833 Bump python-ecobee-api to 0.2.20 (#127351)
Bump version of python-ecobee-api to support new features

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-10-03 12:50:12 +02:00
Stefan Agner
abf3da2fa1 Set default Matter fabric label (#127252) 2024-10-03 12:36:24 +02:00
G Johansson
df8269e772 Use async_update_reload_and_abort in Trafikverket Weather reauth flow (#127341) 2024-10-03 12:31:21 +02:00
Glenn Waters
19535b48ab Bump elkm1_lib to 2.2.10 (#127344)
* Bump elk-lib to 2.2.9

* Bump elkm1_lib to 2.2.10

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2024-10-03 12:31:04 +02:00
TimL
da68c48723 Bump pysmlight 0.1.2 (#127376)
Co-authored-by: Tim Lunn <tim@feathertop.org>
2024-10-03 12:30:13 +02:00
epenet
44523168d7 Use _get_reauth_entry in caldav config flow (#127384) 2024-10-03 12:27:39 +02:00
Erik Montnemery
2b50f65c49 Store generic camera flow data in flow handler attributes (#127405) 2024-10-03 12:23:40 +02:00
epenet
14c2778558 Use _get_reauth_entry in devolo_home_control config flow (#127387)
Use _get_reauth_entry in devolo_home_network config flow
2024-10-03 12:21:42 +02:00
epenet
7878d2804f Use _get_reauth_entry in discovergy config flow (#127390) 2024-10-03 12:21:17 +02:00
epenet
cef56bd7ef Use _get_reauth_entry in doorbird config flow (#127391) 2024-10-03 12:20:59 +02:00
epenet
c02a3371d0 Use _get_reauth_entry in dormakaba_dkey config flow (#127392)
* Use _get_reauth_entry in dormakaba_dkey config flow

* Adjust
2024-10-03 12:18:15 +02:00
Brett Adams
c2c48bbc9c Add missing number platform to init of Tesla Fleet (#127406)
Add number platform to init
2024-10-03 12:10:03 +02:00
raphaeleduardo42
131fdf6898 Add MOES Matter Light 1.0 to the blocklist for Matter transitions (#127345)
Update light.py

Fix MOES Matter Light 1.0 following #113775
2024-10-03 10:22:11 +02:00
epenet
a2e4de2d0d Adjust type hints in androidtv_remote config_flow (#127162) 2024-10-03 10:21:53 +02:00
epenet
7d3d693fe8 Align config flow reconfigure step test helper with frontend (#127329)
* Align config flow reconfigure step with frontend

* Update common.py

* Update common.py

* Adjust

* Adjust

* Fix test

* Adjust
2024-10-03 10:21:23 +02:00
epenet
94df3e931a Use _get_reauth_entry in bmw_connected_drive config flow (#127327) 2024-10-03 10:18:32 +02:00
epenet
2e225dfc3a Use _get_reauth/reconfigure_entry in pyload (#127304) 2024-10-03 10:18:10 +02:00
epenet
409d7b3652 Use _get_reauth_entry in braviatv config flow (#127326) 2024-10-03 10:16:06 +02:00
epenet
c658dc0ffc Correct reconfigure flows to get data from config entry (#127393)
Fetch entry data in async_step_reconfigure
2024-10-03 09:46:41 +02:00
Joost Lekkerkerker
13e4cd4a49 Remove unused translation keys from Tami4 (#127342) 2024-10-03 09:43:11 +02:00
epenet
609d410e6a Use _get_reauth_entry in comelit config flow (#127386) 2024-10-03 09:31:44 +02:00
Robert Resch
04860ae1d2 Add go2rtc and extend camera integration for better WebRTC support (#124410) 2024-10-03 09:20:03 +02:00
Erik Montnemery
a0a90f03a8 Improve generic camera preview tests (#127382) 2024-10-03 09:13:54 +02:00
Erik Montnemery
be3a883c51 Store awair flow data in flow handler attributes (#127381) 2024-10-03 09:13:41 +02:00
G Johansson
0fde5c21b7 Add reconfigure flow to trafikverket_camera (#127355) 2024-10-03 01:25:47 +02:00
polgarc
c4cc9f8489 Add line numbers to swiss-public-transport (#127332)
* add line numbers

* keep only one line sensor

* fix unt tests
2024-10-03 01:25:17 +02:00
J. Nick Koston
ff7bc13058 Make numeric device classes a constant (#127354)
noticed this shows up on the profile every time the UI loads
2024-10-02 22:00:49 +02:00
epenet
ddea61148f Use _get_reconfigure_entry in brother (#127279) 2024-10-02 21:56:26 +02:00
Stefan Agner
88ad7e98e0 Store instance name in Thread router discovery (#127253)
* Store instance name in Thread router discovery

Store the DNS-SD instance name in the Thread router discovery message.
The instance name is the actual name given to a Thread border router,
e.g. when configuring the name of a Thread border router in Apple Home
the name appears as the DNS-SD instance name. This will allow to make
the Thread border router list more user friendly.

* Use instance_name_from_service_info to get instance name
2024-10-02 21:41:55 +02:00
skynet01
a83d38a5fe Add turn on and off function to lg_soundbar (#127022)
* Update media_player.py

Added support to toggle soundbars on and off

* Update homeassistant/components/lg_soundbar/media_player.py

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>

* Fix complexity

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-10-02 21:04:14 +02:00
G Johansson
a3b1a30d06 Add reconfigure step to trafikverket weather (#127140)
* Add reconfigure step to trafikverket weather

* Use helper

* Fix

* Fix review comments
2024-10-02 21:04:00 +02:00
Steven Looman
f8b192bd94 Handle the correct exception type when subscribing to the router service returns an error in the upnp component (#127006)
* Catch the right exception when handling subscription errors

* Assert device is forced to poll
2024-10-02 20:55:25 +02:00
Erik Montnemery
4c6ab3921a Store modern_forms flow data in flow handler attributes (#127175) 2024-10-02 19:59:44 +02:00
Erik Montnemery
1dc1fd421b Use ConfigFlow.has_matching_flow to deduplicate tplink flows (#127164) 2024-10-02 19:59:24 +02:00
Erik Montnemery
fed953023d Ensure homekit_controller config flow title_placeholders items are [str, str] (#127198) 2024-10-02 19:58:47 +02:00
epenet
5a4cdaf348 Use _get_reauth/reconfigure_entry in melcloud (#127302) 2024-10-02 19:50:00 +02:00
epenet
4d49cb2d18 Use _get_reconfigure_entry in waze_travel_time (#127314) 2024-10-02 19:49:38 +02:00
epenet
5759539e08 Use _get_reauth/reconfigure_entry in solarlog (#127310) 2024-10-02 19:49:15 +02:00
epenet
74441d2771 Use _get_reauth_entry in blue_current config flow (#127328) 2024-10-02 19:48:57 +02:00
epenet
da0ebbe57c Use _get_reauth_entry in bthome config flow (#127323) 2024-10-02 19:44:54 +02:00
epenet
d8d392990d Use _get_reauth_entry in brunt config flow (#127324) 2024-10-02 19:44:35 +02:00
epenet
829af75416 Use _get_reauth_entry in bring config flow (#127325) 2024-10-02 19:36:32 +02:00
Paul Bottein
c306ebed49 Fix device id support for alarm control panel template (#127340) 2024-10-02 19:04:36 +02:00
Michael Hansen
301701176a Bump intents to 2024.10.2 (#127338) 2024-10-02 18:58:31 +02:00
Erik Montnemery
2ab66f62fa Bump pychromecast to 14.0.2 (#127333) 2024-10-02 17:18:59 +02:00
Bram Kragten
f5bd81e0d9 Update frontend to 20241002.2 (#127331) 2024-10-02 17:11:51 +02:00
Mark Grandi
c265c91ef2 Add protocol upload / download sensors to Deluge (#119203)
* Add Protocol Upload/Download for Deluge

* add unit test and fix typo in sensor.py

* remove unneeded import

* rename/unify the translation keys and entries in const.py

* split out const.py items into DelugeSensorType to avoid confusion with DelugeGetSessionStatusKeys

* change DelugeGetSessionStatusKeys to be a regular enum to satisfy mypy
2024-10-02 16:44:56 +02:00
starkillerOG
3184951625 Add sensor for total installations and integrations to Analytics Insights (#127248)
* Add sensor for total installations and integrations

* Fix tests

* Use pytest fixture
2024-10-02 16:25:27 +02:00
epenet
c6fa160c02 Use _get_reauth/reconfigure_entry in nam (#127303) 2024-10-02 16:13:24 +02:00
epenet
e2eb986c7c Adjust reauth checks in august (#127320) 2024-10-02 16:13:02 +02:00
epenet
9219339762 Use _get_reauth/reconfigure_entry in shelly (#127308) 2024-10-02 16:12:45 +02:00
epenet
fac3d575c9 Use _get_reauth/reconfigure_entry in tedee (#127312) 2024-10-02 16:12:31 +02:00
epenet
db9257f9fa Use _get_reauth_entry in airvisual_pro (#127318) 2024-10-02 16:03:45 +02:00
epenet
bb21c87852 Use _get_reauth_entry in aseko_pool_live (#127319) 2024-10-02 16:03:31 +02:00
epenet
f0df25f824 Use _get_reauth_entry in azure_devops config flow (#127321) 2024-10-02 16:03:18 +02:00
Cyrill Raccaud
acd3710469 Bump swiss-public-transport requirement python-opendata-transport to 0.5.0 (#127306) 2024-10-02 15:42:04 +02:00
epenet
56e79de707 Use _get_reauth_entry in trafikverket_weatherstation (#127316) 2024-10-02 15:35:34 +02:00
epenet
781c3eed2f Use _get_reconfigure_entry in vallox (#127313) 2024-10-02 15:29:42 +02:00
epenet
d0d8de94dc Use _get_reconfigure_entry in tado (#127311) 2024-10-02 15:28:11 +02:00
epenet
4974202bb4 Use _get_reconfigure_entry in smhi (#127309) 2024-10-02 15:17:45 +02:00
epenet
2dce115732 Use _get_reconfigure_entry in lcn (#127299) 2024-10-02 15:03:32 +02:00
epenet
ce1d4282db Use _get_reconfigure_entry in madvr (#127300) 2024-10-02 15:03:18 +02:00
epenet
befc730769 Use _get_reauth/reconfigure_entry in mealie (#127301)
Use _get_reconfigure_entry in mealie
2024-10-02 14:53:48 +02:00
epenet
3f7c6055d4 Use _get_reauth/reconfigure_entry in lamarzocco (#127298) 2024-10-02 14:33:29 +02:00
epenet
5ed7efb01d Use _get_reconfigure_entry in here_travel_time (#127294) 2024-10-02 14:31:45 +02:00
epenet
f0f924a0a2 Use _get_reconfigure_entry in holiday (#127295) 2024-10-02 14:31:19 +02:00
epenet
a19a069b21 Use _get_reconfigure_entry in jewish_calendar (#127297) 2024-10-02 14:30:55 +02:00
epenet
a43bfdef1d Use _get_reconfigure_entry in homeworks (#127296) 2024-10-02 14:30:17 +02:00
epenet
7994729742 Adjust type hints in goalzero config_flow (#127270) 2024-10-02 14:26:26 +02:00
epenet
f24523e93b Adjust type hints in konnected config_flow (#127276) 2024-10-02 14:25:09 +02:00
hopkins-tk
98a8430f26 Add electrolyzer data to Aseko Pool Live (#127249) 2024-10-02 14:24:39 +02:00
epenet
273795b025 Use _get_reconfigure_entry in feedreader (#127282) 2024-10-02 14:23:42 +02:00
epenet
f6c7ade579 Use _get_reauth/reconfigure_entry in fritzbox (#127284) 2024-10-02 14:23:24 +02:00
epenet
84a4fe7b03 Use _get_reconfigure_entry in google_travel_time (#127285) 2024-10-02 14:22:40 +02:00
epenet
583ce7dc46 Use _get_reauth/reconfigure_entry in enphase_envoy (#127281)
* Use _get_reauth/reconfigure_entry in enphase_envoy

* Adjust
2024-10-02 14:22:16 +02:00
Erik Montnemery
81d7d2a70a Ensure braviatv config flow title_placeholders items are [str, str] (#127287) 2024-10-02 14:20:55 +02:00
Erik Montnemery
689372b572 Ensure keenetic_ndms2 config flow title_placeholders items are [str, str] (#127289) 2024-10-02 14:20:39 +02:00
Erik Montnemery
083be5d0a5 Ensure songpal config flow title_placeholders items are [str, str] (#127290) 2024-10-02 14:20:16 +02:00
Erik Montnemery
4726dc96d4 Ensure directv config flow title_placeholders items are [str, str] (#127288) 2024-10-02 14:19:23 +02:00
Bram Kragten
3308de95f0 Update frontend to 20241002.1 (#127292) 2024-10-02 14:18:28 +02:00
Marc Mueller
ea115e0481 Fix telegram_bot tests for Python 3.13 (#127293) 2024-10-02 14:15:01 +02:00
Erik Montnemery
2fdde24024 Remove the Google Domains integration (#127278) 2024-10-02 13:58:19 +02:00
epenet
d21d6c2e4a Use _get_reauth/reconfigure_entry in fritz (#127283) 2024-10-02 13:21:21 +02:00
Erik Montnemery
4c1863d318 Ensure lookin config flow title_placeholders items are [str, str] (#127200) 2024-10-02 13:05:08 +02:00
Erik Montnemery
b8a00bfbfb Ensure motionblinds_ble config flow title_placeholders items are [str, str] (#127201)
* Ensure motionblinds_ble config flow title_placeholders items are [str, str]

* Tweak
2024-10-02 13:04:52 +02:00
Marc Mueller
4cd6813d16 Update mypy-dev to 1.12.0a5 (#127181)
* Update mypy-dev to 1.12.0a5

* Fix enable_incomplete_feature

* Fix vlc_telnet

* Fix deconz
2024-10-02 12:00:59 +02:00
epenet
21266e1c68 Add config_flow helper to get reauth/reconfigure config entry (#127115)
* Add config_flow helper to get config entry from context

* Simplify

* Apply to aussie_broadband

* Another example

* Rename and adjust docstring

* Simplify

* Add test

* Refactor to hide context

* Raise

* Improve coverage

* Use AttributeError

* Use ValueError

* Raise UnknownEntry
2024-10-02 12:00:07 +02:00
starkillerOG
201b8d9ebf Bump python-homeassistant-analytics to 0.8.0 (#127271) 2024-10-02 11:29:54 +02:00
Erik Montnemery
2440023dd7 Ensure dlna_dms config flow title_placeholders items are [str, str] (#127192) 2024-10-02 11:28:21 +02:00
Christopher Fenner
5f3e70f915 Fix climate entity in ViCare integration (#127128)
do not reset _attributes
2024-10-02 11:25:04 +02:00
Erik Montnemery
3f1acdc9ec Make recorder WS command recorder/clear_statistics wait (#127120) 2024-10-02 10:43:40 +02:00
Bram Kragten
f053e5ca38 Update frontend to 20241002.0 (#127264) 2024-10-02 10:43:01 +02:00
epenet
9873371413 Use start_reconfigure_flow in config flow tests (#127191)
* Use start_reconfigure_flow in config flow tests

* Adjust fritz
2024-10-02 10:01:15 +02:00
Erik Montnemery
2a2af01d12 Make recorder WS command recorder/update_statistics_metadata wait (#127179) 2024-10-02 09:56:36 +02:00
dependabot[bot]
7790bb528c Bump codecov/codecov-action from 4.5.0 to 4.6.0 (#127259)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-02 09:17:21 +02:00
functionpointer
5bd2d27488 Fix Tibber get_prices when called with aware datetime (#123289)
* Tibber: Add extra test to expose aware/naive datetime issue

* Tibber: Fix get_prices action not working with aware datetimes

* Tibber: Simplify comparison

* Tibber: Combine timezone tests into single parametrized one

* Tibber: Split test again to prevent if statement
2024-10-02 08:43:31 +02:00
Teemu R.
cd090ff000 Remove codefences from issue titles (#127254) 2024-10-02 08:27:52 +02:00
Erik Montnemery
47985a589e Ensure frontier_silicon config flow title_placeholders items are [str, str] (#127197) 2024-10-02 08:26:51 +02:00
Erik Montnemery
375d47ee3a Use ConfigFlow.has_matching_flow to deduplicate yeelight flows (#127165) 2024-10-02 08:25:46 +02:00
Martin Hjelmare
e3e68dad36 Revert "Support Z-Wave JS dimming lights using color intensity (#122639)" (#127256)
This reverts commit c7cfd56b72.
2024-10-02 06:48:47 +02:00
Michael Hansen
40dbfab671 Run unsubscribe callbacks when Assist satellite entity is removed from HA (#127234)
* Unsubscribe when removed from HA

* Use builtin async_on_remove
2024-10-01 23:58:47 +02:00
epenet
46405d7738 Improve type hints in config_flow reconfigure step (#127224) 2024-10-01 22:21:54 +02:00
Erik Montnemery
905ac20205 Ensure flux_led config flow title_placeholders items are [str, str] (#127196) 2024-10-01 22:21:12 +02:00
Erik Montnemery
6d65d6bcf6 Don't create statistics issues when sensor is unavailable or unknown (#127226) 2024-10-01 22:08:48 +02:00
epenet
f4ab741445 Use reconfigure_confirm in bryant_evolution config flow (#127222) 2024-10-01 22:08:14 +02:00
epenet
c1fa3d99f3 Update log error message for Samsung TV (#127231) 2024-10-01 22:06:56 +02:00
Erik Montnemery
fcc0eba7fb Ensure enphase_envoy config flow title_placeholders items are [str, str] (#127193) 2024-10-01 22:04:46 +02:00
Erik Montnemery
d7da3de096 Store openhome flow data in flow handler attributes (#127176) 2024-10-01 22:04:28 +02:00
Bouwe Westerdijk
0616bc7fec Improve / clean up Plugwise config_flow code (#127238) 2024-10-01 21:52:16 +02:00
Bill Flood
dd478fe681 Fix Tailwind cover exception when door is already in the requested state (#124543) 2024-10-01 20:51:12 +02:00
Artur Pragacz
c175a68a26 Skip unnecessary checks for entities with unique_id (#125051) 2024-10-01 11:27:14 -05:00
Artur Pragacz
98a86c7636 Improve code of normalized name registry (#125282) 2024-10-01 11:20:52 -05:00
Erik Montnemery
4060705d87 Use ConfigFlow.has_matching_flow to deduplicate samsungtv flows (#127235) 2024-10-01 17:56:38 +02:00
Erik Montnemery
1c11229510 Ensure overkiz config flow title_placeholders items are [str, str] (#127203) 2024-10-01 16:21:56 +02:00
Erik Montnemery
7129868a56 Remove custom flow deduplication logic from guardian (#127159) 2024-10-01 16:20:47 +02:00
epenet
4a6e3e0f5a Simplify reconfigure step in axis config flow (#127225) 2024-10-01 15:57:50 +02:00
Robert Resch
b6a0a36d4e Bump uv to 0.4.17 (#127223) 2024-10-01 15:56:18 +02:00
epenet
3b7ae1639c Use reconfigure_confirm in homeworks config flow (#127218)
* Use reconfigure_confirm in homeworks config flow

* Fix tests
2024-10-01 15:17:50 +02:00
epenet
3fb7547d4d Use reconfigure_confirm in enphase_envoy config flow (#127221) 2024-10-01 15:11:37 +02:00
Russell Cloran
10c0633af9 Update prometheus-client to 0.21.0 (#126965) 2024-10-01 14:52:54 +02:00
Erik Montnemery
3460f460d1 Ensure octoprint config flow title_placeholders items are [str, str] (#127202) 2024-10-01 14:42:54 +02:00
Martin Hjelmare
bb70a0feb2 Fix Z-Wave rediscovery (#127213) 2024-10-01 14:42:31 +02:00
epenet
44eb4e0c9e Use reconfigure_confirm in google_travel_time config flow (#127220) 2024-10-01 14:41:15 +02:00
Erik Montnemery
97bbad7471 Ensure ezviz config flow title_placeholders items are [str, str] (#127194) 2024-10-01 14:40:12 +02:00
Erik Montnemery
df6370dd61 Ensure ovo_energy config flow title_placeholders items are [str, str] (#127204) 2024-10-01 14:33:40 +02:00
Erik Montnemery
ee8f4a5367 Ensure powerwall config flow title_placeholders items are [str, str] (#127205) 2024-10-01 14:33:05 +02:00
Erik Montnemery
a5135cf2c3 Ensure radiotherm config flow title_placeholders items are [str, str] (#127206) 2024-10-01 14:32:52 +02:00
Erik Montnemery
41932b4501 Ensure soundtouch config flow title_placeholders items are [str, str] (#127207) 2024-10-01 14:32:40 +02:00
Erik Montnemery
028d1c6148 Ensure tesla_wall_connector config flow title_placeholders items are [str, str] (#127208) 2024-10-01 14:32:18 +02:00
Erik Montnemery
1efe418e05 Avoid mutating title_placeholders in reolink (#127209) 2024-10-01 14:32:02 +02:00
Erik Montnemery
4251ee1229 Remove unused title_placeholders from plugwise (#127211) 2024-10-01 14:31:49 +02:00
Erik Montnemery
95a79130a2 Add missing None-check in roomba config flow (#127212) 2024-10-01 14:31:35 +02:00
Erik Montnemery
e2518ab4d7 Avoid mutating title_placeholders in synology_dsm (#127210) 2024-10-01 14:31:13 +02:00
epenet
9d557f47b7 Use reconfigure_confirm in lcn config flow (#127217) 2024-10-01 14:29:31 +02:00
epenet
c654d3283e Use reconfigure_confirm in vallox config flow (#127214) 2024-10-01 14:25:32 +02:00
epenet
8e6b6269a7 Fix reconfigure_confirm logic in madvr config flow (#127216) 2024-10-01 14:25:14 +02:00
epenet
a2404e7fb8 Use reconfigure_confirm in solarlog config flow (#127215)
* Use reconfigure_confirm in solarlog config flow

* Fix test
2024-10-01 14:24:44 +02:00
epenet
6321978f75 Adjust type hints in devialet config_flow (#127185) 2024-10-01 12:49:52 +02:00
Erik Montnemery
448dd61684 Ensure dlna_dmr config flow title_placeholders items are [str, str] (#127189) 2024-10-01 12:49:31 +02:00
Erik Montnemery
a3513b24ec Avoid mutating title_placeholders in devolo_home_network (#127188) 2024-10-01 12:48:41 +02:00
epenet
57905efcd3 Adjust type hints in ezviz config_flow (#127186) 2024-10-01 12:26:59 +02:00
Erik Montnemery
3052eca564 Remove unused custom flow context key 'name' from wyoming (#127182) 2024-10-01 12:25:39 +02:00
Erik Montnemery
120f4adf35 Update assist_satellite connection test sound (#127183) 2024-10-01 12:25:06 +02:00
epenet
b95dfe2b00 Add test helper for starting reconfiguration flow (#127154) 2024-10-01 12:18:07 +02:00
cdnninja
f02f0eae59 Allows unload when unsupported devices vesync (#127153)
Allows unload when unsupported devices
2024-10-01 12:16:06 +02:00
Allen Porter
c5ebd53079 Add a working location google calendar entity (#127016) 2024-10-01 12:14:23 +02:00
Nerdix
963b9d9a83 Roborock fix "selected map" when first map in list is selected (#127126)
* avoid None when current_map = 0

* combine statements
2024-10-01 12:13:11 +02:00
Christopher Fenner
5bf5545394 Change ViCare dependency back to original one (#127168)
switch dependency back
2024-10-01 11:21:50 +02:00
epenet
2659097010 Adjust type hints in aosmith config_flow (#127160) 2024-10-01 11:21:22 +02:00
epenet
5f1470af9f Adjust type hints in alarmdecoder config_flow (#127161) 2024-10-01 11:21:10 +02:00
Erik Montnemery
4ceff8cabf Use ConfigFlow.has_matching_flow to deduplicate lifx flows (#127163) 2024-10-01 11:20:50 +02:00
Erik Montnemery
b12f3e5aff Store huawei_lte flow data in flow handler attributes (#127173) 2024-10-01 11:18:57 +02:00
Erik Montnemery
f0b57e2873 Store smappee flow data in flow handler attributes (#127178) 2024-10-01 11:17:20 +02:00
Erik Montnemery
f71baf3c73 Store keenetic_ndms2 flow data in flow handler attributes (#127174) 2024-10-01 11:16:40 +02:00
Erik Montnemery
d9bba25f67 Store toon flow data in flow handler attributes (#127180) 2024-10-01 11:15:54 +02:00
Erik Montnemery
eb1fe93a59 Store devolo_home_network flow data in flow handler attributes (#127169) 2024-10-01 11:15:34 +02:00
Erik Montnemery
825bce32b5 Store fully_kiosk flow data in flow handler attributes (#127172) 2024-10-01 11:11:48 +02:00
Erik Montnemery
36df9e0464 Store ezviz flow data in flow handler attributes (#127171) 2024-10-01 11:11:21 +02:00
Erik Montnemery
46480c5624 Store esphome flow data in flow handler attributes (#127170) 2024-10-01 11:10:38 +02:00
Erik Montnemery
73fad671ed Store arcam_fmj flow data in flow handler attributes (#127166) 2024-10-01 11:09:29 +02:00
epenet
0d9f2aee70 Fix incorrect type hint in zwave_js config flow (#127158) 2024-10-01 10:20:01 +02:00
dependabot[bot]
805c717013 Bump github/codeql-action from 3.26.9 to 3.26.10 (#127157) 2024-10-01 09:15:47 +02:00
dependabot[bot]
9fcb1da06b Bump docker/build-push-action from 6.8.0 to 6.9.0 (#127156) 2024-10-01 09:15:26 +02:00
epenet
dcb6c9a133 Adjust type hints in zwave_js config flow (#127104) 2024-09-30 21:42:16 +02:00
G Johansson
edcb4eca22 Use async_update_reload_and_abort in Trafikverket Camera (#127137) 2024-09-30 21:30:53 +02:00
G Johansson
de6ca56504 Add config flow validation that calibration factor is not zero (#127136)
* Add config flow validation that calibration factor is not zero

* Add test
2024-09-30 21:30:28 +02:00
G Johansson
fdd9fca5b3 Fix naming and docstring in yale_smart_alarm select (#127141) 2024-09-30 21:22:55 +02:00
Joost Lekkerkerker
10805805fe Add devices to Withings (#126853) 2024-09-30 21:06:51 +02:00
G Johansson
05288dad51 Allow negative calibration factor in mold_indicator (#127133) 2024-09-30 20:50:32 +02:00
Franck Nijhof
053ff33ef9 Update RestrictedPython to 7.3 (#127130) 2024-09-30 19:53:38 +02:00
Franck Nijhof
c97f1baa2b Update gotailwind to 0.2.4 (#127129) 2024-09-30 19:52:11 +02:00
starkillerOG
0f4c50e83c Mark Reolink camera entities as unavailable when camera is offline (#127127)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-09-30 19:00:37 +02:00
Martin Hjelmare
0a99c1c633 Bump zwave-js-server-python to 0.58.1 (#127114)
* Bump zwave-js-server-python to 0.58.1

* Update tests
2024-09-30 18:35:14 +02:00
Bram Kragten
d6ae47a0de Update frontend to 20240930.0 (#127125) 2024-09-30 18:28:03 +02:00
Darren Griffin
b258e6464d Add Open Home Foundation logo to README (#127111)
* Added Open Home Foundation logo to README

* Remove legacy reference to OHF website

* Add alt text to OHF logo
2024-09-30 16:49:30 +02:00
epenet
86a95013b6 Use start_reauth_flow helper in ezviz and netatmo tests (#127100)
* Use start_reauth_flow helper in netatmo tests

* Use start_reauth_flow helper in ezviz tests
2024-09-30 16:38:34 +02:00
Christopher Fenner
636cba5d6b Add hotwater storage sensors to ViCare integration (#126570)
add sensors for hotwater storage
2024-09-30 16:37:50 +02:00
Sven Sager
74931071de Use scheduled current preset (if set), when setting HVAC mode in AVM Fritz!Smarthome (#126044)
* Use temperature of current preset when set fritz HVAC mode to HEAT

If the HVAC mode of the Fritzbox thermostats changes from `HVACMode.OFF`
to `HVAMode.HEAT`, the current preset (COMFORT / ECO) should be
observed. Depending on the status of the current preset, the set
temperature of comfort / eco is set as the new temperature.

* fixup do not use value_scheduled_preset

Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com>

* Add current_preset value to test_set_hvac_mode

The current_preset parameter allows the mock to be set to an active
preset. When setting HVACMode.HEAT, the respective temperature of the
ECO/COMFORT preset should be set.

* fixup Use the updated value_scheduled_preset function

To distinguish which temperature should be used when setting the
`HVAMode.HEAT`, `value_schedules_preset` is now used again, which has
been updated since the first commit. If no schedule is active, the
comfort_temperature is used. Otherwise, the respective temperature of
the current preset.

Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com>

---------

Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com>
2024-09-30 16:29:39 +02:00
epenet
c92169cb20 Use a generic string as default description placeholder in workday config_flow (#127112) 2024-09-30 15:57:37 +02:00
IceBotYT
927813ab3b Raise HomeAssistantError in entity action calls in Nice G.O. (#126439) 2024-09-30 15:36:10 +02:00
epenet
060268747c Add default description placeholder in workday config_flow (#127110) 2024-09-30 15:35:01 +02:00
epenet
47c953209d Adjust type hints in insteon config_flow (#127108) 2024-09-30 15:32:37 +02:00
epenet
16df3eb995 Adjust type hints in wilight config_flow (#127107) 2024-09-30 15:29:52 +02:00
epenet
454fb30759 Adjust type hints in enphase_envoy config_flow (#127106) 2024-09-30 15:29:25 +02:00
epenet
4e157c2999 Adjust type hints in zha config flow (#127105) 2024-09-30 15:20:20 +02:00
epenet
d96fd518e7 Use HassKey in azure_data_explorer (#127087)
* Use HassKey in azure_data_explorer

* Adjust tests

* Adjust

* Remove test
2024-09-30 14:45:37 +02:00
epenet
07fa1fa771 Move monzo test (#127101)
* Move monzo test

* Update tests/components/monzo/test_init.py
2024-09-30 14:43:23 +02:00
Christopher Fenner
404b3fcd03 Add support for room sensors in ViCare integration (#125243)
* Add room sensors

* set humidity device class

* add labels

* Create RoomSensor2.json

* Create RoomSensor1.json

* Update conftest.py

* Create test_sensor.py

* enable E3_RoomSensor

* use setup_integration

* fix ruff findings

* add test case

* fix entity id

* Apply suggestions from code review

* update

* fix findings

* reuse labels

* Apply suggestions from code review

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>

* Apply suggestions from code review

* fix test snapshot

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-09-30 14:32:04 +02:00
epenet
e1db5f3cac Use start_reauth_flow helper in switcher_kis tests (#127098) 2024-09-30 15:28:33 +03:00
epenet
4bb768f39c Add test for start_reauth_flow test helper (#127093)
* Improve docstring in start_reauth_flow

* Add test

* Make private

* Make fully private until actually needed
2024-09-30 14:28:13 +02:00
Joost Lekkerkerker
730012edfd Bump yt-dlp to 2024.09.27 (#127096) 2024-09-30 13:25:17 +02:00
Joost Lekkerkerker
352987db7e Make Laundrify unique id a string (#127092) 2024-09-30 13:21:20 +02:00
G Johansson
92a6f231a9 Workday raise issues only to next year (#126997)
* Workday - raise issues only for current and next year

* variable
2024-09-30 13:08:58 +02:00
G Johansson
a44bf164e5 Add select volume to yale_smart_alarm (#127005) 2024-09-30 12:55:09 +02:00
Allen Porter
5cc8cfb209 Update local_calendar/todo to avoid blocking in the event loop (#127048) 2024-09-30 12:51:41 +02:00
Jan Bouwhuis
f99b7d8b78 Start mqtt integration discovery config flow only once if config has not changed (#126966)
* Start mqtt integration config flow only once

* Remember last config message

* Filter out instead of unsubscribing the intehration discovery topic

* Follow up comments from code review
2024-09-30 12:44:40 +02:00
Erik Montnemery
e8fd97e355 Fix stale docstring in loader.USBMatcher (#127094) 2024-09-30 12:42:04 +02:00
Simon Goodall
5e64caa225 Check "status" is present before access during device update (#127091) 2024-09-30 12:06:48 +02:00
rappenze
0672e1a1ea Add power sensor detection in fibaro integration (#126964)
* Add power sensor detection in fibaro integration

* Better solution plus test

* Update homeassistant/components/fibaro/sensor.py

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-09-30 12:01:27 +02:00
epenet
2deab9e0c2 Do not store apache kafka in hass.data (#127090) 2024-09-30 12:01:13 +02:00
Jan Schneider
ebe4ed99b5 Add is_opening and is_closing properties to VeluxCover (#127038) 2024-09-30 11:46:47 +02:00
Shai Ungar
dce51b02c8 Fix timestamp isoformat in seventeentrack (#127052)
fix timestamp isoformat
2024-09-30 11:45:54 +02:00
epenet
70d4ee93f5 Use HassKey in azure_event_hub (#127086) 2024-09-30 11:45:02 +02:00
epenet
34a4372190 Use HassKey in analytics (#127089) 2024-09-30 11:44:27 +02:00
epenet
301543d3d0 Use config entry runtime_data in atag (#127084) 2024-09-30 11:06:07 +02:00
epenet
c3c2bc51c5 Use config entry runtime_data in aussie broadband (#127083) 2024-09-30 11:04:08 +02:00
epenet
40f808e9be Use config entry runtime_data in azure event hub (#127082) 2024-09-30 10:22:12 +02:00
epenet
3caf6c0e31 Move atag coordinator to separate class (#127071) 2024-09-30 10:21:04 +02:00
Matthias Alphart
36a0c1b514 Update xknxproject to 3.8.0 (#127072) 2024-09-30 10:18:46 +02:00
epenet
e128751e64 Use config entry runtime_data in aurora_abb_powerone (#127075) 2024-09-30 10:15:18 +02:00
epenet
fae1efc237 Move aussie broadband coordinator to separate class (#127081) 2024-09-30 10:14:04 +02:00
epenet
dec03d4d25 Use config entry runtime_data in awair (#127073) 2024-09-30 10:11:21 +02:00
epenet
064bbab3f5 Use config entry runtime_data in aseko_pool_live (#127077) 2024-09-30 10:10:34 +02:00
epenet
f03e81544e Use config entry runtime_data in aprilaire (#127079) 2024-09-30 10:09:21 +02:00
epenet
4c8027aefa Use config entry runtime_data in android ip webcam (#127080) 2024-09-30 10:08:04 +02:00
epenet
dbecd7a99c Use config entry runtime_data in arve (#127078) 2024-09-30 10:06:16 +02:00
dependabot[bot]
b035649c75 Bump docker/build-push-action from 6.7.0 to 6.8.0 (#127070)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-30 09:25:28 +02:00
Shai Ungar
97ab595e20 Fix repair when integration does not exist (#127050) 2024-09-30 09:17:44 +02:00
epenet
20d4031ed4 Use HassKey in application_credentials (#127069)
Use HassKey in application_credentials
2024-09-30 09:17:33 +02:00
Allen Porter
812be801ce Bump gcal_sync to 6.1.5 (#127049) 2024-09-30 09:11:31 +02:00
Luca Dibattista
672a7ca740 Fix Roomba help URL (#127065)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-09-30 09:10:54 +02:00
G Johansson
0b3d69aa8e Add unique id to mold_indicator setup from yaml (#126992) 2024-09-30 09:02:43 +02:00
J. Nick Koston
e87542e091 Fix removing nulls when encoding events for PostgreSQL (#127053) 2024-09-30 09:01:41 +02:00
MarkGodwin
e9bbf773d6 Switch oamda to use a strongly typed config entry (#127044) 2024-09-30 08:58:19 +02:00
Kevin Stillhammer
68e8c968a8 Clarify excl/incl filter functionality for waze_travel_time (#127056) 2024-09-30 08:57:06 +02:00
Jon Caruana
a3f12329b3 Bump pylitejet to 0.6.3 (#127063) 2024-09-30 08:36:30 +02:00
J. Nick Koston
f5ef213842 Add missing OUI to august (#127064) 2024-09-30 08:34:41 +02:00
Jan Bouwhuis
b573e5a2b3 Allow null / None value for non numeric mqtt sensor without warnings (#127032)
Allow `null` / `None` value for mqtt sensor without warnings
2024-09-30 07:05:12 +02:00
Marc Mueller
17c3e7b238 Update grpcio constraints to 1.66.2 (#127026) 2024-09-30 07:02:00 +02:00
Michael
9921a67a05 Bump py-synologydsm-api to 2.5.3 (#127035) 2024-09-29 10:12:27 -05:00
J. Nick Koston
ad09197c00 Bump anyio to 4.6.0 (#127013) 2024-09-29 15:13:10 +02:00
YogevBokobza
be11d1cabf Add Light support for Switcher Runner S11 (#126402)
* switcher add s11 light support

* switcher fix linting

* switcher fix linting

* switcher fix linting

* switcher fix linting

* Update homeassistant/components/switcher_kis/light.py

Co-authored-by: Shay Levy <levyshay1@gmail.com>

* Update homeassistant/components/switcher_kis/light.py

Co-authored-by: Shay Levy <levyshay1@gmail.com>

* Switcher fix based on requested changes

* switcher fix light tests

* Add translations

* Remove obsolete default

* Remove obsolete default

* Update tests/components/switcher_kis/test_light.py

Co-authored-by: Shay Levy <levyshay1@gmail.com>

* switcher fix based on requested changes

---------

Co-authored-by: Shay Levy <levyshay1@gmail.com>
Co-authored-by: Joostlek <joostlek@outlook.com>
2024-09-29 13:20:21 +03:00
Raul Camacho
5399e2b648 Add Local Calendar ics events import on calendar creation (#117955)
* add optional config_flow step of uploading .ics file to import local calendar events

* feat: add unit test for import_ics step

* fix: remove unneeded test patch

* feat: add helper for moving ics to storage location

* move helper to config_flow

* ruff

* fix tests; add test for invalid ics content

* Update homeassistant/components/local_calendar/config_flow.py

* Update import flow with radio button and improved text

Signed-off-by: Allen Porter <allen.porter@gmail.com>

* Remove commented out code

* Update with lint fixes

* Apply suggestions from code review

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>

---------

Signed-off-by: Allen Porter <allen.porter@gmail.com>
Co-authored-by: Allen Porter <allen.porter@gmail.com>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2024-09-28 22:15:24 -07:00
J. Nick Koston
a8d72cfdcf Bump aiohttp to 3.10.8 (#127009)
changelog: https://github.com/aio-libs/aiohttp/compare/v3.10.7...v3.10.8

Fixes a long standing cancellation leak on timeout
2024-09-28 21:53:54 -04:00
Michael Hansen
fbeee11fd7 Don't log voice assistant config timeout error (#127010)
Don't log config timeout error
2024-09-28 18:46:01 -04:00
Andre Lengwenus
545dae2e7f Bump pypck to 0.7.24 (#126995) 2024-09-28 21:39:48 +02:00
Paulus Schoutsen
86891351f6 Exclude Text-to-Speech cache from backups (#127001)
Text-to-speech cache doesn't need to be included in backups.
2024-09-28 18:22:57 +02:00
G Johansson
ddfe790995 Bump smhi-pkg to 1.0.18 (#126999) 2024-09-28 17:17:57 +02:00
G Johansson
85a9a8eca1 Add unique id to mold_indicator (#126990) 2024-09-28 14:53:40 +02:00
Tsvi Mostovicz
52c358e120 Add reconfigure flow for Jewish Calendar (#126773)
* Add reconfigure flow for Jewish Calendar

* Use async_update_reload_and_abort
2024-09-28 13:59:11 +02:00
Sid
f516e538a8 Include requirements_test_pre_commit.txt in pre-commit hassfest (#125388) 2024-09-28 10:48:08 +02:00
J. Nick Koston
4c28c1f556 Bump aiohttp to 3.10.7 (#126970) 2024-09-28 10:47:05 +02:00
Aindriú Mac Giolla Eoin
b996bd3e65 Updated languages.py to add Irish lang code (manually) (#126689)
* Updated languages.py to add Irish lang code (manually)

Added Irish language code manually without running the command 'python3 -m script.languages ga'.  Due to the size of the repository, I was unable to clone and run the generation script for updating languages.py

* Update homeassistant/generated/languages.py

Co-authored-by: Simon Lamon <32477463+silamon@users.noreply.github.com>

---------

Co-authored-by: Simon Lamon <32477463+silamon@users.noreply.github.com>
2024-09-27 23:49:31 +02:00
Erik Montnemery
6c1167df4a Use ConfigFlow.has_matching_flow to deduplicate webostv flows (#126898) 2024-09-28 00:11:15 +03:00
J. Nick Koston
1044345587 Bump yarl to 1.13.1 (#126962) 2024-09-27 23:10:01 +02:00
Josef Zweck
d9eb419ecc Add translation for tedee exceptions (#126963) 2024-09-27 22:21:01 +02:00
Josef Zweck
8a266aac34 Add translation_domain to lamarzocco exceptions (#126959) 2024-09-27 22:01:46 +02:00
Franck Nijhof
f6ac5dab74 Update apprise to 1.9.0 (#126952) 2024-09-27 21:58:03 +02:00
Franck Nijhof
d34ba16a30 Update pyvera to 0.3.15 (#126956) 2024-09-27 21:25:27 +02:00
Franck Nijhof
5638e937b0 Update vsure to 2.6.7 (#126950) 2024-09-27 21:25:13 +02:00
G Johansson
2ff88e7baf Add preview to statistics (#122590) 2024-09-27 21:09:42 +02:00
Josef Zweck
2e1732fadf Add proper exception handling to lamarzocco (#125913) 2024-09-27 21:04:01 +02:00
G Johansson
57e041171b Add preview to mold_indicator (#125530) 2024-09-27 20:56:02 +02:00
Marc Mueller
317b73ffaf Allow passing filename to licenses script [ci] (#126951) 2024-09-27 20:52:01 +02:00
ozadr1an
39a9634a5c Bump nessclient to 1.1.2 (#125604)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-09-27 20:49:34 +02:00
Franck Nijhof
22ebc654a7 Update ollama to 0.3.3 (#126953) 2024-09-27 20:45:10 +02:00
Marc Mueller
20c3b9b6f9 Update grpcio constraints to 1.66.1 (#126947) 2024-09-27 13:44:31 -05:00
Franck Nijhof
7588d83c6c Update DoorBirdPy to 3.0.3 (#126949) 2024-09-27 20:29:46 +02:00
Franck Nijhof
efbb5bf9af Update debugpy to 1.8.6 (#126945) 2024-09-27 20:29:32 +02:00
Steven B.
dac69fafb8 Bump python-kasa library to 0.7.4 (#126944) 2024-09-27 13:29:28 -05:00
Franck Nijhof
8d98085873 Update ical to 8.2.0 (#126954) 2024-09-27 20:29:18 +02:00
J. Nick Koston
8950e817e0 Bump protobuf to 5.28.2 (#124936)
Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
2024-09-27 19:39:25 +02:00
Erwin Douna
6fb1b53039 Set DSMR Reader quality scale to Gold (#121466) 2024-09-27 19:26:51 +02:00
Joakim Plate
c81a4f8633 Translate exception from fjäråskupan (#126673) 2024-09-27 19:23:24 +02:00
Erik Montnemery
4599d1650b Use ConfigFlow.has_matching_flow to deduplicate flux_led flows (#126888) 2024-09-27 19:22:00 +02:00
Simon Lamon
4edc3872ce Add support for stop command in LinkPlay (#126941)
Add support for stop command
2024-09-27 19:13:26 +02:00
Josef Zweck
8999e9f116 Use _async_setup in tedee coordinator (#126812) 2024-09-27 19:10:52 +02:00
Erik Montnemery
c5b4892596 Adjust BaseEditConfigView.__init__ (#126729) 2024-09-27 19:08:12 +02:00
Erik Montnemery
46812777e2 Use ConfigFlow.has_matching_flow to deduplicate yalexs_ble flows (#126899) 2024-09-27 19:07:23 +02:00
Simon
616c0ebaa4 Use hass httpx client for ElevenLabs component (#126793) 2024-09-27 19:04:31 +02:00
Steven B.
33d0343089 Extend dhcp discovery flow for ring integration (#126661) 2024-09-27 19:03:43 +02:00
Raj Laud
e6af8f63f3 Squeezebox - bump pysqueezebox dependency to 0.9.3 to restore favorites support (#126929) 2024-09-27 18:50:30 +02:00
Jan Rieger
cda62a4ff3 Add missing icons to unifi (#126934) 2024-09-27 18:50:00 +02:00
Marc Mueller
f359d619cb Modify pytest workflow to support testing multiple Python versions [ci] (#126936) 2024-09-27 18:49:20 +02:00
Erik Montnemery
495faf5033 Improve statistics issue title (#126851) 2024-09-27 18:32:20 +02:00
Bram Kragten
cba2daf314 Update frontend to 20240927.0 (#126933) 2024-09-27 18:10:39 +02:00
Jan Rieger
2d68f9a986 Use icon translations in unifi (#126903)
* Use icon translations in unifi

* Update snapshots

* Add state icons

* Address feedback

* Update snapshot
2024-09-27 17:43:25 +02:00
Jan Bouwhuis
7fde2e2fe0 Do not unsubscribe mqtt integration discovery if entry is already configured (#126907)
* Do not unsubscribe mqtt integration discovery if entry is already configured

* Test cases without unsubscribe
2024-09-27 17:28:51 +02:00
Michael Hansen
bd4f3b0553 Change Assist satellite state names (#126926)
* Change state names

* Update homeassistant/components/assist_satellite/strings.json

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-09-27 11:11:23 -04:00
Michael Hansen
6373347d65 Adjust "Assist in progress" sensor in ESPHome (#126928)
Adjust sensor
2024-09-27 11:10:50 -04:00
Jon Seager
b458b204f0 Bump pytouchlinesl to 0.1.7 (#126923) 2024-09-27 16:01:59 +02:00
mvn23
dd3a3f821c Bump pyotgw to 2.2.1 (#126918) 2024-09-27 15:43:10 +02:00
Jan Bouwhuis
60e3a1fc5f Fix ruff import validation (#126917) 2024-09-27 15:17:54 +02:00
Manu
706a5680e1 Change Turkey to Türkiye per 2022 UN resolution on official name (#126779) 2024-09-27 15:11:05 +02:00
Brett Adams
cad87f51a3 Code quality improvements for Teslemetry (#123444) 2024-09-27 15:06:09 +02:00
Erik Montnemery
66ab90b518 Add EntityIDPostMigration data migrator class (#125307) 2024-09-27 14:58:34 +02:00
Jon Seager
8bdd81ff24 Update pytouchlinesl to 0.1.6 (#126912) 2024-09-27 14:56:37 +02:00
Joost Lekkerkerker
f64e542879 Fix Evohome snapshots (#126915) 2024-09-27 14:55:44 +02:00
Joost Lekkerkerker
7c58476af9 Add unique id migration to Geniushub (#122330) 2024-09-27 14:54:47 +02:00
epenet
1f3b06a9bd Refactor Trace to avoid self import (#125822) 2024-09-27 14:52:13 +02:00
epenet
e1314b6cda Use shorthand attributes in vodafone_station device tracker (#126747) 2024-09-27 14:48:30 +02:00
epenet
a6b629c392 Use shorthand attributes in traccar device tracker (#126733) 2024-09-27 14:45:41 +02:00
epenet
f9f51e2381 Use shorthand attributes in gpslogger device tracker (#126739) 2024-09-27 14:44:56 +02:00
epenet
ee75cba008 Remove unused properties in tado device tracker (#126737) 2024-09-27 14:41:47 +02:00
Manu
c768f03f71 Revert "Add support for Xiaomi airpurifier and humidifier (#117791)" (#126873) 2024-09-27 14:41:20 +02:00
Joost Lekkerkerker
20a57d6381 Fix Tado unloading (#126910) 2024-09-27 14:36:29 +02:00
Joost Lekkerkerker
308f25fe4c Migrate Nexia unique id to str (#126911) 2024-09-27 14:35:08 +02:00
Erik Montnemery
9f2ba6bc2c Use ConfigFlow.has_matching_flow to deduplicate plugwise flows (#126896) 2024-09-27 14:32:36 +02:00
rubenbe
b3b5d9602a Add RSS description to Feedreader event (#126681) 2024-09-27 13:46:48 +02:00
David Bonnes
2d16732972 Set the default time zone for evohome tests (#126679) 2024-09-27 13:44:47 +02:00
epenet
94efd3e230 Cleanup sensor tests (#126881) 2024-09-27 13:43:24 +02:00
Erik Montnemery
59a690f214 Use ConfigFlow.has_matching_flow to deduplicate homekit_controller flows (#126894) 2024-09-27 13:41:55 +02:00
Marc Mueller
6f70a52880 Update grpcio constraints to 1.62.3 (#126908) 2024-09-27 13:35:20 +02:00
Erik Montnemery
85ebe5e01a Use ConfigFlow.has_matching_flow to deduplicate hunterdouglas flows (#126895) 2024-09-27 13:22:16 +02:00
Joost Lekkerkerker
a3ec4db9cc Update airgradient device sw_version when changed (#126902) 2024-09-27 13:21:35 +02:00
Michael
ffa6b5fcb2 Use two words for Nautical miles unit (#126905) 2024-09-27 13:16:13 +02:00
Manu
b78a1f7b61 Fix blocking call in Xiaomi Miio integration (#126871) 2024-09-27 13:11:28 +02:00
epenet
1d49c5056c Use shorthand attributes in tile device tracker (#126735) 2024-09-27 13:04:19 +02:00
Erik Montnemery
83ebd601a9 Use ConfigFlow.has_matching_flow to deduplicate steamist flows (#126897) 2024-09-27 13:01:29 +02:00
Simon Lamon
a972e295ea Bump python-linkplay to 0.0.12 (#126850)
Bump dependency
2024-09-27 12:21:58 +02:00
Manu
7a0b4fc62c Add support for variant of Xiaomi Mi Air Purifier 3C (zhimi.airp.mb4a) (#126867)
Add model id zhimi.airp.mb4a
2024-09-27 12:00:19 +02:00
Joost Lekkerkerker
d78fcd2a29 Introduce base entity in Switcher (#126822) 2024-09-27 11:47:47 +02:00
Erik Montnemery
2b2f5c9353 Use ConfigFlow.has_matching_flow to deduplicate elkm1 flows (#126887) 2024-09-27 11:46:26 +02:00
Erik Montnemery
fcbb9dd8d8 Use ConfigFlow.has_matching_flow to deduplicate fritz flows (#126890) 2024-09-27 11:45:57 +02:00
Erik Montnemery
b34f3ad5c5 Use ConfigFlow.has_matching_flow to deduplicate gogogate2 flows (#126892) 2024-09-27 11:45:17 +02:00
Erik Montnemery
8bdd909351 Use ConfigFlow.has_matching_flow to deduplicate fritzbox flows (#126891) 2024-09-27 11:44:59 +02:00
Kareem ElFaramawi
d7fe7f35ad Fix Abode integration needing to reauthenticate after core update (#123035)
* bump jaraco.abode to 6.2.1

* update abode user_data path to HA config

* Move abode config call out of try block

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-09-27 11:43:29 +02:00
Joost Lekkerkerker
1ebcc34e66 Fix restoring state class in mobile app (#126868) 2024-09-27 11:37:28 +02:00
J. Nick Koston
40e83dd9e0 Bump yarl to 1.13.0 (#126872) 2024-09-27 11:35:57 +02:00
Joost Lekkerkerker
18fd00d0c2 Add diagnostics platform to airgradient (#126886) 2024-09-27 11:35:35 +02:00
J. Nick Koston
9ec26a9be5 Fix getting the current host for IPv6 urls (#126889) 2024-09-27 11:26:35 +02:00
Erik Montnemery
3c0be47d3c Add FlowManager.async_has_matching_flow (#126804)
* Add FlowManager.async_flow_has_matching_flow

* Revert changes from the future

* Apply suggested changes to apple_tv config flow

* Rename methods after discussion

* Update homeassistant/data_entry_flow.py

Co-authored-by: J. Nick Koston <nick@koston.org>

* Move deduplication functions to config_entries, add tests

* Adjust tests

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2024-09-27 10:51:36 +02:00
Michael
26b5dab12b Add nmi (nautical miles) as valid distance unit (#124723) 2024-09-27 10:40:59 +02:00
J. Nick Koston
75ae6a8087 Fix getting the host for the current request (#126882) 2024-09-27 03:36:05 -05:00
Franck Nijhof
fb0e102d74 Mark custom panel integration as system type (#126883) 2024-09-27 10:26:19 +02:00
EnjoyingM
d777ec3267 Bump wolf-comm to 0.0.15 (#126857) 2024-09-27 09:56:33 +02:00
David Bonnes
cff9e9abab Refactor evohome test fixtures for improved testing (#126781) 2024-09-27 09:40:52 +02:00
Marc Mueller
0b19831a7a Update pytest warnings filter (#126858) 2024-09-27 09:32:50 +02:00
Alexey ALERT Rubashёff
27f3715780 Update overkiz Atlantic Water Heater away mode switching (#121801) 2024-09-27 09:30:40 +02:00
Jeef
76858f0534 Monarch Money cashflow sensor bugfix (#125774)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-09-27 09:18:37 +02:00
Joost Lekkerkerker
bcfdfe93f9 Fix small typo in mobile_app docstring (#126863) 2024-09-27 00:01:11 +02:00
Joost Lekkerkerker
7c6cc16ef1 Bump aiowithings to 3.1.0 (#126854) 2024-09-26 22:36:01 +02:00
Paulus Schoutsen
471c68f653 Update the Selected Pipeline entity name (#126845) 2024-09-26 20:38:51 +02:00
Joost Lekkerkerker
ae102f1318 Add logging to NYT Games setup failures (#126832) 2024-09-26 20:33:24 +02:00
Joost Lekkerkerker
2a0ad20188 Fix last played icon in NYT Games (#126837) 2024-09-26 20:23:24 +02:00
Michael Hansen
9db5b481be Fix ESPHome and VoIP Assist satellite entity names (#126229)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-09-26 20:22:09 +02:00
Joost Lekkerkerker
185d00c86c Fix Withings reauth title (#126838) 2024-09-26 20:19:40 +02:00
Bram Kragten
e72ec07683 Update frontend to 20240926.0 (#126843) 2024-09-26 19:48:27 +02:00
Joost Lekkerkerker
6e12726b11 Use Parametrizing in Matter tests (#126759)
* Overhaul matter tests

* Overhaul

* Remove matter_client where obsolete

* Move snapshots to the top

* Use usefixtures

* Add Valve
2024-09-26 19:40:20 +02:00
epenet
6c539cd2d8 Improve type hints in template config_flow tests (#126803)
Improve type hints in template tests
2024-09-26 19:25:33 +02:00
Sid
77642b9e3d Bump ruff to 0.6.8 (#126842) 2024-09-26 19:13:08 +02:00
Mike Degatano
86dc7111cb Bump aiohasupervisor to 0.1.0 (#126841) 2024-09-26 18:34:30 +02:00
Joost Lekkerkerker
8d428acbbb Bump nyt_games to 0.4.2 (#126834)
* Bump nyt_games to 0.4.1

* Bump nyt_games to 0.4.1

* Bump nyt_games to 0.4.2
2024-09-26 18:03:11 +02:00
Joost Lekkerkerker
1c13851858 Bump jaraco.abode to 6.2.1 (#126823) 2024-09-26 17:31:09 +02:00
Joost Lekkerkerker
a75ebc27c4 Bump knocki to 0.3.5 (#126826) 2024-09-26 15:45:20 +02:00
epenet
45f92dd981 Improve type hints in template (#126802) 2024-09-26 15:05:46 +02:00
Steven B.
5a6ce86476 Bump ring-doorbell to 0.9.6 (#126817) 2024-09-26 15:00:31 +02:00
Noah Husby
7afad1dde9 Bump aiorussound to 4.0.5 (#126774)
* Bump aiorussound to 4.0.4

* Remove unnecessary exception

* Bump aiorussound to 4.0.5

* Fixes

* Update homeassistant/components/russound_rio/media_player.py

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-09-26 14:38:36 +02:00
Manu
b766d91f49 Fix typo in Mealie integration (#126824) 2024-09-26 14:28:57 +02:00
Marc Mueller
22dac266c4 Update pydantic to 1.10.18 (#126821) 2024-09-26 14:17:46 +02:00
epenet
5fb9537d6d Use pytest.mark.usefixtures for start_ha in template tests (#126805) 2024-09-26 14:00:52 +02:00
Marc Mueller
c1b24e6ba2 Small typing improvements (#126818)
* Add from __future__ import annotations

* Use PEP 695 type aliases

* Fix generator typing
2024-09-26 13:51:27 +02:00
dependabot[bot]
cf803507d6 Bump actions/checkout from 4.1.7 to 4.2.0 (#126801)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-26 13:49:48 +02:00
Josef Zweck
16e5271cac Switch coordinator setup to _async_setup (#126810) 2024-09-26 13:08:02 +02:00
Martin Hjelmare
d5ad35630f Fix missing template alarm control panel menu string (#126791) 2024-09-26 07:37:49 +02:00
starkillerOG
1395baef01 Remove Reolink Home Hub main level switches (#126697)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-09-25 21:52:26 +02:00
David Bonnes
90dcb02429 Remove unnecessary patch from evohome tests (#126760) 2024-09-25 21:52:03 +02:00
Steven B.
4f0211cdd8 Deprecate tplink alarm button entities (#126349)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-09-25 14:47:40 -05:00
epenet
a1e6d4b693 Use shorthand attributes in geofency device tracker (#126741) 2024-09-25 21:47:13 +02:00
starkillerOG
77db88ad28 Bump reolink-aio to 0.9.11 (#126778) 2024-09-25 21:43:20 +02:00
G Johansson
c6a1b9fc39 Change Climate set temp action for incorrect feature will raise (#126692)
* Change Climate set temp action for incorrect feature will raise

* Fix some tests

* Fix review comments

* Fix tesla_fleet

* Fix tests

* Fix review comment
2024-09-25 21:16:14 +02:00
Franck Nijhof
9afd270111 Bump version to 2024.11.0dev0 (#126776) 2024-09-25 21:08:07 +02:00
1608 changed files with 60610 additions and 26984 deletions

View File

@@ -127,6 +127,7 @@ tests: &tests
- tests/*.py
- tests/auth/**
- tests/backports/**
- tests/components/conftest.py
- tests/components/diagnostics/**
- tests/components/history/**
- tests/components/logbook/**

View File

@@ -2,7 +2,7 @@
"name": "Home Assistant Dev",
"context": "..",
"dockerFile": "../Dockerfile.dev",
"postCreateCommand": "script/setup",
"postCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder} && script/setup",
"postStartCommand": "script/bootstrap",
"containerEnv": {
"PYTHONASYNCIODEBUG": "1"
@@ -12,7 +12,12 @@
},
// Port 5683 udp is used by Shelly integration
"appPort": ["8123:8123", "5683:5683/udp"],
"runArgs": ["-e", "GIT_EDITOR=code --wait"],
"runArgs": [
"-e",
"GIT_EDITOR=code --wait",
"--security-opt",
"label=disable"
],
"customizations": {
"vscode": {
"extensions": [

View File

@@ -7,6 +7,7 @@ docs
# Development
.devcontainer
.vscode
.tool-versions
# Test related files
tests

View File

@@ -27,7 +27,7 @@ jobs:
publish: ${{ steps.version.outputs.publish }}
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
with:
fetch-depth: 0
@@ -69,7 +69,7 @@ jobs:
run: find ./homeassistant/components/*/translations -name "*.json" | tar zcvf translations.tar.gz -T -
- name: Upload translations
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: translations
path: translations.tar.gz
@@ -90,7 +90,7 @@ jobs:
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Download nightly wheels of frontend
if: needs.init.outputs.channel == 'dev'
@@ -242,7 +242,7 @@ jobs:
- green
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set build additional args
run: |
@@ -279,7 +279,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Initialize git
uses: home-assistant/actions/helpers/git-init@master
@@ -321,10 +321,10 @@ jobs:
registry: ["ghcr.io/home-assistant", "docker.io/homeassistant"]
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Install Cosign
uses: sigstore/cosign-installer@v3.6.0
uses: sigstore/cosign-installer@v3.7.0
with:
cosign-release: "v2.2.3"
@@ -451,7 +451,7 @@ jobs:
if: github.repository_owner == 'home-assistant' && needs.init.outputs.publish == 'true'
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v5.2.0
@@ -499,7 +499,7 @@ jobs:
HASSFEST_IMAGE_TAG: ghcr.io/home-assistant/hassfest:${{ needs.init.outputs.version }}
steps:
- name: Checkout repository
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
- name: Login to GitHub Container Registry
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
@@ -509,7 +509,7 @@ jobs:
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build Docker image
uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # v6.7.0
uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0
with:
context: . # So action will not pull the repository again
file: ./script/hassfest/docker/Dockerfile
@@ -522,7 +522,7 @@ jobs:
- name: Push Docker image
if: needs.init.outputs.channel != 'dev' && needs.init.outputs.publish == 'true'
id: push
uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # v6.7.0
uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0
with:
context: . # So action will not pull the repository again
file: ./script/hassfest/docker/Dockerfile

View File

@@ -40,7 +40,7 @@ env:
CACHE_VERSION: 11
UV_CACHE_VERSION: 1
MYPY_CACHE_VERSION: 9
HA_SHORT_VERSION: "2024.10"
HA_SHORT_VERSION: "2024.11"
DEFAULT_PYTHON: "3.12"
ALL_PYTHON_VERSIONS: "['3.12']"
# 10.3 is the oldest supported version
@@ -93,7 +93,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Generate partial Python venv restore key
id: generate_python_cache_key
run: |
@@ -231,7 +231,7 @@ jobs:
- info
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
@@ -240,7 +240,7 @@ jobs:
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v4.0.2
uses: actions/cache@v4.1.1
with:
path: venv
key: >-
@@ -256,7 +256,7 @@ jobs:
uv pip install "$(cat requirements_test.txt | grep pre-commit)"
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache@v4.0.2
uses: actions/cache@v4.1.1
with:
path: ${{ env.PRE_COMMIT_CACHE }}
lookup-only: true
@@ -277,7 +277,7 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v5.2.0
id: python
@@ -286,7 +286,7 @@ jobs:
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -295,7 +295,7 @@ jobs:
needs.info.outputs.pre-commit_cache_key }}
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: ${{ env.PRE_COMMIT_CACHE }}
fail-on-cache-miss: true
@@ -317,7 +317,7 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v5.2.0
id: python
@@ -326,7 +326,7 @@ jobs:
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -335,7 +335,7 @@ jobs:
needs.info.outputs.pre-commit_cache_key }}
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: ${{ env.PRE_COMMIT_CACHE }}
fail-on-cache-miss: true
@@ -357,7 +357,7 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v5.2.0
id: python
@@ -366,7 +366,7 @@ jobs:
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -375,7 +375,7 @@ jobs:
needs.info.outputs.pre-commit_cache_key }}
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: ${{ env.PRE_COMMIT_CACHE }}
fail-on-cache-miss: true
@@ -447,7 +447,7 @@ jobs:
- script/hassfest/docker/Dockerfile
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Register hadolint problem matcher
run: |
echo "::add-matcher::.github/workflows/matchers/hadolint.json"
@@ -466,7 +466,7 @@ jobs:
python-version: ${{ fromJSON(needs.info.outputs.python_versions) }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v5.2.0
@@ -482,7 +482,7 @@ jobs:
env.HA_SHORT_VERSION }}-$(date -u '+%Y-%m-%dT%H:%M:%s')" >> $GITHUB_OUTPUT
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v4.0.2
uses: actions/cache@v4.1.1
with:
path: venv
lookup-only: true
@@ -491,7 +491,7 @@ jobs:
needs.info.outputs.python_cache_key }}
- name: Restore uv wheel cache
if: steps.cache-venv.outputs.cache-hit != 'true'
uses: actions/cache@v4.0.2
uses: actions/cache@v4.1.1
with:
path: ${{ env.UV_CACHE_DIR }}
key: >-
@@ -550,7 +550,7 @@ jobs:
sudo apt-get -y install \
libturbojpeg
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
@@ -559,7 +559,7 @@ jobs:
check-latest: true
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -583,7 +583,7 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
@@ -592,7 +592,7 @@ jobs:
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -617,7 +617,7 @@ jobs:
&& needs.info.outputs.requirements == 'true'
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
@@ -626,7 +626,7 @@ jobs:
check-latest: true
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -638,14 +638,14 @@ jobs:
. venv/bin/activate
pip-licenses --format=json --output-file=licenses.json
- name: Upload licenses
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: licenses
path: licenses.json
- name: Process licenses
run: |
. venv/bin/activate
python -m script.licenses
python -m script.licenses licenses.json
pylint:
name: Check pylint
@@ -660,7 +660,7 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
@@ -669,7 +669,7 @@ jobs:
check-latest: true
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -707,7 +707,7 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
@@ -716,7 +716,7 @@ jobs:
check-latest: true
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -752,7 +752,7 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.2.0
@@ -768,7 +768,7 @@ jobs:
env.HA_SHORT_VERSION }}-$(date -u '+%Y-%m-%dT%H:%M:%s')" >> $GITHUB_OUTPUT
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -776,7 +776,7 @@ jobs:
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.python_cache_key }}
- name: Restore mypy cache
uses: actions/cache@v4.0.2
uses: actions/cache@v4.1.1
with:
path: .mypy_cache
key: >-
@@ -815,7 +815,11 @@ jobs:
needs:
- info
- base
name: Split tests for full run
strategy:
fail-fast: false
matrix:
python-version: ${{ fromJson(needs.info.outputs.python_versions) }}
name: Split tests for full run Python ${{ matrix.python-version }}
steps:
- name: Install additional OS dependencies
run: |
@@ -827,16 +831,16 @@ jobs:
libturbojpeg \
libgammu-dev
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v5.2.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -848,9 +852,9 @@ jobs:
. venv/bin/activate
python -m script.split_tests ${{ needs.info.outputs.test_group_count }} tests
- name: Upload pytest_buckets
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: pytest_buckets
name: pytest_buckets-${{ matrix.python-version }}
path: pytest_buckets.txt
overwrite: true
@@ -891,7 +895,7 @@ jobs:
libturbojpeg \
libgammu-dev
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v5.2.0
@@ -900,7 +904,7 @@ jobs:
check-latest: true
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -915,7 +919,7 @@ jobs:
- name: Download pytest_buckets
uses: actions/download-artifact@v4.1.8
with:
name: pytest_buckets
name: pytest_buckets-${{ matrix.python-version }}
- name: Compile English translations
run: |
. venv/bin/activate
@@ -940,7 +944,7 @@ jobs:
-qq \
--timeout=9 \
--durations=10 \
-n auto \
--numprocesses auto \
--dist=loadfile \
${cov_params[@]} \
-o console_output_style=count \
@@ -949,14 +953,14 @@ jobs:
2>&1 | tee pytest-${{ matrix.python-version }}-${{ matrix.group }}.txt
- name: Upload pytest output
if: success() || failure() && steps.pytest-full.conclusion == 'failure'
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: pytest-${{ github.run_number }}-${{ matrix.python-version }}-${{ matrix.group }}
path: pytest-*.txt
overwrite: true
- name: Upload coverage artifact
if: needs.info.outputs.skip_coverage != 'true'
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: coverage-${{ matrix.python-version }}-${{ matrix.group }}
path: coverage.xml
@@ -1011,7 +1015,7 @@ jobs:
libturbojpeg \
libmariadb-dev-compat
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v5.2.0
@@ -1020,7 +1024,7 @@ jobs:
check-latest: true
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -1062,7 +1066,7 @@ jobs:
python3 -b -X dev -m pytest \
-qq \
--timeout=20 \
-n 1 \
--numprocesses 1 \
${cov_params[@]} \
-o console_output_style=count \
--durations=10 \
@@ -1075,7 +1079,7 @@ jobs:
2>&1 | tee pytest-${{ matrix.python-version }}-${mariadb}.txt
- name: Upload pytest output
if: success() || failure() && steps.pytest-partial.conclusion == 'failure'
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: pytest-${{ github.run_number }}-${{ matrix.python-version }}-${{
steps.pytest-partial.outputs.mariadb }}
@@ -1083,7 +1087,7 @@ jobs:
overwrite: true
- name: Upload coverage artifact
if: needs.info.outputs.skip_coverage != 'true'
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: coverage-${{ matrix.python-version }}-${{
steps.pytest-partial.outputs.mariadb }}
@@ -1137,7 +1141,7 @@ jobs:
libturbojpeg \
postgresql-server-dev-14
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v5.2.0
@@ -1146,7 +1150,7 @@ jobs:
check-latest: true
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -1188,7 +1192,7 @@ jobs:
python3 -b -X dev -m pytest \
-qq \
--timeout=9 \
-n 1 \
--numprocesses 1 \
${cov_params[@]} \
-o console_output_style=count \
--durations=0 \
@@ -1202,7 +1206,7 @@ jobs:
2>&1 | tee pytest-${{ matrix.python-version }}-${postgresql}.txt
- name: Upload pytest output
if: success() || failure() && steps.pytest-partial.conclusion == 'failure'
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: pytest-${{ github.run_number }}-${{ matrix.python-version }}-${{
steps.pytest-partial.outputs.postgresql }}
@@ -1210,7 +1214,7 @@ jobs:
overwrite: true
- name: Upload coverage artifact
if: needs.info.outputs.skip_coverage != 'true'
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: coverage-${{ matrix.python-version }}-${{
steps.pytest-partial.outputs.postgresql }}
@@ -1232,14 +1236,14 @@ jobs:
timeout-minutes: 10
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Download all coverage artifacts
uses: actions/download-artifact@v4.1.8
with:
pattern: coverage-*
- name: Upload coverage to Codecov
if: needs.info.outputs.test_full_suite == 'true'
uses: codecov/codecov-action@v4.5.0
uses: codecov/codecov-action@v4.6.0
with:
fail_ci_if_error: true
flags: full-suite
@@ -1283,7 +1287,7 @@ jobs:
libturbojpeg \
libgammu-dev
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v5.2.0
@@ -1292,7 +1296,7 @@ jobs:
check-latest: true
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
uses: actions/cache/restore@v4.1.1
with:
path: venv
fail-on-cache-miss: true
@@ -1334,7 +1338,7 @@ jobs:
python3 -b -X dev -m pytest \
-qq \
--timeout=9 \
-n auto \
--numprocesses auto \
${cov_params[@]} \
-o console_output_style=count \
--durations=0 \
@@ -1344,14 +1348,14 @@ jobs:
2>&1 | tee pytest-${{ matrix.python-version }}-${{ matrix.group }}.txt
- name: Upload pytest output
if: success() || failure() && steps.pytest-partial.conclusion == 'failure'
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: pytest-${{ github.run_number }}-${{ matrix.python-version }}-${{ matrix.group }}
path: pytest-*.txt
overwrite: true
- name: Upload coverage artifact
if: needs.info.outputs.skip_coverage != 'true'
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: coverage-${{ matrix.python-version }}-${{ matrix.group }}
path: coverage.xml
@@ -1370,14 +1374,14 @@ jobs:
timeout-minutes: 10
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Download all coverage artifacts
uses: actions/download-artifact@v4.1.8
with:
pattern: coverage-*
- name: Upload coverage to Codecov
if: needs.info.outputs.test_full_suite == 'false'
uses: codecov/codecov-action@v4.5.0
uses: codecov/codecov-action@v4.6.0
with:
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}

View File

@@ -21,14 +21,14 @@ jobs:
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Initialize CodeQL
uses: github/codeql-action/init@v3.26.9
uses: github/codeql-action/init@v3.26.13
with:
languages: python
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3.26.9
uses: github/codeql-action/analyze@v3.26.13
with:
category: "/language:python"

View File

@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v5.2.0

View File

@@ -32,7 +32,7 @@ jobs:
architectures: ${{ steps.info.outputs.architectures }}
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
@@ -64,11 +64,8 @@ jobs:
- name: Write env-file
run: |
(
echo "GRPC_BUILD_WITH_BORING_SSL_ASM=false"
echo "GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=true"
echo "GRPC_PYTHON_BUILD_WITH_CYTHON=true"
echo "GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY=true"
echo "GRPC_PYTHON_LDFLAGS=-lpthread -Wl,-wrap,memcpy -static-libgcc"
# Fix out of memory issues with rust
echo "CARGO_NET_GIT_FETCH_WITH_CLI=true"
@@ -82,7 +79,7 @@ jobs:
) > .env_file
- name: Upload env_file
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: env_file
path: ./.env_file
@@ -90,7 +87,7 @@ jobs:
overwrite: true
- name: Upload requirements_diff
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: requirements_diff
path: ./requirements_diff.txt
@@ -102,7 +99,7 @@ jobs:
python -m script.gen_requirements_all ci
- name: Upload requirements_all_wheels
uses: actions/upload-artifact@v4.4.0
uses: actions/upload-artifact@v4.4.3
with:
name: requirements_all_wheels
path: ./requirements_all_wheels_*.txt
@@ -119,7 +116,7 @@ jobs:
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Download env_file
uses: actions/download-artifact@v4.1.8
@@ -163,7 +160,7 @@ jobs:
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Download env_file
uses: actions/download-artifact@v4.1.8
@@ -205,11 +202,9 @@ jobs:
# Some dependencies still require 'cython<3'
# and don't yet use isolated build environments.
# Build these first.
# grpcio: https://github.com/grpc/grpc/issues/33918
# pydantic: https://github.com/pydantic/pydantic/issues/7689
touch requirements_old-cython.txt
cat homeassistant/package_constraints.txt | grep 'grpcio==' >> requirements_old-cython.txt
cat homeassistant/package_constraints.txt | grep 'pydantic==' >> requirements_old-cython.txt
- name: Build wheels (old cython)
@@ -221,7 +216,7 @@ jobs:
wheels-key: ${{ secrets.WHEELS_KEY }}
env-file: true
apk: "bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev"
skip-binary: aiohttp;charset-normalizer;grpcio;multidict;SQLAlchemy;protobuf;pydantic;pymicro-vad;yarl
skip-binary: aiohttp;charset-normalizer;grpcio;multidict;SQLAlchemy;propcache;protobuf;pydantic;pymicro-vad;yarl
constraints: "homeassistant/package_constraints.txt"
requirements-diff: "requirements_diff.txt"
requirements: "requirements_old-cython.txt"
@@ -236,7 +231,7 @@ jobs:
wheels-key: ${{ secrets.WHEELS_KEY }}
env-file: true
apk: "bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev;nasm"
skip-binary: aiohttp;charset-normalizer;grpcio;multidict;SQLAlchemy;protobuf;pydantic;pymicro-vad;yarl
skip-binary: aiohttp;charset-normalizer;grpcio;multidict;SQLAlchemy;propcache;protobuf;pydantic;pymicro-vad;yarl
constraints: "homeassistant/package_constraints.txt"
requirements-diff: "requirements_diff.txt"
requirements: "requirements_all.txtaa"
@@ -250,7 +245,7 @@ jobs:
wheels-key: ${{ secrets.WHEELS_KEY }}
env-file: true
apk: "bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev;nasm"
skip-binary: aiohttp;charset-normalizer;grpcio;multidict;SQLAlchemy;protobuf;pydantic;pymicro-vad;yarl
skip-binary: aiohttp;charset-normalizer;grpcio;multidict;SQLAlchemy;propcache;protobuf;pydantic;pymicro-vad;yarl
constraints: "homeassistant/package_constraints.txt"
requirements-diff: "requirements_diff.txt"
requirements: "requirements_all.txtab"
@@ -264,7 +259,7 @@ jobs:
wheels-key: ${{ secrets.WHEELS_KEY }}
env-file: true
apk: "bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev;nasm"
skip-binary: aiohttp;charset-normalizer;grpcio;multidict;SQLAlchemy;protobuf;pydantic;pymicro-vad;yarl
skip-binary: aiohttp;charset-normalizer;grpcio;multidict;SQLAlchemy;propcache;protobuf;pydantic;pymicro-vad;yarl
constraints: "homeassistant/package_constraints.txt"
requirements-diff: "requirements_diff.txt"
requirements: "requirements_all.txtac"

1
.gitignore vendored
View File

@@ -79,6 +79,7 @@ pytest-*.txt
.pydevproject
.python-version
.tool-versions
# emacs auto backups
*~

View File

@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.6.6
rev: v0.7.0
hooks:
- id: ruff
args:
@@ -83,10 +83,10 @@ repos:
pass_filenames: false
language: script
types: [text]
files: ^(homeassistant/.+/(icons|manifest|strings)\.json|homeassistant/brands/.*\.json|homeassistant/.+/services\.yaml|script/hassfest/(?!metadata|mypy_config).+\.py|requirements\.txt)$
files: ^(homeassistant/.+/(icons|manifest|strings)\.json|homeassistant/brands/.*\.json|homeassistant/.+/services\.yaml|script/hassfest/(?!metadata|mypy_config).+\.py|requirements.+\.txt)$
- id: hassfest-metadata
name: hassfest-metadata
entry: script/run-in-env.sh python3 -m script.hassfest -p metadata
entry: script/run-in-env.sh python3 -m script.hassfest -p metadata,docker
pass_filenames: false
language: script
types: [text]

View File

@@ -214,6 +214,7 @@ homeassistant.components.google_assistant_sdk.*
homeassistant.components.google_cloud.*
homeassistant.components.google_photos.*
homeassistant.components.google_sheets.*
homeassistant.components.govee_ble.*
homeassistant.components.gpsd.*
homeassistant.components.greeneye_monitor.*
homeassistant.components.group.*
@@ -301,7 +302,6 @@ homeassistant.components.lookin.*
homeassistant.components.luftdaten.*
homeassistant.components.madvr.*
homeassistant.components.manual.*
homeassistant.components.map.*
homeassistant.components.mastodon.*
homeassistant.components.matrix.*
homeassistant.components.matter.*
@@ -345,6 +345,7 @@ homeassistant.components.oncue.*
homeassistant.components.onewire.*
homeassistant.components.onkyo.*
homeassistant.components.open_meteo.*
homeassistant.components.openai_conversation.*
homeassistant.components.openexchangerates.*
homeassistant.components.opensky.*
homeassistant.components.openuv.*
@@ -352,6 +353,7 @@ homeassistant.components.oralb.*
homeassistant.components.otbr.*
homeassistant.components.overkiz.*
homeassistant.components.p1_monitor.*
homeassistant.components.panel_custom.*
homeassistant.components.peco.*
homeassistant.components.persistent_notification.*
homeassistant.components.pi_hole.*
@@ -369,6 +371,7 @@ homeassistant.components.pvoutput.*
homeassistant.components.qnap_qsw.*
homeassistant.components.rabbitair.*
homeassistant.components.radarr.*
homeassistant.components.radio_browser.*
homeassistant.components.rainforest_raven.*
homeassistant.components.rainmachine.*
homeassistant.components.raspberry_pi.*
@@ -406,6 +409,7 @@ homeassistant.components.sensor.*
homeassistant.components.sensoterra.*
homeassistant.components.senz.*
homeassistant.components.sfr_box.*
homeassistant.components.shell_command.*
homeassistant.components.shelly.*
homeassistant.components.shopping_list.*
homeassistant.components.simplepush.*
@@ -420,6 +424,7 @@ homeassistant.components.snooz.*
homeassistant.components.solarlog.*
homeassistant.components.sonarr.*
homeassistant.components.speedtestdotnet.*
homeassistant.components.spotify.*
homeassistant.components.sql.*
homeassistant.components.squeezebox.*
homeassistant.components.ssdp.*
@@ -434,6 +439,7 @@ homeassistant.components.suez_water.*
homeassistant.components.sun.*
homeassistant.components.surepetcare.*
homeassistant.components.switch.*
homeassistant.components.switch_as_x.*
homeassistant.components.switchbee.*
homeassistant.components.switchbot_cloud.*
homeassistant.components.switcher_kis.*
@@ -502,6 +508,7 @@ homeassistant.components.whois.*
homeassistant.components.withings.*
homeassistant.components.wiz.*
homeassistant.components.wled.*
homeassistant.components.workday.*
homeassistant.components.worldclock.*
homeassistant.components.xiaomi_ble.*
homeassistant.components.yale_smart_alarm.*

View File

@@ -544,6 +544,8 @@ build.json @home-assistant/supervisor
/tests/components/github/ @timmo001 @ludeeus
/homeassistant/components/glances/ @engrbm87
/tests/components/glances/ @engrbm87
/homeassistant/components/go2rtc/ @home-assistant/core
/tests/components/go2rtc/ @home-assistant/core
/homeassistant/components/goalzero/ @tkdrob
/tests/components/goalzero/ @tkdrob
/homeassistant/components/gogogate2/ @vangorra
@@ -1088,8 +1090,6 @@ build.json @home-assistant/supervisor
/tests/components/p1_monitor/ @klaasnicolaas
/homeassistant/components/panel_custom/ @home-assistant/frontend
/tests/components/panel_custom/ @home-assistant/frontend
/homeassistant/components/panel_iframe/ @home-assistant/frontend
/tests/components/panel_iframe/ @home-assistant/frontend
/homeassistant/components/peco/ @IceBotYT
/tests/components/peco/ @IceBotYT
/homeassistant/components/pegel_online/ @mib1185
@@ -1382,15 +1382,13 @@ build.json @home-assistant/supervisor
/tests/components/spaceapi/ @fabaff
/homeassistant/components/speedtestdotnet/ @rohankapoorcom @engrbm87
/tests/components/speedtestdotnet/ @rohankapoorcom @engrbm87
/homeassistant/components/spider/ @peternijssen
/tests/components/spider/ @peternijssen
/homeassistant/components/splunk/ @Bre77
/homeassistant/components/spotify/ @frenck @joostlek
/tests/components/spotify/ @frenck @joostlek
/homeassistant/components/sql/ @gjohansson-ST @dougiteixeira
/tests/components/sql/ @gjohansson-ST @dougiteixeira
/homeassistant/components/squeezebox/ @rajlaud
/tests/components/squeezebox/ @rajlaud
/homeassistant/components/squeezebox/ @rajlaud @pssc @peteS-UK
/tests/components/squeezebox/ @rajlaud @pssc @peteS-UK
/homeassistant/components/srp_energy/ @briglx
/tests/components/srp_energy/ @briglx
/homeassistant/components/starline/ @anonym-tsk

View File

@@ -12,7 +12,7 @@ ENV \
ARG QEMU_CPU
# Install uv
RUN pip3 install uv==0.4.15
RUN pip3 install uv==0.4.22
WORKDIR /usr/src
@@ -44,4 +44,19 @@ RUN \
# Home Assistant S6-Overlay
COPY rootfs /
# Needs to be redefined inside the FROM statement to be set for RUN commands
ARG BUILD_ARCH
# Get go2rtc binary
RUN \
case "${BUILD_ARCH}" in \
"aarch64") go2rtc_suffix='arm64' ;; \
"armhf") go2rtc_suffix='armv6' ;; \
"armv7") go2rtc_suffix='arm' ;; \
*) go2rtc_suffix=${BUILD_ARCH} ;; \
esac \
&& curl -L https://github.com/AlexxIT/go2rtc/releases/download/v1.9.4/go2rtc_linux_${go2rtc_suffix} --output /bin/go2rtc \
&& chmod +x /bin/go2rtc \
# Verify go2rtc can be executed
&& go2rtc --version
WORKDIR /config

View File

@@ -7,8 +7,6 @@ Check out `home-assistant.io <https://home-assistant.io>`__ for `a
demo <https://demo.home-assistant.io>`__, `installation instructions <https://home-assistant.io/getting-started/>`__,
`tutorials <https://home-assistant.io/getting-started/automation/>`__ and `documentation <https://home-assistant.io/docs/>`__.
This is a project of the `Open Home Foundation <https://www.openhomefoundation.org/>`__.
|screenshot-states|
Featured integrations
@@ -22,9 +20,14 @@ components <https://developers.home-assistant.io/docs/creating_component_index/>
If you run into issues while using Home Assistant or during development
of a component, check the `Home Assistant help section <https://home-assistant.io/help/>`__ of our website for further help and information.
|ohf-logo|
.. |Chat Status| image:: https://img.shields.io/discord/330944238910963714.svg
:target: https://www.home-assistant.io/join-chat/
.. |screenshot-states| image:: https://raw.githubusercontent.com/home-assistant/core/dev/.github/assets/screenshot-states.png
:target: https://demo.home-assistant.io
.. |screenshot-integrations| image:: https://raw.githubusercontent.com/home-assistant/core/dev/.github/assets/screenshot-integrations.png
:target: https://home-assistant.io/integrations/
.. |ohf-logo| image:: https://www.openhomefoundation.org/badges/home-assistant.png
:alt: Home Assistant - A project from the Open Home Foundation
:target: https://www.openhomefoundation.org/

View File

@@ -12,7 +12,6 @@ from typing import Any, cast
import jwt
from homeassistant import data_entry_flow
from homeassistant.core import (
CALLBACK_TYPE,
HassJob,
@@ -20,13 +19,14 @@ from homeassistant.core import (
HomeAssistant,
callback,
)
from homeassistant.data_entry_flow import FlowHandler, FlowManager, FlowResultType
from homeassistant.helpers.event import async_track_point_in_utc_time
from homeassistant.util import dt as dt_util
from . import auth_store, jwt_wrapper, models
from .const import ACCESS_TOKEN_EXPIRATION, GROUP_ID_ADMIN, REFRESH_TOKEN_EXPIRATION
from .mfa_modules import MultiFactorAuthModule, auth_mfa_module_from_config
from .models import AuthFlowResult
from .models import AuthFlowContext, AuthFlowResult
from .providers import AuthProvider, LoginFlow, auth_provider_from_config
from .providers.homeassistant import HassAuthProvider
@@ -98,7 +98,7 @@ async def auth_manager_from_config(
class AuthManagerFlowManager(
data_entry_flow.FlowManager[AuthFlowResult, tuple[str, str]]
FlowManager[AuthFlowContext, AuthFlowResult, tuple[str, str]]
):
"""Manage authentication flows."""
@@ -113,7 +113,7 @@ class AuthManagerFlowManager(
self,
handler_key: tuple[str, str],
*,
context: dict[str, Any] | None = None,
context: AuthFlowContext | None = None,
data: dict[str, Any] | None = None,
) -> LoginFlow:
"""Create a login flow."""
@@ -124,7 +124,7 @@ class AuthManagerFlowManager(
async def async_finish_flow(
self,
flow: data_entry_flow.FlowHandler[AuthFlowResult, tuple[str, str]],
flow: FlowHandler[AuthFlowContext, AuthFlowResult, tuple[str, str]],
result: AuthFlowResult,
) -> AuthFlowResult:
"""Return a user as result of login flow.
@@ -134,7 +134,7 @@ class AuthManagerFlowManager(
"""
flow = cast(LoginFlow, flow)
if result["type"] != data_entry_flow.FlowResultType.CREATE_ENTRY:
if result["type"] != FlowResultType.CREATE_ENTRY:
return result
# we got final result

View File

@@ -3,7 +3,7 @@
from __future__ import annotations
from datetime import datetime, timedelta
from functools import cached_property
from ipaddress import IPv4Address, IPv6Address
import secrets
from typing import Any, NamedTuple
import uuid
@@ -11,9 +11,10 @@ import uuid
import attr
from attr import Attribute
from attr.setters import validate
from propcache import cached_property
from homeassistant.const import __version__
from homeassistant.data_entry_flow import FlowResult
from homeassistant.data_entry_flow import FlowContext, FlowResult
from homeassistant.util import dt as dt_util
from . import permissions as perm_mdl
@@ -23,7 +24,16 @@ TOKEN_TYPE_NORMAL = "normal"
TOKEN_TYPE_SYSTEM = "system"
TOKEN_TYPE_LONG_LIVED_ACCESS_TOKEN = "long_lived_access_token"
AuthFlowResult = FlowResult[tuple[str, str]]
class AuthFlowContext(FlowContext, total=False):
"""Typed context dict for auth flow."""
credential_only: bool
ip_address: IPv4Address | IPv6Address
redirect_uri: str
AuthFlowResult = FlowResult[AuthFlowContext, tuple[str, str]]
@attr.s(slots=True)

View File

@@ -10,9 +10,10 @@ from typing import Any
import voluptuous as vol
from voluptuous.humanize import humanize_error
from homeassistant import data_entry_flow, requirements
from homeassistant import requirements
from homeassistant.const import CONF_ID, CONF_NAME, CONF_TYPE
from homeassistant.core import HomeAssistant, callback
from homeassistant.data_entry_flow import FlowHandler
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.importlib import async_import_module
from homeassistant.util import dt as dt_util
@@ -21,7 +22,14 @@ from homeassistant.util.hass_dict import HassKey
from ..auth_store import AuthStore
from ..const import MFA_SESSION_EXPIRATION
from ..models import AuthFlowResult, Credentials, RefreshToken, User, UserMeta
from ..models import (
AuthFlowContext,
AuthFlowResult,
Credentials,
RefreshToken,
User,
UserMeta,
)
_LOGGER = logging.getLogger(__name__)
DATA_REQS: HassKey[set[str]] = HassKey("auth_prov_reqs_processed")
@@ -97,7 +105,7 @@ class AuthProvider:
# Implement by extending class
async def async_login_flow(self, context: dict[str, Any] | None) -> LoginFlow:
async def async_login_flow(self, context: AuthFlowContext | None) -> LoginFlow:
"""Return the data flow for logging in with auth provider.
Auth provider should extend LoginFlow and return an instance.
@@ -184,7 +192,7 @@ async def load_auth_provider_module(
return module
class LoginFlow(data_entry_flow.FlowHandler[AuthFlowResult, tuple[str, str]]):
class LoginFlow(FlowHandler[AuthFlowContext, AuthFlowResult, tuple[str, str]]):
"""Handler for the login flow."""
_flow_result = AuthFlowResult

View File

@@ -13,7 +13,7 @@ import voluptuous as vol
from homeassistant.const import CONF_COMMAND
from homeassistant.exceptions import HomeAssistantError
from ..models import AuthFlowResult, Credentials, UserMeta
from ..models import AuthFlowContext, AuthFlowResult, Credentials, UserMeta
from . import AUTH_PROVIDER_SCHEMA, AUTH_PROVIDERS, AuthProvider, LoginFlow
CONF_ARGS = "args"
@@ -59,7 +59,7 @@ class CommandLineAuthProvider(AuthProvider):
super().__init__(*args, **kwargs)
self._user_meta: dict[str, dict[str, Any]] = {}
async def async_login_flow(self, context: dict[str, Any] | None) -> LoginFlow:
async def async_login_flow(self, context: AuthFlowContext | None) -> LoginFlow:
"""Return a flow to login."""
return CommandLineLoginFlow(self)

View File

@@ -17,7 +17,7 @@ from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import issue_registry as ir
from homeassistant.helpers.storage import Store
from ..models import AuthFlowResult, Credentials, UserMeta
from ..models import AuthFlowContext, AuthFlowResult, Credentials, UserMeta
from . import AUTH_PROVIDER_SCHEMA, AUTH_PROVIDERS, AuthProvider, LoginFlow
STORAGE_VERSION = 1
@@ -305,7 +305,7 @@ class HassAuthProvider(AuthProvider):
await data.async_load()
self.data = data
async def async_login_flow(self, context: dict[str, Any] | None) -> LoginFlow:
async def async_login_flow(self, context: AuthFlowContext | None) -> LoginFlow:
"""Return a flow to login."""
return HassLoginFlow(self)

View File

@@ -4,14 +4,14 @@ from __future__ import annotations
from collections.abc import Mapping
import hmac
from typing import Any, cast
from typing import cast
import voluptuous as vol
from homeassistant.core import callback
from homeassistant.exceptions import HomeAssistantError
from ..models import AuthFlowResult, Credentials, UserMeta
from ..models import AuthFlowContext, AuthFlowResult, Credentials, UserMeta
from . import AUTH_PROVIDER_SCHEMA, AUTH_PROVIDERS, AuthProvider, LoginFlow
USER_SCHEMA = vol.Schema(
@@ -36,7 +36,7 @@ class InvalidAuthError(HomeAssistantError):
class ExampleAuthProvider(AuthProvider):
"""Example auth provider based on hardcoded usernames and passwords."""
async def async_login_flow(self, context: dict[str, Any] | None) -> LoginFlow:
async def async_login_flow(self, context: AuthFlowContext | None) -> LoginFlow:
"""Return a flow to login."""
return ExampleLoginFlow(self)

View File

@@ -25,7 +25,13 @@ import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.network import is_cloud_connection
from .. import InvalidAuthError
from ..models import AuthFlowResult, Credentials, RefreshToken, UserMeta
from ..models import (
AuthFlowContext,
AuthFlowResult,
Credentials,
RefreshToken,
UserMeta,
)
from . import AUTH_PROVIDER_SCHEMA, AUTH_PROVIDERS, AuthProvider, LoginFlow
type IPAddress = IPv4Address | IPv6Address
@@ -98,7 +104,7 @@ class TrustedNetworksAuthProvider(AuthProvider):
"""Trusted Networks auth provider does not support MFA."""
return False
async def async_login_flow(self, context: dict[str, Any] | None) -> LoginFlow:
async def async_login_flow(self, context: AuthFlowContext | None) -> LoginFlow:
"""Return a flow to login."""
assert context is not None
ip_addr = cast(IPAddress, context.get("ip_address"))

View File

@@ -9,6 +9,7 @@ import it.
from __future__ import annotations
# pylint: disable-next=hass-deprecated-import
from functools import cached_property as _cached_property, partial
from homeassistant.helpers.deprecation import (

View File

@@ -5,7 +5,6 @@
"google_assistant",
"google_assistant_sdk",
"google_cloud",
"google_domains",
"google_generative_ai_conversation",
"google_mail",
"google_maps",

View File

@@ -102,15 +102,7 @@ class AbodeFlowHandler(ConfigFlow, domain=DOMAIN):
existing_entry = await self.async_set_unique_id(self._username)
if existing_entry:
self.hass.config_entries.async_update_entry(
existing_entry, data=config_data
)
# Reload the Abode config entry otherwise devices will remain unavailable
self.hass.async_create_task(
self.hass.config_entries.async_reload(existing_entry.entry_id)
)
return self.async_abort(reason="reauth_successful")
return self.async_update_reload_and_abort(existing_entry, data=config_data)
return self.async_create_entry(
title=cast(str, self._username), data=config_data

View File

@@ -2,13 +2,11 @@
from __future__ import annotations
from dataclasses import dataclass
import logging
from accuweather import AccuWeather
from homeassistant.components.sensor import DOMAIN as SENSOR_PLATFORM
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_API_KEY, CONF_NAME, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
@@ -16,7 +14,9 @@ from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .const import DOMAIN, UPDATE_INTERVAL_DAILY_FORECAST, UPDATE_INTERVAL_OBSERVATION
from .coordinator import (
AccuWeatherConfigEntry,
AccuWeatherDailyForecastDataUpdateCoordinator,
AccuWeatherData,
AccuWeatherObservationDataUpdateCoordinator,
)
@@ -25,17 +25,6 @@ _LOGGER = logging.getLogger(__name__)
PLATFORMS = [Platform.SENSOR, Platform.WEATHER]
@dataclass
class AccuWeatherData:
"""Data for AccuWeather integration."""
coordinator_observation: AccuWeatherObservationDataUpdateCoordinator
coordinator_daily_forecast: AccuWeatherDailyForecastDataUpdateCoordinator
type AccuWeatherConfigEntry = ConfigEntry[AccuWeatherData]
async def async_setup_entry(hass: HomeAssistant, entry: AccuWeatherConfigEntry) -> bool:
"""Set up AccuWeather as config entry."""
api_key: str = entry.data[CONF_API_KEY]
@@ -50,6 +39,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AccuWeatherConfigEntry)
coordinator_observation = AccuWeatherObservationDataUpdateCoordinator(
hass,
entry,
accuweather,
name,
"observation",
@@ -58,6 +48,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AccuWeatherConfigEntry)
coordinator_daily_forecast = AccuWeatherDailyForecastDataUpdateCoordinator(
hass,
entry,
accuweather,
name,
"daily forecast",

View File

@@ -1,6 +1,9 @@
"""The AccuWeather coordinator."""
from __future__ import annotations
from asyncio import timeout
from dataclasses import dataclass
from datetime import timedelta
import logging
from typing import TYPE_CHECKING, Any
@@ -8,6 +11,7 @@ from typing import TYPE_CHECKING, Any
from accuweather import AccuWeather, ApiError, InvalidApiKeyError, RequestsExceededError
from aiohttp.client_exceptions import ClientConnectorError
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
from homeassistant.helpers.update_coordinator import (
@@ -23,6 +27,17 @@ EXCEPTIONS = (ApiError, ClientConnectorError, InvalidApiKeyError, RequestsExceed
_LOGGER = logging.getLogger(__name__)
@dataclass
class AccuWeatherData:
"""Data for AccuWeather integration."""
coordinator_observation: AccuWeatherObservationDataUpdateCoordinator
coordinator_daily_forecast: AccuWeatherDailyForecastDataUpdateCoordinator
type AccuWeatherConfigEntry = ConfigEntry[AccuWeatherData]
class AccuWeatherObservationDataUpdateCoordinator(
DataUpdateCoordinator[dict[str, Any]]
):
@@ -31,6 +46,7 @@ class AccuWeatherObservationDataUpdateCoordinator(
def __init__(
self,
hass: HomeAssistant,
config_entry: AccuWeatherConfigEntry,
accuweather: AccuWeather,
name: str,
coordinator_type: str,
@@ -48,6 +64,7 @@ class AccuWeatherObservationDataUpdateCoordinator(
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name=f"{name} ({coordinator_type})",
update_interval=update_interval,
)
@@ -73,6 +90,7 @@ class AccuWeatherDailyForecastDataUpdateCoordinator(
def __init__(
self,
hass: HomeAssistant,
config_entry: AccuWeatherConfigEntry,
accuweather: AccuWeather,
name: str,
coordinator_type: str,
@@ -90,6 +108,7 @@ class AccuWeatherDailyForecastDataUpdateCoordinator(
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name=f"{name} ({coordinator_type})",
update_interval=update_interval,
)

View File

@@ -8,7 +8,7 @@ from homeassistant.components.diagnostics import async_redact_data
from homeassistant.const import CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE
from homeassistant.core import HomeAssistant
from . import AccuWeatherConfigEntry, AccuWeatherData
from .coordinator import AccuWeatherConfigEntry, AccuWeatherData
TO_REDACT = {CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE}

View File

@@ -28,7 +28,6 @@ from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import AccuWeatherConfigEntry
from .const import (
API_METRIC,
ATTR_CATEGORY,
@@ -41,6 +40,7 @@ from .const import (
MAX_FORECAST_DAYS,
)
from .coordinator import (
AccuWeatherConfigEntry,
AccuWeatherDailyForecastDataUpdateCoordinator,
AccuWeatherObservationDataUpdateCoordinator,
)

View File

@@ -9,8 +9,8 @@ from accuweather.const import ENDPOINT
from homeassistant.components import system_health
from homeassistant.core import HomeAssistant, callback
from . import AccuWeatherConfigEntry
from .const import DOMAIN
from .coordinator import AccuWeatherConfigEntry
@callback

View File

@@ -33,7 +33,6 @@ from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.util.dt import utc_from_timestamp
from . import AccuWeatherConfigEntry, AccuWeatherData
from .const import (
API_METRIC,
ATTR_DIRECTION,
@@ -43,7 +42,9 @@ from .const import (
CONDITION_MAP,
)
from .coordinator import (
AccuWeatherConfigEntry,
AccuWeatherDailyForecastDataUpdateCoordinator,
AccuWeatherData,
AccuWeatherObservationDataUpdateCoordinator,
)

View File

@@ -1,7 +1,8 @@
"""Airgradient Update platform."""
from datetime import timedelta
from functools import cached_property
from propcache import cached_property
from homeassistant.components.update import UpdateDeviceClass, UpdateEntity
from homeassistant.core import HomeAssistant

View File

@@ -16,7 +16,12 @@ from pyairvisual.cloud_api import (
from pyairvisual.errors import AirVisualError
import voluptuous as vol
from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult
from homeassistant.config_entries import (
SOURCE_REAUTH,
ConfigEntry,
ConfigFlow,
ConfigFlowResult,
)
from homeassistant.const import (
CONF_API_KEY,
CONF_COUNTRY,
@@ -140,12 +145,11 @@ class AirVisualFlowHandler(ConfigFlow, domain=DOMAIN):
valid_keys.add(user_input[CONF_API_KEY])
if existing_entry := await self.async_set_unique_id(self._geo_id):
self.hass.config_entries.async_update_entry(existing_entry, data=user_input)
self.hass.async_create_task(
self.hass.config_entries.async_reload(existing_entry.entry_id)
if self.source == SOURCE_REAUTH:
return self.async_update_reload_and_abort(
self._get_reauth_entry(),
data_updates={CONF_API_KEY: user_input[CONF_API_KEY]},
)
return self.async_abort(reason="reauth_successful")
return self.async_create_entry(
title=f"Cloud API ({self._geo_id})",

View File

@@ -32,7 +32,7 @@
}
},
"error": {
"general_error": "[%key:common::config_flow::error::unknown%]",
"unknown": "[%key:common::config_flow::error::unknown%]",
"invalid_api_key": "[%key:common::config_flow::error::invalid_api_key%]",
"location_not_found": "Location not found",
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]"

View File

@@ -14,7 +14,7 @@ from pyairvisual.node import (
)
import voluptuous as vol
from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD
from .const import DOMAIN, LOGGER
@@ -76,9 +76,7 @@ class AirVisualProFlowHandler(ConfigFlow, domain=DOMAIN):
VERSION = 1
def __init__(self) -> None:
"""Initialize."""
self._reauth_entry: ConfigEntry | None = None
_reauth_entry_data: Mapping[str, Any]
async def async_step_import(self, import_data: dict[str, Any]) -> ConfigFlowResult:
"""Import a config entry from `airvisual` integration (see #83882)."""
@@ -88,9 +86,7 @@ class AirVisualProFlowHandler(ConfigFlow, domain=DOMAIN):
self, entry_data: Mapping[str, Any]
) -> ConfigFlowResult:
"""Handle configuration by re-auth."""
self._reauth_entry = self.hass.config_entries.async_get_entry(
self.context["entry_id"]
)
self._reauth_entry_data = entry_data
return await self.async_step_reauth_confirm()
async def async_step_reauth_confirm(
@@ -102,10 +98,8 @@ class AirVisualProFlowHandler(ConfigFlow, domain=DOMAIN):
step_id="reauth_confirm", data_schema=STEP_REAUTH_SCHEMA
)
assert self._reauth_entry
validation_result = await async_validate_credentials(
self._reauth_entry.data[CONF_IP_ADDRESS], user_input[CONF_PASSWORD]
self._reauth_entry_data[CONF_IP_ADDRESS], user_input[CONF_PASSWORD]
)
if validation_result.errors:
@@ -115,13 +109,9 @@ class AirVisualProFlowHandler(ConfigFlow, domain=DOMAIN):
errors=validation_result.errors,
)
self.hass.config_entries.async_update_entry(
self._reauth_entry, data=self._reauth_entry.data | user_input
return self.async_update_reload_and_abort(
self._get_reauth_entry(), data_updates=user_input
)
self.hass.async_create_task(
self.hass.config_entries.async_reload(self._reauth_entry.entry_id)
)
return self.async_abort(reason="reauth_successful")
async def async_step_user(
self, user_input: dict[str, str] | None = None

View File

@@ -275,12 +275,18 @@ class AirzoneClimate(AirzoneZoneEntity, ClimateEntity):
self._attr_min_temp = self.get_airzone_value(AZD_TEMP_MIN)
if self.supported_features & ClimateEntityFeature.FAN_MODE:
self._attr_fan_mode = self._speeds.get(self.get_airzone_value(AZD_SPEED))
if self.supported_features & ClimateEntityFeature.TARGET_TEMPERATURE_RANGE:
if (
self.supported_features & ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
and self._attr_hvac_mode == HVACMode.HEAT_COOL
):
self._attr_target_temperature_high = self.get_airzone_value(
AZD_COOL_TEMP_SET
)
self._attr_target_temperature_low = self.get_airzone_value(
AZD_HEAT_TEMP_SET
)
self._attr_target_temperature = None
else:
self._attr_target_temperature_high = None
self._attr_target_temperature_low = None
self._attr_target_temperature = self.get_airzone_value(AZD_TEMP_SET)

View File

@@ -224,14 +224,20 @@ class AirzoneClimate(AirzoneEntity, ClimateEntity):
self._attr_hvac_mode = HVACMode.OFF
self._attr_max_temp = self.get_airzone_value(AZD_TEMP_SET_MAX)
self._attr_min_temp = self.get_airzone_value(AZD_TEMP_SET_MIN)
if self.supported_features & ClimateEntityFeature.TARGET_TEMPERATURE_RANGE:
if (
self.supported_features & ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
and self._attr_hvac_mode == HVACMode.HEAT_COOL
):
self._attr_target_temperature_high = self.get_airzone_value(
AZD_TEMP_SET_COOL_AIR
)
self._attr_target_temperature_low = self.get_airzone_value(
AZD_TEMP_SET_HOT_AIR
)
self._attr_target_temperature = None
else:
self._attr_target_temperature_high = None
self._attr_target_temperature_low = None
self._attr_target_temperature = self.get_airzone_value(AZD_TEMP_SET)

View File

@@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/airzone_cloud",
"iot_class": "cloud_push",
"loggers": ["aioairzone_cloud"],
"requirements": ["aioairzone-cloud==0.6.6"]
"requirements": ["aioairzone-cloud==0.6.7"]
}

View File

@@ -3,10 +3,11 @@
from __future__ import annotations
from datetime import timedelta
from functools import cached_property, partial
from functools import partial
import logging
from typing import Any, Final, final
from propcache import cached_property
import voluptuous as vol
from homeassistant.config_entries import ConfigEntry

View File

@@ -157,7 +157,7 @@ class AlarmDecoderFlowHandler(ConfigFlow, domain=DOMAIN):
class AlarmDecoderOptionsFlowHandler(OptionsFlow):
"""Handle AlarmDecoder options."""
selected_zone: str | None = None
selected_zone: str
def __init__(self, config_entry: ConfigEntry) -> None:
"""Initialize AlarmDecoder options flow."""

View File

@@ -10,12 +10,15 @@ from homeassistant.core import Event, HassJob, HomeAssistant, callback
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.event import async_call_later, async_track_time_interval
from homeassistant.helpers.typing import ConfigType
from homeassistant.util.hass_dict import HassKey
from .analytics import Analytics
from .const import ATTR_ONBOARDED, ATTR_PREFERENCES, DOMAIN, INTERVAL, PREFERENCE_SCHEMA
CONFIG_SCHEMA = cv.empty_config_schema(DOMAIN)
DATA_COMPONENT: HassKey[Analytics] = HassKey(DOMAIN)
async def async_setup(hass: HomeAssistant, _: ConfigType) -> bool:
"""Set up the analytics integration."""
@@ -52,7 +55,7 @@ async def async_setup(hass: HomeAssistant, _: ConfigType) -> bool:
websocket_api.async_register_command(hass, websocket_analytics)
websocket_api.async_register_command(hass, websocket_analytics_preferences)
hass.data[DOMAIN] = analytics
hass.data[DATA_COMPONENT] = analytics
return True
@@ -65,7 +68,7 @@ def websocket_analytics(
msg: dict[str, Any],
) -> None:
"""Return analytics preferences."""
analytics: Analytics = hass.data[DOMAIN]
analytics = hass.data[DATA_COMPONENT]
connection.send_result(
msg["id"],
{ATTR_PREFERENCES: analytics.preferences, ATTR_ONBOARDED: analytics.onboarded},
@@ -87,7 +90,7 @@ async def websocket_analytics_preferences(
) -> None:
"""Update analytics preferences."""
preferences = msg[ATTR_PREFERENCES]
analytics: Analytics = hass.data[DOMAIN]
analytics = hass.data[DATA_COMPONENT]
await analytics.save_preferences(preferences)
await analytics.send_analytics()

View File

@@ -31,6 +31,8 @@ if TYPE_CHECKING:
class AnalyticsData:
"""Analytics data class."""
active_installations: int
reports_integrations: int
core_integrations: dict[str, int]
custom_integrations: dict[str, int]
@@ -76,7 +78,12 @@ class HomeassistantAnalyticsDataUpdateCoordinator(DataUpdateCoordinator[Analytic
integration: get_custom_integration_value(custom_data, integration)
for integration in self._tracked_custom_integrations
}
return AnalyticsData(core_integrations, custom_integrations)
return AnalyticsData(
data.active_installations,
data.reports_integrations,
core_integrations,
custom_integrations,
)
def get_custom_integration_value(

View File

@@ -6,6 +6,12 @@
},
"custom_integrations": {
"default": "mdi:puzzle-edit"
},
"total_active_installations": {
"default": "mdi:puzzle"
},
"total_reports_integrations": {
"default": "mdi:puzzle"
}
}
}

View File

@@ -7,6 +7,6 @@
"integration_type": "service",
"iot_class": "cloud_polling",
"loggers": ["python_homeassistant_analytics"],
"requirements": ["python-homeassistant-analytics==0.7.0"],
"requirements": ["python-homeassistant-analytics==0.8.0"],
"single_config_entry": true
}

View File

@@ -57,6 +57,26 @@ def get_custom_integration_entity_description(
)
GENERAL_SENSORS = [
AnalyticsSensorEntityDescription(
key="total_active_installations",
translation_key="total_active_installations",
entity_registry_enabled_default=False,
state_class=SensorStateClass.TOTAL,
native_unit_of_measurement="active installations",
value_fn=lambda data: data.active_installations,
),
AnalyticsSensorEntityDescription(
key="total_reports_integrations",
translation_key="total_reports_integrations",
entity_registry_enabled_default=False,
state_class=SensorStateClass.TOTAL,
native_unit_of_measurement="active installations",
value_fn=lambda data: data.reports_integrations,
),
]
async def async_setup_entry(
hass: HomeAssistant,
entry: AnalyticsInsightsConfigEntry,
@@ -85,6 +105,12 @@ async def async_setup_entry(
)
for integration_domain in coordinator.data.custom_integrations
)
entities.extend(
HomeassistantAnalyticsSensor(coordinator, entity_description)
for entity_description in GENERAL_SENSORS
)
async_add_entities(entities)

View File

@@ -44,6 +44,12 @@
"sensor": {
"custom_integrations": {
"name": "{custom_integration_domain} (custom)"
},
"total_active_installations": {
"name": "Total active installations"
},
"total_reports_integrations": {
"name": "Total reported integrations"
}
}
}

View File

@@ -4,7 +4,6 @@ from __future__ import annotations
from pydroid_ipcam import PyDroidIPCam
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
CONF_HOST,
CONF_PASSWORD,
@@ -15,8 +14,7 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .const import DOMAIN
from .coordinator import AndroidIPCamDataUpdateCoordinator
from .coordinator import AndroidIPCamConfigEntry, AndroidIPCamDataUpdateCoordinator
PLATFORMS: list[Platform] = [
Platform.BINARY_SENSOR,
@@ -26,7 +24,9 @@ PLATFORMS: list[Platform] = [
]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(
hass: HomeAssistant, entry: AndroidIPCamConfigEntry
) -> bool:
"""Set up Android IP Webcam from a config entry."""
websession = async_get_clientsession(hass)
cam = PyDroidIPCam(
@@ -40,16 +40,15 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
coordinator = AndroidIPCamDataUpdateCoordinator(hass, entry, cam)
await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
entry.runtime_data = coordinator
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(
hass: HomeAssistant, entry: AndroidIPCamConfigEntry
) -> bool:
"""Unload a config entry."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)

View File

@@ -7,12 +7,11 @@ from homeassistant.components.binary_sensor import (
BinarySensorEntity,
BinarySensorEntityDescription,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN, MOTION_ACTIVE
from .coordinator import AndroidIPCamDataUpdateCoordinator
from .const import MOTION_ACTIVE
from .coordinator import AndroidIPCamConfigEntry, AndroidIPCamDataUpdateCoordinator
from .entity import AndroidIPCamBaseEntity
BINARY_SENSOR_DESCRIPTION = BinarySensorEntityDescription(
@@ -24,16 +23,12 @@ BINARY_SENSOR_DESCRIPTION = BinarySensorEntityDescription(
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AndroidIPCamConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the IP Webcam sensors from config entry."""
coordinator: AndroidIPCamDataUpdateCoordinator = hass.data[DOMAIN][
config_entry.entry_id
]
async_add_entities([IPWebcamBinarySensor(coordinator)])
async_add_entities([IPWebcamBinarySensor(config_entry.runtime_data)])
class IPWebcamBinarySensor(AndroidIPCamBaseEntity, BinarySensorEntity):

View File

@@ -3,7 +3,6 @@
from __future__ import annotations
from homeassistant.components.mjpeg import MjpegCamera, filter_urllib3_logging
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
CONF_HOST,
CONF_PASSWORD,
@@ -15,21 +14,17 @@ from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from .coordinator import AndroidIPCamDataUpdateCoordinator
from .coordinator import AndroidIPCamConfigEntry, AndroidIPCamDataUpdateCoordinator
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AndroidIPCamConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the IP Webcam camera from config entry."""
filter_urllib3_logging()
coordinator: AndroidIPCamDataUpdateCoordinator = hass.data[DOMAIN][
config_entry.entry_id
]
async_add_entities([IPWebcamCamera(coordinator)])
async_add_entities([IPWebcamCamera(config_entry.runtime_data)])
class IPWebcamCamera(MjpegCamera):

View File

@@ -15,19 +15,22 @@ from .const import DOMAIN
_LOGGER = logging.getLogger(__name__)
type AndroidIPCamConfigEntry = ConfigEntry[AndroidIPCamDataUpdateCoordinator]
class AndroidIPCamDataUpdateCoordinator(DataUpdateCoordinator[None]):
"""Coordinator class for the Android IP Webcam."""
config_entry: AndroidIPCamConfigEntry
def __init__(
self,
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AndroidIPCamConfigEntry,
cam: PyDroidIPCam,
) -> None:
"""Initialize the Android IP Webcam."""
self.hass = hass
self.config_entry: ConfigEntry = config_entry
self.cam = cam
super().__init__(
self.hass,

View File

@@ -13,14 +13,12 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from .const import DOMAIN
from .coordinator import AndroidIPCamDataUpdateCoordinator
from .coordinator import AndroidIPCamConfigEntry, AndroidIPCamDataUpdateCoordinator
from .entity import AndroidIPCamBaseEntity
@@ -120,19 +118,21 @@ SENSOR_TYPES: tuple[AndroidIPWebcamSensorEntityDescription, ...] = (
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AndroidIPCamConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the IP Webcam sensors from config entry."""
coordinator: AndroidIPCamDataUpdateCoordinator = hass.data[DOMAIN][
config_entry.entry_id
]
coordinator = config_entry.runtime_data
sensor_types = [
sensor
for sensor in SENSOR_TYPES
if sensor.key
in [*coordinator.cam.enabled_sensors, "audio_connections", "video_connections"]
in [
*coordinator.cam.enabled_sensors,
"audio_connections",
"video_connections",
]
]
async_add_entities(
IPWebcamSensor(coordinator, description) for description in sensor_types

View File

@@ -9,13 +9,11 @@ from typing import Any
from pydroid_ipcam import PyDroidIPCam
from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from .coordinator import AndroidIPCamDataUpdateCoordinator
from .coordinator import AndroidIPCamConfigEntry, AndroidIPCamDataUpdateCoordinator
from .entity import AndroidIPCamBaseEntity
@@ -113,14 +111,12 @@ SWITCH_TYPES: tuple[AndroidIPWebcamSwitchEntityDescription, ...] = (
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AndroidIPCamConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the IP Webcam switches from config entry."""
coordinator: AndroidIPCamDataUpdateCoordinator = hass.data[DOMAIN][
config_entry.entry_id
]
coordinator = config_entry.runtime_data
switch_types = [
switch
for switch in SWITCH_TYPES

View File

@@ -16,6 +16,7 @@ import voluptuous as vol
from homeassistant.components import zeroconf
from homeassistant.config_entries import (
SOURCE_REAUTH,
ConfigEntry,
ConfigFlow,
ConfigFlowResult,
@@ -58,13 +59,10 @@ class AndroidTVRemoteConfigFlow(ConfigFlow, domain=DOMAIN):
VERSION = 1
def __init__(self) -> None:
"""Initialize a new AndroidTVRemoteConfigFlow."""
self.api: AndroidTVRemote | None = None
self.reauth_entry: ConfigEntry | None = None
self.host: str | None = None
self.name: str | None = None
self.mac: str | None = None
api: AndroidTVRemote
host: str
name: str
mac: str
async def async_step_user(
self, user_input: dict[str, Any] | None = None
@@ -72,13 +70,11 @@ class AndroidTVRemoteConfigFlow(ConfigFlow, domain=DOMAIN):
"""Handle the initial step."""
errors: dict[str, str] = {}
if user_input is not None:
self.host = user_input["host"]
assert self.host
self.host = user_input[CONF_HOST]
api = create_api(self.hass, self.host, enable_ime=False)
try:
await api.async_generate_cert_if_missing()
self.name, self.mac = await api.async_get_name_and_mac()
assert self.mac
await self.async_set_unique_id(format_mac(self.mac))
self._abort_if_unique_id_configured(updates={CONF_HOST: self.host})
return await self._async_start_pair()
@@ -94,7 +90,6 @@ class AndroidTVRemoteConfigFlow(ConfigFlow, domain=DOMAIN):
async def _async_start_pair(self) -> ConfigFlowResult:
"""Start pairing with the Android TV. Navigate to the pair flow to enter the PIN shown on screen."""
assert self.host
self.api = create_api(self.hass, self.host, enable_ime=False)
await self.api.async_generate_cert_if_missing()
await self.api.async_start_pairing()
@@ -108,14 +103,12 @@ class AndroidTVRemoteConfigFlow(ConfigFlow, domain=DOMAIN):
if user_input is not None:
try:
pin = user_input["pin"]
assert self.api
await self.api.async_finish_pairing(pin)
if self.reauth_entry:
if self.source == SOURCE_REAUTH:
await self.hass.config_entries.async_reload(
self.reauth_entry.entry_id
self._get_reauth_entry().entry_id
)
return self.async_abort(reason="reauth_successful")
assert self.name
return self.async_create_entry(
title=self.name,
data={
@@ -155,10 +148,21 @@ class AndroidTVRemoteConfigFlow(ConfigFlow, domain=DOMAIN):
_LOGGER.debug("Android TV device found via zeroconf: %s", discovery_info)
self.host = discovery_info.host
self.name = discovery_info.name.removesuffix("._androidtvremote2._tcp.local.")
self.mac = discovery_info.properties.get("bt")
if not self.mac:
if not (mac := discovery_info.properties.get("bt")):
return self.async_abort(reason="cannot_connect")
await self.async_set_unique_id(format_mac(self.mac))
self.mac = mac
existing_config_entry = await self.async_set_unique_id(format_mac(mac))
# Sometimes, devices send an invalid zeroconf message with multiple addresses
# and one of them, which could end up being in discovery_info.host, is from a
# different device. If any of the discovery_info.ip_addresses matches the
# existing host, don't update the host.
if existing_config_entry and len(discovery_info.ip_addresses) > 1:
existing_host = existing_config_entry.data[CONF_HOST]
if existing_host != self.host:
if existing_host in [
str(ip_address) for ip_address in discovery_info.ip_addresses
]:
self.host = existing_host
self._abort_if_unique_id_configured(
updates={CONF_HOST: self.host, CONF_NAME: self.name}
)
@@ -189,9 +193,6 @@ class AndroidTVRemoteConfigFlow(ConfigFlow, domain=DOMAIN):
self.host = entry_data[CONF_HOST]
self.name = entry_data[CONF_NAME]
self.mac = entry_data[CONF_MAC]
self.reauth_entry = self.hass.config_entries.async_get_entry(
self.context["entry_id"]
)
return await self.async_step_reauth_confirm()
async def async_step_reauth_confirm(

View File

@@ -87,10 +87,13 @@ class AnthropicConfigFlow(ConfigFlow, domain=DOMAIN):
except anthropic.APIConnectionError:
errors["base"] = "cannot_connect"
except anthropic.APIStatusError as e:
if isinstance(e.body, dict):
errors["base"] = e.body.get("error", {}).get("type", "unknown")
else:
errors["base"] = "unknown"
errors["base"] = "unknown"
if (
isinstance(e.body, dict)
and (error := e.body.get("error"))
and error.get("type") == "authentication_error"
):
errors["base"] = "authentication_error"
except Exception:
_LOGGER.exception("Unexpected exception")
errors["base"] = "unknown"

View File

@@ -23,7 +23,7 @@ class AOSmithConfigFlow(ConfigFlow, domain=DOMAIN):
VERSION = 1
_reauth_email: str | None = None
_reauth_email: str
async def _async_validate_credentials(
self, email: str, password: str
@@ -85,21 +85,16 @@ class AOSmithConfigFlow(ConfigFlow, domain=DOMAIN):
) -> ConfigFlowResult:
"""Handle user's reauth credentials."""
errors: dict[str, str] = {}
if user_input is not None and self._reauth_email is not None:
email = self._reauth_email
if user_input:
password = user_input[CONF_PASSWORD]
entry_id = self.context["entry_id"]
if entry := self.hass.config_entries.async_get_entry(entry_id):
error = await self._async_validate_credentials(email, password)
if error is None:
self.hass.config_entries.async_update_entry(
entry,
data=entry.data | user_input,
)
await self.hass.config_entries.async_reload(entry.entry_id)
return self.async_abort(reason="reauth_successful")
errors["base"] = error
error = await self._async_validate_credentials(self._reauth_email, password)
if error is None:
return self.async_update_reload_and_abort(
self._get_reauth_entry(),
data_updates=user_input,
)
errors["base"] = error
return self.async_show_form(
step_id="reauth_confirm",

View File

@@ -5,5 +5,5 @@
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/aosmith",
"iot_class": "cloud_polling",
"requirements": ["py-aosmith==1.0.8"]
"requirements": ["py-aosmith==1.0.10"]
}

View File

@@ -3,7 +3,7 @@
from collections.abc import Callable
from dataclasses import dataclass
from py_aosmith.models import Device as AOSmithDevice, HotWaterStatus
from py_aosmith.models import Device as AOSmithDevice
from homeassistant.components.sensor import (
SensorDeviceClass,
@@ -11,7 +11,7 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.const import UnitOfEnergy
from homeassistant.const import PERCENTAGE, UnitOfEnergy
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@@ -31,20 +31,11 @@ STATUS_ENTITY_DESCRIPTIONS: tuple[AOSmithStatusSensorEntityDescription, ...] = (
AOSmithStatusSensorEntityDescription(
key="hot_water_availability",
translation_key="hot_water_availability",
device_class=SensorDeviceClass.ENUM,
options=["low", "medium", "high"],
value_fn=lambda device: HOT_WATER_STATUS_MAP.get(
device.status.hot_water_status
),
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda device: device.status.hot_water_status,
),
)
HOT_WATER_STATUS_MAP: dict[HotWaterStatus, str] = {
HotWaterStatus.LOW: "low",
HotWaterStatus.MEDIUM: "medium",
HotWaterStatus.HIGH: "high",
}
async def async_setup_entry(
hass: HomeAssistant,

View File

@@ -28,12 +28,7 @@
"entity": {
"sensor": {
"hot_water_availability": {
"name": "Hot water availability",
"state": {
"low": "Low",
"medium": "Medium",
"high": "High"
}
"name": "Hot water availability"
},
"energy_usage": {
"name": "Energy usage"

View File

@@ -38,7 +38,7 @@ CONFIG_SCHEMA = vol.Schema(
vol.Required(CONF_TOPIC): cv.string,
vol.Optional(CONF_FILTER, default={}): FILTER_SCHEMA,
vol.Optional(CONF_SECURITY_PROTOCOL, default="PLAINTEXT"): vol.In(
["PLAINTEXT", "SASL_SSL"]
["PLAINTEXT", "SSL", "SASL_SSL"]
),
vol.Optional(CONF_USERNAME): cv.string,
vol.Optional(CONF_PASSWORD): cv.string,
@@ -53,7 +53,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
"""Activate the Apache Kafka integration."""
conf = config[DOMAIN]
kafka = hass.data[DOMAIN] = KafkaManager(
kafka = KafkaManager(
hass,
conf[CONF_IP_ADDRESS],
conf[CONF_PORT],
@@ -94,7 +94,7 @@ class KafkaManager:
port: int,
topic: str,
entities_filter: EntityFilter,
security_protocol: Literal["PLAINTEXT", "SASL_SSL"],
security_protocol: Literal["PLAINTEXT", "SSL", "SASL_SSL"],
username: str | None,
password: str | None,
) -> None:

View File

@@ -8,7 +8,7 @@ from collections.abc import Awaitable, Callable, Mapping
from ipaddress import ip_address
import logging
from random import randrange
from typing import Any
from typing import Any, Self
from pyatv import exceptions, pair, scan
from pyatv.const import DeviceModel, PairingRequirement, Protocol
@@ -98,8 +98,11 @@ class AppleTVConfigFlow(ConfigFlow, domain=DOMAIN):
VERSION = 1
scan_filter: str | None = None
all_identifiers: set[str]
atv: BaseConfig | None = None
atv_identifiers: list[str] | None = None
_host: str # host in zeroconf discovery info, should not be accessed by other flows
host: str | None = None # set by _async_aggregate_discoveries, for other flows
protocol: Protocol | None = None
pairing: PairingHandler | None = None
protocols_to_pair: deque[Protocol] | None = None
@@ -157,7 +160,6 @@ class AppleTVConfigFlow(ConfigFlow, domain=DOMAIN):
"type": "Apple TV",
}
self.scan_filter = self.unique_id
self.context["identifier"] = self.unique_id
return await self.async_step_restore_device()
async def async_step_restore_device(
@@ -192,7 +194,7 @@ class AppleTVConfigFlow(ConfigFlow, domain=DOMAIN):
self.device_identifier, raise_on_progress=False
)
assert self.atv
self.context["all_identifiers"] = self.atv.all_identifiers
self.all_identifiers = set(self.atv.all_identifiers)
return await self.async_step_confirm()
return self.async_show_form(
@@ -207,7 +209,7 @@ class AppleTVConfigFlow(ConfigFlow, domain=DOMAIN):
"""Handle device found via zeroconf."""
if discovery_info.ip_address.version == 6:
return self.async_abort(reason="ipv6_not_supported")
host = discovery_info.host
self._host = host = discovery_info.host
service_type = discovery_info.type[:-1] # Remove leading .
name = discovery_info.name.replace(f".{service_type}.", "")
properties = discovery_info.properties
@@ -255,7 +257,7 @@ class AppleTVConfigFlow(ConfigFlow, domain=DOMAIN):
# as two separate flows.
#
# To solve this, all identifiers are stored as
# "all_identifiers" in the flow context. When a new service is discovered, the
# "all_identifiers" in the flow. When a new service is discovered, the
# code below will check these identifiers for all active flows and abort if a
# match is found. Before aborting, the original flow is updated with any
# potentially new identifiers. In the example above, when service C is
@@ -277,32 +279,32 @@ class AppleTVConfigFlow(ConfigFlow, domain=DOMAIN):
self._async_check_and_update_in_progress(host, unique_id)
# Host must only be set AFTER checking and updating in progress
# flows or we will have a race condition where no flows move forward.
self.context[CONF_ADDRESS] = host
self.host = host
@callback
def _async_check_and_update_in_progress(self, host: str, unique_id: str) -> None:
"""Check for in-progress flows and update them with identifiers if needed."""
for flow in self._async_in_progress(include_uninitialized=True):
context = flow["context"]
if (
context.get("source") != SOURCE_ZEROCONF
or context.get(CONF_ADDRESS) != host
):
continue
if (
"all_identifiers" in context
and unique_id not in context["all_identifiers"]
):
# Add potentially new identifiers from this device to the existing flow
context["all_identifiers"].append(unique_id)
if self.hass.config_entries.flow.async_has_matching_flow(self):
raise AbortFlow("already_in_progress")
def is_matching(self, other_flow: Self) -> bool:
"""Return True if other_flow is matching this flow."""
if (
other_flow.context.get("source") != SOURCE_ZEROCONF
or other_flow.host != self._host
):
return False
if self.unique_id is not None:
# Add potentially new identifiers from this device to the existing flow
other_flow.all_identifiers.add(self.unique_id)
return True
async def async_found_zeroconf_device(
self, user_input: dict[str, str] | None = None
) -> ConfigFlowResult:
"""Handle device found after Zeroconf discovery."""
assert self.atv
self.context["all_identifiers"] = self.atv.all_identifiers
self.all_identifiers = set(self.atv.all_identifiers)
# Also abort if an integration with this identifier already exists
await self.async_set_unique_id(self.device_identifier)
# but be sure to update the address if its changed so the scanner
@@ -310,7 +312,6 @@ class AppleTVConfigFlow(ConfigFlow, domain=DOMAIN):
self._abort_if_unique_id_configured(
updates={CONF_ADDRESS: str(self.atv.address)}
)
self.context["identifier"] = self.unique_id
return await self.async_step_confirm()
async def async_find_device_wrapper(
@@ -390,7 +391,7 @@ class AppleTVConfigFlow(ConfigFlow, domain=DOMAIN):
"""Handle user-confirmation of discovered node."""
assert self.atv
if user_input is not None:
expected_identifier_count = len(self.context["all_identifiers"])
expected_identifier_count = len(self.all_identifiers)
# If number of services found during device scan mismatch number of
# identifiers collected during Zeroconf discovery, then trigger a new scan
# with hopes of finding all services.

View File

@@ -36,6 +36,7 @@ from homeassistant.loader import (
async_get_integration,
)
from homeassistant.util import slugify
from homeassistant.util.hass_dict import HassKey
__all__ = ["ClientCredential", "AuthorizationServer", "async_import_client_credential"]
@@ -45,7 +46,7 @@ DOMAIN = "application_credentials"
STORAGE_KEY = DOMAIN
STORAGE_VERSION = 1
DATA_STORAGE = "storage"
DATA_COMPONENT: HassKey[ApplicationCredentialsStorageCollection] = HassKey(DOMAIN)
CONF_AUTH_DOMAIN = "auth_domain"
DEFAULT_IMPORT_NAME = "Import from configuration.yaml"
@@ -150,7 +151,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
id_manager,
)
await storage_collection.async_load()
hass.data[DOMAIN][DATA_STORAGE] = storage_collection
hass.data[DATA_COMPONENT] = storage_collection
collection.DictStorageCollectionWebsocket(
storage_collection, DOMAIN, DOMAIN, CREATE_FIELDS, UPDATE_FIELDS
@@ -175,7 +176,6 @@ async def async_import_client_credential(
"""Import an existing credential from configuration.yaml."""
if DOMAIN not in hass.data:
raise ValueError("Integration 'application_credentials' not setup")
storage_collection = hass.data[DOMAIN][DATA_STORAGE]
item = {
CONF_DOMAIN: domain,
CONF_CLIENT_ID: credential.client_id,
@@ -183,7 +183,7 @@ async def async_import_client_credential(
CONF_AUTH_DOMAIN: auth_domain if auth_domain else domain,
}
item[CONF_NAME] = credential.name if credential.name else DEFAULT_IMPORT_NAME
await storage_collection.async_import_item(item)
await hass.data[DATA_COMPONENT].async_import_item(item)
class AuthImplementation(config_entry_oauth2_flow.LocalOAuth2Implementation):
@@ -222,8 +222,7 @@ async def _async_provide_implementation(
if not platform:
return []
storage_collection = hass.data[DOMAIN][DATA_STORAGE]
credentials = storage_collection.async_client_credentials(domain)
credentials = hass.data[DATA_COMPONENT].async_client_credentials(domain)
if hasattr(platform, "async_get_auth_implementation"):
return [
await platform.async_get_auth_implementation(hass, auth_domain, credential)
@@ -246,8 +245,7 @@ async def _async_config_entry_app_credentials(
):
return None
storage_collection = hass.data[DOMAIN][DATA_STORAGE]
for item in storage_collection.async_items():
for item in hass.data[DATA_COMPONENT].async_items():
item_id = item[CONF_ID]
if (
item[CONF_DOMAIN] == config_entry.domain

View File

@@ -5,5 +5,5 @@
"documentation": "https://www.home-assistant.io/integrations/apprise",
"iot_class": "cloud_push",
"loggers": ["apprise"],
"requirements": ["apprise==1.8.0"]
"requirements": ["apprise==1.9.0"]
}

View File

@@ -6,14 +6,12 @@ import logging
from pyaprilaire.const import Attribute
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, CONF_PORT, EVENT_HOMEASSISTANT_STOP, Platform
from homeassistant.core import Event, HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
from homeassistant.helpers.device_registry import format_mac
from .const import DOMAIN
from .coordinator import AprilaireCoordinator
from .coordinator import AprilaireConfigEntry, AprilaireCoordinator
PLATFORMS: list[Platform] = [
Platform.CLIMATE,
@@ -25,7 +23,7 @@ PLATFORMS: list[Platform] = [
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: AprilaireConfigEntry) -> bool:
"""Set up a config entry for Aprilaire."""
host = entry.data[CONF_HOST]
@@ -34,15 +32,16 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
coordinator = AprilaireCoordinator(hass, entry.unique_id, host, port)
await coordinator.start_listen()
hass.data.setdefault(DOMAIN, {})[entry.unique_id] = coordinator
async def ready_callback(ready: bool):
async def ready_callback(ready: bool) -> None:
if ready:
mac_address = format_mac(coordinator.data[Attribute.MAC_ADDRESS])
if mac_address != entry.unique_id:
raise ConfigEntryAuthFailed("Invalid MAC address")
entry.runtime_data = coordinator
entry.async_on_unload(coordinator.stop_listen)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
async def _async_close(_: Event) -> None:
@@ -63,12 +62,6 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: AprilaireConfigEntry) -> bool:
"""Unload a config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok:
coordinator: AprilaireCoordinator = hass.data[DOMAIN].pop(entry.unique_id)
coordinator.stop_listen()
return unload_ok
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)

View File

@@ -16,19 +16,17 @@ from homeassistant.components.climate import (
HVACAction,
HVACMode,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import PRECISION_HALVES, PRECISION_WHOLE, UnitOfTemperature
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import (
DOMAIN,
FAN_CIRCULATE,
PRESET_PERMANENT_HOLD,
PRESET_TEMPORARY_HOLD,
PRESET_VACATION,
)
from .coordinator import AprilaireCoordinator
from .coordinator import AprilaireConfigEntry
from .entity import BaseAprilaireEntity
HVAC_MODE_MAP = {
@@ -64,14 +62,14 @@ FAN_MODE_MAP = {
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AprilaireConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add climates for passed config_entry in HA."""
coordinator: AprilaireCoordinator = hass.data[DOMAIN][config_entry.unique_id]
async_add_entities([AprilaireClimate(coordinator, config_entry.unique_id)])
async_add_entities(
[AprilaireClimate(config_entry.runtime_data, config_entry.unique_id)]
)
class AprilaireClimate(BaseAprilaireEntity, ClimateEntity):

View File

@@ -9,6 +9,7 @@ from typing import Any
import pyaprilaire.client
from pyaprilaire.const import MODELS, Attribute, FunctionalDomain
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback
import homeassistant.helpers.device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
@@ -22,6 +23,8 @@ WAIT_TIMEOUT = 30
_LOGGER = logging.getLogger(__name__)
type AprilaireConfigEntry = ConfigEntry[AprilaireCoordinator]
class AprilaireCoordinator(BaseDataUpdateCoordinatorProtocol):
"""Coordinator for interacting with the thermostat."""
@@ -112,7 +115,7 @@ class AprilaireCoordinator(BaseDataUpdateCoordinatorProtocol):
self.client.stop_listen()
async def wait_for_ready(
self, ready_callback: Callable[[bool], Awaitable[bool]]
self, ready_callback: Callable[[bool], Awaitable[None]]
) -> bool:
"""Wait for the client to be ready."""

View File

@@ -14,13 +14,11 @@ from homeassistant.components.humidifier import (
HumidifierEntity,
HumidifierEntityDescription,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from .const import DOMAIN
from .coordinator import AprilaireCoordinator
from .coordinator import AprilaireConfigEntry, AprilaireCoordinator
from .entity import BaseAprilaireEntity
HUMIDIFIER_ACTION_MAP: dict[StateType, HumidifierAction] = {
@@ -41,12 +39,12 @@ DEHUMIDIFIER_ACTION_MAP: dict[StateType, HumidifierAction] = {
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AprilaireConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up Aprilaire humidifier devices."""
coordinator: AprilaireCoordinator = hass.data[DOMAIN][config_entry.unique_id]
coordinator = config_entry.runtime_data
assert config_entry.unique_id is not None

View File

@@ -9,12 +9,10 @@ from typing import cast
from pyaprilaire.const import Attribute
from homeassistant.components.select import SelectEntity, SelectEntityDescription
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from .coordinator import AprilaireCoordinator
from .coordinator import AprilaireConfigEntry, AprilaireCoordinator
from .entity import BaseAprilaireEntity
AIR_CLEANING_EVENT_MAP = {0: "off", 3: "event_clean", 4: "allergies"}
@@ -25,12 +23,12 @@ FRESH_AIR_MODE_MAP = {0: "off", 1: "automatic"}
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AprilaireConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up Aprilaire select devices."""
coordinator: AprilaireCoordinator = hass.data[DOMAIN][config_entry.unique_id]
coordinator = config_entry.runtime_data
assert config_entry.unique_id is not None

View File

@@ -13,14 +13,12 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import PERCENTAGE, UnitOfTemperature
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from .const import DOMAIN
from .coordinator import AprilaireCoordinator
from .coordinator import AprilaireConfigEntry, AprilaireCoordinator
from .entity import BaseAprilaireEntity
DEHUMIDIFICATION_STATUS_MAP: dict[StateType, str] = {
@@ -76,12 +74,12 @@ def get_entities(
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AprilaireConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up Aprilaire sensor devices."""
coordinator: AprilaireCoordinator = hass.data[DOMAIN][config_entry.unique_id]
coordinator = config_entry.runtime_data
assert config_entry.unique_id is not None

View File

@@ -12,12 +12,11 @@ from homeassistant.components.sensor import (
SensorEntity,
SensorEntityDescription,
SensorStateClass,
StateType,
)
from homeassistant.const import UnitOfEnergy, UnitOfPower
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import DiscoveryInfoType
from homeassistant.helpers.typing import DiscoveryInfoType, StateType
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import ApSystemsConfigEntry, ApSystemsData

View File

@@ -22,6 +22,9 @@ class ArcamFmjFlowHandler(ConfigFlow, domain=DOMAIN):
VERSION = 1
host: str
port: int
async def _async_set_unique_id_and_update(
self, host: str, port: int, uuid: str
) -> None:
@@ -74,16 +77,11 @@ class ArcamFmjFlowHandler(ConfigFlow, domain=DOMAIN):
self, user_input: dict[str, Any] | None = None
) -> ConfigFlowResult:
"""Handle user-confirmation of discovered node."""
context = self.context
placeholders = {
"host": context[CONF_HOST],
}
context["title_placeholders"] = placeholders
placeholders = {"host": self.host}
self.context["title_placeholders"] = placeholders
if user_input is not None:
return await self._async_check_and_create(
context[CONF_HOST], context[CONF_PORT]
)
return await self._async_check_and_create(self.host, self.port)
return self.async_show_form(
step_id="confirm", description_placeholders=placeholders
@@ -101,7 +99,6 @@ class ArcamFmjFlowHandler(ConfigFlow, domain=DOMAIN):
await self._async_set_unique_id_and_update(host, port, uuid)
context = self.context
context[CONF_HOST] = host
context[CONF_PORT] = DEFAULT_PORT
self.host = host
self.port = DEFAULT_PORT
return await self.async_step_confirm()

View File

@@ -2,7 +2,6 @@
"domain": "arris_tg2492lg",
"name": "Arris TG2492LG",
"codeowners": ["@vanbalken"],
"dependencies": [],
"documentation": "https://www.home-assistant.io/integrations/arris_tg2492lg",
"integration_type": "hub",
"iot_class": "local_polling",

View File

@@ -2,33 +2,28 @@
from __future__ import annotations
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from .const import DOMAIN
from .coordinator import ArveCoordinator
from .coordinator import ArveConfigEntry, ArveCoordinator
PLATFORMS: list[Platform] = [Platform.SENSOR]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: ArveConfigEntry) -> bool:
"""Set up Arve from a config entry."""
coordinator = ArveCoordinator(hass)
await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
entry.runtime_data = coordinator
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: ArveConfigEntry) -> bool:
"""Unload a config entry."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)

View File

@@ -21,11 +21,13 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, Upda
from .const import DOMAIN, LOGGER
type ArveConfigEntry = ConfigEntry[ArveCoordinator]
class ArveCoordinator(DataUpdateCoordinator[ArveSensProData]):
"""Arve coordinator."""
config_entry: ConfigEntry
config_entry: ArveConfigEntry
devices: ArveDevices
def __init__(self, hass: HomeAssistant) -> None:

View File

@@ -11,7 +11,6 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
CONCENTRATION_PARTS_PER_MILLION,
@@ -21,8 +20,7 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from .coordinator import ArveCoordinator
from .coordinator import ArveConfigEntry
from .entity import ArveDeviceEntity
@@ -85,10 +83,10 @@ SENSORS: tuple[ArveDeviceEntityDescription, ...] = (
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant, entry: ArveConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
"""Set up Arve device based on a config entry."""
coordinator: ArveCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
async_add_entities(
ArveDevice(coordinator, description, sn)

View File

@@ -6,20 +6,18 @@ import logging
from aioaseko import Aseko, AsekoNotLoggedIn
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_EMAIL, CONF_PASSWORD, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed
from .const import DOMAIN
from .coordinator import AsekoDataUpdateCoordinator
from .coordinator import AsekoConfigEntry, AsekoDataUpdateCoordinator
_LOGGER = logging.getLogger(__name__)
PLATFORMS: list[str] = [Platform.BINARY_SENSOR, Platform.SENSOR]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: AsekoConfigEntry) -> bool:
"""Set up Aseko Pool Live from a config entry."""
aseko = Aseko(entry.data[CONF_EMAIL], entry.data[CONF_PASSWORD])
@@ -30,19 +28,19 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
coordinator = AsekoDataUpdateCoordinator(hass, aseko)
await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
entry.runtime_data = coordinator
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: AsekoConfigEntry) -> bool:
"""Unload a config entry."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
async def async_migrate_entry(
hass: HomeAssistant, config_entry: AsekoConfigEntry
) -> bool:
"""Migrate old entry."""
_LOGGER.debug("Migrating from version %s", config_entry.version)

View File

@@ -11,12 +11,10 @@ from homeassistant.components.binary_sensor import (
BinarySensorEntity,
BinarySensorEntityDescription,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from .coordinator import AsekoDataUpdateCoordinator
from .coordinator import AsekoConfigEntry
from .entity import AsekoEntity
@@ -38,11 +36,11 @@ BINARY_SENSORS: tuple[AsekoBinarySensorEntityDescription, ...] = (
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AsekoConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Aseko Pool Live binary sensors."""
coordinator: AsekoDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
coordinator = config_entry.runtime_data
units = coordinator.data.values()
async_add_entities(
AsekoBinarySensorEntity(unit, coordinator, description)

View File

@@ -9,7 +9,7 @@ from typing import Any
from aioaseko import Aseko, AsekoAPIError, AsekoInvalidCredentials
import voluptuous as vol
from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult
from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_EMAIL, CONF_PASSWORD, CONF_UNIQUE_ID
from .const import DOMAIN
@@ -29,9 +29,7 @@ class AsekoConfigFlow(ConfigFlow, domain=DOMAIN):
}
)
reauth_entry: ConfigEntry | None = None
async def get_account_info(self, email: str, password: str) -> dict:
async def get_account_info(self, email: str, password: str) -> dict[str, Any]:
"""Get account info from the mobile API and the web API."""
aseko = Aseko(email, password)
user = await aseko.login()
@@ -46,7 +44,6 @@ class AsekoConfigFlow(ConfigFlow, domain=DOMAIN):
) -> ConfigFlowResult:
"""Handle the initial step."""
self.reauth_entry = None
errors = {}
if user_input is not None:
@@ -73,19 +70,18 @@ class AsekoConfigFlow(ConfigFlow, domain=DOMAIN):
async def async_store_credentials(self, info: dict[str, Any]) -> ConfigFlowResult:
"""Store validated credentials."""
if self.reauth_entry:
self.hass.config_entries.async_update_entry(
self.reauth_entry,
await self.async_set_unique_id(info[CONF_UNIQUE_ID])
if self.source == SOURCE_REAUTH:
self._abort_if_unique_id_mismatch()
return self.async_update_reload_and_abort(
self._get_reauth_entry(),
title=info[CONF_EMAIL],
data={
CONF_EMAIL: info[CONF_EMAIL],
CONF_PASSWORD: info[CONF_PASSWORD],
},
)
await self.hass.config_entries.async_reload(self.reauth_entry.entry_id)
return self.async_abort(reason="reauth_successful")
await self.async_set_unique_id(info[CONF_UNIQUE_ID])
self._abort_if_unique_id_configured()
return self.async_create_entry(
@@ -100,11 +96,6 @@ class AsekoConfigFlow(ConfigFlow, domain=DOMAIN):
self, entry_data: Mapping[str, Any]
) -> ConfigFlowResult:
"""Perform reauth upon an API authentication error."""
self.reauth_entry = self.hass.config_entries.async_get_entry(
self.context["entry_id"]
)
return await self.async_step_reauth_confirm()
async def async_step_reauth_confirm(

View File

@@ -7,6 +7,7 @@ import logging
from aioaseko import Aseko, Unit
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
@@ -14,6 +15,8 @@ from .const import DOMAIN
_LOGGER = logging.getLogger(__name__)
type AsekoConfigEntry = ConfigEntry[AsekoDataUpdateCoordinator]
class AsekoDataUpdateCoordinator(DataUpdateCoordinator[dict[str, Unit]]):
"""Class to manage fetching Aseko unit data from single endpoint."""

View File

@@ -9,6 +9,9 @@
"air_temperature": {
"default": "mdi:thermometer-lines"
},
"electrolyzer": {
"default": "mdi:lightning-bolt"
},
"free_chlorine": {
"default": "mdi:pool"
},

View File

@@ -13,14 +13,12 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import UnitOfElectricPotential, UnitOfTemperature
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from .const import DOMAIN
from .coordinator import AsekoDataUpdateCoordinator
from .coordinator import AsekoConfigEntry
from .entity import AsekoEntity
@@ -40,6 +38,13 @@ SENSORS: list[AsekoSensorEntityDescription] = [
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda unit: unit.air_temperature,
),
AsekoSensorEntityDescription(
key="electrolyzer",
translation_key="electrolyzer",
native_unit_of_measurement="g/h",
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda unit: unit.electrolyzer,
),
AsekoSensorEntityDescription(
key="free_chlorine",
translation_key="free_chlorine",
@@ -80,11 +85,11 @@ SENSORS: list[AsekoSensorEntityDescription] = [
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AsekoConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Aseko Pool Live sensors."""
coordinator: AsekoDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
coordinator = config_entry.runtime_data
units = coordinator.data.values()
async_add_entities(
AsekoSensorEntity(unit, coordinator, description)

View File

@@ -21,7 +21,8 @@
},
"abort": {
"already_configured": "[%key:common::config_flow::abort::already_configured_account%]",
"reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]"
"reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]",
"unique_id_mismatch": "The user identifier does not match the previous identifier"
}
},
"entity": {
@@ -34,6 +35,9 @@
"air_temperature": {
"name": "Air temperature"
},
"electrolyzer": {
"name": "Electrolyzer"
},
"free_chlorine": {
"name": "Free chlorine"
},

View File

@@ -1,61 +1,29 @@
"""The ATAG Integration."""
from asyncio import timeout
from datetime import timedelta
import logging
from pyatag import AtagException, AtagOne
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
_LOGGER = logging.getLogger(__name__)
from .coordinator import AtagConfigEntry, AtagDataUpdateCoordinator
DOMAIN = "atag"
PLATFORMS = [Platform.CLIMATE, Platform.SENSOR, Platform.WATER_HEATER]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: AtagConfigEntry) -> bool:
"""Set up Atag integration from a config entry."""
async def _async_update_data():
"""Update data via library."""
async with timeout(20):
try:
await atag.update()
except AtagException as err:
raise UpdateFailed(err) from err
return atag
atag = AtagOne(
session=async_get_clientsession(hass), **entry.data, device=entry.unique_id
)
coordinator = DataUpdateCoordinator[AtagOne](
hass,
_LOGGER,
name=DOMAIN.title(),
update_method=_async_update_data,
update_interval=timedelta(seconds=60),
)
coordinator = AtagDataUpdateCoordinator(hass, entry)
await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
entry.runtime_data = coordinator
if entry.unique_id is None:
hass.config_entries.async_update_entry(entry, unique_id=atag.id)
hass.config_entries.async_update_entry(entry, unique_id=coordinator.atag.id)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: AtagConfigEntry) -> bool:
"""Unload Atag config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)

View File

@@ -12,13 +12,12 @@ from homeassistant.components.climate import (
HVACAction,
HVACMode,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, Platform
from homeassistant.const import ATTR_TEMPERATURE
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.util.enum import try_parse_enum
from . import DOMAIN
from .coordinator import AtagConfigEntry, AtagDataUpdateCoordinator
from .entity import AtagEntity
PRESET_MAP = {
@@ -33,11 +32,10 @@ HVAC_MODES = [HVACMode.AUTO, HVACMode.HEAT]
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant, entry: AtagConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
"""Load a config entry."""
coordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities([AtagThermostat(coordinator, Platform.CLIMATE)])
async_add_entities([AtagThermostat(entry.runtime_data, "climate")])
class AtagThermostat(AtagEntity, ClimateEntity):
@@ -50,49 +48,49 @@ class AtagThermostat(AtagEntity, ClimateEntity):
)
_enable_turn_on_off_backwards_compatibility = False
def __init__(self, coordinator, atag_id):
def __init__(self, coordinator: AtagDataUpdateCoordinator, atag_id: str) -> None:
"""Initialize an Atag climate device."""
super().__init__(coordinator, atag_id)
self._attr_temperature_unit = coordinator.data.climate.temp_unit
self._attr_temperature_unit = coordinator.atag.climate.temp_unit
@property
def hvac_mode(self) -> HVACMode | None:
"""Return hvac operation ie. heat, cool mode."""
return try_parse_enum(HVACMode, self.coordinator.data.climate.hvac_mode)
return try_parse_enum(HVACMode, self.coordinator.atag.climate.hvac_mode)
@property
def hvac_action(self) -> HVACAction | None:
"""Return the current running hvac operation."""
is_active = self.coordinator.data.climate.status
is_active = self.coordinator.atag.climate.status
return HVACAction.HEATING if is_active else HVACAction.IDLE
@property
def current_temperature(self) -> float | None:
"""Return the current temperature."""
return self.coordinator.data.climate.temperature
return self.coordinator.atag.climate.temperature
@property
def target_temperature(self) -> float | None:
"""Return the temperature we try to reach."""
return self.coordinator.data.climate.target_temperature
return self.coordinator.atag.climate.target_temperature
@property
def preset_mode(self) -> str | None:
"""Return the current preset mode, e.g., auto, manual, fireplace, extend, etc."""
preset = self.coordinator.data.climate.preset_mode
preset = self.coordinator.atag.climate.preset_mode
return PRESET_INVERTED.get(preset)
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set new target temperature."""
await self.coordinator.data.climate.set_temp(kwargs.get(ATTR_TEMPERATURE))
await self.coordinator.atag.climate.set_temp(kwargs.get(ATTR_TEMPERATURE))
self.async_write_ha_state()
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set new target hvac mode."""
await self.coordinator.data.climate.set_hvac_mode(hvac_mode)
await self.coordinator.atag.climate.set_hvac_mode(hvac_mode)
self.async_write_ha_state()
async def async_set_preset_mode(self, preset_mode: str) -> None:
"""Set new preset mode."""
await self.coordinator.data.climate.set_preset_mode(PRESET_MAP[preset_mode])
await self.coordinator.atag.climate.set_preset_mode(PRESET_MAP[preset_mode])
self.async_write_ha_state()

View File

@@ -0,0 +1,41 @@
"""The ATAG Integration."""
from asyncio import timeout
from datetime import timedelta
import logging
from pyatag import AtagException, AtagOne
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
_LOGGER = logging.getLogger(__name__)
type AtagConfigEntry = ConfigEntry[AtagDataUpdateCoordinator]
class AtagDataUpdateCoordinator(DataUpdateCoordinator[None]):
"""Atag data update coordinator."""
def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None:
"""Initialize Atag coordinator."""
super().__init__(
hass,
_LOGGER,
name="Atag",
update_interval=timedelta(seconds=60),
)
self.atag = AtagOne(
session=async_get_clientsession(hass), **entry.data, device=entry.unique_id
)
async def _async_update_data(self) -> None:
"""Update data via library."""
async with timeout(20):
try:
await self.atag.update()
except AtagException as err:
raise UpdateFailed(err) from err

View File

@@ -1,36 +1,30 @@
"""The ATAG Integration."""
from pyatag import AtagOne
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import (
CoordinatorEntity,
DataUpdateCoordinator,
)
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import DOMAIN
from .coordinator import AtagDataUpdateCoordinator
class AtagEntity(CoordinatorEntity[DataUpdateCoordinator[AtagOne]]):
class AtagEntity(CoordinatorEntity[AtagDataUpdateCoordinator]):
"""Defines a base Atag entity."""
def __init__(
self, coordinator: DataUpdateCoordinator[AtagOne], atag_id: str
) -> None:
def __init__(self, coordinator: AtagDataUpdateCoordinator, atag_id: str) -> None:
"""Initialize the Atag entity."""
super().__init__(coordinator)
self._id = atag_id
self._attr_name = DOMAIN.title()
self._attr_unique_id = f"{coordinator.data.id}-{atag_id}"
self._attr_unique_id = f"{coordinator.atag.id}-{atag_id}"
@property
def device_info(self) -> DeviceInfo:
"""Return info for device registry."""
return DeviceInfo(
identifiers={(DOMAIN, self.coordinator.data.id)},
identifiers={(DOMAIN, self.coordinator.atag.id)},
manufacturer="Atag",
model="Atag One",
name="Atag Thermostat",
sw_version=self.coordinator.data.apiversion,
sw_version=self.coordinator.atag.apiversion,
)

View File

@@ -1,7 +1,6 @@
"""Initialization of ATAG One sensor platform."""
from homeassistant.components.sensor import SensorDeviceClass, SensorEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
PERCENTAGE,
UnitOfPressure,
@@ -11,7 +10,7 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import DOMAIN
from .coordinator import AtagConfigEntry, AtagDataUpdateCoordinator
from .entity import AtagEntity
SENSORS = {
@@ -28,43 +27,43 @@ SENSORS = {
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AtagConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Initialize sensor platform from config entry."""
coordinator = hass.data[DOMAIN][config_entry.entry_id]
coordinator = config_entry.runtime_data
async_add_entities([AtagSensor(coordinator, sensor) for sensor in SENSORS])
class AtagSensor(AtagEntity, SensorEntity):
"""Representation of a AtagOne Sensor."""
def __init__(self, coordinator, sensor):
def __init__(self, coordinator: AtagDataUpdateCoordinator, sensor: str) -> None:
"""Initialize Atag sensor."""
super().__init__(coordinator, SENSORS[sensor])
self._attr_name = sensor
if coordinator.data.report[self._id].sensorclass in (
if coordinator.atag.report[self._id].sensorclass in (
SensorDeviceClass.PRESSURE,
SensorDeviceClass.TEMPERATURE,
):
self._attr_device_class = coordinator.data.report[self._id].sensorclass
if coordinator.data.report[self._id].measure in (
self._attr_device_class = coordinator.atag.report[self._id].sensorclass
if coordinator.atag.report[self._id].measure in (
UnitOfPressure.BAR,
UnitOfTemperature.CELSIUS,
UnitOfTemperature.FAHRENHEIT,
PERCENTAGE,
UnitOfTime.HOURS,
):
self._attr_native_unit_of_measurement = coordinator.data.report[
self._attr_native_unit_of_measurement = coordinator.atag.report[
self._id
].measure
@property
def native_value(self):
"""Return the state of the sensor."""
return self.coordinator.data.report[self._id].state
return self.coordinator.atag.report[self._id].state
@property
def icon(self):
"""Return icon."""
return self.coordinator.data.report[self._id].icon
return self.coordinator.atag.report[self._id].icon

View File

@@ -7,12 +7,11 @@ from homeassistant.components.water_heater import (
STATE_PERFORMANCE,
WaterHeaterEntity,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, STATE_OFF, Platform, UnitOfTemperature
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import DOMAIN
from .coordinator import AtagConfigEntry
from .entity import AtagEntity
OPERATION_LIST = [STATE_OFF, STATE_ECO, STATE_PERFORMANCE]
@@ -20,12 +19,13 @@ OPERATION_LIST = [STATE_OFF, STATE_ECO, STATE_PERFORMANCE]
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AtagConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Initialize DHW device from config entry."""
coordinator = hass.data[DOMAIN][config_entry.entry_id]
async_add_entities([AtagWaterHeater(coordinator, Platform.WATER_HEATER)])
async_add_entities(
[AtagWaterHeater(config_entry.runtime_data, Platform.WATER_HEATER)]
)
class AtagWaterHeater(AtagEntity, WaterHeaterEntity):
@@ -37,30 +37,30 @@ class AtagWaterHeater(AtagEntity, WaterHeaterEntity):
@property
def current_temperature(self):
"""Return the current temperature."""
return self.coordinator.data.dhw.temperature
return self.coordinator.atag.dhw.temperature
@property
def current_operation(self):
"""Return current operation."""
operation = self.coordinator.data.dhw.current_operation
operation = self.coordinator.atag.dhw.current_operation
return operation if operation in self.operation_list else STATE_OFF
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set new target temperature."""
if await self.coordinator.data.dhw.set_temp(kwargs.get(ATTR_TEMPERATURE)):
if await self.coordinator.atag.dhw.set_temp(kwargs.get(ATTR_TEMPERATURE)):
self.async_write_ha_state()
@property
def target_temperature(self):
"""Return the setpoint if water demand, otherwise return base temp (comfort level)."""
return self.coordinator.data.dhw.target_temperature
return self.coordinator.atag.dhw.target_temperature
@property
def max_temp(self) -> float:
"""Return the maximum temperature."""
return self.coordinator.data.dhw.max_temp
return self.coordinator.atag.dhw.max_temp
@property
def min_temp(self) -> float:
"""Return the minimum temperature."""
return self.coordinator.data.dhw.min_temp
return self.coordinator.atag.dhw.min_temp

View File

@@ -12,7 +12,7 @@ from yalexs.authenticator_common import ValidationResult
from yalexs.const import BRANDS_WITHOUT_OAUTH, DEFAULT_BRAND, Brand
from yalexs.manager.exceptions import CannotConnect, InvalidAuth, RequireValidation
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import callback
@@ -93,7 +93,6 @@ class AugustConfigFlow(ConfigFlow, domain=DOMAIN):
self._aiohttp_session: aiohttp.ClientSession | None = None
self._user_auth_details: dict[str, Any] = {}
self._needs_reset = True
self._mode: str | None = None
super().__init__()
async def async_step_user(
@@ -147,7 +146,7 @@ class AugustConfigFlow(ConfigFlow, domain=DOMAIN):
) -> ConfigFlowResult:
"""Handle validation (2fa) step."""
if user_input:
if self._mode == "reauth":
if self.source == SOURCE_REAUTH:
return await self.async_step_reauth_validate(user_input)
return await self.async_step_user_validate(user_input)
@@ -188,8 +187,6 @@ class AugustConfigFlow(ConfigFlow, domain=DOMAIN):
) -> ConfigFlowResult:
"""Handle configuration by re-auth."""
self._user_auth_details = dict(entry_data)
self._mode = "reauth"
self._needs_reset = True
return await self.async_step_reauth_validate()
async def async_step_reauth_validate(

View File

@@ -28,5 +28,5 @@
"documentation": "https://www.home-assistant.io/integrations/august",
"iot_class": "cloud_push",
"loggers": ["pubnub", "yalexs"],
"requirements": ["yalexs==8.6.4", "yalexs-ble==2.4.3"]
"requirements": ["yalexs==8.10.0", "yalexs-ble==2.5.0"]
}

View File

@@ -20,7 +20,7 @@
"validation": {
"title": "Two factor authentication",
"data": {
"code": "Verification code"
"verification_code": "Verification code"
},
"description": "Please check your {login_method} ({username}) and enter the verification code below. Codes may take a few minutes to arrive."
},

View File

@@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/aurora",
"iot_class": "cloud_polling",
"loggers": ["auroranoaa"],
"requirements": ["auroranoaa==0.0.3"]
"requirements": ["auroranoaa==0.0.5"]
}

View File

@@ -10,21 +10,15 @@
# and add the following to the end of script/bootstrap:
# sudo chmod 777 /dev/ttyUSB0
import logging
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_ADDRESS, CONF_PORT, Platform
from homeassistant.core import HomeAssistant
from .const import DOMAIN
from .coordinator import AuroraAbbDataUpdateCoordinator
from .coordinator import AuroraAbbConfigEntry, AuroraAbbDataUpdateCoordinator
PLATFORMS = [Platform.SENSOR]
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: AuroraAbbConfigEntry) -> bool:
"""Set up Aurora ABB PowerOne from a config entry."""
comport = entry.data[CONF_PORT]
@@ -32,19 +26,13 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
coordinator = AuroraAbbDataUpdateCoordinator(hass, comport, address)
await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
entry.runtime_data = coordinator
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: AuroraAbbConfigEntry) -> bool:
"""Unload a config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
# It should not be necessary to close the serial port because we close
# it after every use in sensor.py, i.e. no need to do entry["client"].close()
if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)

View File

@@ -6,6 +6,7 @@ from time import sleep
from aurorapy.client import AuroraError, AuroraSerialClient, AuroraTimeoutError
from serial import SerialException
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
@@ -14,6 +15,9 @@ from .const import DOMAIN, SCAN_INTERVAL
_LOGGER = logging.getLogger(__name__)
type AuroraAbbConfigEntry = ConfigEntry[AuroraAbbDataUpdateCoordinator]
class AuroraAbbDataUpdateCoordinator(DataUpdateCoordinator[dict[str, float]]):
"""Class to manage fetching AuroraAbbPowerone data."""

View File

@@ -14,7 +14,6 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
ATTR_SERIAL_NUMBER,
EntityCategory,
@@ -31,7 +30,6 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import AuroraAbbDataUpdateCoordinator
from .const import (
ATTR_DEVICE_NAME,
ATTR_FIRMWARE,
@@ -40,6 +38,7 @@ from .const import (
DOMAIN,
MANUFACTURER,
)
from .coordinator import AuroraAbbConfigEntry, AuroraAbbDataUpdateCoordinator
_LOGGER = logging.getLogger(__name__)
ALARM_STATES = list(AuroraMapping.ALARM_STATES.values())
@@ -130,12 +129,12 @@ SENSOR_TYPES = [
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AuroraAbbConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up aurora_abb_powerone sensor based on a config entry."""
coordinator = hass.data[DOMAIN][config_entry.entry_id]
coordinator = config_entry.runtime_data
data = config_entry.data
entities = [AuroraSensor(coordinator, data, sens) for sens in SENSOR_TYPES]

View File

@@ -2,28 +2,27 @@
from __future__ import annotations
from datetime import timedelta
import logging
from aiohttp import ClientError
from aussiebb.asyncio import AussieBB
from aussiebb.const import FETCH_TYPES
from aussiebb.exceptions import AuthenticationException, UnrecognisedServiceType
from aussiebb.exceptions import AuthenticationException
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import DEFAULT_UPDATE_INTERVAL, DOMAIN, SERVICE_ID
from .coordinator import (
AussieBroadbandConfigEntry,
AussieBroadbandDataUpdateCoordinator,
)
_LOGGER = logging.getLogger(__name__)
PLATFORMS = [Platform.SENSOR]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(
hass: HomeAssistant, entry: AussieBroadbandConfigEntry
) -> bool:
"""Set up Aussie Broadband from a config entry."""
# Login to the Aussie Broadband API and retrieve the current service list
client = AussieBB(
@@ -43,41 +42,22 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
except ClientError as exc:
raise ConfigEntryNotReady from exc
# Create an appropriate refresh function
def update_data_factory(service_id):
async def async_update_data():
try:
return await client.get_usage(service_id)
except UnrecognisedServiceType as err:
raise UpdateFailed(f"Service {service_id} was unrecognised") from err
return async_update_data
# Initiate a Data Update Coordinator for each service
for service in services:
service["coordinator"] = DataUpdateCoordinator(
hass,
_LOGGER,
name=service["service_id"],
update_interval=timedelta(minutes=DEFAULT_UPDATE_INTERVAL),
update_method=update_data_factory(service[SERVICE_ID]),
service["coordinator"] = AussieBroadbandDataUpdateCoordinator(
hass, client, service["service_id"]
)
await service["coordinator"].async_config_entry_first_refresh()
# Setup the integration
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = {
"client": client,
"services": services,
}
entry.runtime_data = services
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(
hass: HomeAssistant, entry: AussieBroadbandConfigEntry
) -> bool:
"""Unload the config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)

View File

@@ -99,11 +99,9 @@ class AussieBroadbandConfigFlow(ConfigFlow, domain=DOMAIN):
}
if not (errors := await self.async_auth(data)):
entry = self.hass.config_entries.async_get_entry(
self.context["entry_id"]
return self.async_update_reload_and_abort(
self._get_reauth_entry(), data=data
)
assert entry
return self.async_update_reload_and_abort(entry, data=data)
return self.async_show_form(
step_id="reauth_confirm",

View File

@@ -1,6 +1,8 @@
"""Constants for the Aussie Broadband integration."""
from typing import Final
DEFAULT_UPDATE_INTERVAL = 30
DOMAIN = "aussie_broadband"
SERVICE_ID = "service_id"
SERVICE_ID: Final = "service_id"
CONF_SERVICES = "services"

View File

@@ -0,0 +1,53 @@
"""Coordinator for the Aussie Broadband integration."""
from __future__ import annotations
from datetime import timedelta
import logging
from typing import Any, TypedDict
from aussiebb.asyncio import AussieBB
from aussiebb.exceptions import UnrecognisedServiceType
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import DEFAULT_UPDATE_INTERVAL
_LOGGER = logging.getLogger(__name__)
class AussieBroadbandServiceData(TypedDict, total=False):
"""Aussie Broadband service information, extended with the coordinator."""
coordinator: AussieBroadbandDataUpdateCoordinator
description: str
name: str
service_id: str
type: str
type AussieBroadbandConfigEntry = ConfigEntry[list[AussieBroadbandServiceData]]
class AussieBroadbandDataUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]):
"""Aussie Broadand data update coordinator."""
def __init__(self, hass: HomeAssistant, client: AussieBB, service_id: str) -> None:
"""Initialize Atag coordinator."""
super().__init__(
hass,
_LOGGER,
name=f"Aussie Broadband {service_id}",
update_interval=timedelta(minutes=DEFAULT_UPDATE_INTERVAL),
)
self._client = client
self._service_id = service_id
async def _async_update_data(self) -> dict[str, Any]:
"""Update data via library."""
try:
return await self._client.get_usage(self._service_id)
except UnrecognisedServiceType as err:
raise UpdateFailed(f"Service {self._service_id} was unrecognised") from err

View File

@@ -5,16 +5,15 @@ from __future__ import annotations
from typing import Any
from homeassistant.components.diagnostics import async_redact_data
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from .const import DOMAIN
from .coordinator import AussieBroadbandConfigEntry
TO_REDACT = ["address", "ipAddresses", "description", "discounts", "coordinator"]
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, config_entry: ConfigEntry
hass: HomeAssistant, config_entry: AussieBroadbandConfigEntry
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
return {
@@ -23,6 +22,6 @@ async def async_get_config_entry_diagnostics(
"service": async_redact_data(service, TO_REDACT),
"usage": async_redact_data(service["coordinator"].data, ["historical"]),
}
for service in hass.data[DOMAIN][config_entry.entry_id]["services"]
for service in config_entry.runtime_data
]
}

View File

@@ -5,7 +5,7 @@ from __future__ import annotations
from collections.abc import Callable
from dataclasses import dataclass
import re
from typing import Any, cast
from typing import cast
from homeassistant.components.sensor import (
SensorDeviceClass,
@@ -13,7 +13,6 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import UnitOfInformation, UnitOfTime
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
@@ -22,6 +21,11 @@ from homeassistant.helpers.typing import StateType
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import DOMAIN, SERVICE_ID
from .coordinator import (
AussieBroadbandConfigEntry,
AussieBroadbandDataUpdateCoordinator,
AussieBroadbandServiceData,
)
@dataclass(frozen=True)
@@ -117,28 +121,34 @@ SENSOR_DESCRIPTIONS: tuple[SensorValueEntityDescription, ...] = (
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AussieBroadbandConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Aussie Broadband sensor platform from a config entry."""
async_add_entities(
[
AussieBroadandSensorEntity(service, description)
for service in hass.data[DOMAIN][entry.entry_id]["services"]
for service in entry.runtime_data
for description in SENSOR_DESCRIPTIONS
if description.key in service["coordinator"].data
]
)
class AussieBroadandSensorEntity(CoordinatorEntity, SensorEntity):
class AussieBroadandSensorEntity(
CoordinatorEntity[AussieBroadbandDataUpdateCoordinator], SensorEntity
):
"""Base class for Aussie Broadband metric sensors."""
_attr_has_entity_name = True
entity_description: SensorValueEntityDescription
def __init__(
self, service: dict[str, Any], description: SensorValueEntityDescription
self,
service: AussieBroadbandServiceData,
description: SensorValueEntityDescription,
) -> None:
"""Initialize the sensor."""
super().__init__(service["coordinator"])

View File

@@ -0,0 +1,48 @@
{
"entity": {
"sensor": {
"power_production": {
"default": "mdi:flash"
},
"energy_production_today": {
"default": "mdi:solar-power"
},
"energy_production_month": {
"default": "mdi:solar-power"
},
"energy_production_total": {
"default": "mdi:solar-power"
},
"out_ac_power": {
"default": "mdi:flash"
},
"out_ac_energy_total": {
"default": "mdi:solar-power"
},
"flow_now": {
"default": "mdi:flash"
},
"state_of_charge": {
"default": "mdi:home-battery"
},
"discharged_today": {
"default": "mdi:battery-arrow-down"
},
"discharged_month": {
"default": "mdi:battery-arrow-down"
},
"discharged_total": {
"default": "mdi:battery-arrow-down"
},
"charged_today": {
"default": "mdi:battery-arrow-up"
},
"charged_month": {
"default": "mdi:battery-arrow-up"
},
"charged_total": {
"default": "mdi:battery-arrow-up"
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More