Compare commits

...

895 Commits

Author SHA1 Message Date
Martin Hjelmare
20211eb225 Update gateway response 2025-02-12 20:16:52 +01:00
Martin Hjelmare
8ab627cd44 Fix test typing 2025-02-12 11:53:35 +01:00
Martin Hjelmare
4870ea907d Bump pytradfri to 14.0.0 2025-02-12 10:13:47 +01:00
Martin Hjelmare
68888100f6 Fix last test 2025-02-10 14:13:28 +01:00
Martin Hjelmare
4e81f3ac15 Fix more tests 2025-02-10 14:02:02 +01:00
Martin Hjelmare
dcefdc7bf2 Fix light after rebase 2025-02-10 14:01:04 +01:00
Martin Hjelmare
99e2ac2d2f Fix some tests but not all 2025-02-10 13:12:56 +01:00
Martin Hjelmare
f65693b6e8 Bump pytradfri to 12.0.0 2025-02-10 12:37:12 +01:00
Martin Hjelmare
380f0c4588 Use combines commands in tradfri light 2025-02-10 12:36:17 +01:00
Martin Hjelmare
136ffc898b Adjust tradfri light supported features 2025-02-10 12:36:17 +01:00
Martin Hjelmare
5474fd77b2 Fix tradfri light typing except command addition 2025-02-10 12:31:13 +01:00
Martin Hjelmare
7b43714adf Fix tradfri sensor typing 2025-02-10 12:21:03 +01:00
Martin Hjelmare
ab903f7fea Fix tradfri switch typing 2025-02-10 12:19:17 +01:00
Martin Hjelmare
8774d4ae75 Fix tradfri fan typing 2025-02-10 12:18:52 +01:00
Martin Hjelmare
e7cc87be4c Fix tradfri cover typing 2025-02-10 12:17:01 +01:00
Martin Hjelmare
951ae92668 Migrate tradfri device identifier 2025-02-10 12:17:00 +01:00
Martin Hjelmare
f323289d2a Fix tradfri reachable not needed cast 2025-02-10 12:15:09 +01:00
Martin Hjelmare
b66bdd444e Use dataclass for tradfri hass.data 2025-02-10 12:15:09 +01:00
Martin Hjelmare
e04bb5932d Copy device identifer to string 2025-02-10 12:10:25 +01:00
Martin Hjelmare
b21f69ab7b Use APIRequestProtocol 2025-02-10 12:10:25 +01:00
Martin Hjelmare
00ab475d0f Fix observe update callback 2025-02-10 12:08:01 +01:00
Martin Hjelmare
81114f4f82 Improve tradfri typing 2025-02-10 12:08:01 +01:00
kiran Bhakre
de86e4bd3c Add authorities to london_air (#137349)
* Update sensor.py

added Hounslow and hammersmith

* Update sensor.py

maintain the alphabetical order

* Update homeassistant/components/london_air/sensor.py

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

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2025-02-10 11:39:48 +01:00
Daniel O'Connor
38b8df8f6f Prevent crash if telegram message failed and did not generate an ID (#137989)
Fix #137901 - Regression introduced in 6fdccda225
2025-02-10 11:47:02 +02:00
pglab-electronics
8c602d74f3 Add pglab integration (#109725)
* Add PG LAB Electronics integration

* Add time from last boot sensor diagnostic

* Limit the initial new pglab integration to only one platform

* Update FlowHandler with the new return type ConfigFlowResult

* Fix docstring file with the right integration name to PG LAB.

* There is no need for default value in the callback definition.

* Move all mqtt callbacks to be global and also renamed with a better name.

* Removed unused member variables.

* Renaming functions with a better name.

* Adding miss docstring to __build_device.

* Renamed CreateDiscovery with a better name.

* Removing not so meaning comment.

* Avoid to populate hass.data with pglab discovery information. Use hass.data[DOMAIN] instead.

* Revert "Removed unused member variables."

This reverts commit 4193c491ec.

* Removed unused member variables.

* Refactoring of const. Be sure to have in const.py constant that are used in at least two other modules

* Restoring back the process to unregister the plaform when unload the integration.

* fix spelling mistake

* Revert "Move all mqtt callbacks to be global and also renamed with a better name."

This reverts commit d94d8010d5.

* Main refactoring to avoid to store PG Lab discovery in hass.data

* Change class name  BaseEntity in PGLabEntity. And named PyPGLab...  what imported from external python module pypglab.

* Avoid to use dict to create DeviceInfo

* Removing unused parameter

* Removing not necessary call to base class

* Update entity name/id to be compatible with the new integration policy.

* Upate test to new entity id

* Add new line after file description

* avoid to store in local variable data for calling function

* Move PGLABConfigEntry in __init__.py

* change function to pure callback

* to avoid hang, dont' trust the split of the discovery topic... introduce a max split count

* rename method with a more meaning name

* use assignment operator

* rename variable with a better name

* removing unecessary test

* Raise exception in case of unexpected error during discovery

* Review comments all other the intergration.

* Rename classes to be consistent in integration

* Using new feature single_config_entry to allow single instance integration

* rename class FlowHandler to PGLabFlowHandler

* using __package__ to initialize integration logger

* missing to catch the exception when for some reason is not possible to create the discovery instance. This can happen when the discovery MQTT message is not in valid json format.

* using ATTR_ENTITY_ID instead of the string

* using SOURCE_MQTT, SOURCE_USER instead of config_entries.SOURCE_MQTT, config_entries.SOURCE_USER

* Using FlowResultType.ABORT instead of the string value

* Code refactoring for tests of configuration from USER and MQTT

* Remove to the user the possibility to add PGLab integration manually, and remove not needed tests.

* Change test_device_update to use snapshot to check test result

* Raise exeception in case of unexpected device and entity_id

* Avoid to log on info channel.

* Renamed _LOGGER in LOGGER

* Propage the call to the base class

* Remove not needed code because from the manifest it's only allows a single instance

* Using specific type for result test instead of string value

* Code refactoring, avoid not necessary function

* update to the new way to import mqtt components

* Avoid runtime check

* add err variable for catching the exception

* add doc string to mqtt_publish

* add doc string to mqtt_subscribe

* Rename DiscoverDeviceInfo.add_entity_id in add_entity

* add doc string

* removing not meaning documentation string

* fix spelling

* fix wrong case in docstring

* fix spelling mistake in PyPGLab callback name

* rename mqtt message received callback

* Avoid to store hard coded discovery_prefix

* Removing unused strings from strings.json

* Give to the user more information during config_flow, and add the possibility to add manually the integration

* Fix to avoid fails of auto test

* update discovery test

* Be sure to always subscribe to MQTT topic when entity is added to HA

* Update codeowner of PGLAB integration and test

* Add control to check if mqtt is available during integration setup

* New test for check no state change for disable entity switch

* Remore not more used file

* update pypglab to version 0.0.3 and improve the symmetry to subscribe/unsubscribe to mqtt entity topic and to register/deregister the status update callback

* Update codeowner of pglab integration

* Adding quality_scale

* removing async_setup

* Fix spelling mistake

* Added test to cover config_flow.async_step_user

---------

Co-authored-by: Pierluigi <p.garaventa@gmail.com>
2025-02-10 08:19:42 +01:00
Allen Porter
15223b3679 Update Ollama to use streaming API (#138177)
* Update ollama to use streaming APIs

* Remove unnecessary logging

* Update ollama to use streaming APIs

* Remove unnecessary logging

* Update homeassistant/components/ollama/conversation.py

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

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2025-02-09 21:05:41 -08:00
Allen Porter
ae38f89728 Update anthropic to use the new chatlog API (#138178)
* Update anthropic to use the new chatlog API

* Remove conversation id logging

* Add back whitespace

* Reduce unnecessary diffs

* Revert diffs to conversation component

* Replace types with union type
2025-02-09 20:42:15 -08:00
Paulus Schoutsen
29c6a2ec13 Add pipeline intent-progress events based on deltas (#138095)
Add intent progress Assist event
2025-02-09 18:09:52 -08:00
Paulus Schoutsen
fa3acde684 Make MockChatLog reusable for other integrations (#138112)
* Make MockChatLog reusable for other integrations

* Update tests/components/conversation/__init__.py
2025-02-09 20:19:28 -05:00
Paulus Schoutsen
cabb406270 Fix user input not added to chat log from contextvar (#138173) 2025-02-09 16:34:25 -08:00
Abílio Costa
c2bb376c43 Handle generic agent exceptions when getting and deleting backups (#138145)
* Handle generic agent exceptions when getting backups

* Update hassio test

* Update delete_backup
2025-02-10 01:31:55 +01:00
Norbert Rittel
2f12187498 Replace duplicate keys with reference, improve field description (#138123)
- replace two fan_speed.name fields with references (analog to the fan_speed.description fields)
- make the description field a little more informative (it presents a slider from 0 to 100 %)
2025-02-10 00:04:00 +01:00
Andrew Jackson
31d2d968c4 Add optional media description to Mastodon post action (#137224)
Add optional media description
2025-02-10 00:01:53 +01:00
Christopher Fenner
c8b4e62710 Add battery level sensor for ViCare zigbee devices (#137813)
* add battery level sensor

* add uom

* adapt test case
2025-02-09 23:50:03 +01:00
William Scanlon
dafc331e85 Bump pyeconet to 0.1.27 (#136400) 2025-02-09 23:45:33 +01:00
J. Nick Koston
0017192ca4 Bump google-cloud-pubsub to 2.28.0 (#137742)
changelog: https://github.com/googleapis/python-pubsub/compare/v2.23.0...v2.28.0

getting this updates so it will be a smaller bump once
protobuf 6 is supported https://github.com/home-assistant/core/pull/137736
2025-02-09 23:44:17 +01:00
Brynley McDonald
0408e732d7 Add extra tests to flick_electric (#138017)
Add extra tests to flick_electric
2025-02-09 23:40:34 +01:00
Marc Mueller
9467709068 Use generics for deprecation helpers (#138171) 2025-02-09 23:38:58 +01:00
Allen Porter
57ab567d08 Update ollama to use the ChatLog/ChatSession APIs (#138167)
* Update ollama to use the ChatLog/ChatSession APIs

* Add documentation about history trimming.

* Revert changes to chat_log.py

* Explicitly check for SystemContent when converting system messages

* Remove half of a comment
2025-02-09 16:52:01 -05:00
Regev Brody
379bf10675 Add scene support to roborock (#137203)
* feature: add scene buttons to roborock

* feature: upgrade python-roborock

* feature: upgrade python-roborock

* feature: upgrade python-roborock

* feature: upgrade python-roborock

* feature: upgrade python-roborock

* feature: upgrade python-roborock

* feature: upgrade python-roborock

* feature: upgrade python-roborock

* feature: upgrade python-roborock
2025-02-09 13:39:38 -08:00
jdelaney72
e8e4d2a83c Add unique ID for NOAA Tides sensor (#137988) 2025-02-09 22:32:11 +01:00
Jan Bouwhuis
7678f8fddd Revert "Clear statistics when you unload the Opower integration (#135908)" (#138163)
* Revert "Clear statistics when you unload the Opower integration (#135908)"

This reverts commit aa19207ea4.

* Fix OpowerConfigEntry imports

* Re-add entry type hint  to coordinator
2025-02-09 13:12:04 -08:00
Michael
49968904b2 Explicitly pass in the config_entry in homeassistant_alerts coordinator (#138153)
explicitly pass in the config_entry in coordinator
2025-02-09 22:44:13 +02:00
Michael
08dbd83a55 Explicitly pass in the config_entry in ipp coordinator (#138138)
explicitly pass in the config_entry in coordinator
2025-02-09 22:43:46 +02:00
Michael
427013124c Explicitly pass in the config_entry in iron_os coordinator (#138137)
explicitly pass in the config_entry in coordinator
2025-02-09 22:42:15 +02:00
Michael
5dea4164a5 Explicitly pass in the config_entry in hydrawise coordinator (#138148)
explicitly pass in the config_entry in coordinator
2025-02-09 22:27:47 +02:00
Michael
a27dd08a7c Explicitly pass in the config_entry in habitica coordinator (#138156)
explicitly pass in the config_entry in coordinator
2025-02-09 22:26:11 +02:00
Michael
6b24bae084 Explicitly pass in the config_entry in hunterdouglas_powerview coordinator (#138151)
explicitly pass in the config_entry in coordinator
2025-02-09 21:19:57 +01:00
Michael
39bcef63bd Explicitly pass in the config_entry in hko coordinator (#138154)
explicitly pass in the config_entry in coordinator
2025-02-09 22:17:11 +02:00
Michael
d9a17506f5 Explicitly pass in the config_entry in here_travel_time coordinator (#138155)
explicitly pass in the config_entry in coordinator
2025-02-09 22:16:05 +02:00
Michael
7c9d30eb06 Explicitly pass in the config_entry in intellifire coordinator (#138143)
explicitly pass in the config_entry in coordinator
2025-02-09 22:14:19 +02:00
Michael
15af006fbe Explicitly pass in the config_entry in iometer coordinator (#138142)
explicitly pass in the config_entry in coordinator
2025-02-09 22:13:54 +02:00
Michael
8c3dab199e Explicitly pass in the config_entry in homewizard coordinator (#138152)
explicitly pass in the config_entry in coordinator
2025-02-09 22:10:21 +02:00
Michael
8c27a75d6b Explicitly pass in the config_entry in husqvarna_automower_ble coordinator (#138150)
explicitly pass in the config_entry in coordinator
2025-02-09 22:08:49 +02:00
IceBotYT
1dbd23eae1 Remove non-existing via_device in La Crosse View (#137995) 2025-02-09 15:06:35 -05:00
Michael
ec3e888372 Explicitly pass in the config_entry in husqvarna_automower coordinator (#138149)
explicitly pass in the config_entry in coordinator
2025-02-09 22:05:42 +02:00
Michael
b65403f332 Explicitly pass in the config_entry in idasen_desk coordinator (#138146)
explicitly pass in the config_entry in coordinator
2025-02-09 22:04:46 +02:00
Michael
0decb0cfba Explicitly pass in the config_entry in iotawatt coordinator (#138141)
explicitly pass in the config_entry in coordinator
2025-02-09 22:03:19 +02:00
Michael
e7d49823e4 Explicitly pass in the config_entry in islamic_prayer_times coordinator (#138133)
explicitly pass in the config_entry in coordinator
2025-02-09 22:01:44 +02:00
Michael
4eccc9d9a4 Explicitly pass in the config_entry in iotty coordinator (#138140)
explicitly pass in the config_entry in coordinator
2025-02-09 22:01:13 +02:00
Michael
733d9de042 Explicitly pass in the config_entry in israel_rail coordinator (#138132)
explicitly pass in the config_entry in coordinator
2025-02-09 21:58:09 +02:00
Michael
52363d5369 Explicitly pass in the config_entry in ialarm coordinator (#138147)
explicitly pass in the config_entry in coordinator
2025-02-09 21:57:24 +02:00
Michael
284a70932e Explicitly pass in the config_entry in lacrosse_view coordinator (#138122)
explicitly pass in the config_entry in coordinator
2025-02-09 20:51:15 +01:00
Michael
4705df9ec8 Explicitly pass in the config_entry in kostal_plenticore coordinator (#138124)
explicitly pass in the config_entry in coordinator
2025-02-09 20:51:02 +01:00
Michael
ca77b94565 Explicitly pass in the config_entry in jvc_projector coordinator (#138127)
explicitly pass in the config_entry in coordinator
2025-02-09 20:50:52 +01:00
Michael
b9828c5edd Explicitly pass in the config_entry in justnimbus coordinator (#138128)
explicitly pass in the config_entry in coordinator
2025-02-09 20:50:38 +01:00
Michael
b533cd3107 Explicitly pass in the config_entry in imgw_pib coordinator (#138144)
explicitly pass in the config_entry in coordinator
2025-02-09 20:50:05 +01:00
Michael
6d2f8b1076 Explicitly pass in the config_entry in jellyfin coordinator (#138129)
explicitly pass in the config_entry in coordinator
2025-02-09 21:30:53 +02:00
Michael
fd57803b15 Explicitly pass in the config_entry in ista_ecotrend coordinator (#138130)
explicitly pass in the config_entry in coordinator
2025-02-09 21:29:30 +02:00
Michael
db5605223f Explicitly pass in the config_entry in knocki coordinator (#138125)
explicitly pass in the config_entry in coordinator
2025-02-09 21:28:56 +02:00
Michael
b6afe130fc Explicitly pass in the config_entry in iskra coordinator (#138134)
explicitly pass in the config_entry in coordinator
2025-02-09 21:27:28 +02:00
Jan Bouwhuis
2dbf475d6f Explicitly pass in the config_entry in incomfort coordinator (#138131) 2025-02-09 20:19:09 +01:00
Michael
56eecf05e7 Explicitly pass in the config_entry in lifx coordinator (#138110)
explicitly pass in the config_entry in coordinator
2025-02-09 21:17:48 +02:00
Michael
faf4ad07fc Explicitly pass in the config_entry in lametric coordinator (#138120)
explicitly pass in the config_entry in coordinator
2025-02-09 14:09:11 -05:00
Michael
9e7f8b7bff Explicitly pass in the config_entry in landisgyr_heat_meter coordinator (#138119)
explicitly pass in the config_entry in coordinator
2025-02-09 14:08:59 -05:00
Michael
b9fd5d01dd Explicitly pass in the config_entry in lastfm coordinator (#138117)
explicitly pass in the config_entry in coordinator
2025-02-09 14:08:44 -05:00
Michael
8234c9a183 Explicitly pass in the config_entry in laundrify coordinator (#138116)
explicitly pass in the config_entry in coordinator
2025-02-09 14:08:33 -05:00
Michael
9244e84326 Explicitly pass in the config_entry in ld2410_ble coordinator (#138115)
explicitly pass in the config_entry in coordinator
2025-02-09 14:08:23 -05:00
Michael
75cf47be2b Explicitly pass in the config_entry in lektrico coordinator (#138114)
explicitly pass in the config_entry in coordinator
2025-02-09 14:08:13 -05:00
Michael
12c5ad7249 Explicitly pass in the config_entry in lg_thinq coordinator (#138113)
explicitly pass in the config_entry in coordinator
2025-02-09 19:51:13 +01:00
Michael
9be5976807 Explicitly pass in the config_entry in lidarr coordinator (#138111)
explicitly pass in the config_entry in coordinator
2025-02-09 19:41:44 +01:00
Michael
e1ed46f593 Explicitly pass in the config_entry in livisi coordinator (#138108)
explicitly pass in the config_entry in coordinator
2025-02-09 19:41:33 +01:00
Michael
c81963f464 Explicitly pass in the config_entry in lookin coordinator (#138107)
explicitly pass in the config_entry in coordinator
2025-02-09 18:59:44 +01:00
Michael
0d0e751700 Explicitly pass in the config_entry in squeezebox coordinator (#138105)
explicitly pass in the config_entry in coordinator
2025-02-09 18:59:20 +01:00
Michael
eebe182001 Explicitly pass in the config_entry in linear_garage_door coordinator (#138109)
explicitly pass in the config_entry in coordinator
2025-02-09 18:59:00 +01:00
Marc Mueller
cd8e1beb37 Limit nordpool ConfigEntrySelect to integration domain (#137768) 2025-02-09 18:57:25 +01:00
Michael
7beb1c0921 Explicitly pass in the config_entry in loqed coordinator (#138106)
explicitly pass in the config_entry in coordinator
2025-02-09 18:53:36 +01:00
Michael
3175cb9c4d Explicitly pass in the config_entry in starlink coordinator (#138103)
explicitly pass in the config_entry in coordinator
2025-02-09 18:52:22 +01:00
Michael
974e1c17d6 Explicitly pass in the config_entry in teslemetry coordinator (#138102)
explicitly pass in the config_entry in coordinator
2025-02-09 18:51:43 +01:00
Michael
233f6416f2 Explicitly pass in the config_entry in nina coordinator (#138069)
* explicitly pass in the config_entry in coordinator

* add accidential removed typing
2025-02-09 18:32:34 +01:00
Allen Porter
b1f3068b41 Refresh the nest authentication token on integration start before invoking the pub/sub subsciber (#138003)
* Refresh the nest authentication token on integration start before invoking the pub/sub subscriber

* Apply suggestions from code review

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2025-02-09 12:31:18 -05:00
tronikos
0bd161a45a Use resumable uploads in Google Drive (#138010)
* Use resumable uploads in Google Drive

* tests
2025-02-09 12:30:52 -05:00
Michael
6fe47a0f1b Explicitly pass in the config_entry in overkiz coordinator (#138046)
explicitly pass in the config_entry in coordinator
2025-02-09 17:37:07 +01:00
Michael
d0e2a9e0bf Explicitly pass in the config_entry in p1_monitor coordinator (#138045)
explicitly pass in the config_entry in coordinator
2025-02-09 17:36:48 +01:00
Michael
0e4db4265a Explicitly pass in the config_entry in permobil coordinator (#138043)
explicitly pass in the config_entry in coordinator
2025-02-09 17:36:04 +01:00
Michael
e3822ed277 Explicitly pass in the config_entry in mastodon coordinator (#138094)
explicitly pass in the config_entry in coordinator
2025-02-09 11:34:20 -05:00
Michael
f8d4a63644 Explicitly pass in the config_entry in mealie coordinator (#138093)
explicitly pass in the config_entry in coordinator
2025-02-09 11:34:10 -05:00
Michael
af8efadd1b Explicitly pass in the config_entry in melnor coordinator (#138092)
explicitly pass in the config_entry in coordinator
2025-02-09 11:34:00 -05:00
Michael
c8f035b5c5 Explicitly pass in the config_entry in met coordinator (#138091)
explicitly pass in the config_entry in coordinator
2025-02-09 11:33:52 -05:00
Michael
bd3eec90ba Explicitly pass in the config_entry in microbees coordinator (#138090)
explicitly pass in the config_entry in coordinator
2025-02-09 11:33:38 -05:00
Michael
de19f8550f Explicitly pass in the config_entry in mikrotik coordinator (#138089)
explicitly pass in the config_entry in coordinator
2025-02-09 11:33:26 -05:00
Michael
e1c222c54e Explicitly pass in the config_entry in mill coordinator (#138088)
explicitly pass in the config_entry in coordinator
2025-02-09 11:33:16 -05:00
Michael
200eb9a63d Explicitly pass in the config_entry in minecraft_server coordinator (#138086)
explicitly pass in the config_entry in coordinator
2025-02-09 11:33:05 -05:00
Michael
a60f30509a Explicitly pass in the config_entry in modern_forms coordinator (#138085)
explicitly pass in the config_entry in coordinator
2025-02-09 11:32:55 -05:00
Michael
659032c4d8 Explicitly pass in the config_entry in motion_blinds coordinator (#138080)
explicitly pass in the config_entry in coordinator
2025-02-09 11:32:39 -05:00
Michael
474d8bbd65 Explicitly pass in the config_entry in qbittorrent coordinator (#138029)
explicitly pass in the config_entry in coordinator
2025-02-09 11:32:22 -05:00
Michael
685e882847 Explicitly pass in the config_entry in prusalink coordinator (#138036)
explicitly pass in the config_entry in coordinator
2025-02-09 11:31:52 -05:00
Michael
f8169f1110 Explicitly pass in the config_entry in powerfox coordinator (#138037)
explicitly pass in the config_entry in coordinator
2025-02-09 11:31:38 -05:00
Michael
cb3a7dc503 Explicitly pass in the config_entry in poolsense coordinator (#138038)
explicitly pass in the config_entry in coordinator
2025-02-09 11:31:24 -05:00
Michael
ed3160344d Explicitly pass in the config_entry in plugwise coordinator (#138039)
explicitly pass in the config_entry in coordinator
2025-02-09 11:31:12 -05:00
Michael
8382577ccb Explicitly pass in the config_entry in monzo coordinator (#138081)
explicitly pass in the config_entry in coordinator
2025-02-09 16:34:39 +01:00
Michael
63735da5a0 Explicitly pass in the config_entry in monarch_money coordinator (#138082)
explicitly pass in the config_entry in coordinator
2025-02-09 16:34:30 +01:00
Michael
fa1a03ded1 Explicitly pass in the config_entry in moehlenhoff_alpha2 coordinator (#138083)
explicitly pass in the config_entry in coordinator
2025-02-09 16:34:17 +01:00
Michael
020e8fe939 Explicitly pass in the config_entry in opower coordinator (#138048)
explicitly pass in the config_entry in coordinator
2025-02-09 16:33:51 +01:00
Michael
8241429c5e Explicitly pass in the config_entry in nzbget coordinator (#138061)
explicitly pass in the config_entry in coordinator
2025-02-09 16:33:38 +01:00
Michael
7097faa950 Explicitly pass in the config_entry in nyt_games coordinator (#138062)
explicitly pass in the config_entry in coordinator
2025-02-09 16:33:24 +01:00
Michael
d66ac97c34 Explicitly pass in the config_entry in nws coordinator (#138063)
explicitly pass in the config_entry in coordinator
2025-02-09 16:33:13 +01:00
Michael
9d6b031bf9 Explicitly pass in the config_entry in nuki coordinator (#138064)
explicitly pass in the config_entry in coordinator
2025-02-09 16:33:03 +01:00
Michael
2bea300a7b Explicitly pass in the config_entry in notion coordinator (#138066)
explicitly pass in the config_entry in coordinator
2025-02-09 16:32:41 +01:00
Michael
af3e38a11b Explicitly pass in the config_entry in palazzetti coordinator (#138044)
explicitly pass in the config_entry in coordinator
2025-02-09 16:32:12 +01:00
Michael
ac9444a9ba Explicitly pass in the config_entry in nice_go coordinator (#138070)
explicitly pass in the config_entry in coordinator
2025-02-09 16:31:48 +01:00
Michael
b7949dba44 Explicitly pass in the config_entry in nibe_heatpump coordinator (#138071)
explicitly pass in the config_entry in coordinator
2025-02-09 16:31:37 +01:00
Michael
2e496411a1 Explicitly pass in the config_entry in nextdns coordinator (#138072)
explicitly pass in the config_entry in coordinator
2025-02-09 16:31:24 +01:00
Michael
5dba229c67 Explicitly pass in the config_entry in netgear_lte coordinator (#138074)
explicitly pass in the config_entry in coordinator
2025-02-09 16:31:11 +01:00
Michael
711d423877 Explicitly pass in the config_entry in nanoleaf coordinator (#138075)
explicitly pass in the config_entry in coordinator
2025-02-09 16:30:55 +01:00
Michael
41532ed509 Explicitly pass in the config_entry in nam coordinator (#138076)
explicitly pass in the config_entry in coordinator
2025-02-09 16:30:41 +01:00
Michael
3792888e9d Explicitly pass in the config_entry in myuplink coordinator (#138078)
explicitly pass in the config_entry in coordinator
2025-02-09 16:30:30 +01:00
Michael
18ea407276 Explicitly pass in the config_entry in nexia coordinator (#138073) 2025-02-09 09:24:28 -06:00
Michael
e496270c6b Explicitly pass in the config_entry in qnap coordinator (#138028)
explicitly pass in the config_entry in coordinator
2025-02-09 15:52:58 +01:00
Michael
a8c4cc7269 Explicitly pass in the config_entry in rabbitair coordinator (#137985)
explicitly pass in the config_entry in coordinator
2025-02-09 15:52:46 +01:00
Michael
106c5c661e Explicitly pass in the config_entry in radarr coordinator (#137984)
explicitly pass in the config_entry in coordinator
2025-02-09 15:51:10 +01:00
Michael
a90d471be0 Explicitly pass in the config_entry in radiotherm coordinator (#137983)
explicitly pass in the config_entry in coordinator
2025-02-09 15:50:57 +01:00
Michael
f30018d89e Explicitly pass in the config_entry in rainforest_eagle coordinator (#137981)
explicitly pass in the config_entry in coordinator
2025-02-09 15:50:46 +01:00
Michael
133fdb0ed2 Explicitly pass in the config_entry in teslemetry coordinator (#137907)
explicitly pass in the config_entry in coordinator
2025-02-09 15:50:04 +01:00
Michael
8a7d96919d Explicitly pass in the config_entry in speedtestdotnet coordinator (#137936)
explicitly pass in the config_entry in coordinator
2025-02-09 15:47:19 +01:00
Michael
60a3dbae41 Explicitly pass in the config_entry in sonarr coordinator (#137938)
explicitly pass in the config_entry in coordinator
2025-02-09 15:47:07 +01:00
Michael
e4ec217cfa Explicitly pass in the config_entry in tesla_fleet coordinator (#137909)
explicitly pass in the config_entry in coordinator
2025-02-09 15:46:54 +01:00
Michael
017af4fcf8 Explicitly pass in the config_entry in solarlog coordinator (#137939)
explicitly pass in the config_entry in coordinator
2025-02-09 15:46:31 +01:00
Michael
d522af729a Explicitly pass in the config_entry in rainmachine coordinator (#137979)
explicitly pass in the config_entry in coordinator
2025-02-09 15:46:12 +01:00
Michael
dacb29e7fc Explicitly pass in the config_entry in snapcast coordinator (#137942)
* explicitly pass in the config_entry in coordinator

* break up error message
2025-02-09 15:46:03 +01:00
Michael
2418ef8e8e Explicitly pass in the config_entry in refoss coordinator (#137978)
explicitly pass in the config_entry in coordinator
2025-02-09 15:45:51 +01:00
Michael
4706beb6ef Explicitly pass in the config_entry in renault coordinator (#137977)
explicitly pass in the config_entry in coordinator
2025-02-09 15:44:48 +01:00
Michael
8afc3568fb Explicitly pass in the config_entry in renson coordinator (#137974)
explicitly pass in the config_entry in coordinator
2025-02-09 15:44:31 +01:00
Michael
7b42dc5c35 Explicitly pass in the config_entry in risco coordinator (#137972)
explicitly pass in the config_entry in coordinator
2025-02-09 15:44:18 +01:00
Michael
8f4a466c3d Explicitly pass in the config_entry in rituals_perfume_genie coordinator (#137971)
explicitly pass in the config_entry in coordinator
2025-02-09 15:44:06 +01:00
Michael
fa35f29c27 Explicitly pass in the config_entry in roku coordinator (#137968)
explicitly pass in the config_entry in coordinator
2025-02-09 15:43:56 +01:00
Jan Bouwhuis
96b4a71f6f Explicitly pass in the config_entry in imap coordinator (#138068) 2025-02-09 15:43:43 +01:00
Michael
42adc5c1e0 Explicitly pass in the config_entry in schlage coordinator (#137959)
explicitly pass in the config_entry in coordinator
2025-02-09 15:41:52 +01:00
Michael
7d4888920a Explicitly pass in the config_entry in ruckus_unleashed coordinator (#137965)
explicitly pass in the config_entry in coordinator
2025-02-09 15:35:46 +01:00
Michael
5464e245a2 Explicitly pass in the config_entry in ruuvi_gateway coordinator (#137964)
explicitly pass in the config_entry in coordinator
2025-02-09 15:35:34 +01:00
Michael
71d47aef2e Explicitly pass in the config_entry in sense coordinator (#137958)
explicitly pass in the config_entry in coordinator
2025-02-09 15:33:43 +01:00
Michael
7fec225e79 Explicitly pass in the config_entry in sensoterra coordinator (#137957)
explicitly pass in the config_entry in coordinator
2025-02-09 15:33:29 +01:00
Michael
00803f98d4 Explicitly pass in the config_entry in sfr_box coordinator (#137955)
explicitly pass in the config_entry in coordinator
2025-02-09 15:33:09 +01:00
Michael
8073bccc87 Explicitly pass in the config_entry in sharkiq coordinator (#137954)
explicitly pass in the config_entry in coordinator
2025-02-09 15:32:56 +01:00
Michael
e163c15bb9 Explicitly pass in the config_entry in ourgroceries coordinator (#138047)
explicitly pass in the config_entry in coordinator
2025-02-09 15:32:31 +01:00
Michael
9110557e36 Explicitly pass in the config_entry in smlight coordinator (#137943)
explicitly pass in the config_entry in coordinator
2025-02-09 15:32:18 +01:00
Michael
cc37ff9221 Bump py-synologydsm-api to 2.6.2 (#138060)
bump py-synologydsm-api to 2.6.2
2025-02-09 15:30:48 +01:00
Michael
c3fae96bcf Explicitly pass in the config_entry in openweathermap coordinator (#138049)
explicitly pass in the config_entry in coordinator
2025-02-09 16:07:10 +02:00
Michael
6cdc3acffb Explicitly pass in the config_entry in plaato coordinator (#138040)
explicitly pass in the config_entry in coordinator
2025-02-09 16:02:55 +02:00
Michael
15b8687c53 Explicitly pass in the config_entry in pure_energie coordinator (#138035)
explicitly pass in the config_entry in coordinator
2025-02-09 16:02:18 +02:00
Michael
7e2eef7079 Explicitly pass in the config_entry in pvoutput coordinator (#138033)
explicitly pass in the config_entry in coordinator
2025-02-09 16:01:28 +02:00
Michael
552a5b1bb1 Explicitly pass in the config_entry in pyload coordinator (#138031)
explicitly pass in the config_entry in coordinator
2025-02-09 15:56:17 +02:00
Michael
62461d7525 Explicitly pass in the config_entry in spotify coordinator (#137935)
explicitly pass in the config_entry in coordinator
2025-02-09 14:55:16 +01:00
Michael
1976fdfa55 Explicitly pass in the config_entry in squeezebox coordinator (#137934)
explicitly pass in the config_entry in coordinator
2025-02-09 14:54:46 +01:00
Michael
51d3e449ab Explicitly pass in the config_entry in srp_energy coordinator (#137933)
explicitly pass in the config_entry in coordinator
2025-02-09 14:54:26 +01:00
Michael
9c5928c2d0 Explicitly pass in the config_entry in opensky coordinator (#138051)
explicitly pass in the config_entry in coordinator
2025-02-09 15:54:04 +02:00
Michael
64cbf44da7 Explicitly pass in the config_entry in purpleair coordinator (#138034)
explicitly pass in the config_entry in coordinator
2025-02-09 15:53:52 +02:00
Michael
91c95efb96 Explicitly pass in the config_entry in openuv coordinator (#138050)
explicitly pass in the config_entry in coordinator
2025-02-09 15:53:00 +02:00
Michael
906beb48a4 Explicitly pass in the config_entry in starlink coordinator (#137932)
explicitly pass in the config_entry in coordinator
2025-02-09 14:52:37 +01:00
Michael
6d776469d2 Explicitly pass in the config_entry in opengarage coordinator (#138052)
explicitly pass in the config_entry in coordinator
2025-02-09 15:52:19 +02:00
Michael
e050238106 Explicitly pass in the config_entry in ondilo_ico coordinator (#138054)
explicitly pass in the config_entry in coordinator
2025-02-09 15:51:58 +02:00
Michael
a0e7560b1e Explicitly pass in the config_entry in switchbot_cloud coordinator (#137922)
explicitly pass in the config_entry in coordinator
2025-02-09 14:51:29 +01:00
Michael
7eb0171657 Explicitly pass in the config_entry in system_bridge coordinator (#137921)
explicitly pass in the config_entry in coordinator
2025-02-09 14:51:12 +01:00
Michael
fb0db36886 Explicitly pass in the config_entry in tailscale coordinator (#137913)
explicitly pass in the config_entry in coordinator
2025-02-09 14:50:57 +01:00
Michael
390af71c49 Explicitly pass in the config_entry in ohme coordinator (#138055)
explicitly pass in the config_entry in coordinator
2025-02-09 15:49:55 +02:00
Michael
d92e2194d0 Explicitly pass in the config_entry in tami4 coordinator (#137912)
explicitly pass in the config_entry in coordinator
2025-02-09 14:48:38 +01:00
Michael
583b2e285b Explicitly pass in the config_entry in tautulli coordinator (#137911)
explicitly pass in the config_entry in coordinator
2025-02-09 14:48:27 +01:00
Michael
242bbaeff9 Explicitly pass in the config_entry in technove coordinator (#137910)
explicitly pass in the config_entry in coordinator
2025-02-09 14:48:15 +01:00
Michael
ac3eead8ac Explicitly pass in the config_entry in ping coordinator (#138041)
explicitly pass in the config_entry in coordinator
2025-02-09 14:44:37 +01:00
Michael
4c331d3942 Explicitly pass in the config_entry in qnap_qsw coordinator (#138027)
explicitly pass in the config_entry in coordinator
2025-02-09 14:43:29 +01:00
Michael
0baa6b3668 Explicitly pass in the config_entry in tessie coordinator (#137906)
explicitly pass in the config_entry in coordinator
2025-02-09 14:42:04 +01:00
Michael
4646d35054 Explicitly pass in the config_entry in venstar coordinator (#137880)
* explicitly pass in the config_entry in coordinator

* use common name config_entry
2025-02-09 14:37:31 +01:00
Michael
4031f85acc Explicitly pass in the config_entry in thethingsnetwork coordinator (#137905)
explicitly pass in the config_entry in coordinator
2025-02-09 14:34:36 +01:00
Michael
794143c32f Explicitly pass in the config_entry in tibber coordinator (#137904)
explicitly pass in the config_entry in coordinator
2025-02-09 14:33:54 +01:00
Michael
eb81c935ce Explicitly pass in the config_entry in tolo coordinator (#137902)
explicitly pass in the config_entry in coordinator
2025-02-09 14:33:40 +01:00
Michael
14733de68c Explicitly pass in the config_entry in tomorrowio coordinator (#137900)
explicitly pass in the config_entry in coordinator
2025-02-09 14:33:25 +01:00
Michael
028c74e488 Explicitly pass in the config_entry in totalconnect coordinator (#137898)
explicitly pass in the config_entry in coordinator
2025-02-09 14:33:13 +01:00
Michael
89e29dd14f Explicitly pass in the config_entry in tplink_omada coordinator (#137895)
explicitly pass in the config_entry in coordinator
2025-02-09 14:32:36 +01:00
Michael
d71a539fbc Explicitly pass in the config_entry in touchline_sl coordinator (#137897)
explicitly pass in the config_entry in coordinator
2025-02-09 14:27:04 +01:00
Michael
8a7ee039d1 Explicitly pass in the config_entry in traccar_server coordinator (#137893)
explicitly pass in the config_entry in coordinator
2025-02-09 14:26:39 +01:00
Michael
7986e0fec1 Explicitly pass in the config_entry in tradfri coordinator (#137892)
explicitly pass in the config_entry in coordinator
2025-02-09 14:26:27 +01:00
Michael
cce03d2ee7 Explicitly pass in the config_entry in transmission coordinator (#137891)
explicitly pass in the config_entry in coordinator
2025-02-09 14:26:09 +01:00
Michael
3153c54d1a Explicitly pass in the config_entry in twinkly coordinator (#137889)
explicitly pass in the config_entry in coordinator
2025-02-09 14:25:55 +01:00
Michael
b54b90a604 Explicitly pass in the config_entry in ukraine_alarm coordinator (#137886)
explicitly pass in the config_entry in coordinator
2025-02-09 14:25:43 +01:00
Michael
0cbec3c4bb Explicitly pass in the config_entry in vallox coordinator (#137881)
explicitly pass in the config_entry in coordinator
2025-02-09 14:25:27 +01:00
Michael
e092937c00 Explicitly pass in the config_entry in version coordinator (#137877)
explicitly pass in the config_entry in coordinator
2025-02-09 14:25:06 +01:00
Michael
a2f1501943 Explicitly pass in the config_entry in yamaha_musiccast coordinator (#137863)
explicitly pass in the config_entry in coordinator
2025-02-09 14:24:55 +01:00
Michael
282c2c6a29 Explicitly pass in the config_entry in octoprint coordinator (#138056)
explicitly pass in the config_entry in coordinator
2025-02-09 15:24:43 +02:00
Michael
f464aee33a Explicitly pass in the config_entry in wemo coordinator (#137867)
explicitly pass in the config_entry in coordinator
2025-02-09 14:04:34 +01:00
Michael
0ecff272f2 Explicitly pass in the config_entry in withings coordinator (#137866)
explicitly pass in the config_entry in coordinator
2025-02-09 14:04:14 +01:00
Michael
4d5987fa80 Explicitly pass in the config_entry in philips_js coordinator (#138042)
explicitly pass in the config_entry in coordinator
2025-02-09 13:56:35 +01:00
Michael
28f83cefda Explicitly pass in the config_entry in openexchangerates coordinator (#138053)
explicitly pass in the config_entry in coordinator
2025-02-09 13:55:55 +01:00
Maciej Bieniek
62f9d9e6d3 Bump aioshelly to version 12.4.2 (#137986) 2025-02-09 13:51:02 +01:00
Michael
6cebc0e25f Explicitly pass in the config_entry in pvpc_hourly_pricing coordinator (#138032)
explicitly pass in the config_entry in coordinator
2025-02-09 12:57:48 +01:00
J. Diego Rodríguez Royo
4a8c96471b Raise ConfigEntryAuthFailed at Home Connect update auth error (#136953)
* Raise `ConfigEntryAuthFailed` on `UnauthorizedError` handling

* Implement reauth flow

* Add tests

* Remove unnecessary code from tests
2025-02-09 12:36:08 +01:00
Norbert Rittel
80cff85c14 Fix sentence-casing in user-facing strings of screenlogic (#138015) 2025-02-09 10:55:27 +01:00
Paulus Schoutsen
df307aeb6d Stream OpenAI messages into the chat log (#137400) 2025-02-09 00:01:24 -05:00
Michael
a526baa831 Explicitly pass in the config_entry in roborock coordinator (#137970)
explicitly pass in the config_entry in coordinator
2025-02-08 20:53:44 -08:00
Marc Mueller
6e84280e3c Small typing improvements (#137994) 2025-02-09 04:37:49 +01:00
Michael
932c2f794e Explicitly pass in the config_entry in rainbird coordinator (#137982)
explicitly pass in the config_entry in coordinator
2025-02-08 19:29:36 -08:00
Michael
54c4ee7838 Explicitly pass in the config_entry in vizio coordinator (#137876)
explicitly pass in the config_entry in coordinator
2025-02-09 00:40:14 +01:00
Michael
7ec7badef6 Explicitly pass in the config_entry in volvooncall coordinator (#137875)
explicitly pass in the config_entry in coordinator
2025-02-09 00:39:42 +01:00
Michael
17569d8186 Explicitly pass in the config_entry in wallbox coordinator (#137874)
explicitly pass in the config_entry in coordinator
2025-02-09 00:39:11 +01:00
David Knowles
50c15f3056 Bump pydrawise to 2025.2.0 (#137961) 2025-02-08 23:29:18 +02:00
Michael
bdcf2a1e56 Explicitly pass in the config_entry in ridwell coordinator (#137973)
explicitly pass in the config_entry in coordinator
2025-02-08 23:18:55 +02:00
Steve Sinchak
20707b94b5 Improve emulated_hue logging to identify bad devices (#137919)
* Improve emulated_hue logging to identify bad devices

* Updated per @bdraco request
2025-02-08 22:12:51 +01:00
Michael
361933091c Explicitly pass in the config_entry in rova coordinator (#137966)
explicitly pass in the config_entry in coordinator
2025-02-08 22:04:38 +01:00
Michael
f643f76f1f Explicitly pass in the config_entry in upnp coordinator (#137885)
explicitly pass in the config_entry in coordinator
2025-02-08 22:03:40 +01:00
Michael
999badf675 Explicitly pass in the config_entry in toon coordinator (#137899)
explicitly pass in the config_entry in coordinator
2025-02-08 22:02:30 +01:00
Michael
dfa2c218e4 Explicitly pass in the config_entry in verisure coordinator (#137879)
explicitly pass in the config_entry in coordinator
2025-02-08 22:00:36 +01:00
Michael
52fb99f967 Explicitly pass in the config_entry in weatherflow_cloud coordinator (#137871)
explicitly pass in the config_entry in coordinator
2025-02-08 21:58:33 +01:00
Michael
a2a55d9ff0 Explicitly pass in the config_entry in weatherkit coordinator (#137869)
explicitly pass in the config_entry in coordinator
2025-02-08 21:57:41 +01:00
Michael
b338de9a30 Explicitly pass in the config_entry in tado coordinator (#137916)
explicitly pass in the config_entry in coordinator
2025-02-08 21:57:03 +01:00
Michael
c47a97a4f0 Explicitly pass in the config_entry in romy coordinator (#137967)
explicitly pass in the config_entry in coordinator
2025-02-08 22:54:12 +02:00
Michael
2ef4e75014 Explicitly pass in the config_entry in yolink coordinator (#137861)
explicitly pass in the config_entry in coordinator
2025-02-08 21:51:28 +01:00
Michael
07e9d80607 Explicitly pass in the config_entry in weheat coordinator (#137868)
explicitly pass in the config_entry in coordinator
2025-02-08 21:46:05 +01:00
Michael
a59d829e6a Explicitly pass in the config_entry in seventeentrack coordinator (#137956)
explicitly pass in the config_entry in coordinator
2025-02-08 22:40:51 +02:00
Michael
b512838d1e Explicitly pass in the config_entry in smarty coordinator (#137944)
explicitly pass in the config_entry in coordinator
2025-02-08 22:39:15 +02:00
Michael
13dbeed5c2 Explicitly pass in the config_entry in stookwijzer coordinator (#137928)
explicitly pass in the config_entry in coordinator
2025-02-08 22:36:59 +02:00
Michael
071b46055b Explicitly pass in the config_entry in steam_online coordinator (#137929)
explicitly pass in the config_entry in coordinator
2025-02-08 22:36:14 +02:00
Michael
93dad987f8 Explicitly pass in the config_entry in sanix coordinator (#137960)
explicitly pass in the config_entry in coordinator
2025-02-08 22:35:19 +02:00
Michael
61ce1fc009 Explicitly pass in the config_entry in samsungtv coordinator (#137962)
explicitly pass in the config_entry in coordinator
2025-02-08 22:33:36 +02:00
Michael
12072b625c Explicitly pass in the config_entry in solaredge coordinator (#137941)
explicitly pass in the config_entry in coordinator
2025-02-08 21:28:48 +01:00
Michael
beb5c3b838 Explicitly pass in the config_entry in slide_local coordinator (#137945)
explicitly pass in the config_entry in coordinator
2025-02-08 21:27:20 +01:00
Michael
c17007e17b Explicitly pass in the config_entry in xbox coordinator (#137864)
explicitly pass in the config_entry in coordinator
2025-02-08 21:25:48 +01:00
Michael
3ec872fbfe Explicitly pass in the config_entry in yardian coordinator (#137862)
explicitly pass in the config_entry in coordinator
2025-02-08 21:25:10 +01:00
Michael
bcc3e6d31c Explicitly pass in the config_entry in streamlabswater coordinator (#137927)
explicitly pass in the config_entry in coordinator
2025-02-08 22:19:38 +02:00
Michael
43569df537 Explicitly pass in the config_entry in switchbee coordinator (#137923)
explicitly pass in the config_entry in coordinator
2025-02-08 22:19:08 +02:00
Michael
a7dbcf72c2 Explicitly pass in the config_entry in swiss_public_transport coordinator (#137924)
explicitly pass in the config_entry in coordinator
2025-02-08 22:14:47 +02:00
Michael
022119e74f Explicitly pass in the config_entry in surepetcare coordinator (#137926)
explicitly pass in the config_entry in coordinator
2025-02-08 22:12:10 +02:00
Michael
5871ece4df Explicitly pass in the config_entry in shelly coordinator (#137951)
explicitly pass in the config_entry in coordinator
2025-02-08 22:11:30 +02:00
Glenn Vandeuren (aka Iondependent)
6eea232a23 Bump nhc to 0.4.10 (#137903) 2025-02-08 20:57:56 +01:00
Piotr Buliński
848ee762a7 Add support for fireplace mode control for flexit_bacnet integration (#137594) 2025-02-08 20:54:13 +01:00
Michael
1374fb23db Explicitly pass in the config_entry in sleepiq coordinator (#137946)
explicitly pass in the config_entry in coordinator
2025-02-08 21:42:44 +02:00
Michael
22d6913bc5 Explicitly pass in the config_entry in simplefin coordinator (#137948)
explicitly pass in the config_entry in coordinator
2025-02-08 21:40:51 +02:00
Norbert Rittel
743873b2e9 Fix spelling of "Wi-Fi" in keenetic_ndms2 integration (#137920) 2025-02-08 21:38:28 +02:00
Norbert Rittel
2db6860b60 Fix three action descriptions in xiaomi_miio (#137918)
* Update strings.json

* Change "a robot" to "the robot"

Co-authored-by: Sebastian Muszynski <basti@linkt.de>

---------

Co-authored-by: Sebastian Muszynski <basti@linkt.de>
2025-02-08 21:36:37 +02:00
Manu
074500dc8a Bump bring-api to version 1.0.2 (#137925) 2025-02-08 21:35:41 +02:00
Michael
cfb062a5a4 Explicitly pass in the config_entry in skybell coordinator (#137947)
explicitly pass in the config_entry in coordinator
2025-02-08 21:33:50 +02:00
Michael
e698e436d6 Explicitly pass in the config_entry in uptimerobot coordinator (#137883)
explicitly pass in the config_entry in coordinator
2025-02-08 20:25:14 +01:00
Michael
32d13f3356 Explicitly pass in the config_entry in steamist coordinator (#137930)
explicitly pass in the config_entry in coordinator
2025-02-08 20:24:38 +01:00
Norbert Rittel
ed8ee34a28 Fix sentence-casing and description of homekit.reload action (#137894) 2025-02-08 12:24:14 -06:00
Michael
8fcc1f7e10 Explicitly pass in the config_entry in v2c coordinator (#137882)
explicitly pass in the config_entry in coordinator
2025-02-08 18:51:39 +01:00
Paulus Schoutsen
907826e909 Fix heos migration (#137887)
* Fix heos migration

* Fix for loop
2025-02-08 11:56:23 -05:00
Martin Hjelmare
bd32a6ab83 Prolong ondilo ico update interval (#137888) 2025-02-08 17:54:48 +01:00
Michael
219b5324e9 Explicitly pass in the config_entry in watergate coordinator (#137872)
explicitly pass in the config_entry in coordinator
2025-02-08 17:21:17 +01:00
Michael
3cce2d679c Explicitly pass in the config_entry in waqi coordinator (#137873)
explicitly pass in the config_entry in coordinator
2025-02-08 17:21:09 +01:00
Michael
5ade026b87 Explicitly pass in the config_entry in ws66i coordinator (#137865)
explicitly pass in the config_entry in coordinator
2025-02-08 16:45:57 +01:00
Michael
d07c2b8226 Explicitly pass in the config_entry in youtube coordinator (#137859)
explicitly pass in the config_entry in coordinator
2025-02-08 16:45:36 +01:00
Michael
367dafdfe7 Explicitly pass in the config_entry in zeversolar coordinator (#137857)
explicitly pass in the config_entry in coordinator
2025-02-08 16:45:23 +01:00
Michael
8976e7f4ea Explicitly pass in the config_entry in zamg coordinator (#137858)
explicitly pass in the config_entry in coordinator
2025-02-08 17:33:46 +02:00
J. Diego Rodríguez Royo
91dbe3092f Only allow single Home Connect config entry (#137088)
* Make Home Connect config entry unique

* Use unique ID for Home connect config entry

* Remove unnecessary code

* Revert "Use unique ID for Home connect config entry"

This reverts commit 4241317469.

* Added tests
2025-02-08 16:29:00 +01:00
Bouwe Westerdijk
7f6855045a Bump plugwise to v1.7.1 and adapt (#137599)
* Bump plugwise v1.7.1

* Refresh test-fixtures

* Adapt integration code

* Adapt test code

* Fixes

* Save updated snapshot

* Ruff fixes

* More ruff fixes
2025-02-08 17:02:24 +02:00
jdelaney72
303ab750ab Bump noaa-coops to version 0.4.0 (#137777)
Bump noaa-coops 0.4.0
2cd2fca..0972373
2025-02-08 15:56:54 +01:00
epenet
58eb8e1598 Move ForkedDaapdUpdater to separate module (#137654)
* Move ForkedDaapdUpdater to separate module

* Remove moved constants
2025-02-08 15:52:30 +01:00
Artur Pragacz
8ddae828f7 Fix DAB radio in Onkyo (#137852) 2025-02-08 15:51:05 +01:00
Franck Nijhof
7bf81037c1 Add Peblar charge switch (#137853)
* Add Peblar charge switch

* Update snapshots
2025-02-08 15:48:31 +01:00
J. Nick Koston
eab510f440 Fix tplink child updates taking up to 60s (#137782)
* Fix tplink child updates taking up to 60s

fixes #137562

* Fix tplink child updates taking up to 60s

fixes #137562

* Fix tplink child updates taking up to 60s

fixes #137562

* Fix tplink child updates taking up to 60s

fixes #137562

* Fix tplink child updates taking up to 60s

fixes #137562

* Fix tplink child updates taking up to 60s

fixes #137562

* Fix tplink child updates taking up to 60s

fixes #137562

* Revert "Fix tplink child updates taking up to 60s"

This reverts commit 5cd20a120f.
2025-02-08 15:47:01 +01:00
David Bonnes
a542a2e021 Refactor evohome for major bump of client to 1.0.2 (#135436)
* working test_init

* update fixtures to be compliant with new schema

* test_storage is now working

* all tests passing

* bump client to 1.0.1b0

* test commit (working tests)

* use only id (not e.g. zoneId), use StrEnums

* mypy, lint

* remove deprecated module

* remove waffle

* improve typing of asserts

* broker is now coordinator

* WIP - test failing

* rename class

* remove unneeded async_dispatcher_send()

* restore missing code

* harden test

* bugfix failing test

* don't capture blind except

* shrink log messages

* doctweak

* rationalize asserts

* remove unneeded listerner

* refactor setup

* bump client to 1.0.2b0

* bump client to 1.0.2b1

* refactor extended state attrs

* pass UpdateFailed to _async_refresh()

* Update homeassistant/components/evohome/entity.py

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

* Update homeassistant/components/evohome/entity.py

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

* not even lint

* undo not even lint

* remove unused logger

* restore old namespace for e_s_a

* minimize diff

* doctweak

* remove unused method

* lint

* DUC now working

* restore old camelCase keynames

* tweak

* small tweak to _handle_coordinator_update()

* Update homeassistant/components/evohome/coordinator.py

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

* add test of coordinator

* bump client to 1.0.2

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2025-02-08 14:45:48 +00:00
Michael
21dd6fa53d Explicitly pass in the config_entry in flick_electric coordinator (#137816)
* explicitly pass in the config_entry in coordinator

* Apply suggestions from code review

Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com>

---------

Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com>
2025-02-08 15:43:03 +01:00
Patrick
97cde37702 Fix manufacturer_id matching for 0 (#137802)
fix manufacturer_id matching for 0
2025-02-08 15:40:59 +01:00
Norbert Rittel
dbf403a2d3 Make action descriptions in adguard consistent, remove "true/false" (#137799)
* Make action descriptions in adguard consistent

Change the remaining two to also use third-person singular for consistency.

* Remove "true" and "false" for UI-friendly wording
2025-02-08 15:39:36 +01:00
Michael
11d5628da7 Explicitly pass in the config_entry in google_photos coordinator (#137840)
explicitly pass in the config_entry in coordinator
2025-02-08 15:35:00 +01:00
Michael
9e091f7a73 Explicitly pass in the config_entry in google coordinator (#137839)
explicitly pass in the config_entry in coordinator
2025-02-08 15:34:53 +01:00
Michael
70d5685b72 Explicitly pass in the config_entry in geocaching coordinator (#137831)
explicitly pass in the config_entry in coordinator
2025-02-08 09:34:43 -05:00
Michael
7c9312b3cf Explicitly pass in the config_entry in goodwe coordinator (#137838)
explicitly pass in the config_entry in coordinator
2025-02-08 15:34:34 +01:00
Michael
1179278d50 Explicitly pass in the config_entry in fully_kiosk coordinator (#137827)
explicitly pass in the config_entry in coordinator
2025-02-08 15:34:12 +01:00
Michael
bc07598f47 Explicitly pass in the config_entry in fujitsu_fglair coordinator (#137826)
explicitly pass in the config_entry in coordinator
2025-02-08 15:33:55 +01:00
Michael
04c20b9534 Explicitly pass in the config_entry in fyta coordinator (#137828)
explicitly pass in the config_entry in coordinator
2025-02-08 09:33:52 -05:00
Michael
e8e4fb296b Explicitly pass in the config_entry in flux_led coordinator (#137823)
explicitly pass in the config_entry in coordinator
2025-02-08 15:33:42 +01:00
Michael
846797a394 Explicitly pass in the config_entry in google_tasks coordinator (#137842)
explicitly pass in the config_entry in coordinator
2025-02-08 09:33:21 -05:00
Michael
c9ffeb8007 Explicitly pass in the config_entry in flipr coordinator (#137818)
explicitly pass in the config_entry in coordinator
2025-02-08 15:33:10 +01:00
Michael
d97ef67620 Explicitly pass in the config_entry in gios coordinator (#137832)
explicitly pass in the config_entry in coordinator
2025-02-08 15:32:46 +01:00
Michael
b22830260c Explicitly pass in the config_entry in filesize coordinator (#137807)
explicitly pass in the config_entry in coordinator
2025-02-08 15:32:32 +01:00
Michael
de1a503284 Explicitly pass in the config_entry in enphase envoy coordinator (#137806)
explicitly pass in the config_entry in coordinator
2025-02-08 15:32:20 +01:00
Michael
780e6aa073 Explicitly pass in the config_entry in awair coordinator init (#137717)
explicitly pass in the config_entry in awair coordinator init
2025-02-08 15:32:11 +01:00
tronikos
f3aeca5a71 Call backup listener during setup in Google Drive (#137789) 2025-02-08 14:53:15 +01:00
Marc Mueller
60d966f06f Limit transmission ConfigEntrySelect to integration domain (#137769) 2025-02-08 14:20:30 +01:00
Piotr Buliński
37239fca44 Update flexit_bacnet dependecy 2.2.1 -> 2.2.3 (#137730) 2025-02-08 14:13:58 +01:00
Michael
daccb3e9b3 Explicitly pass in the config_entry in fitbit coordinator (#137808)
explicitly pass in the config_entry in coordinator
2025-02-08 15:06:50 +02:00
Michael
78fce5112d Explicitly pass in the config_entry in guardian coordinator (#137848)
explicitly pass in the config_entry in coordinator
2025-02-08 14:00:50 +01:00
Dan Raper
de79fb26db Bump ohmepy to 1.2.9 (#137695) 2025-02-08 14:52:59 +02:00
Allen Porter
ce66b47653 Update fitbit quality scale for runtime-data (#137785) 2025-02-08 14:52:28 +02:00
Christopher Fenner
074d384d27 Bump PyViCare to 2.42.0 (#137804) 2025-02-08 14:51:00 +02:00
Michael
ad9d43bc50 Explicitly pass in the config_entry in duke_energy coordinator (#137741)
explicitly pass in the config_entry in coordinator
2025-02-08 13:46:59 +01:00
Michael
9e8f2e81bd Explicitly pass in the config_entry in enphase flexit_bacnet coordinator (#137814)
explicitly pass in the config_entry in coordinator
2025-02-08 13:43:28 +01:00
Joris Pelgröm
fae2c94c74 Add snapshot tests for setup of LetPot platforms (#137756) 2025-02-08 13:42:43 +01:00
Michael
1c7bf9f589 Explicitly pass in the config_entry in enigma2 coordinator (#137739)
explicitly pass in the config_entry in coordinator
2025-02-08 13:22:37 +01:00
Michael
88a2b2ab90 Explicitly pass in the config_entry in deluge coordinator (#137733)
explicitly pass in the config_entry in coordinator
2025-02-08 13:22:00 +01:00
Michael
2d72b814d6 Explicitly pass in the config_entry in cert_expiry coordinator init (#137728)
explicitly pass in the config_entry in cert_expiry coordinator init
2025-02-08 13:21:13 +01:00
Marc Mueller
0a842d171b Limit habitica ConfigEntrySelect to integration domain (#137767) 2025-02-08 13:20:30 +01:00
Michael
2f0e661569 Explicitly pass in the config_entry in apsystems coordinator init (#137708)
explicitly pass in the config_entry in apsystems coordinator init
2025-02-08 13:19:06 +01:00
Michael
239408aa5d Explicitly pass in the config_entry in garages_amsterdam coordinator (#137829)
explicitly pass in the config_entry in coordinator
2025-02-08 13:17:42 +01:00
Michael
13f6f045f5 Explicitly pass in the config_entry in github coordinator (#137834)
explicitly pass in the config_entry in coordinator
2025-02-08 13:17:25 +01:00
Michael
0efdceef27 Explicitly pass in the config_entry in glances coordinator (#137835)
explicitly pass in the config_entry in coordinator
2025-02-08 13:17:06 +01:00
Michael
9bdd8d04c5 Explicitly pass in the config_entry in goalzero coordinator (#137836)
explicitly pass in the config_entry in coordinator
2025-02-08 13:16:49 +01:00
Michael
39d6aaf294 Explicitly pass in the config_entry in gogogate2 coordinator (#137837)
explicitly pass in the config_entry in coordinator
2025-02-08 13:16:32 +01:00
Michael
2634f0aba0 Explicitly pass in the config_entry in atag coordinator init (#137716)
explicitly pass in the config_entry in atag coordinator init
2025-02-08 13:16:16 +01:00
Michael
5e99b06126 Explicitly pass in the config_entry in forecast_solar coordinator (#137824)
explicitly pass in the config_entry in coordinator
2025-02-08 13:16:03 +01:00
Michael
0b1afc68b0 Explicitly pass in the config_entry in flume coordinator (#137822)
explicitly pass in the config_entry in coordinator
2025-02-08 13:15:50 +01:00
Michael
f8ac48fc78 Explicitly pass in the config_entry in flo coordinator (#137819)
explicitly pass in the config_entry in coordinator
2025-02-08 13:15:37 +01:00
Michael
86e44fc1cf Explicitly pass in the config_entry in govee_light_local coordinator (#137843)
explicitly pass in the config_entry in coordinator
2025-02-08 13:15:24 +01:00
Michael
36a0c49cee Explicitly pass in the config_entry in gree coordinator (#137844)
explicitly pass in the config_entry in coordinator
2025-02-08 13:15:13 +01:00
Michael
a797b09bcb Explicitly pass in the config_entry in gardena_bluetooth coordinator (#137830)
explicitly pass in the config_entry in coordinator
2025-02-08 12:47:57 +01:00
Michael
4893cdaa80 Explicitly pass in the config_entry in aurora coordinator init (#137714)
explicitly pass in the config_entry in aurora coordinator init
2025-02-08 12:47:36 +01:00
Michael
92234f86e8 Explicitly pass in the config_entry in aseko_pool_live coordinator init (#137711)
explicitly pass in the config_entry in aseko_pool_live coordinator init
2025-02-08 12:46:51 +01:00
Michael
c71116cc12 Explicitly pass in the config_entry in aosmith coordinator init (#137710)
explicitly pass in the config_entry in aosmith coordinator init
2025-02-08 12:46:05 +01:00
Michael
af87e36048 Explicitly pass in the config_entry in fjaraskupan coordinator (#137825)
explicitly pass in the config_entry in coordinator
2025-02-08 12:12:07 +01:00
Michael
1522f7b3a8 Explicitly pass in the config_entry in airzone_cloud coordinator init (#137703)
explicitly pass in the config_entry in airzone_cloud coordinator init
2025-02-08 12:03:26 +01:00
Michael
32ef37cd58 Explicitly pass in the config_entry in airq coordinator init (#137704)
explicitly pass in the config_entry in airq coordinator init
2025-02-08 11:48:55 +01:00
Michael
327811c89a Explicitly pass in the config_entry in co2signal coordinator (#137732)
explicitly pass in the config_entry in coordinator
2025-02-08 10:53:13 +01:00
tronikos
c370fa0489 Use the external URL set in Settings > System > Network if my is disabled as redirect URL for Google Drive instructions (#137791)
* Use the Assistant URL set in Settings > System > Network if my is disabled

* fix

* Remove async_get_redirect_uri
2025-02-08 01:16:10 -08:00
Artur Pragacz
ae55e26546 Group helpers of set_up_integrations in bootstrap (#137673) 2025-02-08 10:07:22 +01:00
Marc Mueller
6cb0201031 Limit google_sheets ConfigEntrySelect to integration domain (#137766) 2025-02-08 09:57:00 +01:00
IceBotYT
332a0c5082 LaCrosse View new endpoint (#137284)
* Switch to new endpoint in LaCrosse View

* Coverage

* Avoid merge conflict

* Switch to UpdateFailed
2025-02-08 09:14:00 +01:00
RJPoelstra
64886f717d Add quality_scale to motionmount (#137012)
* Mark as ready for Bronze

* Add rest of quality scale rules

* Evaluate all quality scale rules

* Exempt repair-issues

* Update dynamic-devices comment

Co-authored-by: Josef Zweck <josef@zweck.dev>

---------

Co-authored-by: Josef Zweck <josef@zweck.dev>
2025-02-08 08:59:47 +01:00
tronikos
5f5ad34176 Info log when Android TV Remote is unavailable (#137794) 2025-02-08 08:59:20 +01:00
Milan Meulemans
6c74824ac1 Add discovery for Nanoleaf Blocks and 4D (#137792) 2025-02-08 08:51:33 +01:00
Josef Zweck
0e0129968b Bump onedrive_personal_sdk to 0.0.9 (#137729) 2025-02-08 07:38:49 +01:00
Paulus Schoutsen
f64b494282 Conversation chat log cleanup and optimization (#137784) 2025-02-07 22:06:16 -08:00
tronikos
aa19207ea4 Clear statistics when you unload the Opower integration (#135908)
* Clear statistics when you remove the Opower integration

* fix
2025-02-07 22:41:09 -05:00
Paulus Schoutsen
7883106e7c Make sure we always have agent_id in ConversationInput (#137679)
* Make sure we always have agent_id in ConversationInput

* fix type
2025-02-07 18:25:21 -08:00
Michael
61d1b34cef Explicitly pass in the config_entry in dwd weather warnings coordinator (#137737) 2025-02-08 00:04:45 +00:00
Michael
e9bfb6baee Explicitly pass in the config_entry in emoncms coordinator (#137743) 2025-02-08 00:04:05 +00:00
Michael
7fc92e4c25 Explicitly pass in the config_entry in dremel_3d_printer coordinator (#137740) 2025-02-08 00:02:49 +00:00
Michael
0cbef18b73 Explicitly pass in the config_entry in eheimdigital coordinator (#137738) 2025-02-08 00:01:14 +00:00
Joris Pelgröm
07fdec76e1 Explicitly pass in the config_entry in letpot coordinator (#137759) 2025-02-07 23:56:48 +01:00
Michael
fd1213b70d Explicitly pass in the config_entry in apcupsd coordinator init (#137709)
explicitly pass in the config_entry in apcupsd coordinator init
2025-02-07 23:55:41 +01:00
Michael
1d3cef5c6f Explicitly pass in the config_entry in analytics_insight coordinator init (#137706)
explicitly pass in the config_entry in analytics_insight coordinator init
2025-02-07 23:38:52 +01:00
Michael
ee80966a10 Explicitly pass in the config_entry in android_ip_webcam coordinator … (#137705)
explicitly pass in the config_entry in android_ip_webcam coordinator init
2025-02-07 23:30:57 +01:00
Michael
2d9db62828 Explicitly pass in the config_entry in arve coordinator init (#137712)
explicitly pass in the config_entry in arve coordinator init
2025-02-07 23:20:08 +01:00
Michael
292409f1d5 Explicitly pass in the config_entry in aurora_abb_powerone coordinator init (#137715) 2025-02-07 21:16:09 +00:00
Michael
b9a3cab4b4 Explicitly pass in the config_entry in braviatv coordinator init (#137724)
explicitly pass in the config_entry in braviatv coordinator init
2025-02-07 20:43:54 +01:00
Michael
7007bd121f Explicitly pass in the config_entry in aquacell coordinator init (#137713)
explicitly pass in the config_entry in aquacell coordinator init
2025-02-07 20:42:05 +01:00
Michael
c595b12e98 Explicitly pass in the config_entry in airzone coordinator init (#137702)
explicitly pass in the config_entry in airzone coordinator init
2025-02-07 20:41:53 +01:00
Michael
c300be5eee Explicitly pass in the config_entry in aussie_broadband coordinator init (#137719)
explicitly pass in the config_entry in aussie_broadband coordinator init
2025-02-07 20:41:40 +01:00
Marc Mueller
55cda68866 Limit flume ConfigEntrySelect to integration domain (#137661) 2025-02-07 20:34:52 +01:00
Michael
3c7b9bec3c Explicitly pass in the config_entry in discovergy coordinator (#137734)
explicitly pass in the config_entry in coordinator
2025-02-07 20:23:42 +01:00
Norbert Rittel
54be256bea Fix wrong reference for description of password field in bring (#137720)
* Fix wrong reference for description of password field in bring

* Fix second occurrence as well
2025-02-07 20:15:04 +01:00
Michael
c814f4f307 Explicitly pass in the config entry in amberelectric coordinator init (#137700)
* explicitly pass in the config_entry in amberelectric coordinator init

* fix amberelectric tests
2025-02-07 20:11:04 +01:00
Michael
1ff9ec661c Explicitly pass in the config_entry in ambient_network coordinator init (#137707)
explicitly pass in the config_entry in ambient_network coordinator init
2025-02-07 20:07:01 +01:00
J. Nick Koston
684d8dac0d Bump SQLAlchemy to 2.0.38 (#137693) 2025-02-07 13:03:19 -06:00
Michael
c85f7d0794 Explicitly pass in the config_entry in blink coordinator init (#137727)
explicitly pass in the config_entry in blink coordinator init
2025-02-07 19:52:50 +01:00
Michael
8f1a0eadc0 Pass in the config_entry in brother coordinator init (#137726)
explicitly pass in the config_entry in brother coordinator init
2025-02-07 19:52:13 +01:00
Michael
babb1c5589 Explicitly pass in the config_entry in bsblan coordinator init (#137725)
explicitly pass in the config_entry in bsblan coordinator init
2025-02-07 19:51:05 +01:00
Michael
2b7e67aa0c Explicitly pass in the config entry in anova coordinator init (#137701)
* explicitly pass in the config_entry in anova coordinator init

* fix anova
2025-02-07 19:47:39 +01:00
Michael
a8de073076 Explicitly pass in the config_entry in airly coordinator init (#137698)
explicitly pass in the config_entry in airly coordinator init
2025-02-07 19:46:21 +01:00
Michael
42169e28a4 Explicitly pass in the config_entry in airnow coordinator init (#137699)
explicitly pass in the config_entry in airnow coordinator init
2025-02-07 19:45:23 +01:00
Michael
1f0f1ac388 Explicitly pass in the config_entry in autarco coordinator init (#137718)
explicitly pass in the config_entry in autarco coordinator init
2025-02-07 19:39:21 +01:00
Michael
2eb6a03640 Pass in the config_entry in azure_devops coordinator init (#137722)
explicitly pass in the config_entry in azure_devops coordinator init
2025-02-07 19:38:41 +01:00
Norbert Rittel
9a202b5e56 Fix spelling of "AccuWeather" and sentence-casing plus grammar (#137696) 2025-02-07 19:47:05 +02:00
Maciej Bieniek
6ff733b225 Set the device class for the Shelly virtual sensor (#137068)
* Map sensor role to the device class

* Add test

* Fix docstring
2025-02-07 17:36:26 +02:00
puddly
b3205ea1cd Do not rely on pyserial for port scanning with the CM5 + ZHA (#137585)
Do not rely on pyserial for port scanning with the CM5
2025-02-07 16:33:40 +01:00
Maciej Bieniek
aa6fa3cdad Don't use the current temperature from Shelly BLU TRV as a state for External Temperature number entity (#137658)
Introduce RpcBluTrvExtTempNumber for External Temperature entity
2025-02-07 16:32:28 +01:00
Norbert Rittel
b9dccb9125 Fix spelling of "SwitchBot", "ID" plus sentence-casing in switchbot (#137684)
Fix spelling of "SwitchBot", "ID" and sentence-case "encryption"
2025-02-07 16:32:03 +01:00
epenet
1d6aec44df Use config_entry.async_on_unload in forked_daapd (#137656) 2025-02-07 16:30:58 +01:00
Josef Zweck
040e1ff5fb Use separate metadata files for onedrive (#137549) 2025-02-07 16:06:33 +01:00
Andrew Sayre
dd82212e45 Handle previously migrated HEOS device identifier (#137596) 2025-02-07 09:04:34 -06:00
Norbert Rittel
600269ad0a Replace key names with friendly names in todoist actions (#137667)
* Replace key names with friendly names in todoist actions

Also fix the grammar mistake in "A members username …" by rewordings.

* Fix grammar in reminder_date and reminder_date_string descriptions

* Fix description of due_date_string, replacing "date" with "time"

According to the online docs this is not the day but the time when this is due. Just like the reminder_date_string.

Example in the docs: "tomorrow at 14:00"
2025-02-07 15:33:38 +01:00
Shay Levy
239f2dcb3e Fix LG webOS TV turn off when device is already off (#137675) 2025-02-07 15:25:09 +01:00
Artur Pragacz
6d6961ae6e Clean up colliding deleted devices when updating non-deleted devices (#135592)
* Fix Schrödinger's devices

* Address feedback

* Add comment with broader context
2025-02-07 14:44:44 +01:00
epenet
e340f5af8d Use runtime_data in flume (#137660) 2025-02-07 13:06:13 +01:00
Norbert Rittel
da0481852e Make all occurrences of "Home Guard" in lg_thinq consistent (#137662)
LQ uses "Home Guard" as a trademark, so all occurrences in the integration should be consistent in spelling.
2025-02-07 13:05:32 +01:00
Erwin Douna
d6d9c9f01a Bump PyTado to version 0.18.6 (#137655) 2025-02-07 12:49:45 +01:00
Marc Mueller
4c9127a0ea Remove unnecessary type casts (#137657) 2025-02-07 12:28:44 +01:00
Andre Lengwenus
d9726ab08c Use snapshots for ConfigEntry migration tests (#136093)
* Add snapshots for migration

* Reduce fixtures specific to migration

* Explicitly test versions of migrated entries
2025-02-07 11:32:47 +01:00
epenet
bdc847c7ac Use runtime_data in firmata (#137630) 2025-02-07 11:30:13 +01:00
epenet
ff42353e61 Use runtime_data in fivem (#137632) 2025-02-07 11:27:41 +01:00
epenet
60fd07f501 Use runtime_data in frontier_silicon (#137633) 2025-02-07 11:26:25 +01:00
epenet
f06d209b2d Improve type hints in fireservicerota (#137628) 2025-02-07 11:14:45 +01:00
Norbert Rittel
4323968222 Replace "HassOS" with "Home Assistant OS" in homeassistant_hardware (#137637)
Makes it consistent with all other occurrences.
Also change "otbr" and "zha" to uppercase.
2025-02-07 11:13:55 +01:00
Bouwe Westerdijk
8f83a4c485 Plugwise: fix double CONF_PASSWORD occurrence (#137641)
Fix double CONF_PASSWORD occurrence
2025-02-07 10:09:56 +01:00
epenet
2639a3bce8 Fix missing type annotation in bring (#137647) 2025-02-07 10:08:50 +01:00
Manu
448a24802d Add reconfiguration flow to Bring! integration (#137529) 2025-02-07 10:08:02 +01:00
epenet
5b8ef05bc2 Use runtime_data in foscam (#137646) 2025-02-07 10:06:44 +01:00
epenet
27cb88db1a Use runtime_data in fitbit (#137631) 2025-02-07 09:53:39 +01:00
epenet
0e443bf748 Fix fireservicerota unload (#137629) 2025-02-07 09:53:16 +01:00
epenet
b6c1c10035 Use runtime_data in freedompro (#137635) 2025-02-07 09:52:52 +01:00
Michael
734f531a56 Pass in the config_entry in youless coordinator init (#137471)
explicitly pass in the config_entry in coordinator init
2025-02-07 09:46:53 +01:00
Manu
b9a9da1e1d Add event platform to Bring! integration (#136935)
* Add event platform

* update
2025-02-07 09:44:14 +01:00
Nathan Spencer
eaf31051c5 Add HNT wallet/rate to coinbase (#137592) 2025-02-07 09:43:32 +01:00
Michael Arthur
2af3a56ab3 Bump Electrickiwi-api to 0.9.14 (#137614)
* bump library to fix bug with post

* rebuild
2025-02-07 09:36:30 +01:00
Allen Porter
0e0bc4bfe9 Update google-nest-sdm to 7.1.3 (#137625)
* Update google-nest-sdm to 7.1.2

* Bump nest to 7.1.3
2025-02-07 09:33:58 +01:00
Marc Mueller
f2e6231aa2 Remove redundant dependency markers (#137608) 2025-02-07 05:12:02 +01:00
TheJulianJES
c89b416f85 Bump ZHA to 0.0.48 (#137610) 2025-02-07 00:33:07 +00:00
Andrew Sayre
a0b8ad16ba Add remaining HEOS exception translations (#136878)
Add coordinator exc translations
2025-02-06 23:41:09 +01:00
Duco Sebel
fd6e2a6e19 Add Wi-Fi RSSI sensor in HomeWizard (#136754) 2025-02-06 23:37:26 +01:00
Matthias Alphart
8a08a87a25 KNX tests: Support loading different config store fixtures (#136961)
* Support loading different config store fixtures

* Add config store test for binary sensor

* Update README.md

* remove unused fixture

* AddAdd config store test for switch
2025-02-06 23:24:09 +01:00
Michael Arthur
609188bb33 Bump electrickiwi-api to 0.9.13 (#137601)
* bump ek api version to fix deps

* Revert "Skip building wheels for electrickiwi-api (#137556)"

This reverts commit 5f6068eea4.

---------

Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
2025-02-06 22:47:53 +01:00
Jan Rieger
c8bafe9c46 Remove deprecated state attributes from GPSd (#137600) 2025-02-06 21:36:58 +01:00
Maciej Bieniek
d2d7d696ec Bump aioshelly to version 12.4.1 (#137598)
* Bump aioshelly to 12.4.0

* Bump to 12.4.1
2025-02-06 21:34:11 +01:00
Jan Bouwhuis
d3d00357aa Allow to omit the payload attribute to MQTT publish action to allow an empty payload to be sent by default (#137595)
Allow to omit the payload attribute to MQTT publish actionto allow an empty payload to be sent by default
2025-02-06 22:11:39 +02:00
puddly
2e8bc56be4 Keep track of addons and integrations when determining HA radio firmware type (#134598)
* Replace `FirmwareGuess` with `FirmwareInfo` with owner tracking

* Fix up config flow

* Account for OTBR addon existing independent of integration

* Fix remaining unit tests

* Add some tests for ownership

* Unit test `get_zha_firmware_info`

* ZHA `homeassistant_hardware` platform

* OTBR `homeassistant_hardware` platform

* Rework imports

* Fix unit tests

* Add OTBR unit tests

* Add hassfest exemption for `homeassistant_hardware` and `otbr`

* Invert registration to decouple the hardware integration

* Revert "Add hassfest exemption for `homeassistant_hardware` and `otbr`"

This reverts commit c8c6e7044f.

* Fix circular imports

* Fix unit tests

* Address review comments

* Simplify API a little

* Fix `| None` mypy issues

* Remove the `unregister_firmware_info_provider` API

* 100% coverage

* Add `HardwareInfoDispatcher.register_firmware_info_callback`

* Unit test `register_firmware_info_callback` (zha)

* Unit test `register_firmware_info_callback` (otbr)

* Update existing hardware helper tests to use the new function

* Add `async_` prefix to helper function names

* Move OTBR implementation to a separate PR

* Update ZHA diagnostics snapshot

* Switch from `dict.setdefault` to `defaultdict`

* Add some error handling to `iter_firmware_info` and increase test coverage

* Oops
2025-02-06 14:46:07 -05:00
Norbert Rittel
75772ae40f Fix sentence-casing in user-facing strings of here_travel_time (#137593) 2025-02-06 20:36:17 +01:00
Sid
b4ecd9739a Bump eheimdigital to 1.0.6 (#137587) 2025-02-06 20:29:47 +01:00
starkillerOG
89d489b391 Bump reolink-aio to 0.11.10 (#137591) 2025-02-06 20:23:28 +01:00
Ron
981f3945c8 Bump pyfireservicerota to 0.0.46 (#137589) 2025-02-06 20:19:42 +01:00
Joost Lekkerkerker
d0bca12632 Bump python-overseerr to 0.7.0 (#137590) 2025-02-06 20:19:23 +01:00
Manu
21b18d8449 Add exception translations to Bring! integration (#137515) 2025-02-06 19:51:40 +01:00
G Johansson
167fb37929 Update library for smhi (#136375)
* Update library for smhi

* Imports

* Fixes
2025-02-06 19:45:53 +01:00
Jasper Wiegratz
603a1ed69c Fix sending polls to Telegram threads (#137553)
Fix sending poll to Telegram thread
2025-02-06 19:42:28 +01:00
cdnninja
3297b27dce Explicitly pass in the config_entry in vesync (#137498)
* Explicitly pass in the config_entry in vesync

* Feedback
2025-02-06 19:40:12 +01:00
Christopher Fenner
44c79f4b9c Correct state and icon if fan is in standby mode in ViCare integration (#137565)
* handle standby mode

* update snapshot
2025-02-06 19:32:41 +01:00
Norbert Rittel
ec587e60e3 Fix sentence-casing in user-facing strings of Coinbase integration (#137586) 2025-02-06 19:25:02 +01:00
Bouwe Westerdijk
b6d9e4f1b1 Plugwise: remove user-config of port (#137584) 2025-02-06 19:12:57 +01:00
Abílio Costa
9a9822140e Replace string literal with existing const in ZHA (#137576) 2025-02-06 18:54:59 +01:00
Michael
711dd7f05b Explicitly pass in the config_entry in madvr coordinator init (#137468)
explicitly pass in the config_entry in coordinator init
2025-02-06 18:42:22 +01:00
Michael Hansen
16390d56b6 Add excluded domains to broadcast intent (#137566) 2025-02-06 11:53:55 -05:00
Dennis Effing
634b754168 Fix Overseerr webhook configuration JSON (#137572)
Co-authored-by: Lars Jouon <schm.lars@googlemail.com>
2025-02-06 17:37:10 +01:00
Norbert Rittel
b4559e0342 Several fixes in user-facing strings of the SQL integration (#137438)
- use proper sentence-casing for all strings
- replace "unit of measure" with correct "unit of measurement"
- replace "HA recorder" with "Home Assistant Recorder" as this is a name that is not translated
- add some details from the online docs to descriptions
2025-02-06 18:05:04 +02:00
Norbert Rittel
57133c199f Fix spelling of "Roborock" and adapt action descriptions to HA standards (#137570)
- change two occurrences of "roborock" to "Roborock"
- change "url" to "URL
- Reword three action descriptions to use third-person plural, following HA standards
2025-02-06 18:01:19 +02:00
J. Nick Koston
ba14933ae7 Revert "Add PaddleSwitchPico (Pico Paddle Remote) device trigger to Lutron Caseta" (#137571) 2025-02-06 10:00:29 -06:00
Marc Mueller
af0f9dec1f Prevent packages from accidentally installing poetry (#137560)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2025-02-06 16:42:29 +01:00
Marc Mueller
5f6068eea4 Skip building wheels for electrickiwi-api (#137556) 2025-02-06 16:41:27 +01:00
Nathan Spencer
da162676ab Fix translation key typo in coinbase options (#137543)
Fix translation key in coinbase
2025-02-06 15:30:35 +01:00
Erik Montnemery
7822e11894 Don't overwrite setup state in async_set_domains_to_be_loaded (#137547) 2025-02-06 15:18:37 +01:00
Galorhallen
03d709f162 Update govee-local-api to 2.0.1 (#137546) 2025-02-06 14:08:30 +01:00
Marc Mueller
a4fe0cbe7a Update mypy-dev to 1.16.0a2 (#137542) 2025-02-06 13:43:53 +01:00
LG-ThinQ-Integration
f56d058443 Add switch to LG ThinQ for power control (#137512)
Add switch for convenient power control

Co-authored-by: yunseon.park <yunseon.park@lge.com>
2025-02-06 11:39:58 +01:00
Manu
84d7cb3a76 Enable strict-typing for Bring! integration (#137518)
* Enable strict-typing for Bring! integration

* Explicitly pass in the config_entry in coordinator init
2025-02-06 11:35:41 +01:00
Manu
9ca8af0a00 Add data_description to Bring! integration (#137513) 2025-02-06 10:10:47 +01:00
Daniel Hjelseth Høyer
4deffb233d Fix Mill issue, where no sensors were shown (#137521)
Fix mill issue #137477

Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>
2025-02-06 10:09:29 +01:00
Joakim Sørensen
8654597e25 Handle non-retryable errors when uploading cloud backup (#137517) 2025-02-06 09:57:10 +01:00
Norbert Rittel
836ad8543b Fix typo in keba and replace key references with UI-friendly descriptions (#137527) 2025-02-06 09:52:13 +01:00
IceBotYT
e93451a195 Deprecate Linear Garage Door integration (#137502) 2025-02-06 08:38:21 +01:00
Manu
c4454ad5ea Bump habiticalib to v0.3.5 (#137510) 2025-02-06 08:32:56 +01:00
J. Nick Koston
c0061dba77 Bump govee-ble to 0.43.0 to fix compat with new H5179 firmware (#137508)
changelog: https://github.com/Bluetooth-Devices/govee-ble/compare/v0.42.1...v0.43.0

fixes #136969
2025-02-06 08:31:23 +01:00
Manu
12b3665872 Bump bring-api version to 1.0.1 (#137496) 2025-02-06 08:30:41 +01:00
Joakim Sørensen
283b0908c8 Move cloud backup upload/download handlers to lib (#137416)
* Move cloud backup upload/download handlers to lib

* Update backup.py

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

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2025-02-06 07:32:46 +01:00
Paulus Schoutsen
3b871afcc4 Update default Google model to Gemini Flash 2.0 (#137505) 2025-02-05 23:27:13 -05:00
J. Nick Koston
39b46baeaa Bump aiohttp to 3.11.12 (#137494)
changelog: https://github.com/aio-libs/aiohttp/compare/v3.11.11...v3.11.12
2025-02-05 22:05:12 -05:00
J. Nick Koston
d1b22312ac Bump aiohttp-asyncmdnsresolver to 0.1.0 (#137492)
changelog: https://github.com/aio-libs/aiohttp-asyncmdnsresolver/compare/v0.0.3...v0.1.0

Switches to the new AsyncDualMDNSResolver class to which
tries via mDNS and DNS for .local domains since we have
so many different user DNS configurations to support

fixes #137479
fixes #136922
2025-02-05 22:04:52 -05:00
Franck Nijhof
38b5dff2ef Merge branch 'master' into dev 2025-02-05 23:19:24 +00:00
Renat Sibgatulin
2946fbad00 Bump aioairq version to 0.4.4 (#137454) 2025-02-05 22:15:18 +00:00
Michael
bf0080cbb0 Explicitly pass in the config_entry in supervisor coordinator init (#137472) 2025-02-05 22:09:54 +00:00
Michael
b0a82a9913 Explicitly pass in the config_entry in airgradient coordinator init (#137469) 2025-02-05 22:11:17 +01:00
Michael
2aea078d9a Explicitly pass in the config_entry in rympro coordinator init (#137464)
explicitly pass in the config_entry in coordinator init
2025-02-05 22:00:50 +01:00
Michael
db6bd6aad1 Explicitly pass in the config_entry in Bluesound coordinator init (#137461)
* explicitly pass in the config_entry in coordinator init

* remove unneccessary assert
2025-02-05 21:59:50 +01:00
Michael
12095df4fa Explicitly pass in the config_entry in webmin coordinator init (#137462)
explicitly pass in the config_entry in coordinator init
2025-02-05 21:59:26 +01:00
Michael
6d13aa3741 Explicitly pass in the config_entry in picnic coordinator init (#137465)
explicitly pass in the config_entry in coordinator init
2025-02-05 21:58:01 +01:00
Michael
0248252906 Explicitly pass in the config_entry in omnilogic coordinator init (#137466)
explicitly pass in the config_entry in coordinator init
2025-02-05 21:57:41 +01:00
Michael
ab80770252 Explicitly pass in the config_entry in screenlogic coordinator init (#137463)
explicitly pass in the config_entry in coordinator init
2025-02-05 21:57:15 +01:00
G Johansson
c222ffb4ec Bump holidays to 0.66 (#137449) 2025-02-05 22:13:42 +02:00
Franck Nijhof
5c383f3d88 2025.2.0 (#137448) 2025-02-05 20:11:04 +01:00
Michael Arthur
94614e0376 Change Electric Kiwi authentication (#135231)
Co-authored-by: Joostlek <joostlek@outlook.com>
2025-02-05 20:01:45 +01:00
Franck Nijhof
3a88c9d6f4 Bump version to 2025.2.0 2025-02-05 17:35:07 +00:00
Jan Rieger
15bc29f8ca Add GPSd satellites sensors (#137320) 2025-02-05 18:34:43 +01:00
Franck Nijhof
5c7cabed1e Bump version to 2025.2.0b12 2025-02-05 17:30:55 +00:00
J. Nick Koston
65fde6042f Bump dbus-fast to 2.33.0 (#137446)
changelog: https://github.com/Bluetooth-Devices/dbus-fast/compare/v2.32.0...v2.33.0
2025-02-05 17:30:19 +00:00
Michael Hansen
d5dd0f6ec1 Bump hassil and intents (#137440) 2025-02-05 17:28:33 +00:00
epenet
09483d2cef Move fireservicerota coordinator to own module (#137304) 2025-02-05 18:27:13 +01:00
Marc Mueller
95410586b1 Update bluetooth-data-tools to 1.23.4 (#137374)
Co-authored-by: J. Nick Koston <nick@koston.org>
2025-02-05 17:24:18 +00:00
Marc Mueller
d5ad91fce3 Update bluetooth dependencies (#137353) 2025-02-05 17:21:28 +00:00
J. Nick Koston
164f43a71b Bump dbus-fast to 2.33.0 (#137446)
changelog: https://github.com/Bluetooth-Devices/dbus-fast/compare/v2.32.0...v2.33.0
2025-02-05 18:17:02 +01:00
Michael Hansen
a1c675b5ee Bump hassil and intents (#137440) 2025-02-05 18:02:01 +01:00
Arkadiusz Wahlig
c9ab75a02d Add support for Switchbot Remote (#137443) 2025-02-05 10:38:34 -06:00
Galorhallen
830636df07 Govee light local bump (#137436) 2025-02-05 16:18:32 +00:00
Franck Nijhof
04b0d587c5 Bump version to 2025.2.0b11 2025-02-05 16:18:01 +00:00
Bram Kragten
72a3c5296c Update frontend to 20250205.0 (#137441) 2025-02-05 16:16:12 +00:00
Erik Montnemery
d6414b9849 Bump aiohasupervisor to version 0.3.0 (#137437) 2025-02-05 16:14:42 +00:00
starkillerOG
c4e2ddd28b Bump reolink_aio to 0.11.9 (#137430)
* Add push callbacks

* Bump reolink_aio to 0.11.9
2025-02-05 16:14:39 +00:00
Josef Zweck
5687a4d718 Bump onedrive to 0.0.8 (#137423)
* Bump onedrive to 0.0.6

* bump to 0.0.7

* bump to 0.0.8

* Improve coverage
2025-02-05 16:14:06 +00:00
cdnninja
4694240cfa Refactor switch for vesync (#134409)
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2025-02-05 17:07:35 +01:00
Bram Kragten
078996effd Update frontend to 20250205.0 (#137441) 2025-02-05 17:07:19 +01:00
Erik Montnemery
3f2e6d102c Bump aiohasupervisor to version 0.3.0 (#137437) 2025-02-05 16:58:39 +01:00
Ludovic BOUÉ
9abea5c5bb Add translation key for Matter Energy management mode (#137259) 2025-02-05 16:57:10 +01:00
Brett Adams
d48d4284c5 Add streaming select entities to Teslemetry (#137210) 2025-02-05 16:48:50 +01:00
Arkadiusz Wahlig
86a4f7188d Update PySwitchbot to 0.56.0 (#137432) 2025-02-05 16:32:05 +01:00
Marc Mueller
cc59f5812b Disable annotations for pytest warnings [ci] (#137434) 2025-02-05 15:36:05 +01:00
Norbert Rittel
4613469eb7 Fix spelling of "PowerView Hub" in user-facing strings (#137435) 2025-02-05 16:28:30 +02:00
Josef Zweck
4d7bd1291d Bump onedrive to 0.0.8 (#137423)
* Bump onedrive to 0.0.6

* bump to 0.0.7

* bump to 0.0.8

* Improve coverage
2025-02-05 16:26:58 +02:00
Norbert Rittel
c4411914c2 Replace "Ota" with "OTA update" in anova integration (#137431) 2025-02-05 14:30:31 +01:00
Paulus Schoutsen
417a595b73 Only clean up chat log if it was stored (#137399) 2025-02-05 08:25:05 -05:00
Mick Montorier-Aberman
eded99a059 Add tests for sensors in SwitchBot Cloud (#137319) 2025-02-05 12:51:27 +00:00
starkillerOG
0236f2434e Bump reolink_aio to 0.11.9 (#137430)
* Add push callbacks

* Bump reolink_aio to 0.11.9
2025-02-05 13:48:12 +01:00
RJPoelstra
fcb8d25b46 Show new errors from the MotionMount (#137006) 2025-02-05 12:40:33 +00:00
Franck Nijhof
a4474b2794 Bump version to 2025.2.0b10 2025-02-05 12:26:27 +00:00
Erik Montnemery
72a69d7e41 Adjust backup filename scheme (#137424)
* Adjust backup filename scheme

* Update tests
2025-02-05 12:16:11 +00:00
Erik Montnemery
e8314fb286 Adjust logic for per-backup agent encryption (#137420) 2025-02-05 12:16:07 +00:00
Erik Montnemery
30c099ef4e Allow creating backup if at least one agent is available (#137409) 2025-02-05 12:16:04 +00:00
Paulus Schoutsen
c506c9080a Simplify llm calendar tool (#137402)
* Simplify calendar tool

* Clean up exposed entities
2025-02-05 12:16:01 +00:00
Brett Adams
79563f3746 Handle powerwall at zero percent in Tesla Fleet and Tessie (#137393)
* Handle powerwall zero

* Add missing value_fn call
2025-02-05 12:15:56 +00:00
Brett Adams
0764c7e773 Bump Tesla Fleet API to v0.9.8 (#137379)
* v0.9.7

* v0.9.8
2025-02-05 12:14:14 +00:00
IceBotYT
41490dffad Bump lacrosse-view to 1.1.1 (#137282) 2025-02-05 12:09:59 +00:00
Norbert Rittel
83edee47ff Replace wrong name reference of binary jvc_power sensor in jvc_projector (#137271) 2025-02-05 13:09:22 +01:00
J. Nick Koston
fa83591148 Allow ignored Bluetooth adapters to be set up from the user flow (#137373) 2025-02-05 11:57:16 +00:00
J. Nick Koston
df2b29aef1 Bump led-ble to 1.1.6 (#137369) 2025-02-05 11:57:13 +00:00
Jan-Philipp Benecke
da8d300f29 Fix sqlalchemy deprecation warning that declarative_base has moved (#137360) 2025-02-05 11:57:09 +00:00
Marc Mueller
2c5fd4ee2a Update led-ble to 1.1.5 (#137347) 2025-02-05 11:57:06 +00:00
J. Nick Koston
16d9270833 Fix memory leak when unloading DataUpdateCoordinator (#137338)
* check wiz

* Fix memory leak when unloading DataUpdateCoordinator

fixes #137237

* handle namespace conflict

* handle namespace conflict

* address review comments
2025-02-05 11:57:02 +00:00
Erik Montnemery
d8179dacc6 Report progress while restoring supervisor backup (#137313) 2025-02-05 11:56:56 +00:00
LG-ThinQ-Integration
1445e17521 Bump thinqconnect to 1.0.4 (#137395)
Co-authored-by: yunseon.park <yunseon.park@lge.com>
2025-02-05 12:18:14 +01:00
Norbert Rittel
a1655d28ba Fix sentence-casing and action names/descriptions in unifiprotect (#137418) 2025-02-05 12:14:40 +01:00
Erik Montnemery
2f116eab9e Adjust logic for per-backup agent encryption (#137420) 2025-02-05 12:14:06 +01:00
Norbert Rittel
28cedc4c13 Improve action descriptions in rainmachine, fix casing (#137428) 2025-02-05 12:13:58 +01:00
Erik Montnemery
27b96160e2 Adjust backup filename scheme (#137424)
* Adjust backup filename scheme

* Update tests
2025-02-05 12:02:58 +01:00
Paulus Schoutsen
ac42c9386c Simplify llm calendar tool (#137402)
* Simplify calendar tool

* Clean up exposed entities
2025-02-05 11:42:41 +01:00
epenet
4d2c46959e Add coordinator unsubscribe listener test (#137422) 2025-02-05 11:15:25 +01:00
Erik Montnemery
bfbf95f515 Allow creating backup if at least one agent is available (#137409) 2025-02-05 10:14:39 +01:00
TimL
3dc075f287 Bump pysmlight to v0.1.7 (#137390) 2025-02-05 09:43:38 +01:00
Brett Adams
7ad0438a4e Handle powerwall at zero percent in Tesla Fleet and Tessie (#137393)
* Handle powerwall zero

* Add missing value_fn call
2025-02-05 09:43:22 +01:00
J. Nick Koston
3fc13db7e0 Fix memory leak when unloading DataUpdateCoordinator (#137338)
* check wiz

* Fix memory leak when unloading DataUpdateCoordinator

fixes #137237

* handle namespace conflict

* handle namespace conflict

* address review comments
2025-02-05 09:29:23 +01:00
dependabot[bot]
03de3aec15 Bump sigstore/cosign-installer from 3.7.0 to 3.8.0 (#137404)
Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 3.7.0 to 3.8.0.
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](https://github.com/sigstore/cosign-installer/compare/v3.7.0...v3.8.0)

---
updated-dependencies:
- dependency-name: sigstore/cosign-installer
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-05 09:21:52 +01:00
TimL
5ef3cad89a Bump pysmlight to v0.2.3 (#137386) 2025-02-05 10:14:32 +02:00
Brett Adams
8349ea8125 Bump Tesla Fleet API to v0.9.8 (#137379)
* v0.9.7

* v0.9.8
2025-02-05 10:09:33 +02:00
Norbert Rittel
b75a9d15d0 Fix spelling of "YoLink" and improve action descriptions (#137412)
Make one occurrence of "yolink" consistent, using "YoLink" instead.

Reword the descriptions of the play_on_speaker_hub action to improve translations by using more descriptive language.
2025-02-05 09:05:50 +01:00
Marc Mueller
e134c862cd Update discovergy30303 to 0.3.3 (#137396) 2025-02-05 07:51:24 +01:00
Marc Mueller
e6e42af8b6 Update ismartgate to 5.0.2 (#137394) 2025-02-05 07:50:49 +01:00
TimL
280f61dd77 Add update entity for second Zigbee radio (#136918)
* Add get_radio helper function

This is defined here primarily for use in simplifying otherwise repetitive
logic in the lambdas for entity descriptions.

* Get firmware manifests for second radio

* Create optional update entity for radio 2

* Add info fixture for SLZB-MR1

* Test for firmware updates of second radio

* Remove use of entity description creating entities

* Add idx to lambda functions

* Add latest_version lambda to ED

* Use Single zb_update description

* test radio2 update

* device type heading for release notes

* fix failing no internet test

* update release note tests

* assert radios

* fix return type installed_version

* refactor latest_version code

* update listener

* Dont create update entities for legacy firmware that can't upgrade

* Address review comments for update listener
2025-02-04 20:34:18 -06:00
Marc Mueller
369f897f41 Update aiooncue to 0.3.9 (#137392) 2025-02-05 03:32:11 +01:00
Marc Mueller
ec6896c819 Update aiosteamist to 1.0.1 (#137391) 2025-02-05 03:18:50 +01:00
Marc Mueller
d89412ca75 Update aionut to 4.3.4 (#137389) 2025-02-05 03:18:10 +01:00
Marc Mueller
1bbd5d7954 Update async-interrupt to 1.2.1 (#137388) 2025-02-05 03:17:47 +01:00
Marc Mueller
4111ca1a46 Update aiohttp-fast-zlib to 0.2.2 (#137387) 2025-02-05 03:17:26 +01:00
Marc Mueller
4d567c6216 Update bthome-ble to 3.12.4 (#137385) 2025-02-05 03:17:04 +01:00
Marc Mueller
bbe6804572 Update dhcp dependencies (#137384) 2025-02-05 03:16:43 +01:00
J. Nick Koston
8e439cbf47 Bump nexia to 2.0.9 (#137383) 2025-02-04 19:55:45 -06:00
Stephan Jauernick
c965dfb619 Bump thermopro-ble to 0.11.0 (#137381)
Co-authored-by: J. Nick Koston <nick@koston.org>
2025-02-04 18:53:20 -06:00
J. Nick Koston
6b32587d10 Allow ignored Bluetooth adapters to be set up from the user flow (#137373) 2025-02-04 17:11:05 -06:00
jukrebs
1e99b87868 Add iometer integration (#135513) 2025-02-04 22:36:47 +00:00
Marc Mueller
4cb9d28289 Update bluetooth-data-tools to 1.23.4 (#137374)
Co-authored-by: J. Nick Koston <nick@koston.org>
2025-02-04 23:02:17 +01:00
Marc Mueller
9c9a06caa0 Update govee-ble to 0.42.1 (#137371) 2025-02-04 23:01:46 +01:00
Marc Mueller
4e7cc330c6 Update aiozoneinfo to 0.2.3 (#137370) 2025-02-04 22:57:47 +01:00
J. Nick Koston
185edc371e Bump led-ble to 1.1.6 (#137369) 2025-02-04 22:37:33 +01:00
epenet
d2b9a3b106 Add sensor and weather tests to meteo_france (#137318) 2025-02-04 22:36:39 +01:00
Jan-Philipp Benecke
4ceced6405 Fix sqlalchemy deprecation warning that declarative_base has moved (#137360) 2025-02-04 15:31:05 -06:00
Bram Kragten
b5e4fee9aa Bump version to 2025.2.0b9 2025-02-04 21:42:50 +01:00
Shay Levy
1c8ced2c2d Fix Tado missing await (#137364) 2025-02-04 21:41:27 +01:00
Robert Resch
1a5b8cf854 Bump deebot-client to 12.0.0 (#137361) 2025-02-04 21:41:26 +01:00
Shay Levy
af40bb39ad Bump aranet4 to 2.5.1 (#137359) 2025-02-04 21:41:25 +01:00
Teemu R.
14034ed7f8 Polish tplink vacuum sensors (#137355) 2025-02-04 21:41:24 +01:00
Glenn Waters
d7f0a55568 Fix incorrect UPB service entity type (#137346) 2025-02-04 21:41:24 +01:00
J. Nick Koston
1038a849c4 Bump uiprotect to 7.5.1 (#137343) 2025-02-04 21:41:23 +01:00
Bram Kragten
c4b08d3d57 Update frontend to 20250204.0 (#137342) 2025-02-04 21:39:32 +01:00
J. Nick Koston
0e9658b5ff Copy area from remote parent device when creating Bluetooth devices (#137340) 2025-02-04 21:36:43 +01:00
Duco Sebel
0463b90d36 Fix HomeWizard reconfigure flow throwing error for v2-API devices (#137337)
Fix reconfigure flow not working for v2
2025-02-04 21:36:42 +01:00
Jan Bouwhuis
37f0832c8b Don't show active user initiated data entry config flows (#137334)
Do not show active user initiated  data entry config flows
2025-02-04 21:36:41 +01:00
Erik Montnemery
2005e14d5f Improve error handling when supervisor backups are deleted (#137331)
* Improve error handling when supervisor backups are deleted

* Move exception definitions
2025-02-04 21:36:41 +01:00
Josef Zweck
99219a9a73 Bump onedrive-personal-sdk to 0.0.4 (#137330) 2025-02-04 21:36:40 +01:00
Bram Kragten
1f967f7f77 Minor adjustments of hassio backup tests (#137324) 2025-02-04 21:35:04 +01:00
Robert Resch
b4d8069656 Bump deebot-client to 12.0.0 (#137361) 2025-02-04 21:34:21 +01:00
Kevin Worrel
8de64b8b1f Allow ignored screenlogic devices to be set up from the user flow (#137315)
Allow ignored ScreenLogic devices to be set up from the user flow
2025-02-04 21:25:18 +01:00
Matthias Lohr
48c88d8fa1 Bump tololib to 1.2.2 (#137303) 2025-02-04 21:25:18 +01:00
Erik Montnemery
d478f906df Include extra metadata in backup WS API (#137296)
* Include extra metadata in backup WS API

* Update onboarding backup view

* Update google_drive tests
2025-02-04 21:25:17 +01:00
Michael
09e02493b7 Improve backup file naming in Synology DSM backup agent (#137278)
* improve backup file naming

* use built-in suggested_filename
2025-02-04 21:25:16 +01:00
Abílio Costa
55c746f909 Add view to download support package to Cloud component (#135856) 2025-02-04 21:25:15 +01:00
Shay Levy
d99305513c Fix Tado missing await (#137364) 2025-02-04 21:13:50 +01:00
Kevin Worrel
b8d74a11ae Allow ignored screenlogic devices to be set up from the user flow (#137315)
Allow ignored ScreenLogic devices to be set up from the user flow
2025-02-04 21:12:49 +01:00
Shay Levy
b28ae554e2 Bump aranet4 to 2.5.1 (#137359) 2025-02-04 21:12:18 +01:00
Marc Mueller
20e08bf0ed Update bluetooth dependencies (#137353) 2025-02-04 15:03:54 -05:00
Teemu R.
0e1ae89f12 Polish tplink vacuum sensors (#137355) 2025-02-04 14:03:28 -06:00
Marc Mueller
3984706459 Update bleak-esphome to 2.7.1 (#137354) 2025-02-04 15:03:09 -05:00
Bram Kragten
7914724492 Update frontend to 20250204.0 (#137342) 2025-02-04 21:02:28 +01:00
Jan Bouwhuis
7fa6f7e875 Bump paho-mqtt client to version 2.1.0 (#136130)
* Bump paho-mqtt client to version 2.1.0

* Remove commented code

* Bump pyeconet==0.1.26

* Ensure types-paho-mqtt==1.6.0.20240321 is uninstalled if test requirements are updated

* Update roombapy dependency

* Remove pyeconet from exceptions list

* Revert changes to install test requirements task
2025-02-04 20:59:28 +01:00
J. Nick Koston
56e07efe31 Copy area from remote parent device when creating Bluetooth devices (#137340) 2025-02-04 13:48:59 -06:00
Norbert Rittel
efe8a3f530 Fix spelling of "ID" and sentence-casing in ovo_energy strings (#137329) 2025-02-04 21:47:29 +02:00
Duco Sebel
ec3127f561 Fix HomeWizard reconfigure flow throwing error for v2-API devices (#137337)
Fix reconfigure flow not working for v2
2025-02-04 21:46:01 +02:00
Matthias Lohr
8da25fc270 Bump tololib to 1.2.2 (#137303) 2025-02-04 19:37:59 +00:00
Norbert Rittel
94f6daa09c Make Sonos action descriptions more UI- and translation-friendly (#137356) 2025-02-04 19:26:32 +00:00
Marc Mueller
79a9f3f2c6 Update home-assistant-bluetooth to 1.13.1 (#137350) 2025-02-04 19:22:36 +00:00
Marc Mueller
54751ef0c7 Update led-ble to 1.1.5 (#137347) 2025-02-04 19:59:59 +01:00
Marc Mueller
c203307b0d Update yalexs-ble to 2.5.7 (#137345) 2025-02-04 19:59:45 +01:00
Erik Montnemery
eb5036854f Improve error handling when supervisor backups are deleted (#137331)
* Improve error handling when supervisor backups are deleted

* Move exception definitions
2025-02-04 19:49:55 +01:00
Glenn Waters
6ff9b0541e Fix incorrect UPB service entity type (#137346) 2025-02-04 12:27:46 -06:00
J. Nick Koston
fed36d5756 Bump uiprotect to 7.5.1 (#137343) 2025-02-04 12:24:42 -06:00
Jan Bouwhuis
24ca7d95ac Bump roombapy to 1.9.0 (#137336) 2025-02-04 11:49:10 -06:00
Michael
0895ac6a82 Improve backup file naming in Synology DSM backup agent (#137278)
* improve backup file naming

* use built-in suggested_filename
2025-02-04 18:20:54 +01:00
Glenn Waters
f19404991c Bump upb-lib to 0.6.0 (#137339) 2025-02-04 11:20:05 -06:00
kurens
0c56791d94 Added support for One Time Charge Status to Vicare (#135984)
Co-authored-by: Christopher Fenner <9592452+CFenner@users.noreply.github.com>
Co-authored-by: kurens <migrzyb@users.noreply.github.com>
Co-authored-by: Dave T <17680170+davet2001@users.noreply.github.com>
Co-authored-by: Christopher Fenner <Christopher.Fenner@me.com>
2025-02-04 17:16:59 +00:00
Josef Zweck
5dd03c037e Bump onedrive-personal-sdk to 0.0.4 (#137330) 2025-02-04 11:11:55 -06:00
Jan Bouwhuis
1f7d620d6b Don't show active user initiated data entry config flows (#137334)
Do not show active user initiated  data entry config flows
2025-02-04 17:54:05 +01:00
Abílio Costa
9a9374bf45 Add view to download support package to Cloud component (#135856) 2025-02-04 16:52:40 +00:00
Steven B.
2f5816c5b6 Add exception translations to ring integration (#136468)
* Add exception translations to ring integration

* Do not include exception details in exception translations

* Don't check last_update_success for auth errors and update tests

* Do not log errors twice

* Update post review
2025-02-04 09:14:48 -06:00
Erik Montnemery
5629b995ce Include extra metadata in backup WS API (#137296)
* Include extra metadata in backup WS API

* Update onboarding backup view

* Update google_drive tests
2025-02-04 15:57:30 +01:00
Erik Montnemery
345cbc62a7 Minor adjustments of hassio backup tests (#137324) 2025-02-04 14:19:48 +01:00
Glenn Vandeuren (aka Iondependent)
a4f0194786 Convert Niko home control to async (#137174) 2025-02-04 14:10:27 +01:00
Erik Montnemery
ffc6aa0035 Report progress while restoring supervisor backup (#137313) 2025-02-04 12:55:36 +00:00
Joakim Sørensen
3e45af9995 Bump hass-nabucasa from 0.88.1 to 0.89.0 (#137321) 2025-02-04 13:54:50 +01:00
Marc Mueller
cd028f8d21 Update types packages (#137317) 2025-02-04 13:37:38 +01:00
Joakim Sørensen
dd1def3c5d Add default voice for languages in cloud TTS (#137300)
* Add default voice for languages in cloud TTS

* Add test

* use defined voice

* Add test to ensure all default voices are valid
2025-02-04 13:32:33 +01:00
Franck Nijhof
834a04ac49 Bump version to 2025.2.0b8 2025-02-04 12:26:19 +00:00
Josef Zweck
fa9b4c3524 Bump onedrive-personal-sdk to 0.0.3 (#137309) 2025-02-04 12:25:47 +00:00
Erik Montnemery
13bfa82038 Report progress while creating supervisor backup (#137301)
* Report progress while creating supervisor backup

* Use enum util
2025-02-04 12:25:44 +00:00
epenet
0766b47161 Fix data update coordinator garbage collection (#137299) 2025-02-04 12:25:36 +00:00
Brett Adams
fa8225d0a2 Bump tesla-fleet-api to 0.9.2 (#137295) 2025-02-04 12:23:23 +00:00
Daniel Hjelseth Høyer
623c82e5d1 Bump pymill to 0.12.3 (#137264)
Mill lib 0.12.3

Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>
2025-02-04 12:11:18 +00:00
Bram Kragten
728a1a4be5 Update frontend to 20250203.0 (#137263) 2025-02-04 12:11:15 +00:00
Duco Sebel
4bbb3e351b Remove v2 API support for HomeWizard P1 Meter (#137261) 2025-02-04 12:11:12 +00:00
Erik Montnemery
044bafd6aa Improve shutdown of _CipherBackupStreamer (#137257)
* Improve shutdown of _CipherBackupStreamer

* Catch the right exception
2025-02-04 12:11:08 +00:00
Abílio Costa
1e1069b647 Allow ignored idasen_desk devices to be set up from the user flow (#137253) 2025-02-04 12:11:04 +00:00
Josef Zweck
455af9179b Bump onedrive-personal-sdk to 0.0.2 (#137252) 2025-02-04 12:10:59 +00:00
Regev Brody
30b309d7a1 Bump python-roborock to 2.11.1 (#137244) 2025-02-04 12:10:55 +00:00
Markus Adrario
7e32342eb2 Fix minor issues in Homee (#137239) 2025-02-04 12:10:51 +00:00
RJPoelstra
bb9740991e Fix retrieving PIN when no pin is set on mount in motionmount integration (#137230) 2025-02-04 12:10:47 +00:00
Erik Montnemery
88e5d1c18f Check for errors when creating backups using supervisor (#137220)
* Check for errors when creating backups using supervisor

* Improve error reporting when there's no backup reference
2025-02-04 12:10:43 +00:00
Erik Montnemery
e960053226 Check for errors when restoring backups using supervisor (#137217)
* Check for errors when restoring backups using supervisor

* Break long line in test

* Improve comments
2025-02-04 12:10:39 +00:00
cdnninja
b318fb46a0 Vesync bump pyvesync library (#137208) 2025-02-04 12:10:36 +00:00
Andre Lengwenus
523835080b Bump pypck to 0.8.5 (#137176) 2025-02-04 12:10:32 +00:00
Norbert Rittel
5a63138581 Fixes in user-facing strings of Tado integration (#137158) 2025-02-04 12:10:28 +00:00
Indu Prakash
90ddb6cce1 Humidifier turn display off for sleep mode (#137133) 2025-02-04 12:10:25 +00:00
Josef Zweck
81783dcfd3 Migrate OneDrive to onedrive_personal_sdk library (#137064) 2025-02-04 12:10:21 +00:00
Michael
405cc47157 Don't blow up when a backup doesn't exist on Synology DSM (#136913)
* don't raise while delte not existing backup

* only raise when error ne 408
2025-02-04 12:10:17 +00:00
Aaron Godfrey
809f5eea49 Bump todist-api-python to 2.1.7 (#136549)
Co-authored-by: Allen Porter <allen@thebends.org>
Co-authored-by: J. Diego Rodríguez Royo <jdrr1998@hotmail.com>
2025-02-04 12:10:12 +00:00
Marc Mueller
0a32a9d6db Update attrs to 25.1.0 (#137316) 2025-02-04 12:59:53 +01:00
Duco Sebel
d1d498e27d Remove v2 API support for HomeWizard P1 Meter (#137261) 2025-02-04 12:47:50 +01:00
Indu Prakash
9a565885cb Humidifier turn display off for sleep mode (#137133) 2025-02-04 12:46:14 +01:00
Josef Zweck
7f69c689bf Bump onedrive-personal-sdk to 0.0.3 (#137309) 2025-02-04 12:39:00 +01:00
Jan Bouwhuis
efc515ff4e Remove legacy color_mode support for legacy mqtt json light (#136996) 2025-02-04 12:34:36 +01:00
Marc Mueller
64a40a3396 Improve frontier_silicon media_player typing (#137080) 2025-02-04 12:25:09 +01:00
Erik Montnemery
ca53d97a6d Improve shutdown of _CipherBackupStreamer (#137257)
* Improve shutdown of _CipherBackupStreamer

* Catch the right exception
2025-02-04 12:24:30 +01:00
Norbert Rittel
e18062bce4 Improve descriptions of Bluesound actions (#137156) 2025-02-04 12:17:49 +01:00
Marc Mueller
30c0a1492c Update codespell to 2.4.1 (#137312) 2025-02-04 12:16:24 +01:00
Marc Mueller
43b034b8bb Update pyoverkiz to 1.16.0 (#137310) 2025-02-04 12:03:10 +01:00
Marc Mueller
b98b38b3f0 Update pytest-aiohttp to 1.1.0 (#137311) 2025-02-04 12:01:09 +01:00
epenet
09cea6ce96 Cleanup runtime warnings in async unit tests (#137308) 2025-02-04 11:44:17 +01:00
Erik Montnemery
650351a7f3 Report progress while creating supervisor backup (#137301)
* Report progress while creating supervisor backup

* Use enum util
2025-02-04 11:36:03 +01:00
epenet
c3b40e681d Fix data update coordinator garbage collection (#137299) 2025-02-04 11:20:06 +01:00
Sid
4ce3fa8813 Allow integrations with digits in hassfest QS runtime_data (#136479) 2025-02-04 10:57:02 +01:00
Robert Resch
ea3ccc02d7 Bump uv to 0.5.27 (#137297) 2025-02-04 09:20:28 +01:00
epenet
0c55538370 Use runtime_data in faa_delays (#137292) 2025-02-04 09:02:50 +01:00
Brett Adams
6bd3792e9f Bump tesla-fleet-api to 0.9.2 (#137295) 2025-02-04 08:51:13 +01:00
epenet
5e0312ca60 Use HassKey in file_upload (#137294) 2025-02-04 08:45:41 +01:00
epenet
0f57347797 Use runtime_data in fastdotcom (#137293) 2025-02-04 08:44:24 +01:00
Daniel Hjelseth Høyer
82369535c4 Bump pymill to 0.12.3 (#137264)
Mill lib 0.12.3

Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>
2025-02-04 08:25:18 +01:00
Michael
f9cc3361e3 Don't blow up when a backup doesn't exist on Synology DSM (#136913)
* don't raise while delte not existing backup

* only raise when error ne 408
2025-02-03 17:42:30 -05:00
Jan Stienstra
42cab208d0 Update Jellyfin codeowner (#137270) 2025-02-03 17:38:01 -05:00
Ernst Klamer
7fe89ea329 Add channel sensor to bthome (#137072) 2025-02-03 22:21:58 +00:00
Simone Chemelli
1654c28d74 Pass config_entry as param to Shelly coordinator (#137276)
* Pass config_entry as param

* diff approach
2025-02-03 22:58:50 +01:00
Wouter
6fa87da5bd Add Shelly script events entities (#135979)
* When an event is received from a script component on a shelly device, this event is send to the hass event bus

* Event emitted from a script will be send to the corresponding event entity

* Added tests for the shelly script event

* The event entity for script are now hidden by default

* Forgot to enable script event entities by default for the test

* Made serveral improvement for the shelly script event entity
- Added device name to event entity
- The event entity is now only created when a script has any event types
- The test for this entity now uses snapshots

* Shelly script event entities will not be create for the BLE scanning script and will now be automatically removed when the script no longer exsists

* Changed variable name to avoid confusion with _id

* Removed old const from first implementation and removed _script_event_listeners and used _event_listeners instead to listen for script events
2025-02-03 22:41:39 +02:00
Paulus Schoutsen
649319f4ee Introduce async_add_assistant_content to conversation chat log (#137273)
introduce async_add_assistant_content_without_tools to conversation chat log
2025-02-03 14:27:55 -06:00
Abílio Costa
282560acf8 Allow ignored idasen_desk devices to be set up from the user flow (#137253) 2025-02-03 13:54:09 -06:00
Simone Chemelli
1680adf158 Add device cleanup to Vodafone Station (#116024)
* add device cleanup

* apply review comments

* fix description

* make cleanup automatic

* .

* rework approach based on IQS021 rule

* add initial devices list from registry

* use connections instead of identifiers

* apply review comment

* add some coordinator tests

* one more test

* cleanup tests

* allign tests

* apply review comment

* removed sensor test

* cleanup test

* align test to latest code

* typo

* fix after rebase

* introduce generic helper

* apply some review comments

* add comments to clarify design

* apply latest review comment

* ruff

* improved coverage

* more coverage

* 100% helpers.py test coverage

* improve test

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2025-02-03 20:48:50 +01:00
Marc Mueller
5a14409dda Update tqdm to 4.67.1 (#137241) 2025-02-03 19:37:38 +01:00
Bram Kragten
3bfc1a87c8 Update frontend to 20250203.0 (#137263) 2025-02-03 19:37:12 +01:00
Michael Hansen
28edbdc107 Clear extra system prompt on start_conversation error (#137254)
* Clear extra system prompt on start_conversation error

* Update homeassistant/components/assist_satellite/entity.py

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

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2025-02-03 12:07:45 -05:00
Erik Montnemery
58b7be7c2f Check for errors when creating backups using supervisor (#137220)
* Check for errors when creating backups using supervisor

* Improve error reporting when there's no backup reference
2025-02-03 17:33:03 +01:00
Josef Zweck
a41566611e Bump onedrive-personal-sdk to 0.0.2 (#137252) 2025-02-03 17:30:27 +01:00
Martin Hjelmare
b660703117 Fix eheimdigital sw_version mock (#137255) 2025-02-03 17:28:54 +01:00
starkillerOG
c5e60045b4 Add Smart Rollos virtual motionblinds integration (#137190) 2025-02-03 17:21:28 +01:00
starkillerOG
ce5be8686a Add Heicko virtual motionblinds integration (#137191) 2025-02-03 17:18:30 +01:00
starkillerOG
94daeffe44 Add Ublockout virtual integration of MotionBlinds (#137179) 2025-02-03 17:10:39 +01:00
Aaron Godfrey
9856340a33 Bump todist-api-python to 2.1.7 (#136549)
Co-authored-by: Allen Porter <allen@thebends.org>
Co-authored-by: J. Diego Rodríguez Royo <jdrr1998@hotmail.com>
2025-02-03 17:06:21 +01:00
Jan Bouwhuis
30af9057d1 Ensure random temp dir is used during MQTT CI tests (#137221) 2025-02-03 16:06:02 +00:00
Regev Brody
a5eda3faf1 Bump python-roborock to 2.11.1 (#137244) 2025-02-03 17:00:36 +01:00
Shay Levy
2682f4a323 Add tests for Shelly Flood gen4 (#137246) 2025-02-03 17:34:02 +02:00
Josef Zweck
628e1ffb84 Migrate OneDrive to onedrive_personal_sdk library (#137064) 2025-02-03 16:25:58 +01:00
Paulus Schoutsen
05ca80f4ba Assist Pipeline to use ChatSession for conversation ID (#137143)
* Assist Pipeline to use ChatSession for conversation ID

* Adjust to latest changes
2025-02-03 09:18:15 -06:00
Paulus Schoutsen
8acab6c646 Assist Satellite to use ChatSession for conversation ID (#137142)
* Assist Satellite to use ChatSession for conversation ID

* Adjust for changes main branch

* Ensure the initial message is in the chat log
2025-02-03 09:13:09 -06:00
Joost Lekkerkerker
4531a46557 Bump python-homeassistant-analytics to 0.9.0 (#137240) 2025-02-03 16:03:13 +01:00
cdnninja
37461d727a Migrate unique ID in vesync switches (#137099) 2025-02-03 15:44:49 +01:00
Marc Mueller
b5662ded2c Update pylint-per-file-ignores to 1.4.0 (#137242) 2025-02-03 15:42:21 +01:00
Richard Kroegel
71e28a4af3 Add service to retrieve schedule configuration (#121904) 2025-02-03 14:41:25 +00:00
Marc Mueller
dba4637aa9 Update pytest-github-actions-annotate-failures to 0.3.0 (#137243) 2025-02-03 15:40:38 +01:00
Marc Mueller
e24564147d Update pytest-asyncio to 0.25.3 (#137231) 2025-02-03 14:52:56 +01:00
Marc Mueller
9bc110104d Update pyOpenSSL to 25.0.0 (#137236) 2025-02-03 14:46:49 +01:00
Marc Mueller
c903658aa8 Update syrupy to 4.8.1 (#137235) 2025-02-03 14:46:22 +01:00
Conor Eager
34a229af52 Add Starlink connectivity binary sensor (#133184)
Co-authored-by: David Rapan <david@rapan.cz>
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2025-02-03 14:34:25 +01:00
Marc Mueller
8579456895 Update pytest-picked to 0.5.1 (#137233) 2025-02-03 14:25:06 +01:00
Marc Mueller
1d7e485aa3 Update pytest-freezer to 0.4.9 (#137232) 2025-02-03 14:11:03 +01:00
TimL
0e73363d04 Bump pysmlight to v0.2.2 (#137218) 2025-02-03 14:06:27 +01:00
Markus Adrario
48184e742a Fix minor issues in Homee (#137239) 2025-02-03 14:05:51 +01:00
RJPoelstra
0034055ac8 Fix retrieving PIN when no pin is set on mount in motionmount integration (#137230) 2025-02-03 14:05:11 +01:00
Marc Mueller
52d7cfbe32 Update coverage to 7.6.10 (#137229) 2025-02-03 14:03:41 +01:00
Marc Mueller
a9e73d9253 Update pylint to 3.3.4 (#137227) 2025-02-03 14:01:20 +01:00
Marc Mueller
a5c01a4d4f Update pipdeptree to 2.25.0 (#137228) 2025-02-03 14:01:04 +01:00
Marc Mueller
6d31530811 Update license-expression to 30.4.1 (#137226) 2025-02-03 14:00:16 +01:00
Markus Jacobsen
c950c69cb3 Add parallel updates setting to Bang & Olufsen Event platform (#135850) 2025-02-03 13:42:47 +01:00
Norbert Rittel
c2f94542aa Fix uppercase / lowercase setup strings in Generic Camera (#137219) 2025-02-03 12:38:38 +00:00
Simone Chemelli
cce6c735ad Add support for Shelly Flood gen4 (#136981) 2025-02-03 13:04:14 +01:00
Erik Montnemery
9cfe109210 Check for errors when restoring backups using supervisor (#137217)
* Check for errors when restoring backups using supervisor

* Break long line in test

* Improve comments
2025-02-03 11:51:29 +01:00
Norbert Rittel
0b2b222fca Fixes in user-facing strings of Tado integration (#137158) 2025-02-03 10:54:32 +01:00
Norbert Rittel
d2092315f5 Fix spelling of "SharkClean" and sentence-casing of some words (#137183) 2025-02-03 09:06:51 +01:00
cdnninja
d18fb4e6f9 Vesync bump pyvesync library (#137208) 2025-02-03 08:58:33 +01:00
Andre Lengwenus
00e0a5bc10 Bump pypck to 0.8.5 (#137176) 2025-02-03 08:26:08 +01:00
Paulus Schoutsen
9679fc7878 Chat session rev2 (#137209)
* Chat Session rev 2

* Rename session to chat_log

* Simplify typing

* Typing

* Address comments

* Fix anthropic and ollama
2025-02-03 00:05:20 -05:00
Paulus Schoutsen
63c153d671 Bump version to 2025.2.0b7 2025-02-03 02:27:53 +00:00
TimL
c8c6eddc65 Simplify config entry title for SMLIGHT (#137206) 2025-02-03 02:27:42 +00:00
J. Nick Koston
ddb40cb4a8 Bump dbus-fast to 2.23.0 (#137205)
changelog: https://github.com/Bluetooth-Devices/dbus-fast/compare/v2.31.0...v2.32.0
2025-02-03 02:27:42 +00:00
TimL
38975775ac Switch to using IP Addresses for connecting to smlight devices (#137204) 2025-02-03 02:27:41 +00:00
J. Nick Koston
4fa043e6ff Bump bleak-esphome to 2.7.0 (#137199)
changelog: https://github.com/Bluetooth-Devices/bleak-esphome/compare/v2.6.0...v2.7.0
2025-02-03 02:27:40 +00:00
J. Nick Koston
433a51f6d5 Bump aiodhcpwatcher to 1.0.3 (#137188)
changelog: https://github.com/bdraco/aiodhcpwatcher/compare/v1.0.2...v1.0.3
2025-02-03 02:27:40 +00:00
J. Nick Koston
48511986bb Bump dbus-fast to 2.31.0 (#137180)
changelog: https://github.com/Bluetooth-Devices/dbus-fast/compare/v2.30.4...v2.31.0
2025-02-03 02:27:39 +00:00
Steven B.
f1128adec4 Bump python-kasa to 0.10.1 (#137173) 2025-02-03 02:27:38 +00:00
Jan Bouwhuis
54a718c1d7 Fix mqtt reconfigure does not use broker entry password when it is not changed (#137169) 2025-02-03 02:27:38 +00:00
Jeef
63d1dddc76 Bump monarchmoney to 0.4.4 (#137168)
feat: update to backing lib to update backing lib
2025-02-03 02:27:37 +00:00
Manu
7d1b72a581 Bump habiticalib to v0.3.4 (#137148)
Bump habiticalib to version 0.3.4
2025-02-03 02:27:36 +00:00
J. Nick Koston
6c172705d1 Bump bluetooth-data-tools to 1.23.3 (#137147) 2025-02-03 02:27:36 +00:00
J. Nick Koston
505f089a73 Bump dbus-fast to 2.30.4 (#137151)
changelog: https://github.com/Bluetooth-Devices/dbus-fast/compare/v2.30.2...v2.30.4
2025-02-03 02:26:40 +00:00
TimL
dbf9e370a8 Allow manual smlight user setup to override discovery (#137136)
Co-authored-by: J. Nick Koston <nick@koston.org>
2025-02-03 02:25:22 +00:00
J. Nick Koston
ce93cb9467 Bump dbus-fast to 2.23.0 (#137205)
changelog: https://github.com/Bluetooth-Devices/dbus-fast/compare/v2.31.0...v2.32.0
2025-02-02 21:22:58 -05:00
J. Nick Koston
1860794cac Bump bleak-esphome to 2.7.0 (#137199)
changelog: https://github.com/Bluetooth-Devices/bleak-esphome/compare/v2.6.0...v2.7.0
2025-02-02 21:22:49 -05:00
TimL
f846aa4705 Simplify config entry title for SMLIGHT (#137206) 2025-02-02 17:46:27 -06:00
TimL
0f641fcb74 Switch to using IP Addresses for connecting to smlight devices (#137204) 2025-02-02 17:08:32 -06:00
Denis Shulyaka
0f36759a38 Add support for OpenAI reasoning models (#137139)
* Add support for OpenAI reasoning models

* Apply suggestions from code review

* Remove o1-mini* and o1-preview* model support

* List unsupported models

* Reenable audio models (they also support text)
2025-02-02 16:55:16 -05:00
starkillerOG
a6781107df Add Linx virtual motionblinds integration (#137184) 2025-02-02 21:22:04 +01:00
J. Nick Koston
6afaeee0fd Bump aiodhcpwatcher to 1.0.3 (#137188)
changelog: https://github.com/bdraco/aiodhcpwatcher/compare/v1.0.2...v1.0.3
2025-02-02 21:17:58 +02:00
J. Nick Koston
1a394876b1 Bump dbus-fast to 2.31.0 (#137180)
changelog: https://github.com/Bluetooth-Devices/dbus-fast/compare/v2.30.4...v2.31.0
2025-02-02 12:10:24 -05:00
TimL
a98109614e Allow manual smlight user setup to override discovery (#137136)
Co-authored-by: J. Nick Koston <nick@koston.org>
2025-02-02 10:37:08 -06:00
J. Nick Koston
a3d0ec4e6e Bump bluetooth-data-tools to 1.23.3 (#137147) 2025-02-02 10:25:59 -06:00
Jan Bouwhuis
839e2881e0 Fix mqtt reconfigure does not use broker entry password when it is not changed (#137169) 2025-02-02 16:21:40 +01:00
Steven B.
cb3ed506ad Bump python-kasa to 0.10.1 (#137173) 2025-02-02 17:19:31 +02:00
Brett Adams
9d808a7b5a Bump teslemetry-stream to 0.6.10 (#137159)
* bump

* v0.6.10
2025-02-02 14:29:33 +01:00
Jeef
b8237eaa55 Bump monarchmoney to 0.4.4 (#137168)
feat: update to backing lib to update backing lib
2025-02-02 14:11:44 +01:00
starkillerOG
9c747113a2 Reolink styling using walrus operator (#137069) 2025-02-02 13:18:36 +01:00
Indu Prakash
634e1dd9eb fix: sort available modes (#137134) 2025-02-02 10:11:40 +02:00
J. Nick Koston
9fcaf32c9c Bump dbus-fast to 2.30.4 (#137151)
changelog: https://github.com/Bluetooth-Devices/dbus-fast/compare/v2.30.2...v2.30.4
2025-02-02 10:09:52 +02:00
Manu
d55a6de01b Bump habiticalib to v0.3.4 (#137148)
Bump habiticalib to version 0.3.4
2025-02-02 10:08:14 +02:00
Paulus Schoutsen
dd9bd8ef73 Make get_chat_session a callback context manager (#137146) 2025-02-01 23:37:24 -05:00
Paulus Schoutsen
dc1c2f24e6 Bump version to 2025.2.0b6 2025-02-02 02:06:10 +00:00
Robert Resch
78dcf8b18e Bump deebot-client to 12.0.0b0 (#137137) 2025-02-02 02:06:07 +00:00
J. Nick Koston
613168fd62 Add missing brackets to ESPHome configuration URLs with IPv6 addresses (#137132)
fixes #137125
2025-02-02 02:06:06 +00:00
J. Nick Koston
5f28e95bdc Bump habluetooth to 3.21.0 (#137129) 2025-02-02 02:06:05 +00:00
Allen Porter
1db5da4037 Remove entity state from mcp-server prompt (#137126)
* Create a stateless assist API for MCP server

* Update stateless API

* Fix areas in exposed entity fields

* Add tests that verify areas are returned

* Revert the getstate intent

* Revert whitespace change

* Revert whitespace change

* Revert method name changes to avoid breaking openai and google tests
2025-02-02 02:06:05 +00:00
Alex Thompson
6bf5e95089 Allow ignored tilt_ble devices to be set up from user flow (#137123)
Co-authored-by: J. Nick Koston <nick@koston.org>
2025-02-02 02:06:04 +00:00
Shay Levy
1ea23fda10 Allow ignored Aranet devices to be set up from the user flow (#137121) 2025-02-02 02:06:03 +00:00
J. Nick Koston
21a85c014a Allow ignored xiaomi_ble devices to be set up from the user flow (#137115) 2025-02-02 02:06:03 +00:00
J. Nick Koston
4c8f716320 Allow ignored sensorpush devices to be set up from the user flow (#137113)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for sensorpush
2025-02-02 02:06:02 +00:00
J. Nick Koston
63bd67f6cd Allow ignored qingping devices to be set up from the user flow (#137111)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for qingping
2025-02-02 02:06:01 +00:00
Assaf Inbal
73b874c5e6 Fix Homekit camera profiles schema (#137110) 2025-02-02 02:06:00 +00:00
J. Nick Koston
3b67dc3651 Allow ignored oralb devices to be set up from the user flow (#137109)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for oralb
2025-02-02 02:06:00 +00:00
J. Nick Koston
434a4ebc9f Allow ignored mopeka devices to be set up from the user flow (#137107)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for mopeka
2025-02-02 02:05:59 +00:00
J. Nick Koston
cb4b7e71af Allow ignored inkbird devices to be set up from the user flow (#137106)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for inkbird
2025-02-02 02:05:58 +00:00
J. Nick Koston
4c6fda2096 Allow ignored bthome devices to be set up from the user flow (#137105) 2025-02-02 02:05:58 +00:00
J. Nick Koston
9b5c21524c Allow ignored thermopro devices to be set up from the user flow (#137104)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for thermopro
2025-02-02 02:05:57 +00:00
J. Nick Koston
76937541f1 Allow ignored yale_ble devices to be set up from the user flow (#137103)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for yalexs_ble
2025-02-02 02:05:56 +00:00
J. Nick Koston
bad966f3ab Allow ignored airthings_ble devices to be set up from the user flow (#137102)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for airthings
2025-02-02 02:05:55 +00:00
J. Nick Koston
2d1d9bbe5a Set via_device for remote Bluetooth adapters to link to the parent device (#137091) 2025-02-02 02:05:55 +00:00
Marc Mueller
e76ff0a0de Update RestrictedPython to 8.0 (#137075) 2025-02-02 02:05:54 +00:00
IceBotYT
fa8d1b4dc4 Bump lacrosse-view to 1.0.4 (#137058) 2025-02-02 02:05:53 +00:00
Martin Hjelmare
2ce585463c Fix home connect manifest logger (#137138) 2025-02-01 21:03:54 -05:00
Robert Resch
f9df5b413b Bump deebot-client to 12.0.0b0 (#137137) 2025-02-01 21:02:34 -05:00
J. Nick Koston
39a575dd29 Add missing brackets to ESPHome configuration URLs with IPv6 addresses (#137132)
fixes #137125
2025-02-01 21:02:10 -05:00
Denis Shulyaka
27f89f7710 Bump openai to 1.61.0 (#137130) 2025-02-01 21:01:41 -05:00
Paulus Schoutsen
2f6640707b Extract conversation ID generation to helper (#137062)
* Extract conversation ID generation to helper

* Allow nested get_chat_log calls
2025-02-01 20:54:00 -05:00
J. Diego Rodríguez Royo
30314ca32b Add and delete Home Connect devices on CONNECTED/PAIRED and DEPAIRED events (#136952)
* Add and delete devices on CONNECT/PAIRED and DEPAIRED events

* Simplify device depairing

* small fixes

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

* Add always the devices

* kind of revert changes

to simplify the entity fetch and removing on connected/paired and depaired

* cache `ha_id`

* Fix typo

* Remove unnecessary device info at HomeConnectEntity

* Move common code of each platform to `common.py`

* Added docstring to clarify usage

* Apply suggestions

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

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2025-02-02 02:02:45 +01:00
J. Diego Rodríguez Royo
147b5f549f Fetch current active and selected programs at Home Connect (#136948)
* Fetch current active and selected programs

* Intialize HomeConnectEntity first at SelectProgramEntity

* Use the right exception

* Use active/selected program from `get_all_programs`

This will allow us to reduce the number of requests that we need to perform to get all the data ready (only one requests vs. three requests)

* Remove no longer required mocks

* Fix
2025-02-02 00:12:26 +01:00
Allen Porter
bf6f790d09 Remove entity state from mcp-server prompt (#137126)
* Create a stateless assist API for MCP server

* Update stateless API

* Fix areas in exposed entity fields

* Add tests that verify areas are returned

* Revert the getstate intent

* Revert whitespace change

* Revert whitespace change

* Revert method name changes to avoid breaking openai and google tests
2025-02-01 14:26:52 -08:00
J. Nick Koston
2c99e3778e Bump habluetooth to 3.21.0 (#137129) 2025-02-01 15:56:28 -06:00
Alex Thompson
51c16cc808 Allow ignored tilt_ble devices to be set up from user flow (#137123)
Co-authored-by: J. Nick Koston <nick@koston.org>
2025-02-01 15:09:49 -06:00
Markus Adrario
f5fd49d8cb Small additions for Homee (#137000)
* fix entity set value error handling

* Translation for node_state sensor

* add entrance gate operator to covers

* fix review comments

* Update tests/components/homee/test_cover.py

* Delete Logging statement

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2025-02-01 14:11:53 -06:00
Shay Levy
ba427a1054 Allow ignored Aranet devices to be set up from the user flow (#137121) 2025-02-01 14:03:19 -06:00
Marc Mueller
95bcbd2c4f Improve fully_kiosk sensor typing (#137079) 2025-02-01 14:00:00 -06:00
Martin Hjelmare
c35cd6fb76 Bump aiohomeconnect to 0.12.3 (#137085) 2025-02-01 21:22:57 +02:00
J. Nick Koston
3b69a2bbd1 Allow ignored airthings_ble devices to be set up from the user flow (#137102)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for airthings
2025-02-01 21:22:13 +02:00
J. Nick Koston
d402166d1d Allow ignored yale_ble devices to be set up from the user flow (#137103)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for yalexs_ble
2025-02-01 21:21:53 +02:00
J. Nick Koston
9f85756785 Allow ignored thermopro devices to be set up from the user flow (#137104)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for thermopro
2025-02-01 21:21:43 +02:00
J. Nick Koston
d28a4258a3 Allow ignored inkbird devices to be set up from the user flow (#137106)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for inkbird
2025-02-01 21:21:21 +02:00
J. Nick Koston
caaa7def2f Allow ignored mopeka devices to be set up from the user flow (#137107)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for mopeka
2025-02-01 21:21:09 +02:00
J. Nick Koston
bfb9de46fe Allow ignored oralb devices to be set up from the user flow (#137109)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for oralb
2025-02-01 21:20:52 +02:00
J. Nick Koston
ced52f64b4 Allow ignored qingping devices to be set up from the user flow (#137111)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for qingping
2025-02-01 13:19:44 -06:00
J. Nick Koston
5967957e0b Allow ignored sensorpush devices to be set up from the user flow (#137113)
Every few days we get an issue report about a device a user ignored and forgot about, and than can no longer get set up. Sometimes its a govee device, sometimes its a switchbot device, but the pattern is consistent.

Allow ignored devices to be selected in the user step and replace the ignored entry.

Same as #137056 and #137052 but for sensorpush
2025-02-01 21:19:42 +02:00
J. Nick Koston
2888c64da9 Allow ignored xiaomi_ble devices to be set up from the user flow (#137115) 2025-02-01 13:16:39 -06:00
Ілля Піскурьов
4cab773bab Enable Modbus Climate / HVAC on/off to use the coil instead of the register(s) (#135657) 2025-02-01 13:15:20 -06:00
J. Nick Koston
d3da3b3470 Allow ignored bthome devices to be set up from the user flow (#137105) 2025-02-01 13:08:24 -06:00
Assaf Inbal
9c4940e915 Fix Homekit camera profiles schema (#137110) 2025-02-01 12:49:09 -06:00
J. Nick Koston
d43083e2f9 Set via_device for remote Bluetooth adapters to link to the parent device (#137091) 2025-02-01 12:10:59 -06:00
Marc Mueller
1157a08f72 Improve isy994 sensor typing (#137077) 2025-02-01 16:48:09 +01:00
IceBotYT
278c35f830 Bump lacrosse-view to 1.0.4 (#137058) 2025-02-01 09:16:10 -06:00
Marc Mueller
f29b4134d2 Update RestrictedPython to 8.0 (#137075) 2025-02-01 09:15:55 -06:00
Paulus Schoutsen
b3c44ca03a Bump version to 2025.2.0b5 2025-02-01 13:58:56 +00:00
Jan-Philipp Benecke
6efa6f9687 Load hassio before backup at frontend stage (#137067) 2025-02-01 13:58:53 +00:00
J. Nick Koston
3588b88cbb Bump habluetooth to 3.20.1 (#137063) 2025-02-01 13:58:52 +00:00
tronikos
a51846a8cd For consistency use suggested_filename in Google Drive (#137061)
Use  suggested_filename in Google Drive
2025-02-01 13:58:52 +00:00
J. Nick Koston
ec22479733 Allow ignored switchbot devices to be set up from the user flow (#137056) 2025-02-01 13:58:51 +00:00
J. Nick Koston
3a11e8df6a Allow ignored govee-ble devices to be set up from the user flow (#137052)
* Allow ignored govee-ble devices to be setup up from the user flow

Every few days we get an issue report about a device
a user ignored and forgot about, and than can no longer
get set up. Allow ignored devices to be selected in
the user step and replace the ignored entry.

* Add the ability to skip ignored config entries when calling _abort_if_unique_id_configured

see https://github.com/home-assistant/core/pull/137052

* coverage

* revert
2025-02-01 13:58:50 +00:00
Nathan Spencer
a4eab35e01 Raise HomeAssistantError from camera snapshot service (#137051)
* Raise HomeAssistantError from camera snapshot service

* Improve error message

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2025-02-01 13:58:50 +00:00
Marc Mueller
da7ba85ee6 Improve sonos alarms typing (#137078) 2025-02-01 14:48:46 +01:00
J. Nick Koston
37daa57818 Bump habluetooth to 3.20.1 (#137063) 2025-02-01 07:26:31 -06:00
Nathan Spencer
ee37bc476f Raise HomeAssistantError from camera snapshot service (#137051)
* Raise HomeAssistantError from camera snapshot service

* Improve error message

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2025-02-01 13:53:04 +01:00
tronikos
d4586fb2e4 Test config_entry_oauth2_flow.async_get_redirect_uri (#136976)
* Test config_entry_oauth2_flow.async_get_redirect_uri

* review
2025-02-01 12:49:18 +01:00
J. Diego Rodríguez Royo
63ab13681a Home Connect entities availability based on the connected state of the appliance (#136951)
* Base the entity availability on the connected state of the appliance

* cache `ha_id`

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

* Inlcude coordinator `available` property at entity

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

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2025-02-01 12:46:49 +01:00
J. Diego Rodríguez Royo
efcfd97d1b Filter programs by execution type at select program entities at Home Connect (#136950)
* Filter programs by execution type at select program entities

* Suggestions and improvements

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

* Use function and translation key at select program entity description

* Fix select entity description docstring

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2025-02-01 12:06:39 +01:00
Jan-Philipp Benecke
889fe05a48 Load hassio before backup at frontend stage (#137067) 2025-02-01 11:43:45 +01:00
Norbert Rittel
123cd92986 Replace keys with translatable friendly names in Statistics helper (#136936) 2025-02-01 10:48:05 +01:00
J. Diego Rodríguez Royo
285a0a6c81 Fix Home Connect actions keys (#137027)
* Fix actions

* Use coerce

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

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2025-02-01 10:47:27 +01:00
Joris Pelgröm
012f7112d7 Add switch platform to LetPot integration (#136383)
* Add switch platform to LetPot integration

* deviceclient -> device_client

* Remove coordinator data None check

* Add exception handling + test
2025-02-01 08:15:36 +01:00
tronikos
bb61e31298 For consistency use suggested_filename in Google Drive (#137061)
Use  suggested_filename in Google Drive
2025-01-31 21:40:52 -08:00
TimL
9453b925cd Bump pysmlight to v0.2.1 (#137053) 2025-01-31 20:39:28 -06:00
J. Nick Koston
64d2f84c0d Allow ignored switchbot devices to be set up from the user flow (#137056) 2025-01-31 20:25:16 -06:00
J. Nick Koston
84e15e10ef Allow ignored govee-ble devices to be set up from the user flow (#137052)
* Allow ignored govee-ble devices to be setup up from the user flow

Every few days we get an issue report about a device
a user ignored and forgot about, and than can no longer
get set up. Allow ignored devices to be selected in
the user step and replace the ignored entry.

* Add the ability to skip ignored config entries when calling _abort_if_unique_id_configured

see https://github.com/home-assistant/core/pull/137052

* coverage

* revert
2025-01-31 21:24:01 -05:00
Paulus Schoutsen
829a6271af Bump version to 2025.2.0b4 2025-02-01 01:04:55 +00:00
Jan Bouwhuis
9935528dd3 Bump aioimaplib to version 2.0.1 (#137049) 2025-02-01 01:04:48 +00:00
J. Nick Koston
df35d226d6 Bump habluetooth to 3.17.1 (#137045) 2025-02-01 01:04:47 +00:00
J. Nick Koston
2b510caa1c Bump aiohttp-asyncmdnsresolver to 0.0.3 (#137040) 2025-02-01 01:04:47 +00:00
J. Nick Koston
90c357c01f Bump bthome-ble to 3.12.3 (#137036) 2025-02-01 01:04:46 +00:00
J. Nick Koston
321ce698be Bump zeroconf to 0.143.0 (#137035) 2025-02-01 01:04:45 +00:00
Ernst Klamer
ea519268b6 Bump bthome-ble to 3.11.0 (#137032)
bump bthome-ble to 3.11.0
2025-02-01 01:04:45 +00:00
Josef Zweck
4687b2e455 Use readable backup names for onedrive (#137031)
* Use readable names for onedrive

* ensure filename is fixed

* fix import
2025-02-01 01:04:44 +00:00
Joost Lekkerkerker
bbb03d6731 Update Overseerr string to mention CSRF (#137001)
* Update Overseerr string to mention CSRF

* Update homeassistant/components/overseerr/strings.json

* Update homeassistant/components/overseerr/strings.json

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2025-02-01 01:04:43 +00:00
Jan Bouwhuis
b9884f72c3 Shorten the integration name for incomfort (#136930) 2025-02-01 01:04:42 +00:00
Abílio Costa
5da9bfe0e3 Add dev docs and frontend PR links to PR template (#137034) 2025-01-31 20:03:20 -05:00
Jan Bouwhuis
e56772d37b Bump aioimaplib to version 2.0.1 (#137049) 2025-01-31 18:38:11 -06:00
J. Nick Koston
c35e7715b7 Bump habluetooth to 3.17.1 (#137045) 2025-01-31 18:13:27 -06:00
Norbert Rittel
7040614433 Fix one occurrence of "api" to match all other in sensibo and HA (#137037) 2025-02-01 00:56:45 +02:00
J. Nick Koston
5fa5bd1302 Bump aiohttp-asyncmdnsresolver to 0.0.3 (#137040) 2025-01-31 16:30:20 -06:00
J. Nick Koston
dc7f445356 Bump bthome-ble to 3.12.3 (#137036) 2025-01-31 15:18:19 -06:00
J. Nick Koston
7a0400154e Bump zeroconf to 0.143.0 (#137035) 2025-01-31 15:00:39 -06:00
Joost Lekkerkerker
d51e72cd95 Update Overseerr string to mention CSRF (#137001)
* Update Overseerr string to mention CSRF

* Update homeassistant/components/overseerr/strings.json

* Update homeassistant/components/overseerr/strings.json

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2025-01-31 22:29:31 +02:00
Joris Pelgröm
7103ea7e8f Add exception handling for updating LetPot time entities (#137033)
* Handle exceptions for entity edits for LetPot

* Set exception-translations: done
2025-01-31 22:28:23 +02:00
Ernst Klamer
164d38ac0d Bump bthome-ble to 3.11.0 (#137032)
bump bthome-ble to 3.11.0
2025-01-31 22:03:17 +02:00
Josef Zweck
4a2e9db9fe Use readable backup names for onedrive (#137031)
* Use readable names for onedrive

* ensure filename is fixed

* fix import
2025-01-31 20:59:34 +01:00
Robert Resch
df166d178c Bump deebot-client to 11.1.0b2 (#137030) 2025-01-31 14:17:14 -05:00
J. Nick Koston
f75a61ac90 Bump SQLAlchemy to 2.0.37 (#137028)
changelog: https://docs.sqlalchemy.org/en/20/changelog/changelog_20.html#change-2.0.37

There is a bug fix that likely affects us that could lead to corrupted queries
https://docs.sqlalchemy.org/en/20/changelog/changelog_20.html#change-e4d04d8eb1bccee16b74f5662aff8edd
2025-01-31 13:52:38 -05:00
starkillerOG
92dd18a9be Ensure Reolink can start when privacy mode is enabled (#136514)
* Allow startup when privacy mode is enabled

* Add tests

* remove duplicate privacy_mode

* fix tests

* Apply suggestions from code review

Co-authored-by: Robert Resch <robert@resch.dev>

* Store in subfolder and cleanup when removed

* Add tests and fixes

* fix styling

* rename CONF_PRIVACY to CONF_SUPPORTS_PRIVACY_MODE

* use helper store

---------

Co-authored-by: Robert Resch <robert@resch.dev>
2025-01-31 13:48:47 -05:00
Allen Porter
df59b1d4fa Persist roborock maps to disk only on shutdown (#136889)
* Persist roborock maps to disk only on shutdown

* Rename on_unload to on_stop

* Spawn 1 executor thread and block writes to disk

* Update tests/components/roborock/test_image.py

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

* Use config entry setup instead of component setup

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2025-01-31 13:45:01 -05:00
Martin Hjelmare
9bc3c417ae Add codeowner to Home Connect (#137029) 2025-01-31 12:36:40 -06:00
Erik Montnemery
065cdf421f Delete old addon update backups when updating addon (#136977)
* Delete old addon update backups when updating addon

* Address review comments

* Add tests
2025-01-31 13:33:48 -05:00
Bram Kragten
256157d413 Update frontend to 20250131.0 (#137024) 2025-01-31 19:25:24 +01:00
J. Nick Koston
f8f12957b5 Bump bleak-esphome to 2.6.0 (#137025) 2025-01-31 12:15:31 -06:00
J. Nick Koston
c4cb94bddd Bump habluetooth to 3.17.0 (#137022) 2025-01-31 11:29:44 -06:00
Erik Montnemery
64f679ba8f Make supervisor backup file names more user friendly (#137020) 2025-01-31 18:20:30 +01:00
Duco Sebel
e0bf248867 Bumb python-homewizard-energy to 8.3.2 (#136995) 2025-01-31 10:49:25 -06:00
Nathan Spencer
b1c3d0857a Add pets to litterrobot integration (#136865) 2025-01-31 17:35:08 +01:00
Erik Montnemery
e18dc063ba Make backup file names more user friendly (#136928)
* Make backup file names more user friendly

* Strip backup name

* Strip backup name

* Underscores
2025-01-31 17:33:30 +01:00
Joris Pelgröm
b85b834bdc Bump letpot to 0.4.0 (#137007)
* Bump letpot to 0.4.0

* Fix test item
2025-01-31 10:31:31 -06:00
RJPoelstra
f5924146c1 Add data_description's to motionmount integration (#137014)
* Add data_description's

* Use more common terminology
2025-01-31 10:29:59 -06:00
Norbert Rittel
fafeedd01b Revert previous PR and remove URL from error message instead (#137018) 2025-01-31 10:26:43 -06:00
Erik Montnemery
64814e086f Make sure we load the backup integration before frontend (#137010) 2025-01-31 15:50:30 +00:00
Joost Lekkerkerker
6f1539f60d Use device name as entity name in Eheim digital climate (#136997) 2025-01-31 15:32:11 +00:00
Jakob Schlyter
84ae476b67 Energy distance units (#136933)
Co-authored-by: Abílio Costa <abmantis@users.noreply.github.com>
2025-01-31 14:22:25 +00:00
Josef Zweck
21ffcf853b Call backup listener during setup in onedrive (#136990) 2025-01-31 13:39:59 +01:00
RJPoelstra
d4a355e684 Bump python-MotionMount to 2.3.0 (#136985) 2025-01-31 13:29:07 +01:00
Manu
0773e37dab Create/delete lists at runtime in Bring integration (#130098) 2025-01-31 13:23:44 +01:00
Cyrill Raccaud
8eb9cc0e8e Remove the unparsed config flow error from Swiss public transport (#136998) 2025-01-31 13:19:04 +01:00
RJPoelstra
b702d88ab7 Use runtime_data in motionmount integration (#136999) 2025-01-31 13:17:22 +01:00
starkillerOG
66f048f49f Make Reolink reboot button always available (#136667) 2025-01-31 13:15:22 +01:00
Steven B.
c7041a97be Do not duplicate device class translations in ring integration (#136868) 2025-01-31 13:03:13 +01:00
Josef Zweck
f21ab24b8b Add sensors for drink stats per key to lamarzocco (#136582)
* Add sensors for drink stats per key to lamarzocco

* Add icon

* Use UOM translations

* fix tests

* remove translation key

* Update sensor.py

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

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2025-01-31 12:55:51 +01:00
Sid
cde59613a5 Refactor eheimdigital platform async_setup_entry (#136745) 2025-01-31 12:52:17 +01:00
Christopher Fenner
d83c335ed6 Add support for standby quickmode to ViCare integration (#133156) 2025-01-31 12:45:58 +01:00
Andrew Jackson
50f3d79fb2 Add post action to mastodon (#134788)
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2025-01-31 12:29:23 +01:00
Jan Stienstra
a7903d344f Bump jellyfin-apiclient-python to 1.10.0 (#136872) 2025-01-31 12:29:00 +01:00
Gerben Jongerius
010cad08c0 Add tariff sensor and peak sensors (#136919) 2025-01-31 12:12:07 +01:00
Cyrill Raccaud
e512ad7a81 Fix missing duration translation for Swiss public transport integration (#136982) 2025-01-31 12:10:44 +01:00
Markus Adrario
e578327054 Add more Homee cover tests (#136568) 2025-01-31 11:46:12 +01:00
Josef Zweck
230e101ee4 Retry backup uploads in onedrive (#136980)
* Retry backup uploads in onedrive

* no exponential backup on timeout
2025-01-31 11:23:33 +01:00
Abílio Costa
3fb70316da Fix error messaging for cascading service calls (#136966) 2025-01-31 11:10:57 +01:00
Avi Miller
ab5583ed40 Suppress color_temp warning if color_temp_kelvin is provided (#136884) 2025-01-31 10:55:42 +01:00
Norbert Rittel
f1c720606f Fixes to the user-facing strings of energenie_power_sockets (#136844) 2025-01-31 10:38:30 +01:00
Austin Mroczek
270108e8e4 Bump total-connect-client to 2025.1.4 (#136793) 2025-01-31 10:36:06 +01:00
J. Nick Koston
fc979cd564 Bump habluetooth to 3.15.0 (#136973) 2025-01-31 08:34:39 +01:00
tronikos
99e307fe5a Bump opower to 0.8.9 (#136911)
* Bump opower to 0.8.9

* mypy
2025-01-30 23:33:58 -08:00
J. Diego Rodríguez Royo
4d4e11a0eb Fetch all programs instead of only the available ones at Home Connect (#136949)
Fetch all programs instead of only the available ones
2025-01-31 08:26:57 +01:00
Shay Levy
4613087e86 Add serial number to LG webOS TV device info (#136968) 2025-01-31 08:23:03 +01:00
tronikos
6c93d6a2d0 Include the redirect URL in the Google Drive instructions (#136906)
* Include the redirect URL in the Google Drive instructions

* Apply suggestions from code review

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

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2025-01-30 22:59:03 -08:00
Norbert Rittel
f93b1cc950 Make assist_satellite action descriptions consistent (#136955)
- use third-person singular for descriptive language, following HA standards
- use "a satellite" in both descriptions to match
- use sentence-casing for "Start conversation" action name
2025-01-30 16:03:56 -06:00
Michael Hansen
00f8afe332 Consume extra system prompt in first pipeline (#136958) 2025-01-30 17:01:24 -05:00
Matthias Alphart
ea496290c2 Update knx-frontend to 2025.1.30.194235 (#136954) 2025-01-30 21:59:00 +01:00
epenet
acb3f4ed78 Add software version to onewire device info (#136934) 2025-01-30 21:03:47 +01:00
J. Nick Koston
b12598d963 Bump aiohttp-asyncmdnsresolver to 0.0.2 (#136942) 2025-01-30 20:38:27 +01:00
J. Nick Koston
cf737356fd Bump zeroconf to 0.142.0 (#136940)
changelog: https://github.com/python-zeroconf/python-zeroconf/compare/0.141.0...0.142.0
2025-01-30 12:55:14 -06:00
Bram Kragten
6858f2a3d2 Update frontend to 20250130.0 (#136937) 2025-01-30 18:38:11 +01:00
Joost Lekkerkerker
c3b0bc3e0d Show name of the backup agents in issue (#136925)
* Show name of the backup agents in issue

* Show name of the backup agents in issue

* Update homeassistant/components/backup/manager.py

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

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2025-01-30 18:15:54 +01:00
tronikos
3dc52774fc Don't log errors when raising a backup exception in Google Drive (#136916) 2025-01-30 18:15:13 +01:00
Maciej Bieniek
f501b55aed Fix KeyError for Shelly virtual number component (#136932) 2025-01-30 18:43:48 +02:00
moritzthecat
eca93f1f4e Add DS2450 to onewire integration (#136882)
* add DS2450 to onewire integration

* added tests for DS2450 in const.py

* Update homeassistant/components/onewire/sensor.py

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

* spelling change voltage -> Voltage

* use translation key

* tests run after en.json edited

* Update homeassistant/components/onewire/strings.json

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

* naming convention adapted

* Update homeassistant/components/onewire/sensor.py

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

* adatpt owfs namings to HA namings. volt -> voltage

* Apply suggestions from code review

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2025-01-30 17:33:41 +01:00
Erik Montnemery
ec53b08e09 Don't blow up when a backup doesn't exist on supervisor (#136907) 2025-01-30 17:32:01 +01:00
Josef Zweck
63af407f8f Pick onedrive owner from a more reliable source (#136929)
* Pick onedrive owner from a more reliable source

* fix
2025-01-30 17:08:35 +01:00
Michael
6dd2d46328 Fix backup related translations in Synology DSM (#136931)
refernce backup related strings in option-flow strings
2025-01-30 16:59:39 +01:00
Jan Bouwhuis
8db6a6cf17 Shorten the integration name for incomfort (#136930) 2025-01-30 17:47:09 +02:00
Josef Zweck
d148bd9b0c Fix onedrive does not fail on delete not found (#136910)
* Fix onedrive does not fail on delete not found

* Fix onedrive does not fail on delete not found
2025-01-30 16:33:59 +01:00
Joost Lekkerkerker
773375e7b0 Fix Sonos importing deprecating constant (#136926) 2025-01-30 16:16:39 +01:00
Joost Lekkerkerker
232e99b62e Create Xbox signed session in executor (#136927) 2025-01-30 16:16:22 +01:00
Erik Montnemery
bab616fa61 Fix handling of renamed backup files in the core writer (#136898)
* Fix handling of renamed backup files in the core writer

* Adjust mocking

* Raise BackupAgentError instead of KeyError in get_backup_path

* Add specific error indicating backup not found

* Fix tests

* Ensure backups are loaded

* Fix tests
2025-01-30 15:25:16 +01:00
Maciej Bieniek
1c4ddb36d5 Convert valve position to int for Shelly BLU TRV (#136912) 2025-01-30 15:16:51 +02:00
Duco Sebel
76570b5144 Remove stale translation string in HomeWizard (#136917)
Remove stale translation in HomeWizard
2025-01-30 14:47:33 +02:00
epenet
5dd147e83b Add missing discovery string from onewire (#136892) 2025-01-30 11:46:27 +01:00
TimL
9eb383f314 Bump Pysmlight to v0.2.0 (#136886)
* Bump pysmlight to v0.2.0

* Update info.json fixture with radios list

* Update diagnostics snapshot
2025-01-30 12:11:40 +02:00
Erik Montnemery
52feeedd2b Poll supervisor job state when creating or restoring a backup (#136891)
* Poll supervisor job state when creating or restoring a backup

* Update tests

* Add tests for create and restore jobs finishing early
2025-01-30 11:09:31 +01:00
Erik Montnemery
1b5316b269 Ignore dangling symlinks when restoring backup (#136893) 2025-01-30 11:09:07 +01:00
Allen Porter
708ae09c7a Bump nest to 7.1.1 (#136888) 2025-01-30 11:07:55 +02:00
Arie Catsman
97fcbed6e0 Add error handling to enphase_envoy switch platform action (#136837)
* Add error handling to enphase_envoy switch platform action

* Use decorators for exception handling
2025-01-30 11:07:10 +02:00
dependabot[bot]
a8175b785f Bump github/codeql-action from 3.28.6 to 3.28.8 (#136890)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.6 to 3.28.8.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v3.28.6...v3.28.8)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-30 08:42:23 +01:00
TheJulianJES
64b056fbe9 Bump ZHA to 0.0.47 (#136883) 2025-01-29 20:57:36 -06:00
Paulus Schoutsen
427c437a68 Add start_conversation service to Assist Satellite (#134921)
* Add start_conversation service to Assist Satellite

* Fix tests

* Implement start_conversation in voip

* Update homeassistant/components/assist_satellite/entity.py

---------

Co-authored-by: Michael Hansen <mike@rhasspy.org>
2025-01-29 21:32:10 -05:00
J. Diego Rodríguez Royo
b637129208 Migrate from homeconnect dependency to aiohomeconnect (#136116)
* Migrate from homeconnect dependency to aiohomeconnect

* Reload the integration if there is an API error on event stream

* fix typos at coordinator tests

* Setup config entry at coordinator tests

* fix ruff

* Bump aiohomeconnect to version 0.11.4

* Fix set program options

* Use context based updates at coordinator

* Improved how `context_callbacks` cache is invalidated

* fix

* fixes and improvements at coordinator

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

* Remove stale Entity inheritance

* Small improvement for light subscriptions

* Remove non-needed function

It had its purpose before some refactoring before the firs commit, no is no needed as is only used at HomeConnectEntity constructor

* Static methods and variables at conftest

* Refresh the data after an event stream interruption

* Cleaned debug logs

* Fetch programs at coordinator

* Improvements

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

* Simplify obtaining power settings from coordinator data

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

* Remove unnecessary statement

* use `is UNDEFINED` instead of `isinstance`

* Request power setting only when it is strictly necessary

* Bump aiohomeconnect to 0.12.1

* use raw keys for diagnostics

* Use keyword arguments where needed

* Remove unnecessary statements

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

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2025-01-30 02:42:41 +01:00
TimL
4e3e1e91b7 Fix loading of SMLIGHT integration when no internet is available (#136497)
* Don't fail to load integration if internet unavailable

* Add test case for no internet

* Also test we recover after internet returns
2025-01-30 01:01:39 +00:00
Artur Pragacz
4066289662 Update quality scale in Onkyo (#136710) 2025-01-29 22:32:16 +00:00
Erik Montnemery
aca9607e2f Bump backup store to version 1.3 (#136870)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2025-01-29 14:58:06 -06:00
J. Nick Koston
edabf0f8dd Fix incorrect Bluetooth source address when restoring data from D-Bus (#136862) 2025-01-29 13:09:00 -06:00
Erik Montnemery
5286bd8f0c Persist hassio backup restore status after core restart (#136857)
* Persist hassio backup restore status after core restart

* Remove useless condition
2025-01-29 13:55:02 -05:00
Michael Hansen
d206553a0d Cancel call if user does not pick up (#136858) 2025-01-29 13:52:32 -05:00
Abílio Costa
b500fde468 Handle locked account error in Whirlpool (#136861) 2025-01-29 13:51:09 -05:00
Bram Kragten
46cef2986c Bump version to 2025.3.0 (#136859) 2025-01-29 19:32:36 +01:00
Erik Montnemery
823df4242d Add support for per-backup agent encryption flag to hassio (#136828)
* Add support for per-backup agent encryption flag to hassio

* Improve comment

* Set password to None when supervisor should not encrypt
2025-01-29 18:23:25 +01:00
1779 changed files with 39734 additions and 17604 deletions

View File

@@ -46,6 +46,8 @@
- This PR fixes or closes issue: fixes #
- This PR is related to issue:
- Link to documentation pull request:
- Link to developer documentation pull request:
- Link to frontend pull request:
## Checklist
<!--

View File

@@ -324,7 +324,7 @@ jobs:
uses: actions/checkout@v4.2.2
- name: Install Cosign
uses: sigstore/cosign-installer@v3.7.0
uses: sigstore/cosign-installer@v3.8.0
with:
cosign-release: "v2.2.3"

View File

@@ -40,7 +40,7 @@ env:
CACHE_VERSION: 11
UV_CACHE_VERSION: 1
MYPY_CACHE_VERSION: 9
HA_SHORT_VERSION: "2025.2"
HA_SHORT_VERSION: "2025.3"
DEFAULT_PYTHON: "3.13"
ALL_PYTHON_VERSIONS: "['3.13']"
# 10.3 is the oldest supported version
@@ -975,6 +975,7 @@ jobs:
${cov_params[@]} \
-o console_output_style=count \
-p no:sugar \
--exclude-warning-annotations \
$(sed -n "${{ matrix.group }},1p" pytest_buckets.txt) \
2>&1 | tee pytest-${{ matrix.python-version }}-${{ matrix.group }}.txt
- name: Upload pytest output
@@ -1098,6 +1099,7 @@ jobs:
-o console_output_style=count \
--durations=10 \
-p no:sugar \
--exclude-warning-annotations \
--dburl=mysql://root:password@127.0.0.1/homeassistant-test \
tests/components/history \
tests/components/logbook \
@@ -1228,6 +1230,7 @@ jobs:
--durations=0 \
--durations-min=10 \
-p no:sugar \
--exclude-warning-annotations \
--dburl=postgresql://postgres:password@127.0.0.1/homeassistant-test \
tests/components/history \
tests/components/logbook \
@@ -1374,6 +1377,7 @@ jobs:
--durations=0 \
--durations-min=1 \
-p no:sugar \
--exclude-warning-annotations \
tests/components/${{ matrix.group }} \
2>&1 | tee pytest-${{ matrix.python-version }}-${{ matrix.group }}.txt
- name: Upload pytest output

View File

@@ -24,11 +24,11 @@ jobs:
uses: actions/checkout@v4.2.2
- name: Initialize CodeQL
uses: github/codeql-action/init@v3.28.6
uses: github/codeql-action/init@v3.28.8
with:
languages: python
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3.28.6
uses: github/codeql-action/analyze@v3.28.8
with:
category: "/language:python"

View File

@@ -8,7 +8,7 @@ repos:
- id: ruff-format
files: ^((homeassistant|pylint|script|tests)/.+)?[^/]+\.(py|pyi)$
- repo: https://github.com/codespell-project/codespell
rev: v2.3.0
rev: v2.4.1
hooks:
- id: codespell
args:

View File

@@ -119,6 +119,7 @@ homeassistant.components.bluetooth_tracker.*
homeassistant.components.bmw_connected_drive.*
homeassistant.components.bond.*
homeassistant.components.braviatv.*
homeassistant.components.bring.*
homeassistant.components.brother.*
homeassistant.components.browser.*
homeassistant.components.bryant_evolution.*

12
CODEOWNERS generated
View File

@@ -625,8 +625,8 @@ build.json @home-assistant/supervisor
/tests/components/hlk_sw16/ @jameshilliard
/homeassistant/components/holiday/ @jrieger @gjohansson-ST
/tests/components/holiday/ @jrieger @gjohansson-ST
/homeassistant/components/home_connect/ @DavidMStraub @Diegorro98
/tests/components/home_connect/ @DavidMStraub @Diegorro98
/homeassistant/components/home_connect/ @DavidMStraub @Diegorro98 @MartinHjelmare
/tests/components/home_connect/ @DavidMStraub @Diegorro98 @MartinHjelmare
/homeassistant/components/homeassistant/ @home-assistant/core
/tests/components/homeassistant/ @home-assistant/core
/homeassistant/components/homeassistant_alerts/ @home-assistant/core
@@ -731,6 +731,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/intent/ @home-assistant/core @synesthesiam
/tests/components/intent/ @home-assistant/core @synesthesiam
/homeassistant/components/intesishome/ @jnimmo
/homeassistant/components/iometer/ @MaestroOnICe
/tests/components/iometer/ @MaestroOnICe
/homeassistant/components/ios/ @robbiet480
/tests/components/ios/ @robbiet480
/homeassistant/components/iotawatt/ @gtdiehl @jyavenard
@@ -765,8 +767,8 @@ build.json @home-assistant/supervisor
/tests/components/ituran/ @shmuelzon
/homeassistant/components/izone/ @Swamp-Ig
/tests/components/izone/ @Swamp-Ig
/homeassistant/components/jellyfin/ @j-stienstra @ctalkington
/tests/components/jellyfin/ @j-stienstra @ctalkington
/homeassistant/components/jellyfin/ @RunC0deRun @ctalkington
/tests/components/jellyfin/ @RunC0deRun @ctalkington
/homeassistant/components/jewish_calendar/ @tsvi
/tests/components/jewish_calendar/ @tsvi
/homeassistant/components/juicenet/ @jesserockz
@@ -1136,6 +1138,8 @@ build.json @home-assistant/supervisor
/tests/components/permobil/ @IsakNyberg
/homeassistant/components/persistent_notification/ @home-assistant/core
/tests/components/persistent_notification/ @home-assistant/core
/homeassistant/components/pglab/ @pglab-electronics
/tests/components/pglab/ @pglab-electronics
/homeassistant/components/philips_js/ @elupus
/tests/components/philips_js/ @elupus
/homeassistant/components/pi_hole/ @shenxn

2
Dockerfile generated
View File

@@ -13,7 +13,7 @@ ENV \
ARG QEMU_CPU
# Install uv
RUN pip3 install uv==0.5.21
RUN pip3 install uv==0.5.27
WORKDIR /usr/src

View File

@@ -161,6 +161,12 @@ FRONTEND_INTEGRATIONS = {
# integrations can be removed and database migration status is
# visible in frontend
"frontend",
# Hassio is an after dependency of backup, after dependencies
# are not promoted from stage 2 to earlier stages, so we need to
# add it here. Hassio needs to be setup before backup, otherwise
# the backup integration will think we are a container/core install
# when using HAOS or Supervised install.
"hassio",
# Backup is an after dependency of frontend, after dependencies
# are not promoted from stage 2 to earlier stages, so we need to
# add it here.
@@ -710,109 +716,6 @@ def _get_domains(hass: core.HomeAssistant, config: dict[str, Any]) -> set[str]:
return domains
class _WatchPendingSetups:
"""Periodic log and dispatch of setups that are pending."""
def __init__(
self,
hass: core.HomeAssistant,
setup_started: dict[tuple[str, str | None], float],
) -> None:
"""Initialize the WatchPendingSetups class."""
self._hass = hass
self._setup_started = setup_started
self._duration_count = 0
self._handle: asyncio.TimerHandle | None = None
self._previous_was_empty = True
self._loop = hass.loop
def _async_watch(self) -> None:
"""Periodic log of setups that are pending."""
now = monotonic()
self._duration_count += SLOW_STARTUP_CHECK_INTERVAL
remaining_with_setup_started: defaultdict[str, float] = defaultdict(float)
for integration_group, start_time in self._setup_started.items():
domain, _ = integration_group
remaining_with_setup_started[domain] += now - start_time
if remaining_with_setup_started:
_LOGGER.debug("Integration remaining: %s", remaining_with_setup_started)
elif waiting_tasks := self._hass._active_tasks: # noqa: SLF001
_LOGGER.debug("Waiting on tasks: %s", waiting_tasks)
self._async_dispatch(remaining_with_setup_started)
if (
self._setup_started
and self._duration_count % LOG_SLOW_STARTUP_INTERVAL == 0
):
# We log every LOG_SLOW_STARTUP_INTERVAL until all integrations are done
# once we take over LOG_SLOW_STARTUP_INTERVAL (60s) to start up
_LOGGER.warning(
"Waiting on integrations to complete setup: %s",
self._setup_started,
)
_LOGGER.debug("Running timeout Zones: %s", self._hass.timeout.zones)
self._async_schedule_next()
def _async_dispatch(self, remaining_with_setup_started: dict[str, float]) -> None:
"""Dispatch the signal."""
if remaining_with_setup_started or not self._previous_was_empty:
async_dispatcher_send_internal(
self._hass, SIGNAL_BOOTSTRAP_INTEGRATIONS, remaining_with_setup_started
)
self._previous_was_empty = not remaining_with_setup_started
def _async_schedule_next(self) -> None:
"""Schedule the next call."""
self._handle = self._loop.call_later(
SLOW_STARTUP_CHECK_INTERVAL, self._async_watch
)
def async_start(self) -> None:
"""Start watching."""
self._async_schedule_next()
def async_stop(self) -> None:
"""Stop watching."""
self._async_dispatch({})
if self._handle:
self._handle.cancel()
self._handle = None
async def async_setup_multi_components(
hass: core.HomeAssistant,
domains: set[str],
config: dict[str, Any],
) -> None:
"""Set up multiple domains. Log on failure."""
# Avoid creating tasks for domains that were setup in a previous stage
domains_not_yet_setup = domains - hass.config.components
# Create setup tasks for base platforms first since everything will have
# to wait to be imported, and the sooner we can get the base platforms
# loaded the sooner we can start loading the rest of the integrations.
futures = {
domain: hass.async_create_task_internal(
async_setup_component(hass, domain, config),
f"setup component {domain}",
eager_start=True,
)
for domain in sorted(
domains_not_yet_setup, key=SETUP_ORDER_SORT_KEY, reverse=True
)
}
results = await asyncio.gather(*futures.values(), return_exceptions=True)
for idx, domain in enumerate(futures):
result = results[idx]
if isinstance(result, BaseException):
_LOGGER.error(
"Error setting up integration %s - received exception",
domain,
exc_info=(type(result), result, result.__traceback__),
)
async def _async_resolve_domains_to_setup(
hass: core.HomeAssistant, config: dict[str, Any]
) -> tuple[set[str], dict[str, loader.Integration]]:
@@ -1032,7 +935,7 @@ async def _async_set_up_integrations(
for dep in integration.all_dependencies
)
async_set_domains_to_be_loaded(hass, to_be_loaded)
await async_setup_multi_components(hass, domain_group, config)
await _async_setup_multi_components(hass, domain_group, config)
# Enables after dependencies when setting up stage 1 domains
async_set_domains_to_be_loaded(hass, stage_1_domains)
@@ -1044,7 +947,7 @@ async def _async_set_up_integrations(
async with hass.timeout.async_timeout(
STAGE_1_TIMEOUT, cool_down=COOLDOWN_TIME
):
await async_setup_multi_components(hass, stage_1_domains, config)
await _async_setup_multi_components(hass, stage_1_domains, config)
except TimeoutError:
_LOGGER.warning(
"Setup timed out for stage 1 waiting on %s - moving forward",
@@ -1060,7 +963,7 @@ async def _async_set_up_integrations(
async with hass.timeout.async_timeout(
STAGE_2_TIMEOUT, cool_down=COOLDOWN_TIME
):
await async_setup_multi_components(hass, stage_2_domains, config)
await _async_setup_multi_components(hass, stage_2_domains, config)
except TimeoutError:
_LOGGER.warning(
"Setup timed out for stage 2 waiting on %s - moving forward",
@@ -1086,3 +989,106 @@ async def _async_set_up_integrations(
"Integration setup times: %s",
dict(sorted(setup_time.items(), key=itemgetter(1), reverse=True)),
)
class _WatchPendingSetups:
"""Periodic log and dispatch of setups that are pending."""
def __init__(
self,
hass: core.HomeAssistant,
setup_started: dict[tuple[str, str | None], float],
) -> None:
"""Initialize the WatchPendingSetups class."""
self._hass = hass
self._setup_started = setup_started
self._duration_count = 0
self._handle: asyncio.TimerHandle | None = None
self._previous_was_empty = True
self._loop = hass.loop
def _async_watch(self) -> None:
"""Periodic log of setups that are pending."""
now = monotonic()
self._duration_count += SLOW_STARTUP_CHECK_INTERVAL
remaining_with_setup_started: defaultdict[str, float] = defaultdict(float)
for integration_group, start_time in self._setup_started.items():
domain, _ = integration_group
remaining_with_setup_started[domain] += now - start_time
if remaining_with_setup_started:
_LOGGER.debug("Integration remaining: %s", remaining_with_setup_started)
elif waiting_tasks := self._hass._active_tasks: # noqa: SLF001
_LOGGER.debug("Waiting on tasks: %s", waiting_tasks)
self._async_dispatch(remaining_with_setup_started)
if (
self._setup_started
and self._duration_count % LOG_SLOW_STARTUP_INTERVAL == 0
):
# We log every LOG_SLOW_STARTUP_INTERVAL until all integrations are done
# once we take over LOG_SLOW_STARTUP_INTERVAL (60s) to start up
_LOGGER.warning(
"Waiting on integrations to complete setup: %s",
self._setup_started,
)
_LOGGER.debug("Running timeout Zones: %s", self._hass.timeout.zones)
self._async_schedule_next()
def _async_dispatch(self, remaining_with_setup_started: dict[str, float]) -> None:
"""Dispatch the signal."""
if remaining_with_setup_started or not self._previous_was_empty:
async_dispatcher_send_internal(
self._hass, SIGNAL_BOOTSTRAP_INTEGRATIONS, remaining_with_setup_started
)
self._previous_was_empty = not remaining_with_setup_started
def _async_schedule_next(self) -> None:
"""Schedule the next call."""
self._handle = self._loop.call_later(
SLOW_STARTUP_CHECK_INTERVAL, self._async_watch
)
def async_start(self) -> None:
"""Start watching."""
self._async_schedule_next()
def async_stop(self) -> None:
"""Stop watching."""
self._async_dispatch({})
if self._handle:
self._handle.cancel()
self._handle = None
async def _async_setup_multi_components(
hass: core.HomeAssistant,
domains: set[str],
config: dict[str, Any],
) -> None:
"""Set up multiple domains. Log on failure."""
# Avoid creating tasks for domains that were setup in a previous stage
domains_not_yet_setup = domains - hass.config.components
# Create setup tasks for base platforms first since everything will have
# to wait to be imported, and the sooner we can get the base platforms
# loaded the sooner we can start loading the rest of the integrations.
futures = {
domain: hass.async_create_task_internal(
async_setup_component(hass, domain, config),
f"setup component {domain}",
eager_start=True,
)
for domain in sorted(
domains_not_yet_setup, key=SETUP_ORDER_SORT_KEY, reverse=True
)
}
results = await asyncio.gather(*futures.values(), return_exceptions=True)
for idx, domain in enumerate(futures):
result = results[idx]
if isinstance(result, BaseException):
_LOGGER.error(
"Error setting up integration %s - received exception",
domain,
exc_info=(type(result), result, result.__traceback__),
)

View File

@@ -16,7 +16,7 @@
"error": {
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
"invalid_api_key": "[%key:common::config_flow::error::invalid_api_key%]",
"requests_exceeded": "The allowed number of requests to Accuweather API has been exceeded. You have to wait or change API Key."
"requests_exceeded": "The allowed number of requests to the AccuWeather API has been exceeded. You have to wait or change the API key."
}
},
"entity": {

View File

@@ -79,7 +79,7 @@
"services": {
"add_url": {
"name": "Add URL",
"description": "Add a new filter subscription to AdGuard Home.",
"description": "Adds a new filter subscription to AdGuard Home.",
"fields": {
"name": {
"name": "[%key:common::config_flow::data::name%]",
@@ -123,11 +123,11 @@
},
"refresh": {
"name": "Refresh",
"description": "Refresh all filter subscriptions in AdGuard Home.",
"description": "Refreshes all filter subscriptions in AdGuard Home.",
"fields": {
"force": {
"name": "Force",
"description": "Force update (bypasses AdGuard Home throttling). \"true\" to force, or \"false\" to omit for a regular refresh."
"description": "Force update (bypasses AdGuard Home throttling), omit for a regular refresh."
}
}
}

View File

@@ -4,12 +4,11 @@ from __future__ import annotations
from airgradient import AirGradientClient
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .coordinator import AirGradientCoordinator
from .coordinator import AirGradientConfigEntry, AirGradientCoordinator
PLATFORMS: list[Platform] = [
Platform.BUTTON,
@@ -21,9 +20,6 @@ PLATFORMS: list[Platform] = [
]
type AirGradientConfigEntry = ConfigEntry[AirGradientCoordinator]
async def async_setup_entry(hass: HomeAssistant, entry: AirGradientConfigEntry) -> bool:
"""Set up Airgradient from a config entry."""
@@ -31,7 +27,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AirGradientConfigEntry)
entry.data[CONF_HOST], session=async_get_clientsession(hass)
)
coordinator = AirGradientCoordinator(hass, client)
coordinator = AirGradientCoordinator(hass, entry, client)
await coordinator.async_config_entry_first_refresh()

View File

@@ -4,18 +4,17 @@ from __future__ import annotations
from dataclasses import dataclass
from datetime import timedelta
from typing import TYPE_CHECKING
from airgradient import AirGradientClient, AirGradientError, Config, Measures
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import DOMAIN, LOGGER
if TYPE_CHECKING:
from . import AirGradientConfigEntry
type AirGradientConfigEntry = ConfigEntry[AirGradientCoordinator]
@dataclass
@@ -32,11 +31,17 @@ class AirGradientCoordinator(DataUpdateCoordinator[AirGradientData]):
config_entry: AirGradientConfigEntry
_current_version: str
def __init__(self, hass: HomeAssistant, client: AirGradientClient) -> None:
def __init__(
self,
hass: HomeAssistant,
config_entry: AirGradientConfigEntry,
client: AirGradientClient,
) -> None:
"""Initialize coordinator."""
super().__init__(
hass,
logger=LOGGER,
config_entry=config_entry,
name=f"AirGradient {client.host}",
update_interval=timedelta(minutes=1),
)

View File

@@ -6,21 +6,18 @@ from datetime import timedelta
import logging
from homeassistant.components.air_quality import DOMAIN as AIR_QUALITY_PLATFORM
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .const import CONF_USE_NEAREST, DOMAIN, MIN_UPDATE_INTERVAL
from .coordinator import AirlyDataUpdateCoordinator
from .coordinator import AirlyConfigEntry, AirlyDataUpdateCoordinator
PLATFORMS = [Platform.SENSOR]
_LOGGER = logging.getLogger(__name__)
type AirlyConfigEntry = ConfigEntry[AirlyDataUpdateCoordinator]
async def async_setup_entry(hass: HomeAssistant, entry: AirlyConfigEntry) -> bool:
"""Set up Airly as config entry."""
@@ -60,7 +57,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: AirlyConfigEntry) -> boo
update_interval = timedelta(minutes=MIN_UPDATE_INTERVAL)
coordinator = AirlyDataUpdateCoordinator(
hass, websession, api_key, latitude, longitude, update_interval, use_nearest
hass,
entry,
websession,
api_key,
latitude,
longitude,
update_interval,
use_nearest,
)
await coordinator.async_config_entry_first_refresh()

View File

@@ -10,6 +10,7 @@ from aiohttp.client_exceptions import ClientConnectorError
from airly import Airly
from airly.exceptions import AirlyError
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from homeassistant.util import dt as dt_util
@@ -27,6 +28,8 @@ from .const import (
_LOGGER = logging.getLogger(__name__)
type AirlyConfigEntry = ConfigEntry[AirlyDataUpdateCoordinator]
def set_update_interval(instances_count: int, requests_remaining: int) -> timedelta:
"""Return data update interval.
@@ -58,9 +61,12 @@ def set_update_interval(instances_count: int, requests_remaining: int) -> timede
class AirlyDataUpdateCoordinator(DataUpdateCoordinator[dict[str, str | float | int]]):
"""Define an object to hold Airly data."""
config_entry: AirlyConfigEntry
def __init__(
self,
hass: HomeAssistant,
config_entry: AirlyConfigEntry,
session: ClientSession,
api_key: str,
latitude: float,
@@ -76,7 +82,13 @@ class AirlyDataUpdateCoordinator(DataUpdateCoordinator[dict[str, str | float | i
self.airly = Airly(api_key, session, language=language)
self.use_nearest = use_nearest
super().__init__(hass, _LOGGER, name=DOMAIN, update_interval=update_interval)
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=update_interval,
)
async def _async_update_data(self) -> dict[str, str | float | int]:
"""Update data via library."""

View File

@@ -13,7 +13,7 @@ from homeassistant.const import (
)
from homeassistant.core import HomeAssistant
from . import AirlyConfigEntry
from .coordinator import AirlyConfigEntry
TO_REDACT = {CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE, CONF_UNIQUE_ID}

View File

@@ -24,7 +24,6 @@ from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import AirlyConfigEntry, AirlyDataUpdateCoordinator
from .const import (
ATTR_ADVICE,
ATTR_API_ADVICE,
@@ -52,6 +51,7 @@ from .const import (
SUFFIX_PERCENT,
URL,
)
from .coordinator import AirlyConfigEntry, AirlyDataUpdateCoordinator
PARALLEL_UPDATES = 1

View File

@@ -9,8 +9,8 @@ from airly import Airly
from homeassistant.components import system_health
from homeassistant.core import HomeAssistant, callback
from . import AirlyConfigEntry
from .const import DOMAIN
from .coordinator import AirlyConfigEntry
@callback

View File

@@ -15,13 +15,11 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .coordinator import AirNowDataUpdateCoordinator
from .coordinator import AirNowConfigEntry, AirNowDataUpdateCoordinator
_LOGGER = logging.getLogger(__name__)
PLATFORMS = [Platform.SENSOR]
type AirNowConfigEntry = ConfigEntry[AirNowDataUpdateCoordinator]
async def async_setup_entry(hass: HomeAssistant, entry: AirNowConfigEntry) -> bool:
"""Set up AirNow from a config entry."""
@@ -38,7 +36,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AirNowConfigEntry) -> bo
# Setup the Coordinator
session = async_get_clientsession(hass)
coordinator = AirNowDataUpdateCoordinator(
hass, session, api_key, latitude, longitude, distance, update_interval
hass, entry, session, api_key, latitude, longitude, distance, update_interval
)
# Sync with Coordinator

View File

@@ -10,6 +10,7 @@ from pyairnow import WebServiceAPI
from pyairnow.conv import aqi_to_concentration
from pyairnow.errors import AirNowError
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
@@ -34,13 +35,18 @@ from .const import (
_LOGGER = logging.getLogger(__name__)
type AirNowConfigEntry = ConfigEntry[AirNowDataUpdateCoordinator]
class AirNowDataUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]):
"""The AirNow update coordinator."""
config_entry: AirNowConfigEntry
def __init__(
self,
hass: HomeAssistant,
config_entry: AirNowConfigEntry,
session: ClientSession,
api_key: str,
latitude: float,
@@ -55,7 +61,13 @@ class AirNowDataUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]):
self.airnow = WebServiceAPI(api_key, session=session)
super().__init__(hass, _LOGGER, name=DOMAIN, update_interval=update_interval)
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=update_interval,
)
async def _async_update_data(self) -> dict[str, Any]:
"""Update data via library."""

View File

@@ -13,7 +13,7 @@ from homeassistant.const import (
)
from homeassistant.core import HomeAssistant
from . import AirNowConfigEntry
from .coordinator import AirNowConfigEntry
ATTR_LATITUDE_CAP = "Latitude"
ATTR_LONGITUDE_CAP = "Longitude"

View File

@@ -25,7 +25,6 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import AirNowConfigEntry, AirNowDataUpdateCoordinator
from .const import (
ATTR_API_AQI,
ATTR_API_AQI_DESCRIPTION,
@@ -43,6 +42,7 @@ from .const import (
DOMAIN,
US_TZ_OFFSETS,
)
from .coordinator import AirNowConfigEntry, AirNowDataUpdateCoordinator
ATTRIBUTION = "Data provided by AirNow"

View File

@@ -22,6 +22,8 @@ _LOGGER = logging.getLogger(__name__)
class AirQCoordinator(DataUpdateCoordinator):
"""Coordinator is responsible for querying the device at a specified route."""
config_entry: ConfigEntry
def __init__(
self,
hass: HomeAssistant,
@@ -33,6 +35,7 @@ class AirQCoordinator(DataUpdateCoordinator):
super().__init__(
hass,
_LOGGER,
config_entry=entry,
name=DOMAIN,
update_interval=timedelta(seconds=UPDATE_INTERVAL),
)

View File

@@ -7,5 +7,5 @@
"integration_type": "hub",
"iot_class": "local_polling",
"loggers": ["aioairq"],
"requirements": ["aioairq==0.4.3"]
"requirements": ["aioairq==0.4.4"]
}

View File

@@ -144,7 +144,7 @@ class AirthingsConfigFlow(ConfigFlow, domain=DOMAIN):
return self.async_create_entry(title=discovery.name, data={})
current_addresses = self._async_current_ids()
current_addresses = self._async_current_ids(include_ignore=False)
for discovery_info in async_discovered_service_info(self.hass):
address = discovery_info.address
if address in current_addresses or address in self._discovered_devices:

View File

@@ -15,7 +15,6 @@ from aioairzone.const import (
)
from aioairzone.localapi import AirzoneLocalApi, ConnectionOptions
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, CONF_ID, CONF_PORT, Platform
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import (
@@ -25,7 +24,7 @@ from homeassistant.helpers import (
)
from .const import DOMAIN, MANUFACTURER
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneConfigEntry, AirzoneUpdateCoordinator
PLATFORMS: list[Platform] = [
Platform.BINARY_SENSOR,
@@ -38,8 +37,6 @@ PLATFORMS: list[Platform] = [
_LOGGER = logging.getLogger(__name__)
type AirzoneConfigEntry = ConfigEntry[AirzoneUpdateCoordinator]
async def _async_migrate_unique_ids(
hass: HomeAssistant,
@@ -90,7 +87,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AirzoneConfigEntry) -> b
)
airzone = AirzoneLocalApi(aiohttp_client.async_get_clientsession(hass), options)
coordinator = AirzoneUpdateCoordinator(hass, airzone)
coordinator = AirzoneUpdateCoordinator(hass, entry, airzone)
await coordinator.async_config_entry_first_refresh()
await _async_migrate_unique_ids(hass, entry, coordinator)

View File

@@ -25,8 +25,7 @@ from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirzoneConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneConfigEntry, AirzoneUpdateCoordinator
from .entity import AirzoneEntity, AirzoneSystemEntity, AirzoneZoneEntity

View File

@@ -50,9 +50,8 @@ from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirzoneConfigEntry
from .const import API_TEMPERATURE_STEP, TEMP_UNIT_LIB_TO_HASS
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneConfigEntry, AirzoneUpdateCoordinator
from .entity import AirzoneZoneEntity
BASE_FAN_SPEEDS: Final[dict[int, str]] = {

View File

@@ -10,6 +10,7 @@ from typing import Any
from aioairzone.exceptions import AirzoneError
from aioairzone.localapi import AirzoneLocalApi
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
@@ -19,17 +20,27 @@ SCAN_INTERVAL = timedelta(seconds=60)
_LOGGER = logging.getLogger(__name__)
type AirzoneConfigEntry = ConfigEntry[AirzoneUpdateCoordinator]
class AirzoneUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]):
"""Class to manage fetching data from the Airzone device."""
def __init__(self, hass: HomeAssistant, airzone: AirzoneLocalApi) -> None:
config_entry: AirzoneConfigEntry
def __init__(
self,
hass: HomeAssistant,
config_entry: AirzoneConfigEntry,
airzone: AirzoneLocalApi,
) -> None:
"""Initialize."""
self.airzone = airzone
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=SCAN_INTERVAL,
)

View File

@@ -10,7 +10,7 @@ from homeassistant.components.diagnostics import async_redact_data
from homeassistant.const import CONF_UNIQUE_ID
from homeassistant.core import HomeAssistant
from . import AirzoneConfigEntry
from .coordinator import AirzoneConfigEntry
TO_REDACT_API = [
API_MAC,

View File

@@ -31,9 +31,8 @@ from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import AirzoneConfigEntry
from .const import DOMAIN, MANUFACTURER
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneConfigEntry, AirzoneUpdateCoordinator
_LOGGER = logging.getLogger(__name__)

View File

@@ -27,8 +27,7 @@ from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirzoneConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneConfigEntry, AirzoneUpdateCoordinator
from .entity import AirzoneEntity, AirzoneZoneEntity

View File

@@ -30,9 +30,8 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirzoneConfigEntry
from .const import TEMP_UNIT_LIB_TO_HASS
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneConfigEntry, AirzoneUpdateCoordinator
from .entity import (
AirzoneEntity,
AirzoneHotWaterEntity,

View File

@@ -16,8 +16,7 @@ from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirzoneConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneConfigEntry, AirzoneUpdateCoordinator
from .entity import AirzoneEntity, AirzoneZoneEntity

View File

@@ -30,9 +30,8 @@ from homeassistant.const import ATTR_TEMPERATURE, STATE_OFF
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirzoneConfigEntry
from .const import TEMP_UNIT_LIB_TO_HASS
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneConfigEntry, AirzoneUpdateCoordinator
from .entity import AirzoneHotWaterEntity
OPERATION_LIB_TO_HASS: Final[dict[HotWaterOperation, str]] = {

View File

@@ -5,12 +5,11 @@ from __future__ import annotations
from aioairzone_cloud.cloudapi import AirzoneCloudApi
from aioairzone_cloud.common import ConnectionOptions
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_ID, CONF_PASSWORD, CONF_USERNAME, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import aiohttp_client
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneCloudConfigEntry, AirzoneUpdateCoordinator
PLATFORMS: list[Platform] = [
Platform.BINARY_SENSOR,
@@ -21,8 +20,6 @@ PLATFORMS: list[Platform] = [
Platform.WATER_HEATER,
]
type AirzoneCloudConfigEntry = ConfigEntry[AirzoneUpdateCoordinator]
async def async_setup_entry(
hass: HomeAssistant, entry: AirzoneCloudConfigEntry
@@ -42,7 +39,7 @@ async def async_setup_entry(
airzone.select_installation(inst)
await airzone.update_installation(inst)
coordinator = AirzoneUpdateCoordinator(hass, airzone)
coordinator = AirzoneUpdateCoordinator(hass, entry, airzone)
await coordinator.async_config_entry_first_refresh()
entry.runtime_data = coordinator

View File

@@ -28,8 +28,7 @@ from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirzoneCloudConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneCloudConfigEntry, AirzoneUpdateCoordinator
from .entity import (
AirzoneAidooEntity,
AirzoneEntity,

View File

@@ -58,8 +58,7 @@ from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirzoneCloudConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneCloudConfigEntry, AirzoneUpdateCoordinator
from .entity import (
AirzoneAidooEntity,
AirzoneEntity,

View File

@@ -10,6 +10,7 @@ from typing import Any
from aioairzone_cloud.cloudapi import AirzoneCloudApi
from aioairzone_cloud.exceptions import AirzoneCloudError
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
@@ -19,11 +20,20 @@ SCAN_INTERVAL = timedelta(seconds=60)
_LOGGER = logging.getLogger(__name__)
type AirzoneCloudConfigEntry = ConfigEntry[AirzoneUpdateCoordinator]
class AirzoneUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]):
"""Class to manage fetching data from the Airzone Cloud device."""
def __init__(self, hass: HomeAssistant, airzone: AirzoneCloudApi) -> None:
config_entry: AirzoneCloudConfigEntry
def __init__(
self,
hass: HomeAssistant,
config_entry: AirzoneCloudConfigEntry,
airzone: AirzoneCloudApi,
) -> None:
"""Initialize."""
self.airzone = airzone
self.airzone.set_update_callback(self.async_set_updated_data)
@@ -31,6 +41,7 @@ class AirzoneUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]):
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=SCAN_INTERVAL,
)

View File

@@ -25,7 +25,7 @@ from homeassistant.components.diagnostics import async_redact_data
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant
from . import AirzoneCloudConfigEntry
from .coordinator import AirzoneCloudConfigEntry
TO_REDACT_API = [
API_CITY,

View File

@@ -23,8 +23,7 @@ from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirzoneCloudConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneCloudConfigEntry, AirzoneUpdateCoordinator
from .entity import AirzoneEntity, AirzoneZoneEntity

View File

@@ -49,8 +49,7 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirzoneCloudConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneCloudConfigEntry, AirzoneUpdateCoordinator
from .entity import (
AirzoneAidooEntity,
AirzoneEntity,

View File

@@ -15,8 +15,7 @@ from homeassistant.components.switch import (
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirzoneCloudConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneCloudConfigEntry, AirzoneUpdateCoordinator
from .entity import AirzoneEntity, AirzoneZoneEntity

View File

@@ -31,8 +31,7 @@ from homeassistant.const import ATTR_TEMPERATURE, STATE_OFF, UnitOfTemperature
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirzoneCloudConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .coordinator import AirzoneCloudConfigEntry, AirzoneUpdateCoordinator
from .entity import AirzoneHotWaterEntity
OPERATION_LIB_TO_HASS: Final[dict[HotWaterOperation, str]] = {

View File

@@ -1531,7 +1531,7 @@ async def async_api_adjust_range(
data: dict[str, Any] = {ATTR_ENTITY_ID: entity.entity_id}
range_delta = directive.payload["rangeValueDelta"]
range_delta_default = bool(directive.payload["rangeValueDeltaDefault"])
response_value: int | None = 0
response_value: float | None = 0
# Cover Position
if instance == f"{cover.DOMAIN}.{cover.ATTR_POSITION}":

View File

@@ -2,14 +2,11 @@
import amberelectric
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_API_TOKEN
from homeassistant.core import HomeAssistant
from .const import CONF_SITE_ID, PLATFORMS
from .coordinator import AmberUpdateCoordinator
type AmberConfigEntry = ConfigEntry[AmberUpdateCoordinator]
from .coordinator import AmberConfigEntry, AmberUpdateCoordinator
async def async_setup_entry(hass: HomeAssistant, entry: AmberConfigEntry) -> bool:
@@ -19,7 +16,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AmberConfigEntry) -> boo
api_instance = amberelectric.AmberApi(api_client)
site_id = entry.data[CONF_SITE_ID]
coordinator = AmberUpdateCoordinator(hass, api_instance, site_id)
coordinator = AmberUpdateCoordinator(hass, entry, api_instance, site_id)
await coordinator.async_config_entry_first_refresh()
entry.runtime_data = coordinator
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

View File

@@ -12,9 +12,8 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import AmberConfigEntry
from .const import ATTRIBUTION
from .coordinator import AmberUpdateCoordinator
from .coordinator import AmberConfigEntry, AmberUpdateCoordinator
PRICE_SPIKE_ICONS = {
"none": "mdi:power-plug",

View File

@@ -13,11 +13,14 @@ from amberelectric.models.forecast_interval import ForecastInterval
from amberelectric.models.price_descriptor import PriceDescriptor
from amberelectric.rest import ApiException
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import LOGGER
type AmberConfigEntry = ConfigEntry[AmberUpdateCoordinator]
def is_current(interval: ActualInterval | CurrentInterval | ForecastInterval) -> bool:
"""Return true if the supplied interval is a CurrentInterval."""
@@ -70,13 +73,20 @@ def normalize_descriptor(descriptor: PriceDescriptor | None) -> str | None:
class AmberUpdateCoordinator(DataUpdateCoordinator):
"""AmberUpdateCoordinator - In charge of downloading the data for a site, which all the sensors read."""
config_entry: AmberConfigEntry
def __init__(
self, hass: HomeAssistant, api: amberelectric.AmberApi, site_id: str
self,
hass: HomeAssistant,
config_entry: AmberConfigEntry,
api: amberelectric.AmberApi,
site_id: str,
) -> None:
"""Initialise the data service."""
super().__init__(
hass,
LOGGER,
config_entry=config_entry,
name="amberelectric",
update_interval=timedelta(minutes=1),
)

View File

@@ -22,9 +22,8 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import AmberConfigEntry
from .const import ATTRIBUTION
from .coordinator import AmberUpdateCoordinator, normalize_descriptor
from .coordinator import AmberConfigEntry, AmberUpdateCoordinator, normalize_descriptor
UNIT = f"{CURRENCY_DOLLAR}/{UnitOfEnergy.KILO_WATT_HOUR}"

View File

@@ -4,13 +4,10 @@ from __future__ import annotations
from aioambient.open_api import OpenAPI
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from .coordinator import AmbientNetworkDataUpdateCoordinator
type AmbientNetworkConfigEntry = ConfigEntry[AmbientNetworkDataUpdateCoordinator]
from .coordinator import AmbientNetworkConfigEntry, AmbientNetworkDataUpdateCoordinator
PLATFORMS: list[Platform] = [Platform.SENSOR]
@@ -21,7 +18,7 @@ async def async_setup_entry(
"""Set up the Ambient Weather Network from a config entry."""
api = OpenAPI()
coordinator = AmbientNetworkDataUpdateCoordinator(hass, api)
coordinator = AmbientNetworkDataUpdateCoordinator(hass, entry, api)
await coordinator.async_config_entry_first_refresh()
entry.runtime_data = coordinator
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

View File

@@ -19,17 +19,27 @@ from .helper import get_station_name
SCAN_INTERVAL = timedelta(minutes=5)
type AmbientNetworkConfigEntry = ConfigEntry[AmbientNetworkDataUpdateCoordinator]
class AmbientNetworkDataUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]):
"""The Ambient Network Data Update Coordinator."""
config_entry: ConfigEntry
config_entry: AmbientNetworkConfigEntry
station_name: str
last_measured: datetime | None = None
def __init__(self, hass: HomeAssistant, api: OpenAPI) -> None:
def __init__(
self, hass: HomeAssistant, config_entry: AmbientNetworkConfigEntry, api: OpenAPI
) -> None:
"""Initialize the coordinator."""
super().__init__(hass, LOGGER, name=DOMAIN, update_interval=SCAN_INTERVAL)
super().__init__(
hass,
LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=SCAN_INTERVAL,
)
self.api = api
async def _async_update_data(self) -> dict[str, Any]:

View File

@@ -28,8 +28,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.util import dt as dt_util
from . import AmbientNetworkConfigEntry
from .coordinator import AmbientNetworkDataUpdateCoordinator
from .coordinator import AmbientNetworkConfigEntry, AmbientNetworkDataUpdateCoordinator
from .entity import AmbientNetworkEntity
TYPE_AQI_PM25 = "aqi_pm25"

View File

@@ -48,7 +48,7 @@ async def async_setup_entry(
continue
names[integration] = integrations[integration].title
coordinator = HomeassistantAnalyticsDataUpdateCoordinator(hass, client)
coordinator = HomeassistantAnalyticsDataUpdateCoordinator(hass, entry, client)
await coordinator.async_config_entry_first_refresh()

View File

@@ -46,12 +46,16 @@ class HomeassistantAnalyticsDataUpdateCoordinator(DataUpdateCoordinator[Analytic
config_entry: AnalyticsInsightsConfigEntry
def __init__(
self, hass: HomeAssistant, client: HomeassistantAnalyticsClient
self,
hass: HomeAssistant,
config_entry: AnalyticsInsightsConfigEntry,
client: HomeassistantAnalyticsClient,
) -> None:
"""Initialize the Homeassistant Analytics data coordinator."""
super().__init__(
hass,
LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=timedelta(hours=12),
)

View File

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

View File

@@ -35,6 +35,7 @@ class AndroidIPCamDataUpdateCoordinator(DataUpdateCoordinator[None]):
super().__init__(
self.hass,
_LOGGER,
config_entry=config_entry,
name=f"{DOMAIN} {config_entry.data[CONF_HOST]}",
update_interval=timedelta(seconds=10),
)

View File

@@ -387,4 +387,4 @@ def _validate_state_det_rules(state_det_rules: Any) -> list[Any] | None:
except ValueError as exc:
_LOGGER.warning("Invalid state detection rules: %s", exc)
return None
return json_rules # type: ignore[no-any-return]
return json_rules

View File

@@ -35,16 +35,12 @@ async def async_setup_entry(
@callback
def is_available_updated(is_available: bool) -> None:
if is_available:
_LOGGER.info(
"Reconnected to %s at %s", entry.data[CONF_NAME], entry.data[CONF_HOST]
)
else:
_LOGGER.warning(
"Disconnected from %s at %s",
entry.data[CONF_NAME],
entry.data[CONF_HOST],
)
_LOGGER.info(
"%s %s at %s",
"Reconnected to" if is_available else "Disconnected from",
entry.data[CONF_NAME],
entry.data[CONF_HOST],
)
api.add_is_available_updated_callback(is_available_updated)

View File

@@ -18,8 +18,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers import aiohttp_client
from .coordinator import AnovaCoordinator
from .models import AnovaConfigEntry, AnovaData
from .coordinator import AnovaConfigEntry, AnovaCoordinator, AnovaData
PLATFORMS = [Platform.SENSOR]
@@ -59,7 +58,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AnovaConfigEntry) -> boo
# websocket client
assert api.websocket_handler is not None
devices = list(api.websocket_handler.devices.values())
coordinators = [AnovaCoordinator(hass, device) for device in devices]
coordinators = [AnovaCoordinator(hass, entry, device) for device in devices]
entry.runtime_data = AnovaData(api_jwt=api.jwt, coordinators=coordinators, api=api)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True

View File

@@ -1,8 +1,11 @@
"""Support for Anova Coordinators."""
from __future__ import annotations
from dataclasses import dataclass
import logging
from anova_wifi import APCUpdate, APCWifiDevice
from anova_wifi import AnovaApi, APCUpdate, APCWifiDevice
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
@@ -14,15 +17,33 @@ from .const import DOMAIN
_LOGGER = logging.getLogger(__name__)
@dataclass
class AnovaData:
"""Data for the Anova integration."""
api_jwt: str
coordinators: list[AnovaCoordinator]
api: AnovaApi
type AnovaConfigEntry = ConfigEntry[AnovaData]
class AnovaCoordinator(DataUpdateCoordinator[APCUpdate]):
"""Anova custom coordinator."""
config_entry: ConfigEntry
config_entry: AnovaConfigEntry
def __init__(self, hass: HomeAssistant, anova_device: APCWifiDevice) -> None:
def __init__(
self,
hass: HomeAssistant,
config_entry: AnovaConfigEntry,
anova_device: APCWifiDevice,
) -> None:
"""Set up Anova Coordinator."""
super().__init__(
hass,
config_entry=config_entry,
name="Anova Precision Cooker",
logger=_LOGGER,
)

View File

@@ -1,20 +0,0 @@
"""Dataclass models for the Anova integration."""
from dataclasses import dataclass
from anova_wifi import AnovaApi
from homeassistant.config_entries import ConfigEntry
from .coordinator import AnovaCoordinator
type AnovaConfigEntry = ConfigEntry[AnovaData]
@dataclass
class AnovaData:
"""Data for the Anova integration."""
api_jwt: str
coordinators: list[AnovaCoordinator]
api: AnovaApi

View File

@@ -18,9 +18,8 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from .coordinator import AnovaCoordinator
from .coordinator import AnovaConfigEntry, AnovaCoordinator
from .entity import AnovaDescriptionEntity
from .models import AnovaConfigEntry
@dataclass(frozen=True, kw_only=True)

View File

@@ -39,7 +39,7 @@
"idle": "[%key:common::state::idle%]",
"cook": "Cooking",
"low_water": "Low water",
"ota": "Ota",
"ota": "OTA update",
"provisioning": "Provisioning",
"high_temp": "High temperature",
"device_failure": "Device failure"

View File

@@ -16,18 +16,15 @@ from anthropic.types import (
ToolUseBlock,
ToolUseBlockParam,
)
import voluptuous as vol
from voluptuous_openapi import convert
from homeassistant.components import conversation
from homeassistant.components.conversation import trace
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_LLM_HASS_API, MATCH_ALL
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError, TemplateError
from homeassistant.helpers import device_registry as dr, intent, llm, template
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import chat_session, device_registry as dr, intent, llm
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.util import ulid as ulid_util
from . import AnthropicConfigEntry
from .const import (
@@ -89,6 +86,44 @@ def _message_convert(
return MessageParam(role=message.role, content=param_content)
def _convert_content(chat_content: conversation.Content) -> MessageParam:
"""Create tool response content."""
if isinstance(chat_content, conversation.ToolResultContent):
return MessageParam(
role="user",
content=[
ToolResultBlockParam(
type="tool_result",
tool_use_id=chat_content.tool_call_id,
content=json.dumps(chat_content.tool_result),
)
],
)
if isinstance(chat_content, conversation.AssistantContent):
return MessageParam(
role="assistant",
content=[
TextBlockParam(type="text", text=chat_content.content or ""),
*[
ToolUseBlockParam(
type="tool_use",
id=tool_call.id,
name=tool_call.tool_name,
input=json.dumps(tool_call.tool_args),
)
for tool_call in chat_content.tool_calls or ()
],
],
)
if isinstance(chat_content, conversation.UserContent):
return MessageParam(
role="user",
content=chat_content.content,
)
# Note: We don't pass SystemContent here as its passed to the API as the prompt
raise ValueError(f"Unexpected content type: {type(chat_content)}")
class AnthropicConversationEntity(
conversation.ConversationEntity, conversation.AbstractConversationAgent
):
@@ -100,7 +135,6 @@ class AnthropicConversationEntity(
def __init__(self, entry: AnthropicConfigEntry) -> None:
"""Initialize the agent."""
self.entry = entry
self.history: dict[str, list[MessageParam]] = {}
self._attr_unique_id = entry.entry_id
self._attr_device_info = dr.DeviceInfo(
identifiers={(DOMAIN, entry.entry_id)},
@@ -129,110 +163,43 @@ class AnthropicConversationEntity(
self, user_input: conversation.ConversationInput
) -> conversation.ConversationResult:
"""Process a sentence."""
options = self.entry.options
intent_response = intent.IntentResponse(language=user_input.language)
llm_api: llm.APIInstance | None = None
tools: list[ToolParam] | None = None
user_name: str | None = None
llm_context = llm.LLMContext(
platform=DOMAIN,
context=user_input.context,
user_prompt=user_input.text,
language=user_input.language,
assistant=conversation.DOMAIN,
device_id=user_input.device_id,
)
if options.get(CONF_LLM_HASS_API):
try:
llm_api = await llm.async_get_api(
self.hass,
options[CONF_LLM_HASS_API],
llm_context,
)
except HomeAssistantError as err:
LOGGER.error("Error getting LLM API: %s", err)
intent_response.async_set_error(
intent.IntentResponseErrorCode.UNKNOWN,
f"Error preparing LLM API: {err}",
)
return conversation.ConversationResult(
response=intent_response, conversation_id=user_input.conversation_id
)
tools = [
_format_tool(tool, llm_api.custom_serializer) for tool in llm_api.tools
]
if user_input.conversation_id is None:
conversation_id = ulid_util.ulid_now()
messages = []
elif user_input.conversation_id in self.history:
conversation_id = user_input.conversation_id
messages = self.history[conversation_id]
else:
# Conversation IDs are ULIDs. We generate a new one if not provided.
# If an old OLID is passed in, we will generate a new one to indicate
# a new conversation was started. If the user picks their own, they
# want to track a conversation and we respect it.
try:
ulid_util.ulid_to_bytes(user_input.conversation_id)
conversation_id = ulid_util.ulid_now()
except ValueError:
conversation_id = user_input.conversation_id
messages = []
if (
user_input.context
and user_input.context.user_id
and (
user := await self.hass.auth.async_get_user(user_input.context.user_id)
)
with (
chat_session.async_get_chat_session(
self.hass, user_input.conversation_id
) as session,
conversation.async_get_chat_log(self.hass, session, user_input) as chat_log,
):
user_name = user.name
return await self._async_handle_message(user_input, chat_log)
async def _async_handle_message(
self,
user_input: conversation.ConversationInput,
chat_log: conversation.ChatLog,
) -> conversation.ConversationResult:
"""Call the API."""
options = self.entry.options
try:
prompt_parts = [
template.Template(
llm.BASE_PROMPT
+ options.get(CONF_PROMPT, llm.DEFAULT_INSTRUCTIONS_PROMPT),
self.hass,
).async_render(
{
"ha_name": self.hass.config.location_name,
"user_name": user_name,
"llm_context": llm_context,
},
parse_result=False,
)
await chat_log.async_update_llm_data(
DOMAIN,
user_input,
options.get(CONF_LLM_HASS_API),
options.get(CONF_PROMPT),
)
except conversation.ConverseError as err:
return err.as_conversation_result()
tools: list[ToolParam] | None = None
if chat_log.llm_api:
tools = [
_format_tool(tool, chat_log.llm_api.custom_serializer)
for tool in chat_log.llm_api.tools
]
except TemplateError as err:
LOGGER.error("Error rendering prompt: %s", err)
intent_response.async_set_error(
intent.IntentResponseErrorCode.UNKNOWN,
f"Sorry, I had a problem with my template: {err}",
)
return conversation.ConversationResult(
response=intent_response, conversation_id=conversation_id
)
if llm_api:
prompt_parts.append(llm_api.api_prompt)
prompt = "\n".join(prompt_parts)
# Create a copy of the variable because we attach it to the trace
messages = [*messages, MessageParam(role="user", content=user_input.text)]
LOGGER.debug("Prompt: %s", messages)
LOGGER.debug("Tools: %s", tools)
trace.async_conversation_trace_append(
trace.ConversationTraceEventType.AGENT_DETAIL,
{"system": prompt, "messages": messages},
)
system = chat_log.content[0]
if not isinstance(system, conversation.SystemContent):
raise TypeError("First message must be a system message")
messages = [_convert_content(content) for content in chat_log.content[1:]]
client = self.entry.runtime_data
@@ -244,68 +211,62 @@ class AnthropicConversationEntity(
messages=messages,
tools=tools or NOT_GIVEN,
max_tokens=options.get(CONF_MAX_TOKENS, RECOMMENDED_MAX_TOKENS),
system=prompt,
system=system.content,
temperature=options.get(CONF_TEMPERATURE, RECOMMENDED_TEMPERATURE),
)
except anthropic.AnthropicError as err:
intent_response.async_set_error(
intent.IntentResponseErrorCode.UNKNOWN,
f"Sorry, I had a problem talking to Anthropic: {err}",
)
return conversation.ConversationResult(
response=intent_response, conversation_id=conversation_id
)
raise HomeAssistantError(
f"Sorry, I had a problem talking to Anthropic: {err}"
) from err
LOGGER.debug("Response %s", response)
messages.append(_message_convert(response))
if response.stop_reason != "tool_use" or not llm_api:
break
tool_results: list[ToolResultBlockParam] = []
for tool_call in response.content:
if isinstance(tool_call, TextBlock):
LOGGER.info(tool_call.text)
if not isinstance(tool_call, ToolUseBlock):
continue
tool_input = llm.ToolInput(
text = "".join(
[
content.text
for content in response.content
if isinstance(content, TextBlock)
]
)
tool_inputs = [
llm.ToolInput(
id=tool_call.id,
tool_name=tool_call.name,
tool_args=cast(dict[str, Any], tool_call.input),
)
LOGGER.debug(
"Tool call: %s(%s)", tool_input.tool_name, tool_input.tool_args
for tool_call in response.content
if isinstance(tool_call, ToolUseBlock)
]
tool_results = [
ToolResultBlockParam(
type="tool_result",
tool_use_id=tool_response.tool_call_id,
content=json.dumps(tool_response.tool_result),
)
try:
tool_response = await llm_api.async_call_tool(tool_input)
except (HomeAssistantError, vol.Invalid) as e:
tool_response = {"error": type(e).__name__}
if str(e):
tool_response["error_text"] = str(e)
LOGGER.debug("Tool response: %s", tool_response)
tool_results.append(
ToolResultBlockParam(
type="tool_result",
tool_use_id=tool_call.id,
content=json.dumps(tool_response),
async for tool_response in chat_log.async_add_assistant_content(
conversation.AssistantContent(
agent_id=user_input.agent_id,
content=text,
tool_calls=tool_inputs or None,
)
)
]
if tool_results:
messages.append(MessageParam(role="user", content=tool_results))
messages.append(MessageParam(role="user", content=tool_results))
self.history[conversation_id] = messages
for content in response.content:
if isinstance(content, TextBlock):
intent_response.async_set_speech(content.text)
if not tool_inputs:
break
response_content = chat_log.content[-1]
if not isinstance(response_content, conversation.AssistantContent):
raise TypeError("Last message must be an assistant message")
intent_response = intent.IntentResponse(language=user_input.language)
intent_response.async_set_speech(response_content.content or "")
return conversation.ConversationResult(
response=intent_response, conversation_id=conversation_id
response=intent_response, conversation_id=chat_log.conversation_id
)
async def _async_entry_update_listener(

View File

@@ -2,31 +2,22 @@
from __future__ import annotations
from dataclasses import dataclass
from py_aosmith import AOSmithAPIClient
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_EMAIL, CONF_PASSWORD, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import aiohttp_client, device_registry as dr
from .const import DOMAIN
from .coordinator import AOSmithEnergyCoordinator, AOSmithStatusCoordinator
from .coordinator import (
AOSmithConfigEntry,
AOSmithData,
AOSmithEnergyCoordinator,
AOSmithStatusCoordinator,
)
PLATFORMS: list[Platform] = [Platform.SENSOR, Platform.WATER_HEATER]
type AOSmithConfigEntry = ConfigEntry[AOSmithData]
@dataclass
class AOSmithData:
"""Data for the A. O. Smith integration."""
client: AOSmithAPIClient
status_coordinator: AOSmithStatusCoordinator
energy_coordinator: AOSmithEnergyCoordinator
async def async_setup_entry(hass: HomeAssistant, entry: AOSmithConfigEntry) -> bool:
"""Set up A. O. Smith from a config entry."""
@@ -36,7 +27,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AOSmithConfigEntry) -> b
session = aiohttp_client.async_get_clientsession(hass)
client = AOSmithAPIClient(email, password, session)
status_coordinator = AOSmithStatusCoordinator(hass, client)
status_coordinator = AOSmithStatusCoordinator(hass, entry, client)
await status_coordinator.async_config_entry_first_refresh()
device_registry = dr.async_get(hass)
@@ -53,7 +44,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AOSmithConfigEntry) -> b
)
energy_coordinator = AOSmithEnergyCoordinator(
hass, client, list(status_coordinator.data)
hass, entry, client, list(status_coordinator.data)
)
await energy_coordinator.async_config_entry_first_refresh()

View File

@@ -1,5 +1,8 @@
"""The data update coordinator for the A. O. Smith integration."""
from __future__ import annotations
from dataclasses import dataclass
import logging
from py_aosmith import (
@@ -9,6 +12,7 @@ from py_aosmith import (
)
from py_aosmith.models import Device as AOSmithDevice
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
@@ -17,13 +21,37 @@ from .const import DOMAIN, ENERGY_USAGE_INTERVAL, FAST_INTERVAL, REGULAR_INTERVA
_LOGGER = logging.getLogger(__name__)
type AOSmithConfigEntry = ConfigEntry[AOSmithData]
@dataclass
class AOSmithData:
"""Data for the A. O. Smith integration."""
client: AOSmithAPIClient
status_coordinator: AOSmithStatusCoordinator
energy_coordinator: AOSmithEnergyCoordinator
class AOSmithStatusCoordinator(DataUpdateCoordinator[dict[str, AOSmithDevice]]):
"""Coordinator for device status, updating with a frequent interval."""
def __init__(self, hass: HomeAssistant, client: AOSmithAPIClient) -> None:
config_entry: AOSmithConfigEntry
def __init__(
self,
hass: HomeAssistant,
config_entry: AOSmithConfigEntry,
client: AOSmithAPIClient,
) -> None:
"""Initialize the coordinator."""
super().__init__(hass, _LOGGER, name=DOMAIN, update_interval=REGULAR_INTERVAL)
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=REGULAR_INTERVAL,
)
self.client = client
async def _async_update_data(self) -> dict[str, AOSmithDevice]:
@@ -51,15 +79,22 @@ class AOSmithStatusCoordinator(DataUpdateCoordinator[dict[str, AOSmithDevice]]):
class AOSmithEnergyCoordinator(DataUpdateCoordinator[dict[str, float]]):
"""Coordinator for energy usage data, updating with a slower interval."""
config_entry: AOSmithConfigEntry
def __init__(
self,
hass: HomeAssistant,
config_entry: AOSmithConfigEntry,
client: AOSmithAPIClient,
junction_ids: list[str],
) -> None:
"""Initialize the coordinator."""
super().__init__(
hass, _LOGGER, name=DOMAIN, update_interval=ENERGY_USAGE_INTERVAL
hass,
_LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=ENERGY_USAGE_INTERVAL,
)
self.client = client
self.junction_ids = junction_ids

View File

@@ -7,7 +7,7 @@ from typing import Any
from homeassistant.components.diagnostics import async_redact_data
from homeassistant.core import HomeAssistant
from . import AOSmithConfigEntry
from .coordinator import AOSmithConfigEntry
TO_REDACT = {
"address",

View File

@@ -15,8 +15,11 @@ from homeassistant.const import PERCENTAGE, UnitOfEnergy
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AOSmithConfigEntry
from .coordinator import AOSmithEnergyCoordinator, AOSmithStatusCoordinator
from .coordinator import (
AOSmithConfigEntry,
AOSmithEnergyCoordinator,
AOSmithStatusCoordinator,
)
from .entity import AOSmithEnergyEntity, AOSmithStatusEntity

View File

@@ -17,8 +17,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AOSmithConfigEntry
from .coordinator import AOSmithStatusCoordinator
from .coordinator import AOSmithConfigEntry, AOSmithStatusCoordinator
from .entity import AOSmithStatusEntity
MODE_HA_TO_AOSMITH = {

View File

@@ -4,13 +4,10 @@ from __future__ import annotations
from typing import Final
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, CONF_PORT, Platform
from homeassistant.core import HomeAssistant
from .coordinator import APCUPSdCoordinator
type APCUPSdConfigEntry = ConfigEntry[APCUPSdCoordinator]
from .coordinator import APCUPSdConfigEntry, APCUPSdCoordinator
PLATFORMS: Final = (Platform.BINARY_SENSOR, Platform.SENSOR)
@@ -20,7 +17,7 @@ async def async_setup_entry(
) -> bool:
"""Use config values to set up a function enabling status retrieval."""
host, port = config_entry.data[CONF_HOST], config_entry.data[CONF_PORT]
coordinator = APCUPSdCoordinator(hass, host, port)
coordinator = APCUPSdCoordinator(hass, config_entry, host, port)
await coordinator.async_config_entry_first_refresh()

View File

@@ -12,8 +12,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import APCUPSdConfigEntry
from .coordinator import APCUPSdCoordinator
from .coordinator import APCUPSdConfigEntry, APCUPSdCoordinator
PARALLEL_UPDATES = 0

View File

@@ -25,6 +25,8 @@ _LOGGER = logging.getLogger(__name__)
UPDATE_INTERVAL: Final = timedelta(seconds=60)
REQUEST_REFRESH_COOLDOWN: Final = 5
type APCUPSdConfigEntry = ConfigEntry[APCUPSdCoordinator]
class APCUPSdData(dict[str, str]):
"""Store data about an APCUPSd and provide a few helper methods for easier accesses."""
@@ -57,13 +59,20 @@ class APCUPSdCoordinator(DataUpdateCoordinator[APCUPSdData]):
updates from the server.
"""
config_entry: ConfigEntry
config_entry: APCUPSdConfigEntry
def __init__(self, hass: HomeAssistant, host: str, port: int) -> None:
def __init__(
self,
hass: HomeAssistant,
config_entry: APCUPSdConfigEntry,
host: str,
port: int,
) -> None:
"""Initialize the data object."""
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=UPDATE_INTERVAL,
request_refresh_debouncer=Debouncer(

View File

@@ -7,7 +7,7 @@ from typing import Any
from homeassistant.components.diagnostics import async_redact_data
from homeassistant.core import HomeAssistant
from . import APCUPSdConfigEntry
from .coordinator import APCUPSdConfigEntry
TO_REDACT = {"SERIALNO", "HOSTNAME"}

View File

@@ -24,9 +24,8 @@ from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import APCUPSdConfigEntry
from .const import LAST_S_TEST
from .coordinator import APCUPSdCoordinator
from .coordinator import APCUPSdConfigEntry, APCUPSdCoordinator
PARALLEL_UPDATES = 0

View File

@@ -134,7 +134,7 @@ class AppleTVConfigFlow(ConfigFlow, domain=DOMAIN):
unique_id for said entry. When a new (zeroconf) service or device is
discovered, the identifier is first used to look up if it belongs to an
existing config entry. If that's the case, the unique_id from that entry is
re-used, otherwise the newly discovered identifier is used instead.
reused, otherwise the newly discovered identifier is used instead.
"""
assert self.atv
all_identifiers = set(self.atv.all_identifiers)

View File

@@ -2,16 +2,13 @@
from __future__ import annotations
from dataclasses import dataclass
from APsystemsEZ1 import APsystemsEZ1M
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_IP_ADDRESS, CONF_PORT, Platform
from homeassistant.core import HomeAssistant
from .const import DEFAULT_PORT
from .coordinator import ApSystemsDataCoordinator
from .coordinator import ApSystemsConfigEntry, ApSystemsData, ApSystemsDataCoordinator
PLATFORMS: list[Platform] = [
Platform.BINARY_SENSOR,
@@ -21,17 +18,6 @@ PLATFORMS: list[Platform] = [
]
@dataclass
class ApSystemsData:
"""Store runtime data."""
coordinator: ApSystemsDataCoordinator
device_id: str
type ApSystemsConfigEntry = ConfigEntry[ApSystemsData]
async def async_setup_entry(hass: HomeAssistant, entry: ApSystemsConfigEntry) -> bool:
"""Set up this integration using UI."""
api = APsystemsEZ1M(
@@ -40,7 +26,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ApSystemsConfigEntry) ->
timeout=8,
enable_debounce=True,
)
coordinator = ApSystemsDataCoordinator(hass, api)
coordinator = ApSystemsDataCoordinator(hass, entry, api)
await coordinator.async_config_entry_first_refresh()
assert entry.unique_id
entry.runtime_data = ApSystemsData(
@@ -51,6 +37,6 @@ async def async_setup_entry(hass: HomeAssistant, entry: ApSystemsConfigEntry) ->
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: ApSystemsConfigEntry) -> bool:
"""Unload a config entry."""
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)

View File

@@ -17,8 +17,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import ApSystemsConfigEntry, ApSystemsData
from .coordinator import ApSystemsDataCoordinator
from .coordinator import ApSystemsConfigEntry, ApSystemsData, ApSystemsDataCoordinator
from .entity import ApSystemsEntity

View File

@@ -12,6 +12,7 @@ from APsystemsEZ1 import (
ReturnOutputData,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
@@ -26,16 +27,34 @@ class ApSystemsSensorData:
alarm_info: ReturnAlarmInfo
@dataclass
class ApSystemsData:
"""Store runtime data."""
coordinator: ApSystemsDataCoordinator
device_id: str
type ApSystemsConfigEntry = ConfigEntry[ApSystemsData]
class ApSystemsDataCoordinator(DataUpdateCoordinator[ApSystemsSensorData]):
"""Coordinator used for all sensors."""
config_entry: ApSystemsConfigEntry
device_version: str
def __init__(self, hass: HomeAssistant, api: APsystemsEZ1M) -> None:
def __init__(
self,
hass: HomeAssistant,
config_entry: ApSystemsConfigEntry,
api: APsystemsEZ1M,
) -> None:
"""Initialize my coordinator."""
super().__init__(
hass,
LOGGER,
config_entry=config_entry,
name="APSystems Data",
update_interval=timedelta(seconds=12),
)

View File

@@ -5,8 +5,8 @@ from __future__ import annotations
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity import Entity
from . import ApSystemsData
from .const import DOMAIN
from .coordinator import ApSystemsData
class ApSystemsEntity(Entity):

View File

@@ -10,7 +10,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import DiscoveryInfoType
from . import ApSystemsConfigEntry, ApSystemsData
from .coordinator import ApSystemsConfigEntry, ApSystemsData
from .entity import ApSystemsEntity

View File

@@ -19,8 +19,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import DiscoveryInfoType, StateType
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import ApSystemsConfigEntry, ApSystemsData
from .coordinator import ApSystemsDataCoordinator
from .coordinator import ApSystemsConfigEntry, ApSystemsData, ApSystemsDataCoordinator
from .entity import ApSystemsEntity

View File

@@ -11,7 +11,7 @@ from homeassistant.components.switch import SwitchDeviceClass, SwitchEntity
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import ApSystemsConfigEntry, ApSystemsData
from .coordinator import ApSystemsConfigEntry, ApSystemsData
from .entity import ApSystemsEntity

View File

@@ -5,18 +5,15 @@ from __future__ import annotations
from aioaquacell import AquacellApi
from aioaquacell.const import Brand
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 .const import CONF_BRAND
from .coordinator import AquacellCoordinator
from .coordinator import AquacellConfigEntry, AquacellCoordinator
PLATFORMS = [Platform.SENSOR]
type AquacellConfigEntry = ConfigEntry[AquacellCoordinator]
async def async_setup_entry(hass: HomeAssistant, entry: AquacellConfigEntry) -> bool:
"""Set up Aquacell from a config entry."""
@@ -26,7 +23,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AquacellConfigEntry) ->
aquacell_api = AquacellApi(session, brand)
coordinator = AquacellCoordinator(hass, aquacell_api)
coordinator = AquacellCoordinator(hass, entry, aquacell_api)
await coordinator.async_config_entry_first_refresh()
entry.runtime_data = coordinator
@@ -36,6 +33,6 @@ async def async_setup_entry(hass: HomeAssistant, entry: AquacellConfigEntry) ->
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: AquacellConfigEntry) -> bool:
"""Unload a config entry."""
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)

View File

@@ -26,17 +26,25 @@ from .const import (
_LOGGER = logging.getLogger(__name__)
type AquacellConfigEntry = ConfigEntry[AquacellCoordinator]
class AquacellCoordinator(DataUpdateCoordinator[dict[str, Softener]]):
"""My aquacell coordinator."""
config_entry: ConfigEntry
config_entry: AquacellConfigEntry
def __init__(self, hass: HomeAssistant, aquacell_api: AquacellApi) -> None:
def __init__(
self,
hass: HomeAssistant,
config_entry: AquacellConfigEntry,
aquacell_api: AquacellApi,
) -> None:
"""Initialize coordinator."""
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name="Aquacell Coordinator",
update_interval=UPDATE_INTERVAL,
)

View File

@@ -18,8 +18,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from . import AquacellConfigEntry
from .coordinator import AquacellCoordinator
from .coordinator import AquacellConfigEntry, AquacellCoordinator
from .entity import AquacellEntity
PARALLEL_UPDATES = 1

View File

@@ -92,7 +92,7 @@ class AranetConfigFlow(ConfigFlow, domain=DOMAIN):
title=self._discovered_devices[address][0], data={}
)
current_addresses = self._async_current_ids()
current_addresses = self._async_current_ids(include_ignore=False)
for discovery_info in async_discovered_service_info(self.hass, False):
address = discovery_info.address
if address in current_addresses or address in self._discovered_devices:

View File

@@ -19,5 +19,5 @@
"documentation": "https://www.home-assistant.io/integrations/aranet",
"integration_type": "device",
"iot_class": "local_push",
"requirements": ["aranet4==2.5.0"]
"requirements": ["aranet4==2.5.1"]
}

View File

@@ -13,7 +13,7 @@ PLATFORMS: list[Platform] = [Platform.SENSOR]
async def async_setup_entry(hass: HomeAssistant, entry: ArveConfigEntry) -> bool:
"""Set up Arve from a config entry."""
coordinator = ArveCoordinator(hass)
coordinator = ArveCoordinator(hass, entry)
await coordinator.async_config_entry_first_refresh()

View File

@@ -30,11 +30,12 @@ class ArveCoordinator(DataUpdateCoordinator[ArveSensProData]):
config_entry: ArveConfigEntry
devices: ArveDevices
def __init__(self, hass: HomeAssistant) -> None:
def __init__(self, hass: HomeAssistant, config_entry: ArveConfigEntry) -> None:
"""Initialize Arve coordinator."""
super().__init__(
hass,
LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=timedelta(seconds=60),
)

View File

@@ -26,7 +26,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: AsekoConfigEntry) -> boo
except AsekoNotLoggedIn as err:
raise ConfigEntryAuthFailed from err
coordinator = AsekoDataUpdateCoordinator(hass, aseko)
coordinator = AsekoDataUpdateCoordinator(hass, entry, aseko)
await coordinator.async_config_entry_first_refresh()
entry.runtime_data = coordinator
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

View File

@@ -21,13 +21,18 @@ type AsekoConfigEntry = ConfigEntry[AsekoDataUpdateCoordinator]
class AsekoDataUpdateCoordinator(DataUpdateCoordinator[dict[str, Unit]]):
"""Class to manage fetching Aseko unit data from single endpoint."""
def __init__(self, hass: HomeAssistant, aseko: Aseko) -> None:
config_entry: AsekoConfigEntry
def __init__(
self, hass: HomeAssistant, config_entry: AsekoConfigEntry, aseko: Aseko
) -> None:
"""Initialize global Aseko unit data updater."""
self._aseko = aseko
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=timedelta(minutes=2),
)

View File

@@ -9,6 +9,7 @@ import voluptuous as vol
from homeassistant.components import stt
from homeassistant.core import Context, HomeAssistant
from homeassistant.helpers import chat_session
from homeassistant.helpers.typing import ConfigType
from .const import (
@@ -114,24 +115,25 @@ async def async_pipeline_from_audio_stream(
Raises PipelineNotFound if no pipeline is found.
"""
pipeline_input = PipelineInput(
conversation_id=conversation_id,
device_id=device_id,
stt_metadata=stt_metadata,
stt_stream=stt_stream,
wake_word_phrase=wake_word_phrase,
conversation_extra_system_prompt=conversation_extra_system_prompt,
run=PipelineRun(
hass,
context=context,
pipeline=async_get_pipeline(hass, pipeline_id=pipeline_id),
start_stage=start_stage,
end_stage=end_stage,
event_callback=event_callback,
tts_audio_output=tts_audio_output,
wake_word_settings=wake_word_settings,
audio_settings=audio_settings or AudioSettings(),
),
)
await pipeline_input.validate()
await pipeline_input.execute()
with chat_session.async_get_chat_session(hass, conversation_id) as session:
pipeline_input = PipelineInput(
conversation_id=session.conversation_id,
device_id=device_id,
stt_metadata=stt_metadata,
stt_stream=stt_stream,
wake_word_phrase=wake_word_phrase,
conversation_extra_system_prompt=conversation_extra_system_prompt,
run=PipelineRun(
hass,
context=context,
pipeline=async_get_pipeline(hass, pipeline_id=pipeline_id),
start_stage=start_stage,
end_stage=end_stage,
event_callback=event_callback,
tts_audio_output=tts_audio_output,
wake_word_settings=wake_word_settings,
audio_settings=audio_settings or AudioSettings(),
),
)
await pipeline_input.validate()
await pipeline_input.execute()

View File

@@ -33,7 +33,7 @@ from homeassistant.components.tts import (
from homeassistant.const import MATCH_ALL
from homeassistant.core import Context, HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import intent
from homeassistant.helpers import chat_session, intent
from homeassistant.helpers.collection import (
CHANGE_UPDATED,
CollectionError,
@@ -374,6 +374,7 @@ class PipelineEventType(StrEnum):
STT_VAD_END = "stt-vad-end"
STT_END = "stt-end"
INTENT_START = "intent-start"
INTENT_PROGRESS = "intent-progress"
INTENT_END = "intent-end"
TTS_START = "tts-start"
TTS_END = "tts-end"
@@ -624,7 +625,7 @@ class PipelineRun:
return
pipeline_data.pipeline_debug[self.pipeline.id][self.id].events.append(event)
def start(self, device_id: str | None) -> None:
def start(self, conversation_id: str, device_id: str | None) -> None:
"""Emit run start event."""
self._device_id = device_id
self._start_debug_recording_thread()
@@ -632,6 +633,7 @@ class PipelineRun:
data = {
"pipeline": self.pipeline.id,
"language": self.language,
"conversation_id": conversation_id,
}
if self.runner_data is not None:
data["runner_data"] = self.runner_data
@@ -1015,7 +1017,7 @@ class PipelineRun:
async def recognize_intent(
self,
intent_input: str,
conversation_id: str | None,
conversation_id: str,
device_id: str | None,
conversation_extra_system_prompt: str | None,
) -> str:
@@ -1063,11 +1065,11 @@ class PipelineRun:
agent_id=self.intent_agent,
extra_system_prompt=conversation_extra_system_prompt,
)
processed_locally = self.intent_agent == conversation.HOME_ASSISTANT_AGENT
agent_id = user_input.agent_id
agent_id = self.intent_agent
processed_locally = agent_id == conversation.HOME_ASSISTANT_AGENT
intent_response: intent.IntentResponse | None = None
if user_input.agent_id != conversation.HOME_ASSISTANT_AGENT:
if not processed_locally:
# Sentence triggers override conversation agent
if (
trigger_response_text
@@ -1092,41 +1094,62 @@ class PipelineRun:
agent_id = conversation.HOME_ASSISTANT_AGENT
processed_locally = True
# It was already handled, create response and add to chat history
if intent_response is not None:
async with conversation.async_get_chat_session(
self.hass, user_input
) as chat_session:
@callback
def chat_log_delta_listener(
chat_log: conversation.ChatLog, delta: dict
) -> None:
"""Handle chat log delta."""
self.process_event(
PipelineEvent(
PipelineEventType.INTENT_PROGRESS,
{
"chat_log_delta": delta,
},
)
)
with (
chat_session.async_get_chat_session(
self.hass, user_input.conversation_id
) as session,
conversation.async_get_chat_log(
self.hass,
session,
user_input,
chat_log_delta_listener=chat_log_delta_listener,
) as chat_log,
):
# It was already handled, create response and add to chat history
if intent_response is not None:
speech: str = intent_response.speech.get("plain", {}).get(
"speech", ""
)
chat_session.async_add_message(
conversation.Content(
role="assistant",
chat_log.async_add_assistant_content_without_tools(
conversation.AssistantContent(
agent_id=agent_id,
content=speech,
)
)
conversation_result = conversation.ConversationResult(
response=intent_response,
conversation_id=chat_session.conversation_id,
conversation_id=session.conversation_id,
)
else:
# Fall back to pipeline conversation agent
conversation_result = await conversation.async_converse(
hass=self.hass,
text=user_input.text,
conversation_id=user_input.conversation_id,
device_id=user_input.device_id,
context=user_input.context,
language=user_input.language,
agent_id=user_input.agent_id,
extra_system_prompt=user_input.extra_system_prompt,
)
speech = conversation_result.response.speech.get("plain", {}).get(
"speech", ""
)
else:
# Fall back to pipeline conversation agent
conversation_result = await conversation.async_converse(
hass=self.hass,
text=user_input.text,
conversation_id=user_input.conversation_id,
device_id=user_input.device_id,
context=user_input.context,
language=user_input.language,
agent_id=user_input.agent_id,
extra_system_prompt=user_input.extra_system_prompt,
)
speech = conversation_result.response.speech.get("plain", {}).get(
"speech", ""
)
except Exception as src_error:
_LOGGER.exception("Unexpected error during intent recognition")
@@ -1404,12 +1427,15 @@ def _pipeline_debug_recording_thread_proc(
wav_writer.close()
@dataclass
@dataclass(kw_only=True)
class PipelineInput:
"""Input to a pipeline run."""
run: PipelineRun
conversation_id: str
"""Identifier for the conversation."""
stt_metadata: stt.SpeechMetadata | None = None
"""Metadata of stt input audio. Required when start_stage = stt."""
@@ -1425,9 +1451,6 @@ class PipelineInput:
tts_input: str | None = None
"""Input for text-to-speech. Required when start_stage = tts."""
conversation_id: str | None = None
"""Identifier for the conversation."""
conversation_extra_system_prompt: str | None = None
"""Extra prompt information for the conversation agent."""
@@ -1436,7 +1459,7 @@ class PipelineInput:
async def execute(self) -> None:
"""Run pipeline."""
self.run.start(device_id=self.device_id)
self.run.start(conversation_id=self.conversation_id, device_id=self.device_id)
current_stage: PipelineStage | None = self.run.start_stage
stt_audio_buffer: list[EnhancedAudioChunk] = []
stt_processed_stream: AsyncIterable[EnhancedAudioChunk] | None = None

View File

@@ -14,7 +14,11 @@ import voluptuous as vol
from homeassistant.components import conversation, stt, tts, websocket_api
from homeassistant.const import ATTR_DEVICE_ID, ATTR_SECONDS, MATCH_ALL
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import config_validation as cv, entity_registry as er
from homeassistant.helpers import (
chat_session,
config_validation as cv,
entity_registry as er,
)
from homeassistant.util import language as language_util
from .const import (
@@ -145,7 +149,6 @@ async def websocket_run(
# Arguments to PipelineInput
input_args: dict[str, Any] = {
"conversation_id": msg.get("conversation_id"),
"device_id": msg.get("device_id"),
}
@@ -233,38 +236,42 @@ async def websocket_run(
audio_settings=audio_settings or AudioSettings(),
)
pipeline_input = PipelineInput(**input_args)
with chat_session.async_get_chat_session(
hass, msg.get("conversation_id")
) as session:
input_args["conversation_id"] = session.conversation_id
pipeline_input = PipelineInput(**input_args)
try:
await pipeline_input.validate()
except PipelineError as error:
# Report more specific error when possible
connection.send_error(msg["id"], error.code, error.message)
return
try:
await pipeline_input.validate()
except PipelineError as error:
# Report more specific error when possible
connection.send_error(msg["id"], error.code, error.message)
return
# Confirm subscription
connection.send_result(msg["id"])
# Confirm subscription
connection.send_result(msg["id"])
run_task = hass.async_create_task(pipeline_input.execute())
run_task = hass.async_create_task(pipeline_input.execute())
# Cancel pipeline if user unsubscribes
connection.subscriptions[msg["id"]] = run_task.cancel
# Cancel pipeline if user unsubscribes
connection.subscriptions[msg["id"]] = run_task.cancel
try:
# Task contains a timeout
async with asyncio.timeout(timeout):
await run_task
except TimeoutError:
pipeline_input.run.process_event(
PipelineEvent(
PipelineEventType.ERROR,
{"code": "timeout", "message": "Timeout running pipeline"},
try:
# Task contains a timeout
async with asyncio.timeout(timeout):
await run_task
except TimeoutError:
pipeline_input.run.process_event(
PipelineEvent(
PipelineEventType.ERROR,
{"code": "timeout", "message": "Timeout running pipeline"},
)
)
)
finally:
if unregister_handler is not None:
# Unregister binary handler
unregister_handler()
finally:
if unregister_handler is not None:
# Unregister binary handler
unregister_handler()
@callback

View File

@@ -8,7 +8,7 @@ from dataclasses import dataclass
from enum import StrEnum
import logging
import time
from typing import Any, Final, Literal, final
from typing import Any, Literal, final
from homeassistant.components import conversation, media_source, stt, tts
from homeassistant.components.assist_pipeline import (
@@ -28,14 +28,12 @@ from homeassistant.components.tts import (
)
from homeassistant.core import Context, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import entity
from homeassistant.helpers import chat_session, entity
from homeassistant.helpers.entity import EntityDescription
from .const import AssistSatelliteEntityFeature
from .errors import AssistSatelliteError, SatelliteBusyError
_CONVERSATION_TIMEOUT_SEC: Final = 5 * 60 # 5 minutes
_LOGGER = logging.getLogger(__name__)
@@ -114,7 +112,6 @@ class AssistSatelliteEntity(entity.Entity):
_attr_vad_sensitivity_entity_id: str | None = None
_conversation_id: str | None = None
_conversation_id_time: float | None = None
_run_has_tts: bool = False
_is_announcing = False
@@ -260,8 +257,27 @@ class AssistSatelliteEntity(entity.Entity):
else:
self._extra_system_prompt = start_message or None
with (
# Not passing in a conversation ID will force a new one to be created
chat_session.async_get_chat_session(self.hass) as session,
conversation.async_get_chat_log(self.hass, session) as chat_log,
):
self._conversation_id = session.conversation_id
if start_message:
chat_log.async_add_assistant_content_without_tools(
conversation.AssistantContent(
agent_id=self.entity_id, content=start_message
)
)
try:
await self.async_start_conversation(announcement)
except Exception:
# Clear prompt on error
self._conversation_id = None
self._extra_system_prompt = None
raise
finally:
self._is_announcing = False
@@ -325,51 +341,52 @@ class AssistSatelliteEntity(entity.Entity):
assert self._context is not None
# Reset conversation id if necessary
if self._conversation_id_time and (
(time.monotonic() - self._conversation_id_time) > _CONVERSATION_TIMEOUT_SEC
):
self._conversation_id = None
self._conversation_id_time = None
# Set entity state based on pipeline events
self._run_has_tts = False
assert self.platform.config_entry is not None
self._pipeline_task = self.platform.config_entry.async_create_background_task(
self.hass,
async_pipeline_from_audio_stream(
self.hass,
context=self._context,
event_callback=self._internal_on_pipeline_event,
stt_metadata=stt.SpeechMetadata(
language="", # set in async_pipeline_from_audio_stream
format=stt.AudioFormats.WAV,
codec=stt.AudioCodecs.PCM,
bit_rate=stt.AudioBitRates.BITRATE_16,
sample_rate=stt.AudioSampleRates.SAMPLERATE_16000,
channel=stt.AudioChannels.CHANNEL_MONO,
),
stt_stream=audio_stream,
pipeline_id=self._resolve_pipeline(),
conversation_id=self._conversation_id,
device_id=device_id,
tts_audio_output=self.tts_options,
wake_word_phrase=wake_word_phrase,
audio_settings=AudioSettings(
silence_seconds=self._resolve_vad_sensitivity()
),
start_stage=start_stage,
end_stage=end_stage,
conversation_extra_system_prompt=extra_system_prompt,
),
f"{self.entity_id}_pipeline",
)
try:
await self._pipeline_task
finally:
self._pipeline_task = None
with chat_session.async_get_chat_session(
self.hass, self._conversation_id
) as session:
# Store the conversation ID. If it is no longer valid, get_chat_session will reset it
self._conversation_id = session.conversation_id
self._pipeline_task = (
self.platform.config_entry.async_create_background_task(
self.hass,
async_pipeline_from_audio_stream(
self.hass,
context=self._context,
event_callback=self._internal_on_pipeline_event,
stt_metadata=stt.SpeechMetadata(
language="", # set in async_pipeline_from_audio_stream
format=stt.AudioFormats.WAV,
codec=stt.AudioCodecs.PCM,
bit_rate=stt.AudioBitRates.BITRATE_16,
sample_rate=stt.AudioSampleRates.SAMPLERATE_16000,
channel=stt.AudioChannels.CHANNEL_MONO,
),
stt_stream=audio_stream,
pipeline_id=self._resolve_pipeline(),
conversation_id=session.conversation_id,
device_id=device_id,
tts_audio_output=self.tts_options,
wake_word_phrase=wake_word_phrase,
audio_settings=AudioSettings(
silence_seconds=self._resolve_vad_sensitivity()
),
start_stage=start_stage,
end_stage=end_stage,
conversation_extra_system_prompt=extra_system_prompt,
),
f"{self.entity_id}_pipeline",
)
)
try:
await self._pipeline_task
finally:
self._pipeline_task = None
async def _cancel_running_pipeline(self) -> None:
"""Cancel the current pipeline if it's running."""
@@ -393,11 +410,6 @@ class AssistSatelliteEntity(entity.Entity):
self._set_state(AssistSatelliteState.LISTENING)
elif event.type is PipelineEventType.INTENT_START:
self._set_state(AssistSatelliteState.PROCESSING)
elif event.type is PipelineEventType.INTENT_END:
assert event.data is not None
# Update timeout
self._conversation_id_time = time.monotonic()
self._conversation_id = event.data["intent_output"]["conversation_id"]
elif event.type is PipelineEventType.TTS_START:
# Wait until tts_response_finished is called to return to waiting state
self._run_has_tts = True

View File

@@ -1,5 +1,7 @@
"""Assist Satellite intents."""
from typing import Final
import voluptuous as vol
from homeassistant.core import HomeAssistant
@@ -7,6 +9,8 @@ from homeassistant.helpers import entity_registry as er, intent
from .const import DOMAIN, AssistSatelliteEntityFeature
EXCLUDED_DOMAINS: Final[set[str]] = {"voip"}
async def async_setup_intents(hass: HomeAssistant) -> None:
"""Set up the intents."""
@@ -30,19 +34,36 @@ class BroadcastIntentHandler(intent.IntentHandler):
ent_reg = er.async_get(hass)
# Find all assist satellite entities that are not the one invoking the intent
entities = {
entity: entry
for entity in hass.states.async_entity_ids(DOMAIN)
if (entry := ent_reg.async_get(entity))
and entry.supported_features & AssistSatelliteEntityFeature.ANNOUNCE
}
entities: dict[str, er.RegistryEntry] = {}
for entity in hass.states.async_entity_ids(DOMAIN):
entry = ent_reg.async_get(entity)
if (
(entry is None)
or (
# Supports announce
not (
entry.supported_features & AssistSatelliteEntityFeature.ANNOUNCE
)
)
# Not the invoking device
or (intent_obj.device_id and (entry.device_id == intent_obj.device_id))
):
# Skip satellite
continue
if intent_obj.device_id:
entities = {
entity: entry
for entity, entry in entities.items()
if entry.device_id != intent_obj.device_id
}
# Check domain of config entry against excluded domains
if (
entry.config_entry_id
and (
config_entry := hass.config_entries.async_get_entry(
entry.config_entry_id
)
)
and (config_entry.domain in EXCLUDED_DOMAINS)
):
continue
entities[entity] = entry
await hass.services.async_call(
DOMAIN,
@@ -54,7 +75,6 @@ class BroadcastIntentHandler(intent.IntentHandler):
)
response = intent_obj.create_response()
response.async_set_speech("Done")
response.response_type = intent.IntentResponseType.ACTION_DONE
response.async_set_results(
success_results=[

View File

@@ -14,7 +14,7 @@
"services": {
"announce": {
"name": "Announce",
"description": "Let the satellite announce a message.",
"description": "Lets a satellite announce a message.",
"fields": {
"message": {
"name": "Message",
@@ -27,8 +27,8 @@
}
},
"start_conversation": {
"name": "Start Conversation",
"description": "Start a conversation from a satellite.",
"name": "Start conversation",
"description": "Starts a conversation from a satellite.",
"fields": {
"start_message": {
"name": "Message",

View File

@@ -19,17 +19,22 @@ type AtagConfigEntry = ConfigEntry[AtagDataUpdateCoordinator]
class AtagDataUpdateCoordinator(DataUpdateCoordinator[None]):
"""Atag data update coordinator."""
def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None:
config_entry: AtagConfigEntry
def __init__(self, hass: HomeAssistant, config_entry: AtagConfigEntry) -> None:
"""Initialize Atag coordinator."""
super().__init__(
hass,
_LOGGER,
config_entry=config_entry,
name="Atag",
update_interval=timedelta(seconds=60),
)
self.atag = AtagOne(
session=async_get_clientsession(hass), **entry.data, device=entry.unique_id
session=async_get_clientsession(hass),
**config_entry.data,
device=config_entry.unique_id,
)
async def _async_update_data(self) -> None:

View File

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

View File

@@ -1,20 +1,17 @@
"""The aurora component."""
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from .const import CONF_THRESHOLD, DEFAULT_THRESHOLD
from .coordinator import AuroraDataUpdateCoordinator
from .coordinator import AuroraConfigEntry, AuroraDataUpdateCoordinator
PLATFORMS = [Platform.BINARY_SENSOR, Platform.SENSOR]
type AuroraConfigEntry = ConfigEntry[AuroraDataUpdateCoordinator]
async def async_setup_entry(hass: HomeAssistant, entry: AuroraConfigEntry) -> bool:
"""Set up Aurora from a config entry."""
coordinator = AuroraDataUpdateCoordinator(hass=hass)
coordinator = AuroraDataUpdateCoordinator(hass=hass, config_entry=entry)
await coordinator.async_config_entry_first_refresh()

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