Compare commits

...

2455 Commits

Author SHA1 Message Date
Erik
fca50bfbf8 Raise in EntityComponent.async_prepare_reload on configuration error 2024-07-19 09:55:16 +02:00
Erik Montnemery
07ceafed62 Enable strict typing on script integration (#122079) 2024-07-17 15:11:06 +02:00
Arie Catsman
1e8da192b6 Add switch platform test to enphase_envoy (#122068)
* Add switch platform test to enphase_envoy

* review feedback Use HA SWITCH_DOMAIN

* Only use SWITCH_DOMAIN for service call
2024-07-17 14:51:02 +02:00
Brett Adams
57e233d30f Bump tesla-fleet-api (#122073) 2024-07-17 13:59:52 +02:00
Erik Montnemery
efb7bede40 Enable strict typing on script helper (#122075) 2024-07-17 13:51:59 +02:00
Robert Resch
a0f91d27a3 Add created_at/modified_at to floor registry (#122071) 2024-07-17 13:18:26 +02:00
Erik Montnemery
385f5be7e8 Remove dead code from script helper (#122074) 2024-07-17 13:16:57 +02:00
Guido Schmitz
7bf4e4779c Use model_id in devolo_home_control (#122066) 2024-07-17 13:09:56 +02:00
Erik Montnemery
6921e053e4 Move recorder data migration implementation to migrators (#122045) 2024-07-17 10:59:58 +02:00
ashionky
7f76de2c7a Bump refoss to v1.2.4 (#122063)
* 1.2.2

* 1.2.3

* 1.2.4

* 1.2.4
2024-07-17 10:29:41 +02:00
Robert Resch
35f84f32d6 Add created_at/modified_at for area registry (#122014) 2024-07-17 09:54:06 +02:00
Erik Montnemery
054242ff0f Require specifying extended address in otbr WS API calls (#108282)
Co-authored-by: Stefan Agner <stefan@agner.ch>
2024-07-17 09:04:54 +02:00
Maciej Bieniek
14ec7e5f76 Set DeviceInfo.model_id in Shelly integration (#122040) 2024-07-17 09:04:40 +02:00
Stefan Agner
0aea9b0edb Read color temperature range from Matter device if supported (#122054) 2024-07-17 01:25:28 +02:00
Franck Nijhof
1b6f880a27 Add model_id to Tuya devices, mark services correctly (#122043) 2024-07-17 00:09:18 +02:00
Stefan Agner
d0c1632976 Drop spurious log messages in Matter bridge device removal (#122036)
Don't log a message when a device is removed from the Matter bridge.
2024-07-16 23:55:33 +02:00
Franck Nijhof
dc9b25af1c Change model to model_id in LaMetric (#122044) 2024-07-16 23:48:34 +02:00
Guido Schmitz
0ad2398bda Use model_id in devolo_home_network (#122048) 2024-07-16 22:39:00 +02:00
Michael
89198b0512 Fix flakey tibber tests (#121993) 2024-07-16 22:36:31 +02:00
Joakim Plate
8d290dd9d6 Convert arcam_fmj to runtime data (#122047) 2024-07-16 22:35:04 +02:00
Erik Montnemery
9970b7eece Refactor recorder data migration (#121009)
* Refactor recorder data migration

* Fix stale docstrings

* Don't store a session object in BaseRunTimeMigration instances

* Simplify logic in EntityIDMigration.migration_done

* Fix tests
2024-07-16 21:50:19 +02:00
Arie Catsman
baa97ca981 Add fixture files to Enphase_Envoy tests (#121864)
* Add fixture files to Enphase_Envoy tests

* optimize fixtures in enphase_envoy conftest

* combine setup_enphase_envoy and mock_envoy in enphase_envoy tests

* Revert "combine setup_enphase_envoy and mock_envoy in enphase_envoy tests"

This reverts commit ec072c4726.

* Rework enphase tests

* Rework enphase tests

* reset diagnostics test snapshot

---------

Co-authored-by: Joostlek <joostlek@outlook.com>
2024-07-16 21:14:46 +02:00
Erik Montnemery
a22e12dac9 Refactor function recorder.migration._apply_update (#122023)
* Refactor function recorder.migration._apply_update

* Remove _SchemaVersionMigrators dict
2024-07-16 20:28:03 +02:00
Erik Montnemery
d8440e809a Avoid mutating database schema definitions during schema migration (#122012)
* Avoid mutating database schema definitions during schema migration

* Adjust test when using mysql

* Address review comment
2024-07-16 20:27:49 +02:00
J. Nick Koston
c860b6cd4b Bump govee-ble to 0.37.0 (#122037) 2024-07-16 13:17:15 -05:00
Robert Svensson
aeabe3ab95 Mark UniFi power cycle button as unavailable if PoE is not enabled on port (#122035) 2024-07-16 20:16:36 +02:00
J. Nick Koston
4bcdb551d4 Bump govee-ble to 0.36.1 (#122030)
changelog: https://github.com/Bluetooth-Devices/govee-ble/compare/v0.34.0...v0.36.1

more prep to add the event platform
2024-07-16 17:29:43 +02:00
Joost Lekkerkerker
b122c2932a Add JakeBosh as Knocki codeowner (#122026) 2024-07-16 15:54:40 +02:00
J. Nick Koston
8082808ec2 Bump govee-ble to 0.34.0 (#122028) 2024-07-16 15:47:58 +02:00
HarvsG
3a0b3a4589 Log tools sent to OpenAI (#122024) 2024-07-16 15:16:50 +02:00
Joost Lekkerkerker
f8ba4d41ba Add support for adding model_id in device info (#121989) 2024-07-16 15:12:25 +02:00
Erik Montnemery
336740dbfa Add recorder migration test starting with schema version 9 (#122011) 2024-07-16 15:12:23 +02:00
Erik Montnemery
ea29c2c4d4 Improve tests/patch_time.py (#122017) 2024-07-16 14:22:22 +02:00
Erik Montnemery
dbe68ca057 Minor adjustment of recorder migration (#122020) 2024-07-16 14:20:23 +02:00
G Johansson
62cc868150 Bump python-holidays to 0.53 (#122021) 2024-07-16 13:47:11 +02:00
Jan Bouwhuis
3304e18316 Bump incomfortclient to v0.6.3-1 (#122013) 2024-07-16 13:23:39 +02:00
Glenn Waters
6645932fb7 Fix for Environment Canada date being wrong after midnight (#121850)
* Use async_connect in newly bumped 0.5.8 UPB library.

* Fix tests.

* Fix date being wrong after midnight for Environment Canada

* Fix typing.

* Add test.

* Formatting.

* Remove tests until can be added properly.

* Add weather tests back.

* Fix tests

* Change of tactic for determining previous day's data.

---------

Co-authored-by: G Johansson <goran.johansson@shiftit.se>
2024-07-16 11:57:37 +02:00
jan iversen
bc7d2d2195 Remove modbus codeowner, and downgrade to quality "No score" (#122010)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-07-16 11:26:44 +02:00
Joakim Plate
22d977acb0 Rename dsmr integration to be more generic (#121968) 2024-07-16 11:15:17 +02:00
Stefan Agner
234870538d Prevent removal of complete bridge when removing a device from Matter (#121987)
* Prevent removal of complete bridge when removing a device from Matter

Currently, when a device is removed from Matter, the complete bridge is
being removed. This might not be the user intention. Bridged devices
themselves can't be deleted really, as they are still part of the
bridge.

Ideally, this should be fixed in the UI (remove the Delete button in
this case). But as a workaround, we can prevent the removal of the
complete bridge by disallowing to remove the bridged device itself.

This also improves deleting when the bridge is already removed from
the Server through some other means: In this case, we delete all devices
at once.

* Update homeassistant/components/matter/__init__.py

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2024-07-16 10:19:55 +02:00
Franck Nijhof
2f0870a063 Adjust issue description in automations fix flow (#122007) 2024-07-16 09:27:54 +02:00
J. Nick Koston
2160f981c2 Convert mopeka to use entry.runtime_data (#121973) 2024-07-16 09:02:32 +02:00
J. Nick Koston
e01c605d04 Bump uiprotect to 5.3.0 (#122005) 2024-07-16 09:01:45 +02:00
Joost Lekkerkerker
d81f6fa8f2 Make filter a helper (#121994) 2024-07-16 08:47:46 +02:00
J. Nick Koston
d0233d01da Bump govee-ble to 0.33.0 (#122004) 2024-07-16 08:37:33 +02:00
Björn Ebbinghaus
2723ab3b27 Add mac address as connection for matter device (#121257) 2024-07-16 00:54:16 +02:00
Maciej Bieniek
260e98c3f7 Add support for Shelly number virtual component (#121894)
* Support number component in field mode

* Support number in label mode

* Add tests

* Add mode_fn

* Add support for number component in slider mode

* Add comment

* Suggested change

* Revert max_fn

* Change unit 'min' to 'Hz' in test

---------

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-07-15 22:26:12 +02:00
Franck Nijhof
a9bf12f102 Rename Services to Actions in translation strings (#121777) 2024-07-15 21:19:25 +02:00
Michael
190f12cead Bump python-homeassistant-analytics to 0.7.0 (#121992)
bump python-homeassistant-analytics to 0.7.0
2024-07-15 21:08:00 +02:00
Joost Lekkerkerker
026538b6dc Disable concord232 integration (#121974)
* Disable concord232 integration

* Fix
2024-07-15 20:54:07 +02:00
Álvaro Fernández Rojas
e9d4c03300 Update aioairzone to v0.8.0 (#121991)
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2024-07-15 20:49:21 +02:00
Joost Lekkerkerker
74f04a1ede Move licenses to right list (#121986) 2024-07-15 20:06:52 +02:00
J. Nick Koston
33cb674a4b Bump yalexs to 6.4.3 (#121984) 2024-07-15 19:35:52 +02:00
Joost Lekkerkerker
d7e33429e3 Disable MVG integration (#121975)
Disable MVGLive integration
2024-07-15 17:51:41 +02:00
Joost Lekkerkerker
77f10a23b0 Make Bayesian a helper (#121976) 2024-07-15 16:53:21 +02:00
Joost Lekkerkerker
c6a0c20c64 Disable Dovado integration (#121871) 2024-07-15 10:22:01 +02:00
Richard Kroegel
99f01ac61e Fix BMW remaining fuel device class (#119172)
Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-07-15 09:23:05 +02:00
mvn23
894f3fe439 Fix opentherm_gw availability (#121892) 2024-07-15 09:20:32 +02:00
Scott K Logan
df00e1a65b Fix rainforest_raven closing device due to timeout (#121905) 2024-07-15 09:10:50 +02:00
Tomasz Gorochowik
ef7a84d3f4 Fix enigma2 mute (#121928) 2024-07-15 09:09:19 +02:00
Sid
3b95e88ff7 Bump ruff to 0.5.2 (#121946) 2024-07-15 09:00:48 +02:00
dependabot[bot]
6109b9206c Bump github/codeql-action from 3.25.11 to 3.25.12 (#121963)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-15 08:57:39 +02:00
Maciej Bieniek
50751574b4 Fix configuration_url for Shelly device using IPv6 (#121939)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-07-15 08:31:44 +02:00
Álvaro Fernández Rojas
9f53d0ccd9 Rename Airzone system_zone_id to system_id (#121931) 2024-07-15 01:39:59 +02:00
Kevin Stillhammer
ab945ee76e Add Broadlink select platform (#121797)
* Add broadlink select platform

* Apply strings.json feedback

* Remove obsolete Service Exception

* Use day names instead of IDs

* Use list()
2024-07-14 23:59:24 +02:00
J. Nick Koston
6d8f99903d Migrate lutron_caseta to use entry.runtime_data (#121903)
* Migrate lutron_caseta to use entry.runtime_data

* Migrate lutron_caseta to use entry.runtime_data
2024-07-14 23:26:12 +02:00
J. Nick Koston
73b836df55 Use dispatcher for doorbird event entities (#121825)
* Use dispatcher for doorbird event entities

https://github.com/home-assistant/core/pull/121114#discussion_r1668171539

* Update homeassistant/components/doorbird/view.py
2024-07-14 23:25:04 +02:00
J. Nick Koston
73f6e3c07b Narrow sqlite database corruption check to ensure disk image is malformed (#121947)
* Narrow sqlite database corruption check to ensure disk image is malformed

The database corruption check would also replace the database when it
locked externally instead of only when its malformed.

This was discovered in https://github.com/home-assistant/core/issues/121909#issuecomment-2227409124
when a user did a manual index creation while HA was online

* tweak

* tweak

* fix

* fix
2024-07-14 23:23:07 +02:00
J. Nick Koston
19d2d023ab Ensure states table rebuild still happens if the event_id index was removed (#121938)
* Ensure states table rebuild still happens if the event_id index was removed

If ix_states_event_id was removed by the foreign key still
exists, the states table would not get rebuilt. This should
not happen under normal circumstances and seems to only be
possible if the index was removed manually or Home
Assistant was restarted forcefully in the middle
of a previous migration from years ago.

* cover

* fix tests

* mysql wont allow at that point but thats ok as long as its gone at the end
2024-07-14 23:20:52 +02:00
David F. Mulcahey
1d62f0e380 Bump ZHA lib to 0.0.23 (#121900) 2024-07-14 03:59:29 +02:00
David F. Mulcahey
342e6a503a Fix group operations in ZHA websocket API (#121881) 2024-07-14 03:25:15 +02:00
Álvaro Fernández Rojas
c044417837 Dynamically add Airzone entities (#121891)
* airzone: reload entry on new devices

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* Revert "airzone: reload entry on new devices"

This reverts commit 3ecc0844e4.

* airzone: sensor: dynamically add new entities

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* tests: restore reverted airzone tests

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: sensor: code fixes

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: water_heater: dynamically add entities

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: binary_sensor: dynamically add entities

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: select: dynamically add entities

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: climate: dynamically add entities

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* tests: airzone: use freezer

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: call async_add_entities once

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: wrap async_add_listener on async_on_unload

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

* airzone: reduce number of entity listeners

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

---------

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2024-07-13 21:45:08 +02:00
Jan Bouwhuis
3111951757 Fix alexa does to check current_position correctly when handling cover range changes (#121798) 2024-07-13 16:10:09 +02:00
Maciej Bieniek
a34858a567 Use parametrize in tests for Shelly boolean virtual component (#121895)
Use parametrize in tests

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-07-13 15:27:17 +03:00
J. Nick Koston
62613af033 Migrate hunterdouglas_powerview to use entry.runtime_data (#121887) 2024-07-13 12:38:47 +02:00
Shai Ungar
2dec7136c8 Address post merge review on israel rail (#121872)
* Address late israel rail review

* transfers => trains
2024-07-13 10:54:27 +02:00
Jordi
662760360a Bump aioaquacell to 0.2.0 (#121876) 2024-07-13 10:04:51 +02:00
J. Nick Koston
9e259cbf2d Remove unused code in doorbird (#121884) 2024-07-12 22:39:58 -07:00
Avi Miller
5f33e85b30 Initial support for LIFX Ceiling SKY effect (#121820) 2024-07-12 21:16:16 -05:00
dougiteixeira
162b734be7 Add config flow for select platform in Template (#121809) 2024-07-12 17:50:02 +02:00
Allen Porter
a2fab98358 Remove an unneeded test dependency on pydantic in matrix (#121860) 2024-07-12 17:45:04 +02:00
Klaas Schoute
0d27cdc845 Add inverters to Autarco integration (#121779) 2024-07-12 16:54:22 +02:00
J. Nick Koston
a8321fac95 Add reauth support to doorbird (#121815) 2024-07-12 16:53:39 +02:00
Franck Nijhof
726fcb485d Extend search with support for integrations (#121765) 2024-07-12 16:31:49 +02:00
J. Nick Koston
2e71c8d43b Fix homekit linked doorbell and motion firing on reload (#121818) 2024-07-12 16:29:55 +02:00
J. Nick Koston
a67b6c5ba6 Avoid recording additional light attributes (#121776) 2024-07-12 16:27:50 +02:00
J. Nick Koston
8a52ffb967 Use a listcomp for more history results (#121830) 2024-07-12 16:10:21 +02:00
Marcel Vriend
156e92a4cd Fix too verbose HTTP logging for Azure Data Explorer (#121802) 2024-07-12 16:09:44 +02:00
Joost Lekkerkerker
5f02f3caa9 Disable blinkstick integration (#121846) 2024-07-12 16:09:07 +02:00
Dave T
62b9b34561 Fix typo in Template switch (#121856) 2024-07-12 16:03:24 +02:00
G Johansson
df85067cae Add device link to History stats helper (#121848) 2024-07-12 16:01:50 +02:00
Joakim Plate
a0d0e0f4a9 Correct deprecated telegram usage in dsmr (#121847) 2024-07-12 16:00:27 +02:00
J. Nick Koston
244af091b8 Bump DoorBirdPy to 3.0.2 (#121823) 2024-07-12 15:59:10 +02:00
Simone Chemelli
f260b048d6 Bump boto3, botocore and aiobotocore (#121773) 2024-07-12 15:55:08 +02:00
J. Nick Koston
ebd50d327b Log add/remove index complete at the same level as when it starts (#121852) 2024-07-12 15:54:38 +02:00
Jan-Philipp Benecke
6a86cdf3f5 Add missing translations to Roborock (#121796) 2024-07-12 15:51:18 +02:00
G Johansson
1acbcf921a Fix schema and strings in template switch (#121843) 2024-07-12 15:50:21 +02:00
Joost Lekkerkerker
12384104f4 Fix Mealie mealplan service date parsing (#121844) 2024-07-12 15:21:48 +02:00
Maciej Bieniek
3ef1e5816e Add support for Shelly text virtual component (#121735)
* Add support for text component

* Add tests

* Improve const names

* Remove unnecessary code

---------

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-07-12 12:58:21 +02:00
Jan Rieger
48978fb7f6 Add configuration_url to AVM FRITZ!Box Call Monitor (#121836) 2024-07-12 09:51:17 +02:00
starkillerOG
97aaae1372 Reolink media second lens (#121800)
DUO lens camera distinguish between lenses for media playback
2024-07-12 09:13:55 +02:00
J. Nick Koston
cdf7ecebc0 Make BaseCoordinatorEntity.should_poll a cached_property since it never changes (#121826) 2024-07-12 00:39:22 -05:00
Shay Levy
cdb26ef8a3 Cleanup Shelly unused strings for removed valve switch (#121813) 2024-07-12 05:44:25 +01:00
J. Nick Koston
76d6a1fe13 Use identity check for ESPHome sensor device_class (#121828) 2024-07-11 22:47:32 -05:00
J. Nick Koston
df8c949884 Migrate esphome to use shorthand available attr (#121827) 2024-07-11 22:47:10 -05:00
Avi Miller
adb88f0165 Bump aiolifx to 1.0.5 (#121824) 2024-07-11 22:21:45 -05:00
Glenn Waters
c84fe04d6b Use async_connect in newly bumped 0.5.8 UPB library (#121789) 2024-07-11 16:14:22 -05:00
ollo69
86db976ed7 Bump PySwitchbot to 0.48.1 (#121804) 2024-07-11 16:12:33 -05:00
Steven B
e269ff617c Bump python-kasa to 0.7.0.4 (#121791) 2024-07-11 19:19:31 +02:00
Álvaro Fernández Rojas
414aee395e Update aioairzone-cloud to v0.5.4 (#121787) 2024-07-11 18:45:09 +02:00
Joost Lekkerkerker
3be95ebc87 Add verify SSL option to Mealie (#121767) 2024-07-11 17:23:26 +02:00
Allen Porter
ede130aa53 Pin mashumaro version >= 3.13.1 for python 3.12.4 compatibility. (#121782)
Pin mashumaro version for python 3.12.4 compatibility.
2024-07-11 08:23:10 -07:00
Josef Zweck
21d35ff311 Bump pytedee_async to 0.2.20 (#121783) 2024-07-11 17:22:10 +02:00
J. Nick Koston
8fb700c30e Add some missing tplink ouis (#121785) 2024-07-11 17:18:45 +02:00
Steven B
2148cfc899 Fix tplink bug changing color temp on bulbs with light effects (#121696) 2024-07-11 10:10:47 -05:00
mkmer
c40a9ac4b5 Remove unused code in blink (#121780)
Remove unused code
2024-07-11 16:12:05 +02:00
J. Nick Koston
ab7c4244d2 Pre-configure default doorbird events (#121692) 2024-07-11 11:31:29 +02:00
Tsvi Mostovicz
f40897b54c Add Jewish Calendar reconfiguration test (#118833)
* Revert "Remove flaky tests"

This reverts commit c4de9fdcbe.

* Change reconfigure test to be based on data

* Don't assert using internals

* Fix assertions to be on config entry
2024-07-11 11:17:12 +02:00
Joost Lekkerkerker
73475aa675 Dynamically create and delete todo lists in mealie (#121710) 2024-07-11 10:19:45 +02:00
tronikos
c223709c7c Bump opower to 0.5.2 to fix 403 forbidden errors for users with multiple accounts (#121762) 2024-07-11 10:14:11 +02:00
dougiteixeira
52454f5218 Add config flow for platform switch in Template (#121639) 2024-07-11 10:11:31 +02:00
Franck Nijhof
f94b28f72d Add button group support (#121715)
Co-authored-by: G Johansson <goran.johansson@shiftit.se>
2024-07-11 09:37:32 +02:00
Jan Bouwhuis
acb4a92628 Revert "Add mqtt automation publish test with template rendering" (#121757) 2024-07-11 09:36:14 +02:00
Brett Adams
f8015a7abc Add test coverage for Tessie seat coolers (#121742) 2024-07-11 09:13:50 +02:00
Joost Lekkerkerker
4c972694cd Add reconfigure flow to Mealie (#121750) 2024-07-11 09:11:59 +02:00
Mr. Bubbles
c6f1ec34e2 Fix bugs Habitica to-do lists (#121755) 2024-07-11 09:11:04 +02:00
J. Nick Koston
43596f22a4 Fix recorder max backlog calculation being too small (#121739) 2024-07-11 09:09:35 +02:00
Abílio Costa
67fee5be31 Update Idasen Desk library to 2.6.2 (#121729) 2024-07-11 09:07:18 +02:00
Luca Angemi
c89de2e6a6 Append multiple rows in Google Sheets (#120829)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-07-11 09:05:22 +02:00
Brett Adams
307ae53066 Add sunroof to Tessie (#121743) 2024-07-11 09:03:46 +02:00
J. Nick Koston
322553b8a9 Bump pyserial-asyncio-fast to 0.13 (#121745) 2024-07-11 08:58:09 +02:00
dependabot[bot]
fc770434f1 Bump actions/setup-python from 5.1.0 to 5.1.1 (#121749)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-11 08:52:35 +02:00
Shai Ungar
56b6747bc0 Add Israel rail integration (#121418)
* Add Israel Rail integration

* israel_rail tests

* israel_rail tests

* 1. use entry.runtime
2. DataConnection - data class
3. remove unique id from coordinator
4. use EntityDescription

* add a list of stations in user form

* 1. extend ConfigEntry
2. remove unused pop
3. use IsraelRailSensorEntityDescription to have only one kind of Sensor
4. add test for already configured
5. use snapshot in test

* change user step description

* 1. ConfigEntry[IsraelRailDataUpdateCoordinator]
2. remove redundant attributes
3. use snapshot_platform helper

* remove attr

* remove attr

* move test to test_init.py

* Fix

* Fix

* Fix

* Fix

* fix timezone

* fix

* fix

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-07-11 08:45:32 +02:00
Kevin Stillhammer
ea5eb0f8f2 Add Broadlink time platform (#121470)
* Add time platform

* Apply PR feedback

* Remove obsolete Exception raise
2024-07-11 08:18:10 +02:00
Klaas Schoute
bb81cfa57a Add diagnostics to Autarco integration (#121732) 2024-07-11 06:49:38 +02:00
J. Nick Koston
22c89356c0 Bump DoorBirdPy to 3.0.1 (#121733) 2024-07-10 18:22:56 -05:00
Joost Lekkerkerker
385576bfb2 Add reauth flow to Mealie (#121697) 2024-07-11 00:24:48 +02:00
atinsley
90af40b5c4 Add ability to control ventilated seats with Tessie integration (#121624) 2024-07-11 00:22:01 +02:00
Michael Hansen
417abda649 Add HassGetCurrentDate and HassGetCurrentTime intents (#121707) 2024-07-11 00:17:04 +02:00
Joost Lekkerkerker
0462582da3 Use new constants in todo tests (#121727) 2024-07-11 00:01:17 +02:00
Jan Stienstra
2fce71ea52 Retain Jellyfin config flow input on connection issue (#121618) 2024-07-10 23:54:02 +02:00
Robert Svensson
61111f5d71 Fix bad access to UniFi runtime_data when not assigned (#121725)
* Fix bad access to runtime_data when not assigned

* Fix review comment

* Clean up if statements
2024-07-10 23:53:11 +02:00
Maciej Bieniek
70f05e5f13 Add support for Shelly virtual boolean component (#119932)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-07-10 23:51:51 +02:00
Dave T
311b1e236a Don't patch libraries that aren't installed in pytest (#121628) 2024-07-10 23:50:47 +02:00
dougiteixeira
e0c7073da1 Add config flow for image platform in Template (#121648) 2024-07-10 23:49:24 +02:00
Tomek Porozynski
088717926d Update Supla async_set_cover_position to use "REVEAL_PARTIALLY" (#121663) 2024-07-10 23:48:08 +02:00
Klaas Schoute
664c4e6189 Fix small issue on Autarco integration (#121723) 2024-07-10 23:37:32 +02:00
J. Nick Koston
d87bbaa67a Migrate resetting doorbird favorites to a button (#121720) 2024-07-10 16:34:02 -05:00
Joost Lekkerkerker
af6c28983d Bump knocki to 0.3.1 (#121717) 2024-07-10 23:22:03 +02:00
puddly
9fcfc6d9f3 Bump ZHA dependencies (#121716) 2024-07-10 23:17:41 +02:00
Joost Lekkerkerker
e56f8d795f Add constants for todo services (#121616) 2024-07-10 23:15:03 +02:00
Joakim Plate
7ed5feee92 Extend generic hygrostat/thermostat actuators using config flow (#121690) 2024-07-10 23:11:02 +02:00
Mr. Bubbles
f3fe61f929 Bump pyloadapi to v1.3.2 (#121709) 2024-07-10 23:08:25 +02:00
J. Nick Koston
4fd5ced1f5 Fix update happening too early in unifiprotect (#121714) 2024-07-10 23:06:58 +02:00
Klaas Schoute
fce68018b7 Add Autarco integration (#121600)
* Init Autarco integration

* Add integration code with tests

* Update every 5 minutes

* Process all feedback from Joost

* Bump lib to v2.0.0

* Add more then one site if present

* Fix issue with entity translation

* Update the test for sensor entities

* Fix round two based on feedback from Joost

* Add autarco to strict typing

* Update tests/components/autarco/test_config_flow.py

* Update tests/components/autarco/test_config_flow.py

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-07-10 23:05:31 +02:00
Noah Husby
abeac3f3aa Add config flow to Russound RIO integration (#121262)
* Add config flow to Russound RIO

* Ensure Russound RIO connection is handled at entry setup

* Add tests for Russound RIO config flow

* Add yaml configuration import to Russound RIO

* Use runtime_data to store Russound RIO client

* Seperate common import and user config logic for Russound RIO

* Update config flow to use aiorussound

* Add MAC address as unique ID for Russound RIO

* Fix pre-commit for Russound RIO

* Refactor config flow error handling for Russound RIO

* Add config flow import abort message for no primary controller

* Add common strings to Russound RIO

* Use reference strings for Russound RIO issue strings

* Remove commented out test fixture from Russound RIO

* Clean up test fixtures for Russound RIO

* Remove model from entry data in Russound RIO

* Clean up Russound client mock

* Clean up Russound test fixtures

* Remove init tests and clean up Russound config flow cases
2024-07-10 23:02:33 +02:00
Joost Lekkerkerker
924e767736 Bump knocki to 0.3.0 (#121704) 2024-07-10 21:53:11 +02:00
Sid
3142f52a79 Add Ruff refurb rules (#121701) 2024-07-10 21:47:40 +02:00
Andrew Jackson
a9c9963f0f Mealie min version check (#121677) 2024-07-10 21:25:49 +02:00
Jan Bouwhuis
71e5ffb2bd Add mqtt automation publish test with template rendering (#121695) 2024-07-10 21:17:27 +02:00
Sid
319fdf42c3 Enable Ruff RUF017 (#121693) 2024-07-10 21:09:47 +02:00
Joost Lekkerkerker
1e0c03257c Add diagnostics to Mealie (#121700) 2024-07-10 21:09:03 +02:00
Lucas Mindêllo de Andrade
5dbf907323 Bump sunweg 3.0.2 (#121684) 2024-07-10 20:16:36 +02:00
Sid
cd4358ed9e Allow enigma2 devices to use different source bouquets (#121686) 2024-07-10 17:46:39 +02:00
Richard Kroegel
865190f0b0 Get suggested_unit_of_measurement via unit converter's UNIT_CLASS (#119196)
Co-authored-by: Richard <rikroe@users.noreply.github.com>
Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-07-10 17:45:07 +02:00
J. Nick Koston
0e0a339517 Convert doorbird to use asyncio (#121569) 2024-07-10 17:34:12 +02:00
puddly
020961d2d8 Fix ZHA select platform state restoration (#121646)
* Ensure `select` entities do not restore state if they were unavailable

* Add a unit test
2024-07-10 10:55:27 -04:00
J. Nick Koston
c81d5a1ac2 Handle empty entity_id in the recorder filter (#121681)
fixes #111745
2024-07-10 09:53:38 -05:00
Ravaka Razafimanantsoa
8b729e3c7d Bump switchbot-api to 2.2.1 (#121676) 2024-07-10 15:16:57 +02:00
J. Nick Koston
02b12837d4 Small cleanups to bond entities (#121641) 2024-07-10 15:12:46 +02:00
epenet
e812b0e02f Cleanup unnecessary returns (#121652) 2024-07-10 15:11:56 +02:00
epenet
b0837dd98f Use service_calls fixture in zha tests (#120996) 2024-07-10 15:06:49 +02:00
Joost Lekkerkerker
43806553fc Add service to import recipe to mealie (#121598) 2024-07-10 14:33:17 +02:00
Noah Husby
f762359abf Bump aiorussound to 1.1.2 (#121674) 2024-07-10 14:05:24 +02:00
Jeef
0213f1c5c0 Add SimpleFIN integration (#108336)
* reset to latest dev branch

* Update homeassistant/components/simplefin/sensor.py

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

* formatting tweak

* Removed info errors

* fix bad billing error message

* addressing PR

* addressing PR

* reauth abort and already_confiugred added to strings.json

* adding the reauth message

* ruff

* update reqs

* reset to latest dev branch

* Update homeassistant/components/simplefin/sensor.py

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

* formatting tweak

* Removed info errors

* fix bad billing error message

* addressing PR

* addressing PR

* reauth abort and already_confiugred added to strings.json

* adding the reauth message

* ruff

* update reqs

* Update homeassistant/components/simplefin/__init__.py

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

* Addressing a few PR comments - removing nix - and adding runtime data

* updated comments

* rename config flow

* pulling reauth :( - inline stuff

* inline more

* fixed a tab issue

* reverting changes

* various PR updates and code removal

* generator async add

* Update homeassistant/components/simplefin/__init__.py

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

* Update homeassistant/components/simplefin/config_flow.py

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

* Update homeassistant/components/simplefin/config_flow.py

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

* Update homeassistant/components/simplefin/sensor.py

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

* Update homeassistant/components/simplefin/sensor.py

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

* always callable

* Update homeassistant/components/simplefin/coordinator.py

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

* no-verify

* type

* fixing missing domain

* it looks like this file is gone now

* typing

* sorta pass

* fix license

* Update homeassistant/components/simplefin/config_flow.py

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

* Update homeassistant/components/simplefin/entity.py

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

* addressing PR

* Update homeassistant/components/simplefin/strings.json

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

* move property to entity.py

* moved stuff out to else block

* Initial Snappshot Testing ... still have unadressed changes to make

* Addressing PR Comments

* pushing back to joost

* removing non-needed file

* added more asserts

* reducing mocks - need to fix patch paths still

* Changed patch to be more localized to config_flow

* Removed unneeded fixture

* Moved coordinator around

* Cleaning up the code

* Removed a NOQA"

* Upping the number of asserts

* cleanup

* fixed abort call

* incremental update - for Josot... changed a function signature and removed an annotatoin

* no-verify

* Added an abort test

* ruff

* increased coverage but it might not pass muster for JOOST

* increased coverage but it might not pass muster for JOOST

* Much nicer test now

* tried to simplify

* Fix nits

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-07-10 12:44:04 +02:00
Franck Nijhof
42dcd693d5 Block variable <=3.4.4 custom integration from breaking the recorder (#121670) 2024-07-10 11:30:16 +02:00
tronikos
1925614a14 Handle errors in Fully Kiosk camera (#121659) 2024-07-10 11:21:38 +02:00
Marcel van der Veldt
42003ae5ac Matter lock state follow-up (#121669) 2024-07-10 11:20:26 +02:00
Maikel Punie
33df857283 Small fix in velbus cover for the assumed states (#121656) 2024-07-10 11:11:54 +02:00
Marcel van der Veldt
6702d232e2 Fix state for Matter Locks (including optional door sensor) (#121665) 2024-07-10 10:32:42 +02:00
Franck Nijhof
e9b7cc1eba Block places <=2.7.0 custom integration from breaking the recorder (#121662) 2024-07-10 10:24:44 +02:00
Franck Nijhof
65e03f952a Block icloud3 custom integration from breaking the recorder (#121658) 2024-07-10 09:47:15 +02:00
epenet
30b5297fde Small refactor to cleanup unnecessary returns (#121653) 2024-07-10 09:34:48 +02:00
epenet
86f7718c1f Adjust type hints for unnecessary returns in tests (#121657) 2024-07-10 09:30:50 +02:00
Paul Bottein
d10aa6656b Update frontend to 20240710.0 (#121651) 2024-07-10 09:29:22 +02:00
epenet
ff59adc661 Adjust type hints for unnecessary returns (#121650) 2024-07-10 09:26:29 +02:00
epenet
5d809f88ba Improve type hints in calendar tests (#121654) 2024-07-10 09:12:56 +02:00
Mike Lewis
8b0f28e7f4 Add Bromley to list of london air authorities (#121498) 2024-07-10 09:10:26 +02:00
epenet
7a337ecd1d Cleanup unnecessary definition in lamarzocco tests (#121655) 2024-07-10 09:08:39 +02:00
J. Nick Koston
fb758bd8b6 Migrate screenlogic to use entry.runtime_data (#121644) 2024-07-10 08:36:02 +02:00
J. Nick Koston
6f15352eda Convert nexia to use entry.runtime_data (#121640) 2024-07-10 08:35:13 +02:00
J. Nick Koston
bf09cee66f Migrate emonitor to entry.runtime_data (#121645) 2024-07-10 08:34:20 +02:00
David F. Mulcahey
0aa6a17da8 Prevent entity creation errors from causing all entities for a platform from loading in ZHA (#121631) 2024-07-10 08:31:24 +02:00
J. Nick Koston
4245357403 Convert solaredge to use entry.runtime_data (#121642) 2024-07-10 08:22:44 +02:00
David F. Mulcahey
72c3c0eb53 Bump ZHA lib to 0.0.19 (#121637) 2024-07-10 08:22:08 +02:00
J. Nick Koston
8d0d8fd006 Convert powerwall to use entry.runtime_data (#121643) 2024-07-10 08:20:29 +02:00
CrazyMan2000
9120115577 Split media player select input test (#121633) 2024-07-09 23:28:41 +02:00
Jan Bouwhuis
805d4fcc40 Do not use curr as abbreviation in alexa tests and remove conditions (#121627) 2024-07-09 22:58:22 +02:00
Diogo Gomes
92e6dacf14 Update CODEOWNERS of enphase_envoy (#121623) 2024-07-09 22:53:49 +02:00
dougiteixeira
d783813ba0 Add config flow for platform button in Template (#120886) 2024-07-09 21:20:18 +02:00
jan iversen
5e56c27703 Modbus, Remove duplicate address check (#121579) 2024-07-09 21:16:47 +02:00
G Johansson
9d2cf70ba5 Add constant for climate feature flag check (#121619) 2024-07-09 21:14:19 +02:00
Jan Stienstra
c5ced14473 Jellyfin - Improve unloading/reloading config entry (#121613) 2024-07-09 21:14:03 +02:00
epenet
bff663b3c1 Improve type hints in recorder result_processor (#121593) 2024-07-09 21:12:03 +02:00
Joakim Plate
f14777d0ae Allow ambilight when we have connection (philips_js) (#121620) 2024-07-09 21:10:15 +02:00
epenet
a4980cf0fd Improve type hints in zwave_js tests (#121594) 2024-07-09 20:13:47 +02:00
ilan
31dc80c616 Add binary sensor to madVR integration (#121465)
* feat: add binary sensor and tests

* fix: update test

* fix: use entity description

* feat: use translation key

* feat: implement base entity

* fix: change device classes

* fix: remove some types

* fix: coordinator.data none on init

* fix: names, tests

* feat: parameterize tests
2024-07-09 19:11:08 +02:00
Andrew Jackson
898803abe9 Add shopping lists to Mealie integration (#121534)
* Add mealie shopping lists & tests

* Add shopping_lists init failure

* Fix coordinator name

* Fixes

* Add available, fix merge

* Fixes

* Fixes

* Add todo failure tests

* Fix tests
2024-07-09 18:39:22 +02:00
Jan Bouwhuis
5b25c24539 Remove stale template_topic code for mqtt publish service (#121604) 2024-07-09 18:22:08 +02:00
CrazyMan2000
e44f00cf7c Add alexa remote support (#120878)
* Updated the AlexaModeController to support the remote domain. Also added an alexa entitiy adapter for the remote domain.

* Fixed copy paste mistake.

* Fixed power state for remove domain.

* Updated the CapabilityResource to support labels with the corresponding locale. This local is read from the users config.

* Add the alexa display category 'REMOTE' and use it for the remote capability.

* Revert "Updated the CapabilityResource to support labels with the corresponding locale. This local is read from the users config."

This reverts commit fbdf37904a.

* Fix error when the remote does not have an activtiy list.

* Add tests for the state report of a remote entity.

* Add a test for alexas set mode directive for a remote entitiy.

* Add a test for alexas TurnOn and TurnOff directives for a remote entity.

* Apply suggestions from code review

Fix copy paste mistakes.

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

* Improve attribute name as suggested.

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

* Add test case with zero and one activity.

* Add a comment why we use the mode controller instead of the input controller.

* Add test to check of the discovery returns all required interfaces for a remote entitiy.

* Tweak comment

* Add line breaks to fix max allowed chars per line.

---------

Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com>
2024-07-09 18:03:47 +02:00
Paulus Schoutsen
154da1b18b Allow targeting conversation agent as pipeline (#119556)
* Allow targetting conversation agent as pipeline

* Test that we can use a conversation entity as an assist pipeline

* Add test for WS get

---------

Co-authored-by: Michael Hansen <mike@rhasspy.org>
2024-07-09 10:56:53 -05:00
Michael Hansen
69ed730101 Bump hassil to 1.7.3 for number word caching (#121608)
* Bump hassil to 1.7.3

* Add wildcard slot list name
2024-07-09 17:25:40 +02:00
Paulus Schoutsen
01861cd240 Ensure we prepare conversation pipeline when speech-to-text starts (#114665)
* Ensure we prepare conversation pipeline when speech-to-text starts

* Add lock around recognize

* Update homeassistant/components/conversation/default_agent.py

* Add lock around load intents
2024-07-09 09:58:52 -05:00
Michael Hansen
4498bf9ec4 Remove language lock from default agent and move around tests (#121531)
* Remove language lock

* Remove unsub for change events

* Remove redundant check

* Simplify intent loading

* Cache intent loading error

* Revert "Remove unsub for change events"

This reverts commit 575266abcd.

* guard instead of assert

* Some more cleanup

* No need to warn during prepare

* Some more cleanup

* Add more timing logs

* Split up tests and rely less on http

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-07-09 16:05:43 +02:00
Leonard Sperry
4a22b95620 Remove "unavailable" and "unknown" filters from Kafka integration (#121602) 2024-07-09 07:16:14 -06:00
Arie Catsman
592cfc9c17 Bump pyenphase to 1.20.6 (#121583)
bump pyenphase to 1.20.6
2024-07-09 12:52:04 +02:00
epenet
d4cc44d352 Improve type hints for webhook implementation in push (#121589)
Improve type hints in push webhook implementation
2024-07-09 12:16:23 +02:00
epenet
ba0cd595ff Improve type hints in device tracker implementations (#121585) 2024-07-09 12:06:49 +02:00
epenet
9ca398ef82 Improve type hints in webhook implementations (#121588) 2024-07-09 12:05:23 +02:00
epenet
7aada39b77 Improve type hints for webhook implementation in dialogflow (#121592) 2024-07-09 12:04:28 +02:00
Joost Lekkerkerker
a1fae0e0ce Fix missing validation and service definition in Mealie (#121578) 2024-07-09 11:55:12 +02:00
Leonard Sperry
cfabb778dd Add entity_id as key for kafka message (#121519)
Co-authored-by: Aaron Bach <bachya1208@gmail.com>
2024-07-09 08:44:49 +02:00
Brett Adams
48d9df74ed Add sunroof to Teslemetry (#121476) 2024-07-09 08:36:34 +02:00
Glenn Waters
b07fcb6a4a Fix upb config flow connect (#121571) 2024-07-09 08:32:34 +02:00
Robert Contreras
3ea694a069 Home Connect unit tests for light platform (#121576) 2024-07-09 08:31:41 +02:00
Franck Nijhof
9321bba61e Update vehicle to 2.2.2 (#121556) 2024-07-09 08:30:10 +02:00
Franck Nijhof
c13d5a663a Update tailscale to 0.6.1 (#121557) 2024-07-09 08:29:57 +02:00
Michael Hansen
6e85f09722 Revert webrtc to 1.2.3 (#121561) 2024-07-08 22:50:55 +02:00
Markus Jacobsen
45843a3112 Add Bang & Olufsen media_player testing (#120580) 2024-07-08 22:19:02 +02:00
Michael Hansen
2a31774f91 Bump webrtc-noise-gain to 1.2.5 (#121539) 2024-07-08 21:57:10 +02:00
Markus Jacobsen
f801649e9c Fix Bang & Olufsen wrong source being compared (#121512) 2024-07-08 21:48:07 +02:00
Cris-ET
60e1df2a87 Add new entities for the Growatt Storage inverter (#121507) 2024-07-08 21:47:40 +02:00
Christoph
5dbaaa9068 Remove homematic state_class from GAS_POWER sensor (#121533) 2024-07-08 21:38:09 +02:00
Franck Nijhof
10f3813ffd Update Home Assistant Wheels action to 2024.07.1 (#121555) 2024-07-08 21:35:12 +02:00
Franck Nijhof
71300b197a Update Home Assistant Wheels action to 2024.07.0 (#121552) 2024-07-08 21:18:01 +02:00
puddly
b754f03c11 ZHA as an external library (#120190)
Co-authored-by: David Mulcahey <david.mulcahey@icloud.com>
Co-authored-by: David Mulcahey <david.mulcahey@me.com>
2024-07-08 20:18:30 +02:00
Andrew Jackson
e11d24f06f Add myself as co-codeowner for Mealie integration (#121536)
* Add myself as co-codeowner for Mealie integration

* Update manifest.json

* Update homeassistant/components/mealie/manifest.json

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-07-08 18:58:10 +02:00
Joost Lekkerkerker
5f088e0501 Add Mealie service to get recipe (#121462) 2024-07-08 17:11:35 +02:00
J. Nick Koston
93cf8c1311 Fix person tracking in unifiprotect (#121528) 2024-07-08 07:58:18 -07:00
Cris-ET
3e8335f61b Define state_class for Growatt inverter entities (#121516) 2024-07-08 15:08:08 +02:00
tronikos
5f909d0c52 Fix unreleased breaking change in Google Cloud (#121523) 2024-07-08 14:34:18 +02:00
epenet
98651cbd2e Improve type hints in lovelace tests (#121520) 2024-07-08 14:04:11 +02:00
epenet
19e272a901 Improve type hints in iotawatt tests (#121505) 2024-07-08 13:31:05 +02:00
epenet
10ee554f1f Improve type hints in logi_circle tests (#121518) 2024-07-08 13:30:29 +02:00
epenet
f7825eb5b1 Improve type hints in lyric tests (#121517) 2024-07-08 13:30:01 +02:00
Kevin Stillhammer
8ab6a505a4 Write data to state after Broadlink entity added (#121493)
* Write data to ha after entity added

* Properly mock api return values

Some values like _attr_is_on were mapped to MagicMocks which led to them evaluating to True. Actually calling the update state method when adding the entities made that improper mocking come to the surface.

* Call _update_state instead of _recv_data
2024-07-08 13:15:17 +02:00
Cris-ET
bd4ef4b2ff Define state_class for Growatt storage entities (#121514) 2024-07-08 13:03:06 +02:00
epenet
242b28377d Improve type hints in kodi tests (#121508) 2024-07-08 12:57:52 +02:00
epenet
b048ad8afe Improve type hints in iqvia tests (#121506) 2024-07-08 12:57:19 +02:00
epenet
148803460b Improve type hints in kitchen_sink tests (#121509) 2024-07-08 12:54:43 +02:00
epenet
c4c623ea99 Improve type hints in kulersky tests (#121510) 2024-07-08 12:54:18 +02:00
epenet
4d68ae1199 Improve type hints in ipma tests (#121501) 2024-07-08 11:38:27 +02:00
epenet
3059bf0536 Improve type hints in insteon tests (#121504) 2024-07-08 11:34:50 +02:00
Paulus Schoutsen
1aa9588dcb Include hass device ID in mobile app get_config webhook (#121496) 2024-07-08 11:00:21 +02:00
Mr. Bubbles
00aafc0cf7 Add entity base class in Habitica integration (#121320)
* Sensor refactoring

* Change todo entities to use common base entity

* Requested changes

* Update button platform to use base class

* Update swtich platform to use base entity class
2024-07-08 10:18:09 +02:00
Mr. Bubbles
6350c5479b Add rest in the inn switch to Habitica integration (#121472)
* Add rest in the inn swich  to Habitica

* Move api call execution to coordinator
2024-07-08 09:58:33 +02:00
dependabot[bot]
ad47a7b8c6 Bump actions/upload-artifact from 4.3.3 to 4.3.4 (#121491)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-08 09:22:07 +02:00
dependabot[bot]
617db25efb Bump actions/download-artifact from 4.1.7 to 4.1.8 (#121490)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-08 09:21:52 +02:00
Mr. Bubbles
ea65ff5876 Add button platform to Habitica integration (#121461) 2024-07-08 09:10:28 +02:00
dougiteixeira
cf4bd7fd1c Refactor schema generation in Template integration (#120889)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-07-08 09:06:15 +02:00
Markus Jacobsen
e30f315565 Fix BangOlufsenSource enum member names (#116052) 2024-07-07 23:53:49 +02:00
Ovidiu D. Nițan
cd478c356e Bump xiaomi-ble to 0.30.2 (#121471) 2024-07-07 23:13:43 +02:00
J. Nick Koston
27a2114ba9 Bump yalexs to 6.4.2 (#121467) 2024-07-07 13:41:31 -07:00
J. Nick Koston
4cf733b9a2 Small cleanups to doorbird (#121454) 2024-07-07 13:25:13 -07:00
Jan Bouwhuis
8a28cbe9e2 Wait for conversation test init (#121464)
* Wait for conversation test init

* typo
2024-07-07 22:24:20 +02:00
J. Nick Koston
6129a37bb0 Fix flakey homekit reload test (#121463) 2024-07-07 21:52:44 +02:00
Michael
0558e480ce Add event entity to Feedreader (#118147) 2024-07-07 21:44:41 +02:00
Joost Lekkerkerker
f126360c67 Add Mealie service to get mealplan (#120824)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-07-07 21:19:20 +02:00
G Johansson
833ac4db49 Add config flow to history_stats helper (#121381) 2024-07-07 21:06:37 +02:00
David Knowles
72458d143d Add valve support to Hydrawise (#116302) 2024-07-07 20:42:45 +02:00
ilan
12228d8a00 Add madvr envy integration (#120382)
* feat: Add madvr envy

* fix: await and pass entry directly

* fix: add attributes and unique id for sensors

* fix: reflect power state well, improve state detection

* fix: don't connect on init, add options, add reload on change, keep on during test

* fix: cancel tasks on unload

* fix: test connection via library

* fix: wait for boot time

* docs: add readme and license

* fix: broken pipe in lib

* fix: detect out of band power off

* fix: improve extra attributes

* fix: fix unloading, add config flow test, limit to one platform

* fix: use conf, refresh coordinator, other comments

* fix: remove event data

* fix: fix tests passing, remove wake on lan

* fix: dont allow to proceed unless connection works

* chore: update dep

* fix: update config flow, add constants

* fix: write state, use runtime data instead

* fix: remove await

* fix: move unloading and stuff to coordinator/init

* fix: pass in config entry with correct type

* fix: move queue and tasks to library

* fix: config flow error flow, tests, name, and update lib

* fix: update lib, leave connection open on setup

* fix: update lib

* fix: address comments, remove wol from lib

* fix: remove unneeded options

* fix: remove fields

* fix: simplify code, address comments

* fix: move error to lib

* fix: fix test

* fix: stronger types

* fix: update lib

* fix: missing text from options flow

* chore: remove options flow

* chore: remove import

* chore: update comments

* fix: get mac from device, persist

* fix: add mac stuff to test

* fix: startup import errors

* chore: stale comment

* fix: get mac from persisted config

* chore: update lib

* fix: persist mac in a better way

* feat: use mac as unique ID for entry

* fix: use unique ID from mac, add proper device

* fix: will not be set in init potentially

* fix: access mac

* fix: optimize, move error to lib

* feat: add coordinator test, use conf

* fix: use one mock, add init test

* fix: not async

* feat: add remote test

* fix: types

* fix: patch client, expand remote tests

* fix: use snapshot test

* fix: update branding

* fix: add description, fix type check

* fix: update tests

* fix: test

* fix: update test

* fix: camelcase

* Fix

* feat: strict typing

* fix: strict typing in lib

* fix: type will never be None

* fix: reference to mac, all tests passing

---------

Co-authored-by: Joostlek <joostlek@outlook.com>
2024-07-07 20:41:53 +02:00
Christophe Gagnier
8110b60fc9 Use ConfigEntry runtime_data in TechnoVE (#121410) 2024-07-07 20:21:28 +02:00
Elliott Balsley
cd72bdd851 Add Prometheus fan_mode and climate_mode metrics (#120267)
Co-authored-by: Anton Tolchanov <1687799+knyar@users.noreply.github.com>
2024-07-07 19:39:54 +02:00
G Johansson
26bc37195e Add defrosting as HVACAction in ClimateEntity (#121448) 2024-07-07 18:54:40 +02:00
Robert Contreras
2def33b168 Home Connect unit tests for switch platform (#115456) 2024-07-07 18:30:59 +02:00
Jason R. Coombs
a5c9aa44bd Bump jaraco.abode to 5.2.1 (#121446)
Bump dependency on jaraco.abode to 5.2.1.

Closes #121300
2024-07-07 18:02:47 +02:00
Mr. Bubbles
751935539a Migrate Habitica Dailies and To-Do's to the todo platform (#116655)
* Add todo platform

* update for DataUpdateCoordinator

* set lastCron as dailies due date

* parse alternative duedate format

* fix tests

* send notification on item drop

* fix drop message

* update exception messages

* Simplified the update of user_fields by using set union

* move userFields to const

* Issue deprecation only if entity is acutally used

* Resolve issues

* user entity registry to get entity_id

* raise ServiceValidationError

* requested changes

* Move next_due_date helper function to util.py module

* some changes

* Move function to util.py
2024-07-07 17:50:27 +02:00
jan iversen
866cdcc993 Bump pymodbus to 3.6.9 (#121445)
Bump pymodbus 3.6.9.
2024-07-07 17:38:17 +02:00
Paulus Schoutsen
eb0f6f7088 Ensure intents_changed variable is always initialized (#121444) 2024-07-07 17:32:35 +02:00
Erwin Douna
fb8eeac563 Refactor Tado to use runtime_data (#121373) 2024-07-07 17:15:38 +02:00
Joost Lekkerkerker
1fefd396b9 Add mealie version to device info (#121443) 2024-07-07 17:13:15 +02:00
Thomas55555
67facdf3a5 Generate translation in vscode taks: Code Coverage (#120434)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-07-07 17:05:44 +02:00
Clifford Roche
27975c7517 Fix incorrect temperature in Gree if temp units changed on device (#121041) 2024-07-07 17:05:14 +02:00
J. Nick Koston
792c6a9cd9 Migrate doorbird to use entry.runtime_data (#121413) 2024-07-07 16:57:10 +02:00
Shai Ungar
b6609fa77c Deprecate the dynamic package sensors in seventeentrack (#116102)
* Add deprecation comments for the dynamic package sensors

* Add deprecation comments for the dynamic package sensors

* Add deprecation comments for the dynamic package sensors

add more information when retrieving packages from service call

* Add deprecation comments for the dynamic package sensors

update deprecation comment

* 1. 17Track repair flow
2. update deprecation comment

* 1. remove description_placeholders
2. 2024.8 deprecated

* Update homeassistant/components/seventeentrack/repairs.py

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

* 1. extract deprecated to constant
2. fix types
3. check for issue_id
4. add listener only when not deprecated
5. update which service to call

* Update homeassistant/components/seventeentrack/strings.json

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

* Update homeassistant/components/seventeentrack/repairs.py

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

* 1. move deprecate_sensor_issue to where needed
2. add entry_id to issue_id
3. use constant where needed

* update breaks in ha version

* Update homeassistant/components/seventeentrack/strings.json

* Remove obsolete tests

* Fix

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-07-07 16:55:38 +02:00
Joost Lekkerkerker
a66631f1ee Bump aiomealie to 0.6.0 (#121439) 2024-07-07 16:55:25 +02:00
Tsvi Mostovicz
de8415d5c7 Set Jewish Calendar quality scale (#120604) 2024-07-07 16:42:43 +02:00
dougiteixeira
0d48d5a5ec Remove device ID from config schema via YAML in helper template (#120708) 2024-07-07 16:40:02 +02:00
srwareham
76bdc4f5c4 Add configurable keep_alive to Ollama integration, change default to 5m (#119341)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-07-07 16:38:01 +02:00
Zack Cerza
6937aed9fe Handle more pushover exceptions during setup (#115802)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-07-07 16:36:16 +02:00
Jetsada Machom
959298d121 Add Tuya Smart Gardening system (#118335) 2024-07-07 16:34:30 +02:00
kingy444
9b4e64ab62 Bump pydaikin to 2.13.1 (#118679)
Co-authored-by: Fredrik Erlandsson <fredrik.e@gmail.com>
2024-07-07 16:34:05 +02:00
Elliott Balsley
275a7499b1 Add prometheus fan handler (#119805)
Co-authored-by: Anton Tolchanov <1687799+knyar@users.noreply.github.com>
2024-07-07 16:32:15 +02:00
Sid
e2141dc208 Add _attr class attributes to TextToSpeechEntity (#115684) 2024-07-07 16:21:04 +02:00
Jan Rieger
790d22dc46 Migrate QNAP extra state attributes to separate states (#109221) 2024-07-07 16:18:37 +02:00
Marc Mueller
37ffe09add Update mypy-dev to 1.12.0a1 (#121428) 2024-07-07 16:10:17 +02:00
J. Nick Koston
dc5ae9e0b2 Add event platform to august (#121392) 2024-07-07 15:39:58 +02:00
Angel Nunez Mencias
4c1cb6cce8 Add support for SenseCAP (#121405) 2024-07-07 15:29:46 +02:00
Christophe Gagnier
643dcb1429 Change TechnoVE quality scale to platinum (#121275) 2024-07-07 15:28:25 +02:00
Joost Lekkerkerker
e9b62dd203 Fix missing placeholder in intergration issue (#121425) 2024-07-07 15:22:02 +02:00
rappenze
fc6906a12f Enable remove device entry in fibaro integration (#121427) 2024-07-07 15:21:38 +02:00
Michael
846528131e Allow current empty feeds to be configured in Feedreader (#121421) 2024-07-07 15:11:28 +02:00
Joost Lekkerkerker
1c2e6ab3db Fix Mealie URL field (#121434) 2024-07-07 15:03:32 +02:00
xLarry
8e45eb6168 Minor changes to laundrify binary_sensor platform (#121435) 2024-07-07 15:02:57 +02:00
Joost Lekkerkerker
d95b28bdee Sort mealie mealplans (#121433) 2024-07-07 15:01:58 +02:00
Joost Lekkerkerker
17172d841c Fix MPD config flow (#121431) 2024-07-07 14:54:29 +02:00
Florent Thoumie
5ea1601c2c Use shared httpx client in iaqualink integration (#121407) 2024-07-06 21:51:16 -07:00
G Johansson
44f989ae38 Fix feature flag in climate (#121398) 2024-07-06 23:36:53 +02:00
Michael
f1693f2fde Add @mib1185 as codeowner for Feedreader (#121399)
add @mib1185 as codeowner
2024-07-06 22:28:47 +02:00
Richard Kroegel
52de706a85 Set BMW quality scale to platinum (#121388) 2024-07-06 21:19:50 +02:00
G Johansson
6e8cfb3376 Fix timezone issue in smhi weather (#121389) 2024-07-06 21:18:02 +02:00
G Johansson
ac8ea8356c Fix unnecessary logging of turn on/off feature flags in Climate (#121387) 2024-07-06 19:32:27 +02:00
Yaroslav Barov
f115efe51d Add support for Xiaomi airpurifier and humidifier (#117791) 2024-07-06 19:25:05 +02:00
Rasmus Lundsgaard
99476d9337 Fix empty list in kodi media_player (#121250)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-07-06 19:20:14 +02:00
G Johansson
98370fd9a0 Bump psutil to 6.0.0 (#121385) 2024-07-06 19:09:00 +02:00
Barry vd. Heuvel
d113ea8e47 Convert Hue scenes brightness to 0..255 (#105871)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-07-06 19:04:52 +02:00
atlflyer
ec536bda3d Add json_attributes_path configuration for command_line sensor (#116656)
Add json attributes path config to command line sensor
2024-07-06 18:52:27 +02:00
Alberto Geniola
490dd53edf Improve Elmax alarm control panel (#117689) 2024-07-06 18:21:15 +02:00
Richard Kroegel
131d9ec51b Add BMW tire pressure sensors (#120949) 2024-07-06 18:20:01 +02:00
Richard Kroegel
48145c1a7d Refactor BMW sensors and migrate unique_ids (#121380) 2024-07-06 17:34:20 +02:00
Joost Lekkerkerker
cf34b46b5a Fix Audit license script comments (#121374) 2024-07-06 15:24:45 +02:00
Joost Lekkerkerker
3c14aa12ab Add repair issue when trying to set up unknown integration (#121089)
* Add repair issue when trying to set up unknown integration

* Add repair issue when trying to set up unknown integration

* Add repair issue when trying to set up unknown integration

* Fix

* Update homeassistant/components/homeassistant/strings.json

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

* Update homeassistant/components/homeassistant/strings.json

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

* Update homeassistant/setup.py

* Fix

---------

Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com>
2024-07-06 15:02:58 +02:00
Christophe Gagnier
df9ced9768 Implement TechnoVE diagnostic (#121278) 2024-07-06 13:46:19 +02:00
djtimca
b5a0e89c03 Remove old codeowners who no longer maintain the Omnilogic integration (#117987)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-07-06 13:11:32 +02:00
Brett Adams
f46c127423 Add energy switch entities to Tessie (#121360) 2024-07-06 12:45:27 +02:00
Brett Adams
e04d612874 Add energy number entities for Tessie (#121354) 2024-07-06 12:29:18 +02:00
Xidorn Quan
2bc7904b51 Add demand window sensor for amberelectric (#121356) 2024-07-06 12:28:52 +02:00
Marius
be0cf545b2 Add valve-open/closed state icons (#121312) 2024-07-06 12:26:35 +02:00
Brett Adams
8f7c3da456 Add energy select entities to Tessie (#120641) 2024-07-06 11:49:53 +02:00
tronikos
17daccd38a Refactor the validation in Google Cloud TTS (#120853) 2024-07-06 11:44:46 +02:00
Alan
8ff4991f07 LLM to handle int attributes (#121037) 2024-07-06 11:41:18 +02:00
Luke Lashley
43481ffeac Add support for Roborock Zeo (#121334) 2024-07-06 11:24:32 +02:00
Robert C. Maehl
ac8bbe9db4 Direct Users to App-Specific Passwords for iCloud integration to prevent MFA spam (#120945)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-07-06 11:12:38 +02:00
Brett Adams
696ae91c35 Add energy binary sensors to Tessie (#121349) 2024-07-06 11:05:52 +02:00
Richard Kroegel
f29094f41d Refactor BMW send_message and add tests (#119170)
Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-07-06 11:00:00 +02:00
Brett Adams
294c31f6f5 Fix initial Wall Connector values in Tessie (#121353) 2024-07-06 10:54:09 +02:00
Robert Svensson
cce77affc7 Provide default values for common keys in deCONZ websocket fixture (#121359) 2024-07-06 10:52:50 +02:00
Michael Hansen
1ec95f900d Bump webrtc-noise-gain to 1.2.4 (#121346) 2024-07-06 10:51:40 +02:00
Dave T
a358609609 Improve user message if stream is not set up in generic camera (#121308) 2024-07-06 10:50:16 +02:00
Brett Adams
18370bdbb4 Add diagnostics to Tessie (#121348)
* Add diag

* Add snapshot

* Redact serial number
2024-07-06 09:00:03 +02:00
Luke Lashley
e86f2220d0 Bump anova-wifi to 0.17.0 (#121337)
* Bump anova-wifi to 0.16.0

* Bump to .17
2024-07-06 08:39:24 +02:00
Sid
9f839dbb77 Bump ruff to 0.5.1 (#121324)
Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
2024-07-05 16:44:14 -05:00
Robert Svensson
1b8944dab6 Improve deCONZ websocket fixture (#121332) 2024-07-05 22:35:06 +02:00
Devin
9d204613e8 Expose Twitch "Started At" attribute (#121265) 2024-07-05 22:33:04 +02:00
Joost Lekkerkerker
f2c9188e46 Add audit license script (#120683)
* Add license script

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Fix

* Remove packages

* Remove packages

* Remove packages

* Remove packages

* Fix

* Remove packages

* Remove packages

* Fix

* Fix

* Fix

* Fix exceptions
2024-07-05 22:04:21 +02:00
Joost Lekkerkerker
1561324274 Fix Netatmo snapshot (#121333) 2024-07-05 22:02:43 +02:00
Erwin Douna
34b5df50cc Match comments with refactoring (#121330)
Change comments
2024-07-05 21:50:50 +02:00
Cris-ET
130dbcb3f1 Add PPV2 entity for Growatt storage inverter (#121052) 2024-07-05 20:20:56 +01:00
J. Nick Koston
89ffee9ad5 Update ulid-transform to 0.10.1 (#121321) 2024-07-05 14:07:39 -05:00
Robert Svensson
94db251aea Finally remove all legacy test stubs from deCONZ tests (#121323) 2024-07-05 20:47:43 +02:00
tronikos
ad2d794fd6 Get languages and voices from the API in Google Cloud TTS (#120852) 2024-07-05 20:03:06 +02:00
Robert Svensson
178655647d Use fixtures in deCONZ init tests (#121217) 2024-07-05 19:17:47 +02:00
Jan Temešinko
6e5c3904b6 Fix ombi configuration validation (#121314) 2024-07-05 19:12:09 +02:00
Robert Svensson
a773d0c8f6 Use fixtures on deCONZ event tests (#121303) 2024-07-05 19:11:21 +02:00
Erik Montnemery
6eeb70151d Use BIGINT SQL type for ID columns (#121025) 2024-07-05 10:42:39 -05:00
Joost Lekkerkerker
fd815beb2d Add valve to base platform (#121313) 2024-07-05 17:41:13 +02:00
Robert Svensson
8c459959ee Use fixtures in deCONZ gateway tests (#121305) 2024-07-05 16:59:10 +02:00
epenet
4b4b17e774 Improve hass type hints for autouse fixtures in tests (#121311) 2024-07-05 15:49:22 +01:00
epenet
9383920b1a Improve type hints in hdmi_cec tests (#121302) 2024-07-05 16:42:55 +02:00
Luke Lashley
ffc39585ed Add ability to select current map for Roborock (#120882)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-07-05 09:38:26 -05:00
epenet
45ab9cae1a Improve type hints for silent_ssdp_scanner in tests (#121309) 2024-07-05 16:32:10 +02:00
Mariusz Kubisz
bf8cef3337 Add support for min mode in Netatmo public sensor (#118613) 2024-07-05 16:25:05 +02:00
Richard Kroegel
324755b8f5 Separate BMW base entity into separate file (#120830)
* Refactor BMW base entity

* Update snapshots

* Changes from review
2024-07-05 16:08:27 +02:00
Dave T
94d010a4c0 Fix vscode debug launch deprecation warning by swapping python to debugpy (#120866) 2024-07-05 14:49:41 +02:00
dougiteixeira
4289efb506 Device change test improvements in Template (#120884) 2024-07-05 14:47:31 +02:00
epenet
b9cfd4e8ce Improve type hints in hue tests (#121298) 2024-07-05 14:40:23 +02:00
epenet
7332bc5faf Improve type hints in http tests (#121294) 2024-07-05 14:37:00 +02:00
Bram Kragten
641d6382fd Update frontend to 20240705.0 (#121295) 2024-07-05 14:35:21 +02:00
epenet
288c297c9c Improve type hints in homeassistant_alerts tests (#121293) 2024-07-05 13:25:31 +02:00
epenet
e4731c07cb Add monkeypatch to enforce-type-hints plugin (#121051) 2024-07-05 11:35:56 +02:00
Steven B
d42dced852 Fix tplink light effect behaviour when activating a scene (#121288) 2024-07-05 11:19:04 +02:00
epenet
d0c10c961d Improve type hints in broadlink (#121285) 2024-07-05 11:12:01 +02:00
Joost Lekkerkerker
0088765268 Bump pynx584 to 0.8.2 (#120910) 2024-07-05 11:10:48 +02:00
Franck Nijhof
afb184db73 Remove coveragerc (#121286) 2024-07-05 11:03:31 +02:00
Robert Svensson
eb5a98e7ea Use fixtures in deCONZ light tests PT2 (#121208) 2024-07-05 10:57:17 +02:00
epenet
2ab02c06c6 Add monkeypatch type hints to rflink tests (#121053) 2024-07-05 10:54:16 +02:00
G Johansson
0cf5b4f965 Bump python-holidays to 0.52 (#121283) 2024-07-05 10:02:52 +02:00
Thomas55555
ad02afe7be Extend wrapper for sending commands to all platforms in Husqvarna Automower (#120255) 2024-07-05 10:02:38 +02:00
Paulus Schoutsen
daaf35d4c1 Simplify conversation tests (#121060)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-07-05 09:46:36 +02:00
J. Nick Koston
229e54d0b1 Remove unneeded blocking sleep in srp_energy tests (#121141) 2024-07-05 09:46:12 +02:00
hahn-th
97de9c9f69 Revert Homematic IP Cloud unique ID changes (#121231) 2024-07-05 09:45:20 +02:00
Allen Porter
700675042b Improve redaction for stream error messages (#120867) 2024-07-05 09:42:29 +02:00
Marcel van der Veldt
1c1e1a7bfa Listen for attribute changes of OnOff cluster in appliances (#121198) 2024-07-05 09:41:57 +02:00
Marcel van der Veldt
98dfb47448 Fix Matter light discovery schema for DimmerSwitch (#121185) 2024-07-05 09:41:41 +02:00
Thomas55555
1b42b32ac1 Fix work area sensor in Husqvarna Automower (#121228) 2024-07-05 09:41:21 +02:00
Maciej Bieniek
dbe98de82a Fix pulse counter frequency sensors for Shelly Plus Uni (#121178)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-07-05 09:40:43 +02:00
Christophe Gagnier
b28f528a7a Add max current number entity for TechnoVE (#121148)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-07-05 09:39:58 +02:00
J. Nick Koston
d3f424227f Cleanup unifiprotect entity classes (#121184) 2024-07-05 09:31:31 +02:00
Paulus Schoutsen
22718ca32a Assist Pipeline minor cleanup (#121187) 2024-07-05 09:26:32 +02:00
J. Nick Koston
2b9bddc3fc Make device_tracker fallback defaults cached_property (#121260) 2024-07-05 09:25:57 +02:00
Filipe Pina
213bbae63c Respect icloud Enable polling updates (#117984)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-07-05 09:24:02 +02:00
Matthew FitzGerald-Chamberlain
def27a082c Add Aprilaire humidifier (#120270) 2024-07-05 09:19:24 +02:00
Maikel Punie
c3830a58cc Bump velbusaio to 2024.7.5 (#121156)
* Bump velbusaio to 2024.7.4

* bump to 2024.7.5 to remove print functions
2024-07-05 09:12:47 +02:00
epenet
b054c037fe Improve type hints in hassio tests (#121221) 2024-07-05 09:05:21 +02:00
Robert Svensson
dcef25c0fa Use fixtures in deCONZ climate tests (#121242) 2024-07-05 09:01:45 +02:00
J. Nick Koston
5a24ee0bc0 Fix blocking I/O while validating config schema (#121263) 2024-07-05 08:58:30 +02:00
J. Nick Koston
e71f6c5948 Small speedup to processing entity customize (#121271) 2024-07-05 08:57:08 +02:00
J. Nick Koston
cdb2ec4231 Small speed up to entity state calculation (#121273) 2024-07-05 08:56:20 +02:00
J. Nick Koston
adee8094e7 Cache is_official_image/is_docker_env in bootstrap to fix blocking I/O (#121261)
* Cache is_official_image and is_docker_env in bootstrap to fix blocking I/O

These do blocking I/O later in the startup process

discovered in https://github.com/home-assistant/core/pull/120273

* comment
2024-07-05 08:30:07 +02:00
Avi Miller
6c42596bdd Bump aiolifx to 1.0.4 (#121267) 2024-07-04 22:26:44 -05:00
Sarabveer Singh
b3a62a97b4 Update HomeKit PM2.5 mappings based on new 2024 US EPA AQI (#109900) 2024-07-04 22:10:35 -05:00
Robert Svensson
62d9020261 Remove legacy method from deCONZ fan and sensor tests (#121244) 2024-07-04 18:17:15 -05:00
Erik Montnemery
e47cbf3cf7 Use async_setup_recorder_instance fixture in recorder v32_migration tests (#121081)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-07-04 17:49:51 -05:00
Shay Levy
d799a4575b Bump aiowebostv to 0.4.2 (#121258) 2024-07-04 17:27:56 -05:00
Jordi
b406438fa7 Bump aioaquacell to 0.1.8 (#121253) 2024-07-05 01:05:35 +03:00
Shay Levy
b14f22926a Fix WebOS TV media player status when OFF after IDLE (#121251) 2024-07-05 00:19:24 +03:00
xLarry
276f6c7ee7 Update laundrify_aio to v1.2.2 (#121068)
* refactor: upgrade laundrify_aio to v1.2.1

* refactor: update laundrify_aio to v1.2.2
2024-07-04 22:08:50 +02:00
epenet
83fac6192d Use service_calls fixture in webostv tests (#120999) 2024-07-04 23:07:38 +03:00
epenet
84a8259103 Improve type hints in ezviz tests (#120679) 2024-07-04 21:59:02 +02:00
Pavel Skuratovich
3ca66be268 Starline: Fix "Error updating SLNet token" message in Log (#121122)
Fixes https://github.com/home-assistant/core/issues/116715
2024-07-04 21:54:39 +02:00
Maciej Bieniek
001bb3a04e Bump nettigo_air_monitor to version 3.3.0 (#120901)
* Bump nam library

* Update snaphots (increasing accuracy)

* Update lib and snapshot

---------

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-07-04 21:40:25 +02:00
dougiteixeira
50cc31e9cc Add device class translations in Random (#120890) 2024-07-04 21:36:31 +02:00
Richard Kroegel
0afebf744f Add MINI Connected virtual integration (#120874) 2024-07-04 21:30:02 +02:00
Matthew FitzGerald-Chamberlain
df7be501d3 Fix AprilAire case (#120895)
* Fix AprilAire case

* Fix test
2024-07-04 21:27:56 +02:00
G Johansson
ebe7a4747d Bump pytrafikverket to 1.0.0 (#121210)
* Update all related files and tests to new version

* Fix missed modal

* Bump requirements
2024-07-04 21:09:19 +02:00
Robert Resch
10d3c3d341 Bump deebot-client to 8.1.1 (#121241) 2024-07-04 21:03:33 +02:00
Gerben Jongerius
6ab6ce30ef Bump youless library version 2.1.2 (#121181) 2024-07-04 20:51:57 +02:00
epenet
fe0bafd067 Add warnings for deprecated json helpers (#121161) 2024-07-04 20:48:08 +02:00
epenet
04a6285e62 Add .coveragerc to core files (#121182) 2024-07-04 20:46:36 +02:00
epenet
e07bf61f03 Import AsyncGenerator from collections.abc in tests (#121019)
* Force import of Async/Generator from collections.abc

* Adjust

* Don't force
2024-07-04 20:24:27 +02:00
Marcel van der Veldt
df1b02d44e Use Generator from abc instead of typing_extensions in Matter discovery (#121236)
Use Generator from abc instead of typing_extensions
2024-07-04 20:06:23 +02:00
J. Nick Koston
79f4cc9c12 Update uiprotect to 5.2.2 (#121227) 2024-07-04 19:57:30 +02:00
Patrick Koenig
7d5341cab2 Update short_name in web app manifest (#121223) 2024-07-04 18:55:30 +02:00
jvmahon
d5135d4956 Add support for the Select platform in Matter (#119769)
* Add support for ModeSelect Cluster

* Update discovery.py

* Add files via upload

* refactor part 1

* Update discovery.py

* add remaining mode discovery schemas

* add test

* type alias

---------

Co-authored-by: Marcel van der Veldt <m.vanderveldt@outlook.com>
2024-07-04 18:29:10 +02:00
Luke Lashley
950c72a04c Bump anova-wifi to 0.15.0 (#121222) 2024-07-04 11:05:22 -05:00
Erik Montnemery
6df15ad8fc Drop use of async_setup_recorder_instance fixture in recorder purge tests (#121193) 2024-07-04 10:39:24 -05:00
Erik Montnemery
a1e6f8c2ec Drop use of async_setup_recorder_instance fixture in recorder migration tests (#121196) 2024-07-04 10:39:13 -05:00
cnico
092e362f01 Add new integration for Dio Chacon cover devices (#116267)
* Dio Chacon integration addition with config flow and cover entity

* Addition of model information for device

* Addition of light and service to force reloading states

* Logger improvements

* Convert light to switch and usage of v1.0.0 of the api

* 100% for tests coverage

* Invalid credential implementation and rebase on latest ha dev code

* Simplify PR with only one platform

* Ruff correction

* restore original .gitignore content

* Correction of cover state bug when using cover when using actions on cover group.

* Begin of corrections following review.

* unit tests correction

* Refactor with a coordinator as asked by review

* Implemented a post constructor callback init method via dio-chacon-api-1.0.2. Improved typing.

* Corrections for 2nd review

* Reimplemented without coordinator as reviewed with Joostlek

* Review improvement

* generalize callback in entity

* Other review improvements

* Refactored tests for readability

* Test 100% operationals

* Tests review corrections

* Tests review corrections

* Review tests improvements

* simplified tests with snapshots and callback method

* Final fixes

* Final fixes

* Final fixes

* Rename to chacon_dio

---------

Co-authored-by: Joostlek <joostlek@outlook.com>
2024-07-04 16:45:20 +02:00
epenet
28f06cb5a0 Add type hints to homekit events fixture (#121211) 2024-07-04 16:32:01 +02:00
epenet
411630429d Improve type hints in habitica tests (#121212) 2024-07-04 16:27:57 +02:00
epenet
9a1f7f020c Add type hints to matrix events fixtures (#121213) 2024-07-04 16:17:18 +02:00
Robert Svensson
d12f2384c5 Use fixtures in deCONZ config flow tests PT2 (#121203)
* Use fixtures in deCONZ config flow tests PT2

* Update tests/components/deconz/test_config_flow.py

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

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-07-04 15:53:25 +02:00
Robert Svensson
24c82c2475 Use fixtures in deCONZ sensor tests PT2 (#121204) 2024-07-04 15:48:49 +02:00
epenet
b949240d4a Improve type hints in google tests (#121169) 2024-07-04 05:56:01 -07:00
Robert Svensson
f78933235d Use fixtures in deCONZ service tests (#121108)
* Use fixtures in deCONZ service tests

* Update tests/components/deconz/test_services.py

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

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2024-07-04 14:23:40 +02:00
Robert Svensson
ece8b74967 Use fixtures in deCONZ device trigger tests (#121103) 2024-07-04 14:23:15 +02:00
Robert Svensson
1d8382a498 Use fixtures in deCONZ light tests PT1 (#121112)
Use fixtures in deCONZ light tests part 1
2024-07-04 14:22:10 +02:00
Robert Svensson
873d96bab3 Use fixtures in deCONZ binary sensor tests (#120966) 2024-07-04 14:21:26 +02:00
Robert Svensson
31ed32da6c Use fixtures in deCONZ alarm control panel tests (#120967) 2024-07-04 14:20:57 +02:00
Erik Montnemery
f1d6ad9073 Add test fixture to control recorder migration (#121180)
* Add test fixture to control recorder migration

* Update tests/components/recorder/conftest.py

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

* Update tests/components/recorder/conftest.py

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2024-07-04 13:10:08 +02:00
Erik Montnemery
d1264655a0 Fix some typos in core.py (#121189) 2024-07-04 13:04:52 +02:00
Giuliano Riccio
ad1ba1a5e5 Fix Google assistant SDK broadcasting command for italian (#116198)
Fixed broadcasting command for italian

Co-authored-by: tronikos <tronikos@users.noreply.github.com>
2024-07-04 03:47:32 -07:00
Erik Montnemery
255778d0c7 Use recorder test fixtures in recorder init tests (#121176) 2024-07-04 04:54:40 -05:00
epenet
3c69301365 Improve type hints in guardian tests (#121175) 2024-07-04 04:53:49 -05:00
J. Nick Koston
67a4c2c884 Add support for event entity motion sensors to HomeKit (#121123) 2024-07-04 04:50:50 -05:00
Robert Svensson
d429bcef16 Use fixtures in deCONZ sensor tests PT1 (#121116) 2024-07-04 11:50:23 +02:00
Robert Svensson
02e7707f91 Use fixtures in deCONZ config flow tests PT1 (#121121) 2024-07-04 04:49:46 -05:00
Franck Nijhof
ee2df9c4b3 Merge branch 'master' into dev 2024-07-04 11:48:03 +02:00
J. Nick Koston
0be1f773a2 Add event platform to doorbird (#121114) 2024-07-04 04:41:56 -05:00
epenet
a6f6221f16 Add monkeypatch type hints to numato tests (#121056)
* Add monkeypatch type hints to numato tests

* Adjust

* Improve
2024-07-04 02:33:47 -07:00
Steven B
4958e8e5c1 Bump python-kasa to 0.7.0.3 (#121183) 2024-07-04 04:31:58 -05:00
epenet
8aedb1201d Improve type hints in google_pubsub tests (#121172)
* Improve type hints in google_pubsub tests

* Remove from .coveragerc
2024-07-04 02:31:35 -07:00
J. Nick Koston
aa74ad0061 Enable ruff asyncio event loop blocking detection rules (#120799) 2024-07-04 04:17:57 -05:00
epenet
43e4223a8e Improve type hints in google_generative_ai tests (#121170) 2024-07-04 02:09:34 -07:00
Paulus Schoutsen
869f24df49 Convert async_get_conversation_languages from async to callback (#121162)
* Convert get_languages to callback

* One more callback
2024-07-04 10:41:31 +02:00
epenet
cf96084ea3 Improve type hints in generic tests (#121166) 2024-07-04 10:32:00 +02:00
epenet
1eec49696a Improve type hints in generic_hygrostat/thermostat tests (#121167) 2024-07-04 10:30:17 +02:00
epenet
1f22f0d89b Improve type hints in google_travel_time tests (#121171) 2024-07-04 10:27:55 +02:00
epenet
dd8ba0828a Improve type hints in geofency tests (#121168) 2024-07-04 10:27:37 +02:00
epenet
c9acd1711c Improve type hints in gpslogger tests (#121173) 2024-07-04 10:23:14 +02:00
epenet
4589be2d11 Improve type hints in group tests (#121174) 2024-07-04 10:22:39 +02:00
Erik Montnemery
d55d02623a Add recorder test fixture to enable persistent SQLite database (#121137)
* Add recorder test fixture to enable persistent SQLite database

* Fix tests directly using async_test_home_assistant context manager
2024-07-04 09:59:37 +02:00
Marcel van der Veldt
24f6e6e885 Fix locking/unlocking transition state in Matter lock platform (#121099) 2024-07-04 09:20:55 +02:00
Steven Looman
ac9c08f52c Add port mapping entry count sensor to upnp (#120263)
Add port mapping entry count sensor
2024-07-04 09:07:41 +02:00
J. Nick Koston
8a5b201d75 Fix blocking I/O in event loop in core test (#121128) 2024-07-04 07:43:46 +02:00
J. Nick Koston
0e9acf2685 Bump thermobeacon-ble to 0.7.0 (#121136)
changelog: https://github.com/Bluetooth-Devices/thermobeacon-ble/compare/v0.6.2...v0.7.0
2024-07-04 07:42:49 +02:00
Christophe Gagnier
3b023367d7 Update pytechnove to 1.3.1 (#121146) 2024-07-04 05:55:36 +01:00
J. Nick Koston
3dbab1a580 Bump inkbird-ble to 0.5.8 (#121134) 2024-07-04 05:51:05 +01:00
J. Nick Koston
1144e23d8d Fix blocking I/O in config tests (#121144) 2024-07-04 05:21:30 +01:00
J. Nick Koston
e8ef2c2822 Fix blocking I/O in tts tests (#121143) 2024-07-04 05:21:01 +01:00
J. Nick Koston
a4d4fc6827 Fix blocking I/O in stream tests (#121142) 2024-07-04 05:15:26 +01:00
J. Nick Koston
7002042119 Fix blocking I/O in mqtt tests (#121140) 2024-07-04 05:13:13 +01:00
J. Nick Koston
c59fc4e3c7 Fix blocking I/O in media_extractor tests (#121139) 2024-07-04 05:08:53 +01:00
Erik Montnemery
cc2782edc7 Use async_test_recorder fixture in recorder auto_repairs tests (#121125) 2024-07-04 01:38:01 +02:00
Martin Weinelt
b6a23fad35 Fix broken pathlib import in august integration (#121135) 2024-07-03 18:18:28 -05:00
MeIchthys
cfef09d653 Bump nextcloudmonitor to 1.5.1 (#120356) 2024-07-04 01:08:38 +02:00
J. Nick Koston
84d8bc711d Fix blocking I/O in event loop in google_assistant test (#121126)
found by ruff in #120799
2024-07-03 23:35:23 +01:00
J. Nick Koston
595e688c56 Fix blocking I/O in event loop in kira test (#121127) 2024-07-03 23:35:02 +01:00
Erik Montnemery
408e524551 Add recorder test fixture for skipping tests by DB engine (#121118)
* Add recorder test fixture for skipping tests by DB engine

* Fix mistake
2024-07-04 00:02:46 +02:00
epenet
73716ea529 Add monkeypatch type hints to webostv tests (#121054)
* Add monkeypatch type hints to webostv

* Improve
2024-07-03 23:49:31 +03:00
epenet
c9240b8e34 Add monkeypatch type hints to switcher_kis tests (#121055)
* Add monkeypatch type hints to switch_kis

* Improve
2024-07-03 23:49:01 +03:00
J. Nick Koston
7958c0825e Fix blocking process call in process tests (#121104)
Discovered by ruff in https://github.com/home-assistant/core/pull/120799
2024-07-03 22:26:03 +02:00
J. Nick Koston
291f309c0e Remove unnecessary lambdas in timeout tests (#121101) 2024-07-03 22:24:41 +02:00
Christoph
f85c356522 Fix HmIP-ESI GAS sensor DeviceClass (#121106)
should be SensorDeviceClass:GAS instead of SensorDeviceClass:VOLUME to be supported in the Energy Dashboard
2024-07-03 22:19:59 +02:00
J. Nick Koston
8017bc6776 Fix blocking I/O in demo mailbox (#121097) 2024-07-03 14:37:29 -05:00
Jan Bouwhuis
2040c285b1 Remove schema option for mqtt vacuum configs (#121093) 2024-07-03 21:35:20 +02:00
J. Nick Koston
53767b6159 Fix event loop blocking I/O in generic tests (#121100) 2024-07-03 20:24:25 +01:00
J. Nick Koston
4881205831 Fix event loop blocking I/O in command_line tests (#121098) 2024-07-03 14:22:38 -05:00
Erik Montnemery
5029da6919 Make the async_setup_recorder_instance fixture a context manager (#121086) 2024-07-03 14:05:34 -05:00
Erik Montnemery
61f1c8d963 Fix leak of SQLAlchemy engine objects in recorder (#121085) 2024-07-03 12:17:52 -05:00
J. Nick Koston
48172b0426 Small speed up to writing entity state (#121043) 2024-07-03 12:16:41 -05:00
Franck Nijhof
2b64f6f2ab 2024.7.0 (#120579) 2024-07-03 18:52:01 +02:00
Franck Nijhof
1080a4ef1e Bump version to 2024.7.0 2024-07-03 17:55:58 +02:00
J. Nick Koston
44c89e6c3b Cleanup v32 recorder migration test (#121083) 2024-07-03 10:45:19 -05:00
Franck Nijhof
d94b36cfbb Bump version to 2024.7.0b11 2024-07-03 17:29:08 +02:00
Marcel van der Veldt
85168239cd Matter fix Energy sensor discovery schemas (#121080) 2024-07-03 17:28:59 +02:00
Robert Resch
547b24ce58 Bump deebot-client to 8.1.0 (#121078) 2024-07-03 17:28:56 +02:00
Michael Hansen
e8bcb3e11e Bump intents to 2024.7.3 (#121076) 2024-07-03 17:28:53 +02:00
Marcel van der Veldt
c89a9b5ce0 Bump python-matter-server to 6.2.2 (#121072) 2024-07-03 17:28:49 +02:00
Robert Svensson
13631250b4 Bump axis to v62 (#121070) 2024-07-03 17:28:46 +02:00
Bram Kragten
6621cf475a Update frontend to 20240703.0 (#121063) 2024-07-03 17:28:43 +02:00
Anton Tolchanov
36e74cd9a6 Generate Prometheus metrics in an executor job (#121058) 2024-07-03 17:28:38 +02:00
Kevin Stillhammer
16827ea09e Bump here-transit to 1.2.1 (#120900) 2024-07-03 17:27:10 +02:00
Kevin Stillhammer
c4956b66b0 Bump here-routing to 1.0.1 (#120877) 2024-07-03 17:27:06 +02:00
J. Nick Koston
e4a0a21b67 Bump uiprotect to 5.2.0 (#121079) 2024-07-03 10:18:46 -05:00
Joost Lekkerkerker
bc363c385f Fix async knocki function (#121048) 2024-07-03 17:17:37 +02:00
Marcel van der Veldt
7a9792c111 Matter fix Energy sensor discovery schemas (#121080) 2024-07-03 17:16:51 +02:00
Robert Resch
1a715d7b89 Bump deebot-client to 8.1.0 (#121078) 2024-07-03 17:11:09 +02:00
Erik Montnemery
46a488d871 Use async_setup_recorder_instance fixture in recorder auto_repairs tests (#121077) 2024-07-03 17:04:39 +02:00
Michael Hansen
0b76d5c9ca Bump intents to 2024.7.3 (#121076) 2024-07-03 16:55:21 +02:00
Marcel van der Veldt
355c7399d7 Bump python-matter-server to 6.2.2 (#121072) 2024-07-03 16:27:45 +02:00
Erik Montnemery
e26b4554e6 Improve logic when retrying establishing database connection (#121047) 2024-07-03 16:22:21 +02:00
Paulus Schoutsen
976cb434c9 Add CONTROL supported feature to OpenAI conversation entities (#121064)
Add CONTROL supported feature to OpenAI
2024-07-03 09:19:46 -05:00
Robert Svensson
f284aa41eb Bump axis to v62 (#121070) 2024-07-03 16:16:13 +02:00
epenet
1332e39f9e Cleanup deprecated json utils (#121069)
* Cleanup deprectated json utils

* Adjust pylint
2024-07-03 15:57:32 +02:00
epenet
8709c668cc Remove unused diagnostics fixtures (#121066) 2024-07-03 15:57:02 +02:00
Erik Montnemery
87f7703f3c Use async_setup_recorder_instance fixture in recorder migration tests (#121050) 2024-07-03 08:56:05 -05:00
Bram Kragten
e7ffd7b9ad Update frontend to 20240703.0 (#121063) 2024-07-03 15:41:43 +02:00
Anton Tolchanov
9b2233e65e Generate Prometheus metrics in an executor job (#121058) 2024-07-03 15:41:01 +02:00
Kevin Stillhammer
fbb98a668c Bump here-transit to 1.2.1 (#120900) 2024-07-03 15:35:08 +02:00
Paulus Schoutsen
a885bdfe76 Add conversation supported feature CONTROL (#121036) 2024-07-03 14:30:51 +02:00
epenet
ac57eb7614 Add monkeypatch type hints to shelly tests (#121057)
* Add monkeypatch type hints to shelly tests

* Improve
2024-07-03 12:08:40 +02:00
Franck Nijhof
84204c38be Bump version to 2024.7.0b10 2024-07-03 08:59:52 +02:00
J. Nick Koston
febd1a3772 Bump inkbird-ble to 0.5.7 (#121039)
changelog: https://github.com/Bluetooth-Devices/inkbird-ble/compare/v0.5.6...v0.5.7
2024-07-03 08:59:45 +02:00
Allen Porter
1665cb40ac Bump gcal_sync to 6.1.4 (#120941) 2024-07-03 08:59:41 +02:00
J. Nick Koston
c33cbf8312 Bump inkbird-ble to 0.5.7 (#121039)
changelog: https://github.com/Bluetooth-Devices/inkbird-ble/compare/v0.5.6...v0.5.7
2024-07-02 21:12:17 -05:00
J. Nick Koston
23e061ccbd Bump uiprotect to 5.0.0 (#121034)
changelog: https://github.com/uilibs/uiprotect/compare/v4.2.0...v5.0.0

Breaking change in the lib is not auto converting enum values to
their underlying values. They are mostly StrEnums so this should
not have any impact unless I missed one.
2024-07-02 21:11:31 -05:00
Christophe Gagnier
399548a973 Bump pytechnove to 1.3.0 (#120975) 2024-07-03 02:32:34 +02:00
Erik Montnemery
a4d889e958 Remove BaseTableManager active attribute (#121020) 2024-07-02 18:29:12 -05:00
Markus Jacobsen
510315732a Add Beoconnect Core as selectable Bang & Olufsen device (#121015)
Add Beoconnect Core as available device
2024-07-02 21:22:22 +01:00
epenet
476efb1d36 Improve type hints in home_connect tests (#121014) 2024-07-02 22:19:33 +02:00
J. Nick Koston
bdc6805771 Bump orjson to 3.10.6 (#121028) 2024-07-02 13:17:25 -07:00
Franck Nijhof
1b9f27fab7 Bump version to 2024.7.0b9 2024-07-02 22:15:17 +02:00
Bram Kragten
d1e76d5c3c Update frontend to 20240702.0 (#121032) 2024-07-02 22:15:09 +02:00
Jan-Philipp Benecke
4377f4cbea Temporarily set apprise log level to debug in tests (#121029)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-07-02 22:15:05 +02:00
Jan-Philipp Benecke
7d31d553d0 Temporarily set apprise log level to debug in tests (#121029)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-07-02 22:13:19 +02:00
Bram Kragten
9749cf113a Update frontend to 20240702.0 (#121032) 2024-07-02 22:13:07 +02:00
Marc Mueller
0e52d149e4 Update voluptuous to 0.15.2 (#120631)
* Update voluptuous to 0.15.1

* Fix typing issues

* Add type ignores for json result type

* Update voluptuous to 0.15.2

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2024-07-02 12:57:09 -07:00
Franck Nijhof
6b045a7d7b Bump version to 2024.7.0b8 2024-07-02 21:09:55 +02:00
Marcel van der Veldt
1fa6972a66 Handle mains power for Matter appliances (#121023) 2024-07-02 21:09:39 +02:00
Marcel van der Veldt
b3e833f677 Fix setting target temperature for single setpoint Matter thermostat (#121011) 2024-07-02 21:09:36 +02:00
starkillerOG
807ed0ce10 Do not hold core startup with reolink firmware check task (#120985) 2024-07-02 21:09:32 +02:00
starkillerOG
5cb41106b5 Reolink replace automatic removal of devices by manual removal (#120981)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-07-02 21:09:28 +02:00
Joost Lekkerkerker
98a2e46d4a Remove Aladdin Connect integration (#120980) 2024-07-02 21:08:14 +02:00
Joost Lekkerkerker
24afbde79e Bump yt-dlp to 2024.07.01 (#120978) 2024-07-02 21:05:52 +02:00
starkillerOG
65d2ca53cb Bump reolink-aio to 0.9.4 (#120964) 2024-07-02 21:05:49 +02:00
Joost Lekkerkerker
23b905b422 Bump airgradient to 0.6.1 (#120962) 2024-07-02 21:05:46 +02:00
Joost Lekkerkerker
de458493f8 Fix missing airgradient string (#120957) 2024-07-02 21:05:42 +02:00
Erik Montnemery
efd3252849 Create log files in an executor thread (#120912) 2024-07-02 21:05:39 +02:00
Jesse Hills
3b6acd5380 [ESPHome] Disable dashboard based update entities by default (#120907)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-07-02 21:05:36 +02:00
Teemu R
1e6dc74812 Minor polishing for tplink (#120868) 2024-07-02 21:05:22 +02:00
Marcel van der Veldt
0d0ca22103 Fix setting target temperature for single setpoint Matter thermostat (#121011) 2024-07-02 21:03:01 +02:00
Marcel van der Veldt
52627b9aed Handle mains power for Matter appliances (#121023) 2024-07-02 21:02:29 +02:00
Myles Eftos
ba7e45e157 Bump amberelectric to 1.1.1 (#121010) 2024-07-02 19:40:30 +02:00
epenet
592ef59c5a Use common fixtures in tasmota tests (#121000) 2024-07-02 17:38:20 +02:00
epenet
195f07a18a Use service_calls fixture in nest tests (#120987) 2024-07-02 08:02:17 -07:00
Erik Montnemery
5b39989869 Fix typo in post_schema_migration (#121017) 2024-07-02 15:52:54 +02:00
Erik Montnemery
b8b7c23258 Create log files in an executor thread (#120912) 2024-07-02 15:48:35 +02:00
epenet
faf43ed4c7 Adjust Generator type hints in tests (#121013) 2024-07-02 14:12:02 +02:00
epenet
bd234db48f Improve type hints in analytics tests (#121012) 2024-07-02 13:58:11 +02:00
Joost Lekkerkerker
2edb7eb42c Remove Aladdin Connect integration (#120980) 2024-07-02 13:51:44 +02:00
Jesse Hills
72d706ab52 [ESPHome] Disable dashboard based update entities by default (#120907)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-07-02 13:51:14 +02:00
starkillerOG
e322cada48 Reolink replace automatic removal of devices by manual removal (#120981)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-07-02 13:31:23 +02:00
Robert Svensson
baf2ebf1f2 Use fixtures in deCONZ diagnostics tests (#120968) 2024-07-02 12:43:34 +02:00
epenet
326d24d78b Use service_calls fixture in xiaomi_ble tests (#120998) 2024-07-02 12:37:50 +02:00
epenet
3adea1ada9 Use service_calls fixture in zwave_js tests (#120994) 2024-07-02 12:37:21 +02:00
epenet
02dffcde1a Use common registry fixtures in solarlog (#121005) 2024-07-02 12:36:30 +02:00
Joost Lekkerkerker
cdc3897319 Bump yt-dlp to 2024.07.01 (#120978) 2024-07-02 12:35:10 +02:00
epenet
22f5f59478 Use service_calls fixture in core platform tests [m-z] (#121001) 2024-07-02 12:34:11 +02:00
epenet
76a62028ad Use common registry fixtures in lifx (#121004) 2024-07-02 12:32:17 +02:00
epenet
6fd1f0a34f Use common fixtures in philips_js tests (#120988) 2024-07-02 12:31:10 +02:00
epenet
e544550380 Use service_calls fixture in yolink tests (#120997) 2024-07-02 12:30:52 +02:00
epenet
8819a9aa52 Use service_calls fixture in sun tests (#120990) 2024-07-02 12:29:51 +02:00
epenet
1f6744847d Use service_calls fixture in zone tests (#120995) 2024-07-02 12:29:21 +02:00
starkillerOG
4a8436d6bc Do not hold core startup with reolink firmware check task (#120985) 2024-07-02 12:28:32 +02:00
epenet
b13e78f3a3 Use service_calls fixture in microsoft tests (#120983) 2024-07-02 12:27:54 +02:00
epenet
71b7ee40e5 Use common registry fixtures in tplink (#121002) 2024-07-02 12:27:15 +02:00
epenet
9ca9377cad Use common registry fixtures in hue (#121003) 2024-07-02 12:26:25 +02:00
epenet
e3516be3e3 Use service_calls fixture in mqtt tests (#120984) 2024-07-02 11:23:46 +02:00
epenet
fac511aa46 Use service_calls fixture in samsungtv tests (#120992) 2024-07-02 10:37:14 +02:00
epenet
3df3e6d081 Use service_calls fixture in shelly tests (#120991) 2024-07-02 10:36:50 +02:00
epenet
07d80d5ad9 Use service_calls fixture in netatmo tests (#120986) 2024-07-02 10:17:41 +02:00
starkillerOG
2d054fb5df Bump reolink-aio to 0.9.4 (#120964) 2024-07-02 09:25:33 +02:00
Joost Lekkerkerker
2635573bbc Bump airgradient to 0.6.1 (#120962) 2024-07-02 08:23:31 +02:00
Teemu R
90d622cd02 Minor polishing for tplink (#120868) 2024-07-02 08:23:07 +02:00
Robert Svensson
0ffebd4853 Use fixtures in deCONZ button tests (#120958) 2024-07-01 20:48:33 +02:00
Joost Lekkerkerker
383de96549 Fix missing airgradient string (#120957) 2024-07-01 20:36:35 +02:00
Robert Svensson
690164a518 Use fixtures in deCONZ cover tests (#120954) 2024-07-01 20:31:42 +02:00
Robert Svensson
167a8c6613 Use fixtures in deCONZ fan tests (#120953) 2024-07-01 19:49:12 +02:00
Franck Nijhof
74687f3b60 Bump version to 2024.7.0b7 2024-07-01 19:44:51 +02:00
Markus Jacobsen
2f307d6a8a Fix Bang & Olufsen jumping volume bar (#120946) 2024-07-01 19:44:37 +02:00
J. Nick Koston
d8f55763c5 Downgrade logging previously reported asyncio block to debug (#120942) 2024-07-01 19:44:34 +02:00
Steven B
4b2be448f0 Bump python-kasa to 0.7.0.2 (#120940) 2024-07-01 19:44:31 +02:00
Marcel van der Veldt
8a7e2c05a5 Mark dry/fan-only climate modes as supported for Panasonic room air conditioner (#120939) 2024-07-01 19:44:28 +02:00
Paulus Schoutsen
887ab1dc58 Bump openai to 1.35.1 (#120926)
Bump openai to 1.35.7
2024-07-01 19:44:25 +02:00
Jan Bouwhuis
a787ce8633 Bump incomfort-client dependency to 0.6.3 (#120913) 2024-07-01 19:44:22 +02:00
Robert Resch
88ed43c779 Improve add user error messages (#120909) 2024-07-01 19:44:19 +02:00
dougiteixeira
16d7764f18 Add missing translations for device class in Template (#120893) 2024-07-01 19:44:15 +02:00
dougiteixeira
a0f8012f48 Add missing translations for device class in SQL (#120892) 2024-07-01 19:44:12 +02:00
dougiteixeira
5a052feb87 Add missing translations for device class in Scrape (#120891) 2024-07-01 19:44:09 +02:00
Allen Porter
779a7ddaa2 Bump ical to 8.1.1 (#120888) 2024-07-01 19:44:06 +02:00
Shay Levy
a9740faeda Fix Shelly device shutdown (#120881) 2024-07-01 19:44:03 +02:00
Thomas55555
3a0e85beb8 Bump aioautomower to 2024.6.4 (#120875) 2024-07-01 19:43:59 +02:00
Yuxin Wang
c19fb35d02 Add handling for different STATFLAG formats in APCUPSD (#120870)
* Add handling for different STATFLAG formats

* Just use removesuffix
2024-07-01 19:43:56 +02:00
J. Nick Koston
6f716c1753 Fix publish cancellation handling in MQTT (#120826) 2024-07-01 19:43:53 +02:00
Jan Bouwhuis
40384b9acd Split mqtt client tests (#120636) 2024-07-01 19:43:50 +02:00
Jan Bouwhuis
3bbf8df6d6 Cleanup mqtt platform tests part 4 (init) (#120574) 2024-07-01 19:43:46 +02:00
epenet
07f095aa42 Use service_calls fixture in core platform tests [a-l] (#120904) 2024-07-01 19:27:50 +02:00
Markus Jacobsen
c2dc9e9b67 Simplify Bang & Olufsen media_image_url property (#120951)
Simplify media_image_url property
2024-07-01 20:23:27 +03:00
Shay Levy
b5367e5994 Fix Shelly device shutdown (#120881) 2024-07-01 19:06:56 +02:00
Robert Svensson
1209abc944 Use fixtures in deCONZ switch tests (#120944) 2024-07-01 19:03:32 +02:00
Markus Jacobsen
a29dc4ef1e Fix Bang & Olufsen jumping volume bar (#120946) 2024-07-01 19:02:43 +02:00
Robert Svensson
7a3039aecb Use fixtures in deCONZ lock tests (#120948) 2024-07-01 19:01:32 +02:00
Robert Svensson
d506c30b38 Use fixtures in deCONZ logbook tests (#120947) 2024-07-01 18:58:43 +02:00
Robert Resch
a0b604f98c Improve add user error messages (#120909) 2024-07-01 18:27:40 +02:00
J. Nick Koston
001ee0cc0b Downgrade logging previously reported asyncio block to debug (#120942) 2024-07-01 18:26:20 +02:00
epenet
e5c7ff6a5b Use service_calls fixture in conversation tests (#120906) 2024-07-01 17:57:40 +02:00
epenet
918ac5d67c Use service_calls fixture in geo_location tests (#120911) 2024-07-01 17:56:58 +02:00
epenet
afb0a6e0ab Use service_calls fixture in homekit_controller tests (#120927) 2024-07-01 17:55:39 +02:00
epenet
b3a50893cf Use service_calls fixture in kodi tests (#120929) 2024-07-01 17:55:01 +02:00
Paulus Schoutsen
c6cfe073ea Bump openai to 1.35.1 (#120926)
Bump openai to 1.35.7
2024-07-01 17:52:30 +02:00
Allen Porter
d53cfbbb4e Bump gcal_sync to 6.1.4 (#120941) 2024-07-01 17:52:19 +02:00
tronikos
8354aa434e Remove a useless line in Google Generative AI test (#120903) 2024-07-01 17:48:39 +02:00
tronikos
5ce54c2174 Replace GoogleAPICallError with GoogleAPIError (#120902) 2024-07-01 17:48:12 +02:00
epenet
813fee663e Use service_calls fixture in litejet tests (#120933) 2024-07-01 17:47:21 +02:00
Robert Svensson
dcf4e91234 Use fixtures in deCONZ number tests (#120938) 2024-07-01 17:46:46 +02:00
Robert Svensson
361e81821c Use fixtures in deCONZ scene tests (#120936) 2024-07-01 17:42:32 +02:00
Aidan Timson
52b743e88a Add exception translations (#120937) 2024-07-01 17:39:01 +02:00
epenet
788d1999ff Use service_calls fixture in lg_netcast tests (#120932) 2024-07-01 17:37:29 +02:00
epenet
c4903dd982 Use service_calls fixture in media_extractor tests (#120935) 2024-07-01 17:32:17 +02:00
Marcel van der Veldt
8a23e37837 Mark dry/fan-only climate modes as supported for Panasonic room air conditioner (#120939) 2024-07-01 17:30:23 +02:00
Robert Svensson
77fc1c991c Use fixtures in deCONZ select tests (#120943) 2024-07-01 17:29:57 +02:00
epenet
ce54ca9c8e Use service_calls fixture in lcn tests (#120931) 2024-07-01 17:27:32 +02:00
epenet
c8bb64882e Use service_calls fixture in homeassistant tests (#120922) 2024-07-01 17:26:41 +02:00
epenet
2815c43f3e Use service_calls fixture in lutron_caseta tests (#120934) 2024-07-01 17:24:36 +02:00
Steven B
38aa6bcf19 Bump python-kasa to 0.7.0.2 (#120940) 2024-07-01 16:50:35 +02:00
Allen Porter
2506acc095 Improve flume test coverage (#120851)
* Add Flume init tests

* Increase test coverage

* Improve readability

* Fix pydoc for tests

* Use pytest.mark.usefixtures
2024-07-01 07:41:47 -07:00
epenet
c9911fa8ce Use service_calls fixture in hue tests (#120928) 2024-07-01 16:16:19 +02:00
epenet
bc3562a9e8 Use service_calls fixture in knx tests (#120930) 2024-07-01 14:33:01 +02:00
dougiteixeira
5513682de4 Add missing translations for device class in Scrape (#120891) 2024-07-01 14:21:41 +02:00
epenet
61b2e4ca32 Add Context to service_calls fixture (#120923) 2024-07-01 14:05:30 +02:00
Robert Resch
546d6b22f1 Remove OverloadUT as codeowner from Ecovacs (#120517) 2024-07-01 14:03:21 +02:00
Marc Mueller
414525503c Use TypeVar defaults for Generator (#120921)
* Use TypeVar defaults for Generator

* Code review
2024-07-01 14:02:54 +02:00
epenet
4cc414fbf8 Use service_calls fixture in google_translate tests (#120920) 2024-07-01 13:10:39 +02:00
Jan Bouwhuis
09ff44e59e Bump incomfort-client dependency to 0.6.3 (#120913) 2024-07-01 13:06:14 +02:00
Robert Svensson
44640ef9e8 First step towards fixtures in deCONZ tests (#120863)
* config entry fixture

* Mock web request

* Make siren tests use new fixtures

* Replace old constants

* Add mock put request

* Change comment
2024-07-01 12:33:51 +02:00
Joost Lekkerkerker
f08638eead Add typing to Panasonic Viera (#120772)
Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
2024-07-01 12:30:20 +02:00
Marc Mueller
921430d497 Import Generator from collections.abc (3) (#120916) 2024-07-01 12:09:11 +02:00
Marc Mueller
2f0dd6f704 Import Generator from collections.abc (2) (#120915) 2024-07-01 11:58:49 +02:00
Marc Mueller
f11b316dac Import Generator from collections.abc (4) (#120917) 2024-07-01 11:54:42 +02:00
Marc Mueller
ca55986057 Import Generator from collections.abc (1) (#120914) 2024-07-01 11:51:51 +02:00
Allen Porter
aa5ebaf613 Bump ical to 8.1.1 (#120888) 2024-07-01 10:46:10 +02:00
epenet
88583149ea Use service_calls fixture in deconz tests (#120905) 2024-07-01 10:33:31 +02:00
dependabot[bot]
d5d77db4f9 Bump github/codeql-action from 3.25.10 to 3.25.11 (#120899)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-01 08:47:52 +02:00
dougiteixeira
295cfd26aa Add missing translations for device class in Template (#120893) 2024-07-01 07:55:13 +02:00
dougiteixeira
74c2f000d8 Add missing translations for device class in SQL (#120892) 2024-07-01 07:44:59 +02:00
Yuxin Wang
269b8b07c4 Add handling for different STATFLAG formats in APCUPSD (#120870)
* Add handling for different STATFLAG formats

* Just use removesuffix
2024-07-01 07:30:08 +02:00
Thomas55555
6af9527310 Bump aioautomower to 2024.6.4 (#120875) 2024-07-01 01:12:33 +02:00
Kevin Stillhammer
eceecbb07b Bump here-routing to 1.0.1 (#120877) 2024-07-01 00:23:42 +02:00
Franck Nijhof
14af3661f3 Bump version to 2024.7.0b6 2024-06-30 20:42:10 +02:00
Michael
af733425c2 Bump pyfritzhome to 0.6.12 (#120861) 2024-06-30 20:41:51 +02:00
Allen Porter
4fc89e8861 Rollback PyFlume to 0.6.5 (#120846) 2024-06-30 20:39:47 +02:00
Tsvi Mostovicz
bcec268c04 Fix Jewish calendar unique id move to entity (#120842) 2024-06-30 20:39:44 +02:00
Shay Levy
becf9fcce2 Bump aiowebostv to 0.4.1 (#120838) 2024-06-30 20:39:41 +02:00
Etienne Soufflet
ad9e0ef8e4 Fix Tado fan mode (#120809) 2024-06-30 20:39:38 +02:00
Simon Lamon
f58eafe8fc Fix routes with transfer in nmbs integration (#120808) 2024-06-30 20:39:35 +02:00
mkmer
a7246400b3 Allow EM heat on from any mode in Honeywell (#120750) 2024-06-30 20:39:32 +02:00
Joost Lekkerkerker
38a30b343d Bump pizzapi to 0.0.6 (#120691) 2024-06-30 20:39:28 +02:00
Etienne Soufflet
1a63bb89cb Fix Tado fan mode (#120809) 2024-06-30 20:38:35 +02:00
Sander Peterse
2f5ec41fa6 Add valve domain to HomeKit (#115901)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-30 12:04:20 -05:00
Richard Kroegel
f672eec515 Fix unifi device tracker test imports (#120864) 2024-06-30 16:27:03 +02:00
mkmer
419d89f863 Allow EM heat on from any mode in Honeywell (#120750) 2024-06-30 15:30:52 +02:00
Robert Resch
05ffd637f5 Migrate Ecowitt to runtime_data (#120675) 2024-06-30 15:29:00 +02:00
Joost Lekkerkerker
b375f5227b Bump pizzapi to 0.0.6 (#120691) 2024-06-30 15:28:01 +02:00
Robert Svensson
8b3319b772 Improve UniFi device tracker tests (#120795) 2024-06-30 15:26:45 +02:00
Robert Svensson
289a630578 Improve UniFi device tracker tests Pt2 (#120796) 2024-06-30 15:25:38 +02:00
dontinelli
bb62a8a7dc Change schema to TextSelector to enable autocomplete (#120771) 2024-06-30 15:22:36 +02:00
Robert Svensson
e961ddd5fe Simplify UniFi uptime sensor test (#120794) 2024-06-30 15:22:15 +02:00
Simon Lamon
be68255ca4 Fix routes with transfer in nmbs integration (#120808) 2024-06-30 15:16:41 +02:00
Richard Kroegel
57aced50aa Use SelectSelector in BMW config flow (#120831) 2024-06-30 15:04:55 +02:00
tronikos
5deb69d492 Correctly return file extension in Google Cloud TTS (#120849) 2024-06-30 15:02:06 +02:00
dontinelli
255cc9ed74 Store runtime data inside the config entry in fyta (#120761) 2024-06-30 14:57:48 +02:00
Michael
7aca7cf858 Bump pyfritzhome to 0.6.12 (#120861) 2024-06-30 14:56:12 +02:00
Robert Svensson
ca7fb906cc Axis improve fixture naming (#120844) 2024-06-30 14:52:20 +02:00
Richard Kroegel
d15d001cfc Use runtime_data for BMW (#120837) 2024-06-30 14:51:39 +02:00
tronikos
d55be79e6a Handle error when validating options in Google Cloud TTS (#120850) 2024-06-30 02:03:58 -07:00
tronikos
bf608691d5 Do not set gender if voice name is specified in Google Cloud TTS (#120848)
* Use TextToSpeechAsyncClient in Google Cloud TTS

* Do not set gender if voice name is specified in Google Cloud TTS
2024-06-30 02:03:24 -07:00
tronikos
75e3afd369 Use TextToSpeechAsyncClient in Google Cloud TTS (#120847) 2024-06-29 23:28:18 -07:00
tronikos
72fdebeb88 Bump google-cloud-texttospeech to 2.16.3 (#120845) 2024-06-29 22:38:56 -07:00
Allen Porter
f65304957a Rollback PyFlume to 0.6.5 (#120846) 2024-06-29 21:35:48 -07:00
J. Nick Koston
5280291f98 Add linked doorbell event support to HomeKit (#120834) 2024-06-29 18:43:20 -05:00
Tsvi Mostovicz
7172d798f8 Fix Jewish calendar unique id move to entity (#120842) 2024-06-30 00:08:24 +02:00
Shay Levy
e0b0959b3f Bump aiowebostv to 0.4.1 (#120838) 2024-06-29 22:07:37 +03:00
dontinelli
bcee5f4d9f Store runtime data inside the config entry in solarlog (#120773) 2024-06-29 19:32:22 +02:00
Steven Looman
559caf4179 Use eventing for some of the upnp sensors, instead of polling (#120262) 2024-06-29 12:11:22 -05:00
jjlawren
b5f1076bb2 Bump plexapi to 4.15.14 (#120832) 2024-06-29 11:10:35 -05:00
J. Nick Koston
8f98fb2ec4 Fix publish cancellation handling in MQTT (#120826) 2024-06-29 11:06:56 -05:00
Franck Nijhof
08a0eaf184 Bump version to 2024.7.0b5 2024-06-29 17:51:45 +02:00
Joost Lekkerkerker
3ee8f6edba Use meal note as fallback in Mealie (#120828) 2024-06-29 17:51:34 +02:00
Joost Lekkerkerker
e866417c01 Add icons to Airgradient (#120820) 2024-06-29 17:51:31 +02:00
Joost Lekkerkerker
05c63eb884 Bump python-opensky to 1.0.1 (#120818) 2024-06-29 17:51:28 +02:00
Joost Lekkerkerker
bb52bfd73d Add unique id to Mealie config entry (#120816) 2024-06-29 17:51:25 +02:00
Joost Lekkerkerker
7319492bf3 Bump aiomealie to 0.5.0 (#120815) 2024-06-29 17:51:21 +02:00
J. Nick Koston
66932e3d9a Fix unneeded dict values for MATCH_ALL recorder attrs exclude (#120804)
* Small cleanup to handling MATCH_ALL recorder attrs exclude

* Fix unneeded dict values for MATCH_ALL recorder attrs exclude

The exclude is a set so the dict values were not needed

* Fix unneeded dict values for MATCH_ALL recorder attrs exclude

The exclude is a set so the dict values were not needed

* Fix unneeded dict values for MATCH_ALL recorder attrs exclude

The exclude is a set so the dict values were not needed
2024-06-29 17:51:18 +02:00
J. Nick Koston
0ec07001bd Fix blocking I/O in xmpp notify to read uploaded files (#120801)
detected by ruff in https://github.com/home-assistant/core/pull/120799
2024-06-29 17:51:15 +02:00
J. Nick Koston
0dcfd38cdc Fix missing f-string in loop util (#120800) 2024-06-29 17:51:12 +02:00
Klaas Schoute
b45eff9a2b Bump gridnet lib to v5.0.1 (#120793) 2024-06-29 17:51:09 +02:00
Klaas Schoute
ec577c7bd3 Bump odp-amsterdam lib to v6.0.2 (#120788) 2024-06-29 17:51:06 +02:00
Paul Bottein
723c4a1eb5 Update frontend to 20240628.0 (#120785)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-29 17:51:02 +02:00
Klaas Schoute
b30b4d5a3a Bump energyzero lib to v2.1.1 (#120783) 2024-06-29 17:50:59 +02:00
Matthew FitzGerald-Chamberlain
8165acddeb Bump pyaprilaire to 0.7.4 (#120782) 2024-06-29 17:50:56 +02:00
Joost Lekkerkerker
0f3ed3bb67 Bump aiowithings to 3.0.2 (#120765) 2024-06-29 17:50:53 +02:00
Maciej Bieniek
d1a96ef362 Do not call async_delete_issue() if there is no issue to delete in Shelly integration (#120762)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-29 17:50:50 +02:00
J. Nick Koston
917eeba984 Increase mqtt availablity timeout to 50s (#120760) 2024-06-29 17:50:46 +02:00
Clifford Roche
59bb8b360e Bump greeclimate to 1.4.6 (#120758) 2024-06-29 17:50:43 +02:00
Klaas Schoute
6028e5b77a Bump p1monitor lib to v3.0.1 (#120756) 2024-06-29 17:50:40 +02:00
Klaas Schoute
83df470307 Bump easyenergy lib to v2.1.2 (#120753) 2024-06-29 17:50:37 +02:00
Joost Lekkerkerker
20ac0aa7b1 Bump govee-local-api to 1.5.1 (#120747) 2024-06-29 17:50:34 +02:00
Joost Lekkerkerker
f57c942901 Bump sense-energy to 0.12.4 (#120744)
* Bump sense-energy to 0.12.4

* Fix
2024-06-29 17:50:31 +02:00
Alexey ALERT Rubashёff
8994ab1686 Add warm water remaining volume sensor to Overkiz (#120718)
* warm water remaining volume sensor

* Update homeassistant/components/overkiz/sensor.py

Co-authored-by: Dave T <17680170+davet2001@users.noreply.github.com>

---------

Co-authored-by: Dave T <17680170+davet2001@users.noreply.github.com>
2024-06-29 17:50:28 +02:00
Alexey ALERT Rubashёff
b350ba9657 Add electrical consumption sensor to Overkiz (#120717)
electrical consumption sensor
2024-06-29 17:50:25 +02:00
wittypluck
5fd589053a Reject small uptime updates for Unifi clients (#120398)
Extend logic to reject small uptime updates to Unifi clients + add unit tests
2024-06-29 17:50:22 +02:00
Allen Porter
2d5961fa4f Bump gcal_sync to 6.1.3 (#120278) 2024-06-29 17:50:18 +02:00
Joost Lekkerkerker
25932dff28 Add unique id to Mealie config entry (#120816) 2024-06-29 17:48:28 +02:00
Joost Lekkerkerker
0ab7647fea Use meal note as fallback in Mealie (#120828) 2024-06-29 17:47:21 +02:00
Joost Lekkerkerker
ce34a5e495 Add icons to Airgradient (#120820) 2024-06-29 17:46:44 +02:00
Allen Porter
7d8cbbaacb Bump gcal_sync to 6.1.3 (#120278) 2024-06-29 17:45:51 +02:00
Joost Lekkerkerker
f07f9062c1 Bump python-opensky to 1.0.1 (#120818) 2024-06-29 07:53:42 -05:00
Mick Vleeshouwer
5a6deddd30 Bump pyOverkiz to 1.13.12 (#120819) 2024-06-29 07:53:01 -05:00
J. Nick Koston
c5804d362c Remove legacy foreign key constraint from sqlite states table (#120779) 2024-06-29 07:50:53 -05:00
J. Nick Koston
852bb19223 Cleanup db_schema from_event constructors (#120803) 2024-06-29 07:49:16 -05:00
Joost Lekkerkerker
6ed0960648 Bump aiomealie to 0.5.0 (#120815) 2024-06-29 13:48:43 +02:00
Clifford Roche
8f6addcc61 Bump greeclimate to 1.4.6 (#120758) 2024-06-29 08:25:22 +02:00
J. Nick Koston
2cfd6d53bd Add event platform to unifiprotect (#120681)
* Add event platform to unifiprotect

* Add event platform to unifiprotect

* Add event platform to unifiprotect

* Add event platform to unifiprotect

* adjust

* tweaks

* translations

* coverage

* coverage

* Update tests/components/unifiprotect/test_event.py
2024-06-29 07:49:14 +02:00
J. Nick Koston
0dfb5bd7d9 Fix unneeded dict values for MATCH_ALL recorder attrs exclude (#120804)
* Small cleanup to handling MATCH_ALL recorder attrs exclude

* Fix unneeded dict values for MATCH_ALL recorder attrs exclude

The exclude is a set so the dict values were not needed

* Fix unneeded dict values for MATCH_ALL recorder attrs exclude

The exclude is a set so the dict values were not needed

* Fix unneeded dict values for MATCH_ALL recorder attrs exclude

The exclude is a set so the dict values were not needed
2024-06-29 07:42:08 +02:00
J. Nick Koston
d4ecbc91c3 Fix blocking I/O in xmpp notify to read uploaded files (#120801)
detected by ruff in https://github.com/home-assistant/core/pull/120799
2024-06-29 07:40:35 +02:00
J. Nick Koston
04ab74589a Fix missing f-string in loop util (#120800) 2024-06-29 07:01:18 +02:00
Paul Bottein
5995459de5 Update frontend to 20240628.0 (#120785)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-28 23:14:00 -05:00
Klaas Schoute
ba38f2e43b Bump gridnet lib to v5.0.1 (#120793) 2024-06-28 17:24:43 -05:00
dougiteixeira
cef7def024 Link Generic Hygrostat helper entity to actuator entity device (#120759) 2024-06-28 23:38:45 +02:00
dougiteixeira
8ed11d4b90 Link Generic Thermostat helper entity to actuator entity device (#120767) 2024-06-28 23:37:51 +02:00
J. Nick Koston
b03c10647e Fix stale docstring in recorder queries (#120763) 2024-06-28 16:29:12 -05:00
Klaas Schoute
a6454cf3c7 Bump odp-amsterdam lib to v6.0.2 (#120788) 2024-06-28 16:20:16 -05:00
wittypluck
3549aaf69c Reject small uptime updates for Unifi clients (#120398)
Extend logic to reject small uptime updates to Unifi clients + add unit tests
2024-06-28 22:47:20 +02:00
Klaas Schoute
a3394675f3 Bump energyzero lib to v2.1.1 (#120783) 2024-06-28 15:23:44 -05:00
Matthew FitzGerald-Chamberlain
97ef56d264 Bump pyaprilaire to 0.7.4 (#120782) 2024-06-28 22:15:34 +02:00
Mr. Bubbles
4fb0621027 Catch exceptions in service calls by buttons/switches in pyLoad integration (#120701)
* Catch exceptions in service calls by buttons/switches

* changes

* more changes

* update tests
2024-06-28 20:11:03 +02:00
Maciej Bieniek
c029c534d6 Do not call async_delete_issue() if there is no issue to delete in Shelly integration (#120762)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-28 19:34:24 +03:00
Toni Korhonen
f4224a0327 Bump Wallbox to 0.7.0 (#120768) 2024-06-28 17:54:20 +02:00
Joost Lekkerkerker
3e8773c0d5 Bump aiowithings to 3.0.2 (#120765) 2024-06-28 10:51:34 -05:00
J. Nick Koston
0ea1677f51 Increase mqtt availablity timeout to 50s (#120760) 2024-06-28 10:50:55 -05:00
Jan Bouwhuis
e907c45981 Cleanup mqtt platform tests part 5 (#120719) 2024-06-28 09:22:56 -05:00
Jan Bouwhuis
a8f4684929 Cleanup mqtt platform tests part 6 (last) (#120736) 2024-06-28 09:22:25 -05:00
Joost Lekkerkerker
d03a6f84a3 Bump govee-local-api to 1.5.1 (#120747) 2024-06-28 09:21:32 -05:00
Klaas Schoute
9505fcdd7d Bump p1monitor lib to v3.0.1 (#120756) 2024-06-28 09:20:44 -05:00
Klaas Schoute
3e3ab7a134 Bump easyenergy lib to v2.1.2 (#120753) 2024-06-28 09:14:31 -05:00
Joost Lekkerkerker
b56c4a757c Bump ruff to 0.5.0 (#120749) 2024-06-28 15:23:21 +02:00
Joost Lekkerkerker
984bbf8851 Bump sense-energy to 0.12.4 (#120744)
* Bump sense-energy to 0.12.4

* Fix
2024-06-28 14:53:29 +02:00
Joost Lekkerkerker
1fdd056c0e Fix ruff manual-dict-comprehension PERF403 (#120723)
* Fix PERF403

* Fix

* Fix
2024-06-28 14:17:47 +02:00
Franck Nijhof
d7a59748cf Bump version to 2024.7.0b4 2024-06-28 13:38:24 +02:00
epenet
c7906f90a3 Improve type hints in frontend tests (#120739) 2024-06-28 13:36:26 +02:00
epenet
d427dff68d Improve type hints in forked_daapd tests (#120735) 2024-06-28 13:35:55 +02:00
Joost Lekkerkerker
f69b850b1a Bump xiaomi-ble to 0.30.1 (#120743) 2024-06-28 13:35:34 +02:00
epenet
d0ce0d562e Improve type hints in flo tests (#120730) 2024-06-28 13:34:26 +02:00
tronikos
cada78496b Fix Google Generative AI: 400 Request contains an invalid argument (#120741) 2024-06-28 13:31:00 +02:00
Illia
c5fa9ad272 Bump asyncarve to 0.1.1 (#120740) 2024-06-28 13:30:51 +02:00
epenet
fe8b5656dd Separate renault strings (#120737) 2024-06-28 13:30:48 +02:00
epenet
0ae11b0335 Bump renault-api to 0.2.4 (#120727) 2024-06-28 13:30:45 +02:00
Dave Leaver
76780ca04e Bump airtouch5py to 1.2.0 (#120715)
* Bump airtouch5py to fix console 1.2.0

* Bump airtouch5py again
2024-06-28 13:30:38 +02:00
Brett Adams
3932ce57b9 Check Tessie scopes to fix startup bug (#120710)
* Add scope check

* Add tests

* Bump Teslemetry
2024-06-28 13:30:35 +02:00
dougiteixeira
35d145d3bc Link the Statistics helper entity to the source entity device (#120705) 2024-06-28 13:30:30 +02:00
Maciej Bieniek
1227d56aa2 Bump nextdns to version 3.1.0 (#120703)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-28 13:30:27 +02:00
Joost Lekkerkerker
ef3ecb6183 Bump apsystems-ez1 to 1.3.3 (#120702) 2024-06-28 13:30:18 +02:00
Joost Lekkerkerker
ca515f740e Bump panasonic_viera to 0.4.2 (#120692)
* Bump panasonic_viera to 0.4.2

* Bump panasonic_viera to 0.4.2

* Bump panasonic_viera to 0.4.2

* Fix Keys
2024-06-28 13:30:15 +02:00
Erik Montnemery
876fb234ce Bump hatasmota to 0.9.2 (#120670) 2024-06-28 13:30:10 +02:00
Erik Montnemery
f28cbf1909 Set stateclass on unknown numeric Tasmota sensors (#120650) 2024-06-28 13:30:06 +02:00
epenet
2e031d0194 Separate renault strings (#120737) 2024-06-28 13:26:31 +02:00
tronikos
d2a457c24f Fix Google Generative AI: 400 Request contains an invalid argument (#120741) 2024-06-28 13:25:55 +02:00
Ivan Belokobylskiy
c385deb6a3 Bump aiomaps with fixed license classifier (#120654) 2024-06-28 13:25:23 +02:00
Joost Lekkerkerker
6ef8e87f88 Fix ruff redefined-argument-from-local PLR1704 (#120729)
* Fix PLR1704

* Fix
2024-06-28 12:31:07 +02:00
dougiteixeira
4437c4a204 Link the Statistics helper entity to the source entity device (#120705) 2024-06-28 12:22:24 +02:00
Illia
23e5e25149 Bump asyncarve to 0.1.1 (#120740) 2024-06-28 12:14:44 +02:00
Joost Lekkerkerker
c13786c952 Fix ruff manual-dict-comprehension PERF403 in tests (#120738)
Fix PERF403 in tests
2024-06-28 12:14:24 +02:00
epenet
6f8c9c28e7 Improve type hints in fjaraskupan tests (#120732) 2024-06-28 12:03:26 +02:00
Joost Lekkerkerker
0fdf037ba0 Fix ruff type comparison E721 (#120731)
Fix E721
2024-06-28 11:56:49 +02:00
Brett Adams
3d580259e1 Check Tessie scopes to fix startup bug (#120710)
* Add scope check

* Add tests

* Bump Teslemetry
2024-06-28 11:21:59 +02:00
epenet
6d93695e2c Improve type hints in flux tests (#120733) 2024-06-28 11:20:17 +02:00
Mr. Bubbles
540da3cac6 Add unit and state_class to heating sensor in ista EcoTrend (#120728)
* Add unit and state_class to heating sensor

* remove constant
2024-06-28 10:16:13 +01:00
Joost Lekkerkerker
6286177041 Bump panasonic_viera to 0.4.2 (#120692)
* Bump panasonic_viera to 0.4.2

* Bump panasonic_viera to 0.4.2

* Bump panasonic_viera to 0.4.2

* Fix Keys
2024-06-28 11:15:44 +02:00
epenet
9b980602c9 Improve type hints in flux_led tests (#120734) 2024-06-28 11:09:54 +02:00
epenet
1e72c2f94d Bump renault-api to 0.2.4 (#120727) 2024-06-28 11:03:01 +02:00
epenet
5e39faa9f8 Improve type hints in auth tests (#120655) 2024-06-28 10:01:53 +01:00
Alexey ALERT Rubashёff
84de2da19f Add warm water remaining volume sensor to Overkiz (#120718)
* warm water remaining volume sensor

* Update homeassistant/components/overkiz/sensor.py

Co-authored-by: Dave T <17680170+davet2001@users.noreply.github.com>

---------

Co-authored-by: Dave T <17680170+davet2001@users.noreply.github.com>
2024-06-28 09:53:07 +01:00
Joost Lekkerkerker
03c6e0c55f Fix SIM300 (#120725) 2024-06-28 10:46:02 +02:00
Alexey ALERT Rubashёff
c98e70a6dc Add electrical consumption sensor to Overkiz (#120717)
electrical consumption sensor
2024-06-28 09:45:27 +01:00
Dave Leaver
827bfa89b3 Bump airtouch5py to 1.2.0 (#120715)
* Bump airtouch5py to fix console 1.2.0

* Bump airtouch5py again
2024-06-28 09:44:54 +02:00
Steven B
e0e744aed7 Bump ring-doorbell to 0.8.12 (#120671) 2024-06-28 08:52:01 +02:00
Erik Montnemery
ec069f9084 Set stateclass on unknown numeric Tasmota sensors (#120650) 2024-06-28 08:42:47 +02:00
Joost Lekkerkerker
4e34d02d2d Bump apsystems-ez1 to 1.3.3 (#120702) 2024-06-28 08:36:10 +02:00
Maciej Bieniek
e764afecac Bump nextdns to version 3.1.0 (#120703)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-27 23:12:20 +02:00
Erik Montnemery
f3761a8e53 Bump hatasmota to 0.9.2 (#120670) 2024-06-27 22:56:22 +02:00
Franck Nijhof
9b5d0f72dc Bump version to 2024.7.0b3 2024-06-27 22:20:25 +02:00
Steven B
23056f839b Update tplink unlink identifiers to deal with ids from other domains (#120596) 2024-06-27 22:20:02 +02:00
Joost Lekkerkerker
0b8dd738f1 Bump ttls to 1.8.3 (#120700) 2024-06-27 22:19:25 +02:00
Glenn Waters
411633d3b3 Bump Environment Canada to 0.7.1 (#120699) 2024-06-27 22:19:22 +02:00
Thomas55555
f3ab3bd5cb Bump aioautomower to 2024.6.3 (#120697) 2024-06-27 22:19:19 +02:00
Bram Kragten
476b9909ac Update frontend to 20240627.0 (#120693) 2024-06-27 22:19:16 +02:00
Glenn Waters
e756328d52 Bump upb-lib to 0.5.7 (#120689) 2024-06-27 22:19:13 +02:00
J. Nick Koston
b9c9921847 Add newer models to unifi integrations discovery (#120688) 2024-06-27 22:19:10 +02:00
MatthewFlamm
09dbd8e7eb Use more observations in NWS (#120687)
Use more observations
2024-06-27 22:19:07 +02:00
Glenn Waters
07dd832c58 Bump Environment Canada to 0.7.0 (#120686) 2024-06-27 22:19:04 +02:00
J. Nick Koston
f9c5661c66 Bump unifi-discovery to 1.2.0 (#120684) 2024-06-27 22:19:01 +02:00
J. Nick Koston
94f8f8281f Bump uiprotect to 4.2.0 (#120669) 2024-06-27 22:18:58 +02:00
Erik Montnemery
f6aa25c717 Fix docstring for EventStateEventData (#120662) 2024-06-27 22:18:55 +02:00
Jesse Hills
f9ca85735d [esphome] Add more tests to bring integration to 100% coverage (#120661) 2024-06-27 22:18:52 +02:00
Joost Lekkerkerker
be086c581c Fix Airgradient ABC days name (#120659) 2024-06-27 22:18:49 +02:00
Joost Lekkerkerker
03d198dd64 Fix unknown attribute in MPD (#120657) 2024-06-27 22:18:47 +02:00
Joost Lekkerkerker
a8d6866f9f Disable polling for Knocki (#120656) 2024-06-27 22:18:44 +02:00
Brett Adams
0e1dc9878f Fix values at startup for Tessie (#120652) 2024-06-27 22:18:41 +02:00
Erik Montnemery
6849597764 Bump hatasmota to 0.9.1 (#120649) 2024-06-27 22:18:38 +02:00
Josef Zweck
3022d3bfa0 Move Auto On/off switches to Config EntityCategory (#120648) 2024-06-27 22:18:35 +02:00
Erik Montnemery
4836d6620b Add snapshots to tasmota sensor test (#120647) 2024-06-27 22:18:32 +02:00
Erik Montnemery
b290e95350 Improve typing of state event helpers (#120639) 2024-06-27 22:18:29 +02:00
Josef Zweck
89ac3ce832 Fix the version that raises the issue (#120638) 2024-06-27 22:18:26 +02:00
Erik Montnemery
1933454b76 Rename async_track_state_reported_event to async_track_state_report_event (#120637)
* Rename async_track_state_reported_event to async_track_state_report_event

* Update tests
2024-06-27 22:18:23 +02:00
J. Nick Koston
38601d48ff Add async_track_state_reported_event to fix integration performance regression (#120622)
split from https://github.com/home-assistant/core/pull/120621
2024-06-27 22:18:20 +02:00
J. Nick Koston
7256f23376 Fix performance regression in integration from state_reported (#120621)
* Fix performance regression in integration from state_reported

Because the callbacks were no longer indexed by entity id, users
saw upwards of 1M calls/min

https://github.com/home-assistant/core/pull/113869/files#r1655580523

* Update homeassistant/helpers/event.py

* coverage

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-06-27 22:18:17 +02:00
J. Nick Koston
7519603bf5 Bump uiprotect to 4.0.0 (#120617) 2024-06-27 22:18:14 +02:00
Luke Lashley
ef47daad9d Bump anova_wifi to 0.14.0 (#120616) 2024-06-27 22:18:11 +02:00
Erik Montnemery
18d283bed6 Don't allow updating a device to have no connections or identifiers (#120603)
* Don't allow updating a device to have no connections or identifiers

* Move check to the top of the function
2024-06-27 22:18:08 +02:00
Steven B
210e906a4d Store tplink credentials_hash outside of device_config (#120597) 2024-06-27 22:17:51 +02:00
J. Nick Koston
dcffd6bd7a Remove unused fields from unifiprotect event sensors (#120568) 2024-06-27 22:14:15 +02:00
Alexey ALERT Rubashёff
2c2261254b Improve AtlanticDomesticHotWaterProductionMBLComponent support in Overkiz (#114178)
* add overkiz AtlanticDHW support

Adds support of Overkiz water heater entity selection based on device controllable_name
Adds support of Atlantic water heater based on Atlantic Steatite Cube WI-FI VM 150 S4CS 2400W
Adds more Overkiz water heater binary_sensors, numbers, and sensors

* Changed class annotation

* min_temp and max_temp as properties

* reverted binary_sensors, number, sensor to make separate PRs

* Update homeassistant/components/overkiz/water_heater_entities/atlantic_dhw.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* Update homeassistant/components/overkiz/water_heater_entities/atlantic_dhw.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* Update homeassistant/components/overkiz/water_heater_entities/atlantic_dhw.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* Update homeassistant/components/overkiz/water_heater.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* Update homeassistant/components/overkiz/water_heater_entities/atlantic_dhw.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* Update homeassistant/components/overkiz/water_heater_entities/atlantic_dhw.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* review fixes, typos, and pylint

* review fix

* review fix

* ruff

* temperature properties changed to constructor attributes

* logger removed

* constants usage consistency

* redundant mapping removed

* Update homeassistant/components/overkiz/water_heater_entities/atlantic_dhw.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* boost mode method annotation typo

* removed away mode for atlantic dwh

* absence and boost mode attributes now support 'prog' state

* heating status bugfix

* electrical consumption sensor

* warm water remaining volume sensor

* away mode reintroduced

* mypy check

* boost plus state support

* Update homeassistant/components/overkiz/sensor.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* sensors reverted to separate them into their own PR

* check away and boost modes on before switching them off

* atlantic_dhw renamed to atlantic_domestic_hot_water_production

* annotation changed

* AtlanticDomesticHotWaterProductionMBLComponent file renamed, annotation change reverted

---------

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>
2024-06-27 22:14:13 +02:00
Jesse Hills
53e49861a1 Mark esphome integration as platinum (#112565)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-27 22:14:08 +02:00
epenet
bccd5c8c35 Improve type hints in evil_genius_labs tests (#120677) 2024-06-27 22:11:24 +02:00
J. Nick Koston
440928bcbe Bump unifi-discovery to 1.2.0 (#120684) 2024-06-27 22:10:48 +02:00
Glenn Waters
338687522a Bump Environment Canada to 0.7.1 (#120699) 2024-06-27 22:10:11 +02:00
Joost Lekkerkerker
6421612429 Bump ttls to 1.8.3 (#120700) 2024-06-27 22:09:33 +02:00
Bram Kragten
c4ab0dcd74 Update frontend to 20240627.0 (#120693) 2024-06-27 22:06:30 +02:00
Alexey ALERT Rubashёff
195643d916 Improve AtlanticDomesticHotWaterProductionMBLComponent support in Overkiz (#114178)
* add overkiz AtlanticDHW support

Adds support of Overkiz water heater entity selection based on device controllable_name
Adds support of Atlantic water heater based on Atlantic Steatite Cube WI-FI VM 150 S4CS 2400W
Adds more Overkiz water heater binary_sensors, numbers, and sensors

* Changed class annotation

* min_temp and max_temp as properties

* reverted binary_sensors, number, sensor to make separate PRs

* Update homeassistant/components/overkiz/water_heater_entities/atlantic_dhw.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* Update homeassistant/components/overkiz/water_heater_entities/atlantic_dhw.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* Update homeassistant/components/overkiz/water_heater_entities/atlantic_dhw.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* Update homeassistant/components/overkiz/water_heater.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* Update homeassistant/components/overkiz/water_heater_entities/atlantic_dhw.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* Update homeassistant/components/overkiz/water_heater_entities/atlantic_dhw.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* review fixes, typos, and pylint

* review fix

* review fix

* ruff

* temperature properties changed to constructor attributes

* logger removed

* constants usage consistency

* redundant mapping removed

* Update homeassistant/components/overkiz/water_heater_entities/atlantic_dhw.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* boost mode method annotation typo

* removed away mode for atlantic dwh

* absence and boost mode attributes now support 'prog' state

* heating status bugfix

* electrical consumption sensor

* warm water remaining volume sensor

* away mode reintroduced

* mypy check

* boost plus state support

* Update homeassistant/components/overkiz/sensor.py

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>

* sensors reverted to separate them into their own PR

* check away and boost modes on before switching them off

* atlantic_dhw renamed to atlantic_domestic_hot_water_production

* annotation changed

* AtlanticDomesticHotWaterProductionMBLComponent file renamed, annotation change reverted

---------

Co-authored-by: Mick Vleeshouwer <mick@imick.nl>
2024-06-27 22:05:58 +02:00
Thomas55555
aaef31958b Bump aioautomower to 2024.6.3 (#120697) 2024-06-27 21:29:17 +02:00
epenet
629dab238f Improve type hints in enphase_envoy tests (#120676) 2024-06-27 13:24:22 -05:00
J. Nick Koston
c419d226d5 Bump uiprotect to 4.2.0 (#120669) 2024-06-27 12:58:42 -05:00
epenet
f4b76406f2 Add capsys to enforce-type-hints plugin (#120653) 2024-06-27 19:54:44 +02:00
MatthewFlamm
eb2d2ce1b3 Use more observations in NWS (#120687)
Use more observations
2024-06-27 13:47:25 -04:00
Glenn Waters
89dfca962f Bump upb-lib to 0.5.7 (#120689) 2024-06-27 19:41:36 +02:00
Joost Lekkerkerker
d423dae8ac Fix unknown attribute in MPD (#120657) 2024-06-27 19:41:21 +02:00
Jan Bouwhuis
f3c76cd698 Split mqtt client tests (#120636) 2024-06-27 19:37:43 +02:00
J. Nick Koston
0c910bc000 Add newer models to unifi integrations discovery (#120688) 2024-06-27 19:20:37 +02:00
Glenn Waters
b9e01b9253 Bump Environment Canada to 0.7.0 (#120686) 2024-06-27 12:08:18 -05:00
epenet
e446875c7e Improve type hints in esphome tests (#120674) 2024-06-27 09:33:14 -05:00
Erik Montnemery
3895252965 Fix docstring for EventStateEventData (#120662) 2024-06-27 08:00:14 -05:00
Steven B
9758b08036 Update tplink unlink identifiers to deal with ids from other domains (#120596) 2024-06-27 07:54:34 -05:00
Steven B
970dd99226 Store tplink credentials_hash outside of device_config (#120597) 2024-06-27 07:34:12 -05:00
epenet
0d53ce4fb8 Improve type hints in emulated_hue tests (#120664) 2024-06-27 14:27:35 +02:00
Erik Montnemery
8de771de96 Rename async_track_state_reported_event to async_track_state_report_event (#120637)
* Rename async_track_state_reported_event to async_track_state_report_event

* Update tests
2024-06-27 13:45:15 +02:00
Jesse Hills
1f54180807 Mark esphome integration as platinum (#112565)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-27 06:26:38 -05:00
Josef Zweck
9f6783dcf5 Add release url to lamarzocco update (#120645) 2024-06-27 13:21:36 +02:00
Brett Adams
cb92510571 Fix values at startup for Tessie (#120652) 2024-06-27 13:17:15 +02:00
Jesse Hills
a93855ded3 [esphome] Add more tests to bring integration to 100% coverage (#120661) 2024-06-27 06:08:40 -05:00
Erik Montnemery
a165064e9d Improve typing of state event helpers (#120639) 2024-06-27 06:08:19 -05:00
Erik Montnemery
54a5a3e3fb Bump hatasmota to 0.9.1 (#120649) 2024-06-27 12:55:49 +02:00
Joost Lekkerkerker
9aa2cc11e9 Fix Airgradient ABC days name (#120659) 2024-06-27 12:47:58 +02:00
Joost Lekkerkerker
4f7c6bdce8 Disable polling for Knocki (#120656) 2024-06-27 12:29:32 +02:00
Dave T
022f545342 Remove unnecessary .coveragerc entries (#120620) 2024-06-27 11:21:34 +02:00
Erik Montnemery
06f495dd45 Add snapshots to tasmota sensor test (#120647) 2024-06-27 10:43:28 +02:00
Josef Zweck
85629dc31e Move Auto On/off switches to Config EntityCategory (#120648) 2024-06-27 10:34:01 +02:00
Joakim Sørensen
5634741ce2 Bump awesomeversion from 24.2.0 to 24.6.0 (#120642) 2024-06-27 10:27:20 +02:00
Erik Montnemery
3e9b57cc07 Don't allow updating a device to have no connections or identifiers (#120603)
* Don't allow updating a device to have no connections or identifiers

* Move check to the top of the function
2024-06-27 09:26:31 +02:00
Josef Zweck
c9c573dbce Fix the version that raises the issue (#120638) 2024-06-27 09:21:41 +02:00
J. Nick Koston
5503379a3b Fix performance regression in integration from state_reported (#120621)
* Fix performance regression in integration from state_reported

Because the callbacks were no longer indexed by entity id, users
saw upwards of 1M calls/min

https://github.com/home-assistant/core/pull/113869/files#r1655580523

* Update homeassistant/helpers/event.py

* coverage

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-06-27 08:50:41 +02:00
dougiteixeira
617ab48fa9 Address device helper review comments (#120615)
* Address review comments from #119761

* Address review comments from #119761

* Address review comments from #119761

* Remove reference from config entry
2024-06-27 08:50:20 +02:00
epenet
28e72753ad Prevent importing PLATFORM_SCHEMA/_BASE from config validation (#120571) 2024-06-27 06:31:22 +02:00
J. Nick Koston
a5a631148e Add async_track_state_reported_event to fix integration performance regression (#120622)
split from https://github.com/home-assistant/core/pull/120621
2024-06-26 23:04:27 -04:00
J. Nick Koston
f189d87fe9 Bump uiprotect to 4.0.0 (#120617) 2024-06-26 20:37:28 -05:00
J. Nick Koston
5e1c8b0c54 Remove unused fields from unifiprotect event sensors (#120568) 2024-06-26 20:37:08 -05:00
Luke Lashley
2449e2029e Bump anova_wifi to 0.14.0 (#120616) 2024-06-27 01:14:18 +02:00
Jan Bouwhuis
32e64f7911 Cleanup mqtt platform tests part 4 (init) (#120574) 2024-06-26 16:57:41 -05:00
Franck Nijhof
3da8d0a741 Bump version to 2024.7.0b2 2024-06-26 23:55:20 +02:00
Paul Bottein
0701b0daa9 Update frontend to 20240626.2 (#120614) 2024-06-26 23:55:11 +02:00
Luca Angemi
bea6fe30b8 Fix telegram bot thread_id key error (#120613) 2024-06-26 23:55:08 +02:00
Paul Bottein
b7a65d9a82 Update frontend to 20240626.2 (#120614) 2024-06-26 23:54:07 +02:00
Marc Mueller
9d7078e1fa Install libturbojpeg in hassfest job [ci] (#120611) 2024-06-26 23:52:31 +02:00
Luca Angemi
1973c604b6 Fix telegram bot thread_id key error (#120613) 2024-06-26 23:45:47 +02:00
Franck Nijhof
7d5d81b229 Bump version to 2024.7.0b1 2024-06-26 22:51:27 +02:00
Franck Nijhof
242b3fa609 Update adguardhome to 0.7.0 (#120605) 2024-06-26 22:48:39 +02:00
Marc Mueller
74204e2ee6 Fix mqtt test fixture usage (#120602) 2024-06-26 22:47:52 +02:00
Jan Bouwhuis
da01635a07 Prevent changes to mutable bmw_connected_drive fixture data (#120600) 2024-06-26 22:47:32 +02:00
Shay Levy
b5c34808e6 Add last_error reporting to Shelly diagnostics (#120595) 2024-06-26 22:47:09 +02:00
Erik Montnemery
80e70993c8 Remove deprecated run_immediately flag from integration sensor (#120593) 2024-06-26 22:46:50 +02:00
Max
2e01e169ef Correct deprecation warning async_register_static_paths (#120592) 2024-06-26 22:46:30 +02:00
Markus Jacobsen
b35442ed2d Improve Bang & Olufsen error messages (#120587)
* Convert logger messages to raised errors where applicable

* Modify exception types

* Improve deezer / tidal error message

* Update homeassistant/components/bang_olufsen/strings.json

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

* Update homeassistant/components/bang_olufsen/media_player.py

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

---------

Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com>
2024-06-26 22:46:27 +02:00
Michael Hansen
1b45069620 Bump intents to 2024.6.26 (#120584)
Bump intents
2024-06-26 22:46:23 +02:00
Shay Levy
d3d0e05817 Change Shelly connect task log message level to error (#120582) 2024-06-26 22:46:20 +02:00
TheJulianJES
3d164c6721 Bump ZHA dependencies (#120581) 2024-06-26 22:46:17 +02:00
Florian
6dd1e09354 Don't allow switch toggle when device in locked in AVM FRITZ!SmartHome (#120132)
* fix: set state of the FritzBox-Switch to disabled if the option for manuel switching in the userinterface is disabled

* feat: raise an error instead of disabling switch

* feat: rename method signature

* fix: tests

* fix: wrong import

* feat: Update homeassistant/components/fritzbox/strings.json

Update error message

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

* Update tests/components/fritzbox/test_switch.py

feat: update test

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

* make ruff happy

* fix expected error message check

---------

Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com>
2024-06-26 22:46:13 +02:00
Shay Levy
ba456f2564 Align Shelly sleeping devices timeout with non-sleeping (#118969) 2024-06-26 22:46:06 +02:00
Marc Mueller
6bceb8ec48 Add some more VolDictType annotations (#120610) 2024-06-26 22:44:43 +02:00
Marc Mueller
fcfb580f0c Update pylint to 3.2.4 (#120606) 2024-06-26 22:29:55 +02:00
Franck Nijhof
516b9126b7 Update adguardhome to 0.7.0 (#120605) 2024-06-26 22:05:30 +02:00
Markus Jacobsen
2146a4729b Improve Bang & Olufsen error messages (#120587)
* Convert logger messages to raised errors where applicable

* Modify exception types

* Improve deezer / tidal error message

* Update homeassistant/components/bang_olufsen/strings.json

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

* Update homeassistant/components/bang_olufsen/media_player.py

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

---------

Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com>
2024-06-26 21:46:59 +02:00
Florian
9b2915efed Don't allow switch toggle when device in locked in AVM FRITZ!SmartHome (#120132)
* fix: set state of the FritzBox-Switch to disabled if the option for manuel switching in the userinterface is disabled

* feat: raise an error instead of disabling switch

* feat: rename method signature

* fix: tests

* fix: wrong import

* feat: Update homeassistant/components/fritzbox/strings.json

Update error message

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

* Update tests/components/fritzbox/test_switch.py

feat: update test

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

* make ruff happy

* fix expected error message check

---------

Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com>
2024-06-26 21:45:17 +02:00
Marc Mueller
dd6cc82f70 Fix mqtt test fixture usage (#120602) 2024-06-26 21:30:30 +02:00
Jan Bouwhuis
8839a71adc Prevent changes to mutable bmw_connected_drive fixture data (#120600) 2024-06-26 20:57:27 +02:00
Erik Montnemery
f1a57d69cc Remove deprecated run_immediately flag from integration sensor (#120593) 2024-06-26 20:55:41 +02:00
Max
702d53ca30 Correct deprecation warning async_register_static_paths (#120592) 2024-06-26 20:55:25 +02:00
Shay Levy
4c6cbadc11 Align Shelly sleeping devices timeout with non-sleeping (#118969) 2024-06-26 20:53:02 +02:00
Shay Levy
d8ab2debfd Add last_error reporting to Shelly diagnostics (#120595) 2024-06-26 21:35:23 +03:00
Robert Resch
31e9de3b95 Adapt Roborock to runtime_data (#120578)
* Adopt Roborock to runtime_data

* Fix name
2024-06-26 19:42:15 +02:00
Shay Levy
ed1eb8ac9c Change Shelly connect task log message level to error (#120582) 2024-06-26 18:19:28 +02:00
TheJulianJES
d09a274548 Bump ZHA dependencies (#120581) 2024-06-26 18:15:53 +02:00
Michael Hansen
02b142fbde Bump intents to 2024.6.26 (#120584)
Bump intents
2024-06-26 11:13:01 -05:00
Franck Nijhof
33b4f40b2a Bump version to 2024.8.0dev0 (#120577) 2024-06-26 16:55:08 +02:00
Franck Nijhof
3492171ff8 Bump version to 2024.7.0b0 2024-06-26 16:17:57 +02:00
Gerben Jongerius
f5c640ee5b Add additional tests to youless integration (#118869) 2024-06-26 16:11:21 +02:00
epenet
713abf4c6b Refactor PLATFORM_SCHEMA imports in tests (#120566) 2024-06-26 16:09:20 +02:00
Bouwe Westerdijk
32c07180f6 Delete removed device(s) at runtime in Plugwise (#120296) 2024-06-26 16:08:32 +02:00
Mr. Bubbles
55101fcc45 Add platinum scale to pyLoad integration (#120542)
Add platinum scale
2024-06-26 16:06:55 +02:00
G Johansson
3d5d4f8ddb Add config flow to statistics (#120496) 2024-06-26 16:06:35 +02:00
treetip
30a3e9af2b Add profile duration sensor for Vallox integration (#120240) 2024-06-26 15:54:13 +02:00
Erik Montnemery
862cd76f89 Add explanatory comment in tests/patch_time.py (#120572) 2024-06-26 15:49:34 +02:00
epenet
f65d91f6d2 Refactor PLATFORM_SCHEMA imports in platforms (#120564) 2024-06-26 15:44:59 +02:00
epenet
f4fa5b581e Import PLATFORM_SCHEMA from platform not from helpers (#120565) 2024-06-26 15:43:48 +02:00
Mr. Bubbles
294e1d4fc4 Fix class name and deprecation version (#120570) 2024-06-26 15:42:03 +02:00
Joost Lekkerkerker
66a803e56c Disable Aladdin Connect (#120558)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-26 15:41:20 +02:00
Luke Lashley
d0f82d6f02 Add support for Dyad vacuums to Roborock (#115331) 2024-06-26 15:40:19 +02:00
Bouwe Westerdijk
4defc4a58f Implement a reboot-button for Plugwise (#120554)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-06-26 15:28:50 +02:00
Mr. Bubbles
af9b4b98ca Add value_fn to switch entity description in pyLoad (#120569) 2024-06-26 15:09:42 +02:00
Mr. Bubbles
43d686e0f1 Redact the hostname in pyLoad diagnostics (#120567) 2024-06-26 14:59:14 +02:00
Mr. Bubbles
7eb9875a9e Add Base class for entities in PyLoad integration (#120563)
* Add Base class for entities

* Remove constructors
2024-06-26 14:45:04 +02:00
Teemu R
fc2968bc1b Adjust tplink codeowners (#120561) 2024-06-26 14:35:22 +02:00
Luke Lashley
b9be491016 Add options flow to Roborock (#104345)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-26 14:32:26 +02:00
Brett Adams
ec16fc235b Add new coordinators to Tessie (#118452)
* WIP

* wip

* Add energy classes

* Add basis for Testing

* Bump Library

* fix case

* bump library

* bump library again

* bump library for teslemetry

* reorder

* Fix super

* Update strings.json

* Tests

* Small tweaks

* Bump

* Bump teslemetry

* Remove version

* Add WC states

* Bump to match dev

* Review feedback

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

* Review feedback

* Review feedback 1

* Review feedback 2

* TessieWallConnectorStates Enum

* fixes

* Fix translations and value

* Update homeassistant/components/tessie/strings.json

* Update homeassistant/components/tessie/strings.json

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-26 14:23:06 +02:00
epenet
fd67fe417e Use ruff to force alias when importing PLATFORM_SCHEMA (#120539) 2024-06-26 14:22:52 +02:00
Joost Lekkerkerker
e39d26bdc0 Add switch platform to Airgradient (#120559) 2024-06-26 14:21:30 +02:00
Michael Hansen
d515a7f063 Add created_seconds to timer info and pass to ESPHome devices (#120364) 2024-06-26 14:20:11 +02:00
Mr. Bubbles
f5ff19d602 Add measurement unit and state_class to sensors in pyLoad (#120551) 2024-06-26 14:14:48 +02:00
Luke Lashley
69e0227682 Add Roborock to strict typing (#120379) 2024-06-26 14:13:49 +02:00
Joost Lekkerkerker
0d2aeb846f Increase max temperature to 40 for Tado (#120560) 2024-06-26 14:05:24 +02:00
Mr. Bubbles
1d0aa6bff0 Update docstrings in pyLoad tests (#120556) 2024-06-26 13:40:20 +02:00
Bouwe Westerdijk
b07453dca4 Implement remaining select-adaptions for Plugwise (#120544) 2024-06-26 13:37:08 +02:00
Mr. Bubbles
972b85a75b Fix class and variable naming errors in pyLoad integration (#120547) 2024-06-26 13:36:25 +02:00
Mr. Bubbles
13a9efb6a6 Convert dataclass to dict in pyLoad diagnostics (#120552) 2024-06-26 13:36:01 +02:00
Erik Montnemery
a36c40a434 Use state_reported events in Riemann sum sensor (#113869) 2024-06-26 13:35:01 +02:00
Bram Kragten
f0590f08b1 Update frontend to 20240626.0 (#120546) 2024-06-26 13:26:53 +02:00
Robert Resch
e8a3e3c8db Fix airgradient select entities (#120549) 2024-06-26 13:19:34 +02:00
Mr. Bubbles
34e266762e Remove unnecessary icon states in pyLoad integration (#120548)
Remove unnecessary icon states
2024-06-26 13:09:50 +02:00
Joost Lekkerkerker
7ef1db0549 Fix release in MPD issue (#120545) 2024-06-26 12:52:31 +02:00
epenet
be7a2c2cc2 Revert "Force alias when importing scene PLATFORM_SCHEMA" (#120540)
Revert "Force alias when importing scene PLATFORM_SCHEMA (#120534)"

This reverts commit 348ceca19f.
2024-06-26 12:40:41 +02:00
Richard Kroegel
d5bcfe9822 Improve BMW tests (#119171)
Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-06-26 12:27:55 +02:00
Erik Montnemery
9bbeb5d608 Add primary_config_entry attribute to device registry entries (#119959)
Co-authored-by: Franck Nijhof <git@frenck.dev>
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-26 12:26:24 +02:00
Erik Montnemery
f55ddfecf4 Correct type annotations in integration sensor tests (#120541) 2024-06-26 12:25:02 +02:00
epenet
36d8ffa79a Force alias when importing media player PLATFORM_SCHEMA (#120537) 2024-06-26 12:19:04 +02:00
Joost Lekkerkerker
fac8349c37 Add learning offset select to Airgradient (#120532) 2024-06-26 12:18:33 +02:00
Bouwe Westerdijk
d00fe1ce7f Import DOMAIN constants for Plugwise and implement (#120530) 2024-06-26 12:17:17 +02:00
epenet
c49fce5541 Force alias when importing sensor PLATFORM_SCHEMA (#120536) 2024-06-26 12:14:13 +02:00
epenet
348ceca19f Force alias when importing scene PLATFORM_SCHEMA (#120534) 2024-06-26 12:11:22 +02:00
epenet
32bab97f00 Force alias when importing light PLATFORM_SCHEMA (#120529) 2024-06-26 11:53:15 +02:00
epenet
912136be25 Force alias when importing lock PLATFORM_SCHEMA (#120531) 2024-06-26 11:52:57 +02:00
Brett Adams
d4dc7d76d9 Refactor Tessie for future PR (#120406)
* Bump tessie-api

* Refactor

* revert bump

* Fix cover

* Apply suggestions from code review

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

---------

Co-authored-by: G Johansson <goran.johansson@shiftit.se>
2024-06-26 11:46:30 +02:00
epenet
a8bf671663 Force alias when importing remote PLATFORM_SCHEMA (#120533) 2024-06-26 11:45:57 +02:00
Mr. Bubbles
42d235ce4d Add diagnostics platform to pyLoad integration (#120535) 2024-06-26 11:44:58 +02:00
Stefan Agner
44aad2b821 Improve Matter Server version incompatibility handling (#120416)
* Improve Matter Server version incompatibility handling

Improve the handling of Matter Server version. Noteably fix the issues
raised (add strings for the issue) and split the version check into
two cases: One if the server is too old and one if the server is too
new.

* Bump Python Matter Server library to 6.2.0b1

* Address review feedback
2024-06-26 11:43:51 +02:00
epenet
7b7b97a7a4 Force alias when importing event and fan PLATFORM_SCHEMA (#120524) 2024-06-26 11:35:39 +02:00
hahn-th
ae73500beb Add HmIP-ESI (#116863) 2024-06-26 11:33:44 +02:00
Marc Mueller
d527113d59 Improve schema typing (3) (#120521) 2024-06-26 11:30:07 +02:00
epenet
afbd24adfe Force alias when importing image processing PLATFORM_SCHEMA (#120527) 2024-06-26 11:29:52 +02:00
epenet
2c17d84fab Force alias when importing cover PLATFORM_SCHEMA (#120522) 2024-06-26 11:25:14 +02:00
epenet
17946c4b45 Force alias when importing geo location PLATFORM_SCHEMA (#120525) 2024-06-26 11:24:45 +02:00
epenet
59ae297ccd Force alias when importing humidifier PLATFORM_SCHEMA (#120526) 2024-06-26 11:24:21 +02:00
Erik Montnemery
d589eaf440 Simplify EVENT_STATE_REPORTED (#120508) 2024-06-26 11:23:26 +02:00
epenet
2c48843739 Force alias when importing device tracker PLATFORM_SCHEMA (#120523) 2024-06-26 11:13:27 +02:00
Bouwe Westerdijk
41026b9227 Implement @plugwise_command for Plugwise Select platform (#120509) 2024-06-26 11:04:00 +02:00
epenet
0c0f666a28 Force alias when importing camera PLATFORM_SCHEMA (#120514) 2024-06-26 11:03:13 +02:00
Mr. Bubbles
45dedf73c8 Add exception translations for pyLoad integration (#120520) 2024-06-26 11:00:31 +02:00
epenet
e06d7050f2 Force alias when importing climate PLATFORM_SCHEMA (#120518) 2024-06-26 10:55:09 +02:00
epenet
399130bc95 Force alias when importing binary sensor PLATFORM_SCHEMA (#120510) 2024-06-26 10:54:19 +02:00
Mr. Bubbles
8e598ec3ff Rename sensor to finished downloads in pyLoad integration (#120483) 2024-06-26 10:50:32 +02:00
epenet
c96dc00a3a Force alias when importing alarm control panel PLATFORM_SCHEMA (#120505) 2024-06-26 10:41:46 +02:00
epenet
6c81885cae Force alias when importing calendar PLATFORM_SCHEMA (#120512) 2024-06-26 10:40:17 +02:00
epenet
9b8922a678 Force alias when importing switch PLATFORM_SCHEMA (#120504) 2024-06-26 10:36:54 +02:00
Artur Pragacz
a4ba346dfc Switch onkyo to pyeiscp, making it local_push (#120026)
* Switch onkyo to pyeiscp, making it local_push

Major rewrite of the integration to use pyeiscp.
This facilitates use of the async push updates.
Streamline the code dealing with zones.
Handle sound mode.
Add myself to codeowners.

* Add types

* Add more types

* Address feedback

* Remove sound mode support for now

* Fix zone detection

* Keep legacy unique_id
2024-06-26 10:28:06 +02:00
Bouwe Westerdijk
0a48cc29b6 Implement @plugwise_command for Plugwise Number platform (#120503) 2024-06-26 10:24:29 +02:00
epenet
7b298f177c Force alias when importing tts PLATFORM_SCHEMA (#120500) 2024-06-26 10:23:37 +02:00
Mr. Bubbles
d76a82e340 Add switch platform to pyload integration (#120352) 2024-06-26 10:21:54 +02:00
epenet
caa57c56f6 Force alias when importing air_quality PLATFORM_SCHEMA (#120502) 2024-06-26 10:03:29 +02:00
epenet
4bfecea2f4 Force alias when importing notify PLATFORM_SCHEMA (#120494) 2024-06-26 10:02:24 +02:00
Joost Lekkerkerker
59959141af Remove Knocki triggers on runtime (#120452)
* Bump Knocki to 0.2.0

* Remove triggers on runtime in Knocki

* Fix
2024-06-26 09:52:05 +02:00
Mr. Bubbles
82b8b73b8a Add reconfiguration flow to pyLoad integration (#120485) 2024-06-26 09:46:50 +02:00
Erik Montnemery
4a86693254 Verify default timezone is restored when test ends (#116216) 2024-06-26 09:41:16 +02:00
G Johansson
c085057847 Add timezone testing in holiday (#120497) 2024-06-26 09:40:29 +02:00
starkillerOG
1b88448914 Do not wait for Reolink firmware check (#120377) 2024-06-26 09:34:45 +02:00
Jan Bouwhuis
c5b7d2d868 Cleanup mqtt platform tests part 3 (#120493) 2024-06-26 09:29:40 +02:00
Joost Lekkerkerker
5a0841155e Add unique_id to MPD (#120495) 2024-06-26 09:28:11 +02:00
Thomas Kistler
bff9d12cc0 Add active watering time sensor to Hydrawise (#120177) 2024-06-26 09:24:48 +02:00
J. Nick Koston
30e0bcb324 Bump dbus-fast to 2.22.1 (#120491) 2024-06-26 09:20:43 +02:00
Jan Bouwhuis
e567f8f3d5 Fix issue where an MQTT device is removed linked to two config entries (#120430)
* Fix issue where an MQTT device is removed linked to two config entries

* Update homeassistant/components/mqtt/discovery.py

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

* Update homeassistant/components/mqtt/debug_info.py

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

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-26 09:14:33 +02:00
Michael Hansen
d3ceaef098 Allow timer management from any device (#120440) 2024-06-26 09:06:56 +02:00
Abílio Costa
8ce53d28e7 Handle availability in Idasen Desk height sensor (#120277) 2024-06-26 09:02:49 +02:00
Robert Resch
9f4bf6f11a Create repair when HA auth provider is running in legacy mode (#119975) 2024-06-26 09:00:33 +02:00
Erik Montnemery
005c71a4a5 Deduplicate alarm_control_panel services.yaml (#118796) 2024-06-26 08:55:28 +02:00
Jan Bouwhuis
fab901f9b6 Cleanup mqtt platform tests part 2 (#120490) 2024-06-26 08:53:28 +02:00
J. Nick Koston
cef1d35e31 Make fetching integrations with requirements safer (#120481) 2024-06-26 08:51:57 +02:00
Grubalex
b7e7905b54 Add Philips WiZ Lightbulbs to Matter TRANSITION_BLOCKLIST (#120461) 2024-06-26 08:51:55 +02:00
Mr. Bubbles
f23020919f Remove unused translation strings in pyLoad integration (#120476) 2024-06-26 08:51:12 +02:00
Mr. Bubbles
cc6aac5e75 Add missing textselectors in USER_DATA_SCHEMA in pyLoad integration (#120479) 2024-06-26 08:50:45 +02:00
G Johansson
0f7229f55f Fix holiday using utc instead of local time (#120432) 2024-06-26 08:45:53 +02:00
Mr. Bubbles
ba40340f82 Align deviceinfo entries in pyLoad integration (#120478) 2024-06-26 08:45:22 +02:00
J. Nick Koston
07b70cba10 Fix dropped unifiprotect motion events (#120489) 2024-06-26 08:32:43 +02:00
Marc Mueller
6fb32db151 Improve config vol.Invalid typing (#120482) 2024-06-26 03:03:54 +02:00
Marc Mueller
49df0c4366 Improve schema typing (2) (#120475) 2024-06-26 02:25:30 +02:00
EnjoyingM
2380696fcd Bump wolf-comm to 0.0.9 (#120473) 2024-06-26 02:22:09 +02:00
Marc Mueller
3937cc2963 Improve SERVICE_TO_METHOD typing (#120474) 2024-06-26 02:20:48 +02:00
Marc Mueller
0bc597f8c7 Improve vol.Invalid handling (#120480) 2024-06-26 02:13:09 +02:00
J. Nick Koston
ec2f98d075 Bump uiprotect to 3.7.0 (#120471) 2024-06-26 02:12:04 +02:00
Thomas Kistler
9718a9571e Add @thomaskistler as an owner of hydrawise (#120477) 2024-06-26 02:11:52 +02:00
Tom Harris
3cc3eb21b4 Bump pyinsteon to 1.6.3 to fix Insteon device status (#120464) 2024-06-26 00:04:09 +02:00
Luke Lashley
60519702b4 Bump python-roborock to 2.5.0 (#120466) 2024-06-26 00:03:01 +02:00
Jan Bouwhuis
038f2ce79f Cleanup mqtt platform tests part 1 (#120470) 2024-06-26 00:01:57 +02:00
Stefan Agner
5983344746 Handle http connection errors to Prusa printers (#120456) 2024-06-25 22:34:56 +02:00
Joost Lekkerkerker
1f0e47b251 Migrate Airgradient select entities to be config source dependent (#120462)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-25 22:27:52 +02:00
Teemu R
4290a1fcb5 Upgrade tplink with new platforms, features and device support (#120060)
Co-authored-by: Teemu Rytilahti <tpr@iki.fi>
Co-authored-by: sdb9696 <steven.beth@gmail.com>
Co-authored-by: Steven B <51370195+sdb9696@users.noreply.github.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: Teemu R. <tpr@iki.fi>
2024-06-25 22:01:21 +02:00
Joost Lekkerkerker
9bc4361855 Bump Knocki to 0.2.0 (#120447) 2024-06-25 20:17:51 +02:00
Marc Mueller
f4b124f5f1 Fix invalid schemas (#120450) 2024-06-25 20:17:38 +02:00
Erik Montnemery
7d2ae5b3a5 Add WS command blueprint/substitute (#119890) 2024-06-25 20:15:11 +02:00
Marc Mueller
9dc26652ee Fix gtfs typing (#120451) 2024-06-25 20:08:04 +02:00
Erik Montnemery
75c7ae7c69 Support in service descriptions for input sections (#116100) 2024-06-25 20:00:48 +02:00
J. Nick Koston
c4b277b6ab Small cleanups to ESPHome manager reconnect shutdown (#120401) 2024-06-25 19:40:04 +02:00
Erik Montnemery
d4e93dd01d Validate new device identifiers and connections (#120413) 2024-06-25 19:17:54 +02:00
Marc Mueller
3559755aed Add import aliases for PLATFORM_SCHEMA (#120445) 2024-06-25 19:16:19 +02:00
Jan Bouwhuis
cbcf29720d Cleanup common mqtt tests (#120446) 2024-06-25 19:15:11 +02:00
Marc Mueller
185e79fa1b Improve intent schema typing (#120442) 2024-06-25 19:02:04 +02:00
Marc Mueller
b393024acd Improve collection schema typing (#120441) 2024-06-25 18:57:15 +02:00
Marc Mueller
197062139e Fix schema typing (1) (#120443) 2024-06-25 18:54:06 +02:00
Marc Mueller
f017134199 Fix missing vol.Optional keyword (#120444) 2024-06-25 18:53:06 +02:00
J. Nick Koston
e0b9855160 Bump uiprotect to 3.4.0 (#120433) 2024-06-25 18:22:56 +02:00
epenet
09e8f7e9bb Improve type hints in deconz tests (#120388) 2024-06-25 17:44:03 +02:00
Denis Shulyaka
2386ed3830 Add script llm tool (#118936)
* Add script llm tool

* Add tests

* More tests

* more test

* more test

* Add area and floor resolving

* coverage

* coverage

* fix ColorTempSelector

* fix mypy

* fix mypy

* add script reload test

* Cache script tool parameters

* Make custom_serializer a part of api

---------

Co-authored-by: Michael Hansen <mike@rhasspy.org>
2024-06-25 10:43:26 -05:00
Mr. Bubbles
77fea8a73e Add reauth flow to pyLoad integration (#120376)
Add reauth flow
2024-06-25 17:15:12 +02:00
Kevin Stillhammer
253514a124 Bump pywaze to 1.0.2 (#120412) 2024-06-25 17:08:36 +02:00
epenet
6a370bde34 Adjust imports in samsungtv tests (#120409) 2024-06-25 17:08:10 +02:00
epenet
6e5bc0da94 Improve type hints in cloud tests (#120420) 2024-06-25 17:07:50 +02:00
J. Nick Koston
4feca36ca6 Refactor esphome platform setup to reduce boilerplate (#120415) 2024-06-25 17:03:04 +02:00
J. Nick Koston
49e6316c42 Bump yalexs-ble to 2.4.3 (#120428) 2024-06-25 17:00:26 +02:00
J. Nick Koston
edaa5c60a7 Small cleanups to ESPHome (#120414) 2024-06-25 17:00:03 +02:00
Aaron Godfrey
f934fea754 Apply all todoist custom project filters for calendar events (#117454)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-25 15:34:54 +02:00
Marc Mueller
bcd1243686 Use VolDictType to improve schema typing (#120417) 2024-06-25 15:15:59 +02:00
Jan Bouwhuis
aa05f73210 Add fixture to synchronize with debouncer in MQTT tests (#120373)
* Add fixture to synchronze with debouncer in MQTT tests

* Migrate more tests to use the debouncer

* Migrate more tests

* Migrate util tests

* Improve mqtt on_callback test using new fixture

* Improve test_subscribe_error

* Migrate other tests

* Import EnsureJobAfterCooldown from `util.py` but patch `client.py`
2024-06-25 14:26:20 +02:00
Marc Mueller
b816fce976 Improve websocket_api schema typing (#120411) 2024-06-25 14:08:30 +02:00
J. Nick Koston
b5afc5a7f0 Fix incorrect mocking in ESPHome tests (#120410) 2024-06-25 13:31:50 +02:00
J. Nick Koston
c15718519b Improve test coverage for ESPHome manager (#120400) 2024-06-25 13:14:11 +02:00
epenet
76e890865e Adjust imports in cloud tests (#120386) 2024-06-25 13:13:14 +02:00
epenet
cbb3d48bd9 Improve type hints in dsmr tests (#120393) 2024-06-25 13:11:27 +02:00
J. Nick Koston
fccb7ea1f9 Migrate ESPHome to use entry.runtime_data (#120402) 2024-06-25 13:10:09 +02:00
Marc Mueller
7453b7df63 Improve mqtt schema typing (#120407) 2024-06-25 13:03:18 +02:00
Marc Mueller
62fd692d27 Improve async_register_admin_service schema typing (#120405) 2024-06-25 12:48:00 +02:00
Brett Adams
de8bccb650 Add services to Teslemetry (#119119)
* Add custom services

* Fixes

* wip

* Test coverage

* Update homeassistant/components/teslemetry/__init__.py

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

* Add error translations

* Translate command error

* Fix test

* Expand on comment as requested

* Remove impossible cases

---------

Co-authored-by: G Johansson <goran.johansson@shiftit.se>
2024-06-25 12:44:06 +02:00
Marc Mueller
3a5acd6a57 Use VolDictType for service schemas (#120403) 2024-06-25 12:33:41 +02:00
Marc Mueller
b4eee166aa Add voluptuous type aliases (#120399) 2024-06-25 11:58:27 +02:00
Marc Mueller
53f5dec1b4 Install libturbojpeg [ci] (#120397) 2024-06-25 11:26:45 +02:00
treetip
d3e76b1f39 Update vallox_websocket_api to 5.3.0 (#120395) 2024-06-25 11:24:57 +02:00
Erik Montnemery
0545ed8082 Section support for data entry flows (#118369)
* Add expandable support for data entry form flows

* Update config_validation.py

* optional options

* Adjust

* Correct translations of data within sections

* Update homeassistant/components/kitchen_sink/config_flow.py

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

* Add missing import

* Update tests/components/kitchen_sink/test_config_flow.py

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

* Format code

* Match frontend when serializing

* Move section class to data_entry_flow

* Correct serializing

* Fix import in kitchen_sink

* Move and update test

---------

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-25 11:02:00 +02:00
epenet
3d1ff72a88 Improve type hints in device_automation tests (#120389) 2024-06-25 10:58:10 +02:00
starkillerOG
ddd8083302 Fix translation error in Reolink reauth flow (#120385) 2024-06-25 10:37:42 +02:00
Jan Bouwhuis
1d16cbec96 Move mqtt debouncer to mqtt utils (#120392) 2024-06-25 10:33:58 +02:00
epenet
46ed76df31 Improve type hints in diagnostics tests (#120391) 2024-06-25 10:07:05 +02:00
epenet
f8d5c9144a Improve type hints in device_tracker tests (#120390) 2024-06-25 10:06:38 +02:00
epenet
7f20c1a489 Improve type hints in demo tests (#120387) 2024-06-25 09:55:59 +02:00
Erik Montnemery
6fb400f76b Add test of get_all_descriptions resolving features (#120384) 2024-06-25 09:47:43 +02:00
David Bonnes
744161928e Bump evohome-async to 0.4.20 (#120353) 2024-06-25 08:25:04 +02:00
Jan Schneider
ced6c0dd8c Update moehlenhoff-alpha2 to 1.3.1 (#120351)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-25 08:11:26 +02:00
Mr. Bubbles
fd0fee1900 Add button platform to pyLoad integration (#120359) 2024-06-25 08:09:54 +02:00
Luke Lashley
adc074f60a Remove humbertogontijo as Codeowner for Roborock (#120336) 2024-06-25 08:03:20 +02:00
G Johansson
59998bc48a Use runtime_data in github (#120362) 2024-06-25 08:02:57 +02:00
Markus Jacobsen
aa8427abe5 Bump Bang & Olufsen mozart-open-api to 3.4.1.8.6 fixing blocking IO call (#120369)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-25 08:02:02 +02:00
Mr. Bubbles
59080a3a6f Strip whitespace characters from token in One-Time-Passwort (OTP) integration (#120380) 2024-06-25 08:00:19 +02:00
Marc Mueller
f1ddf80dff Fix dlna_dms test RuntimeWarning (#120341) 2024-06-25 03:34:23 +02:00
Michael Hansen
1e16afb43b Fix pylint error in Google generative AI tests (#120371)
* Fix pylint error

* Add second fix
2024-06-24 16:03:34 -05:00
Michael Hansen
6d917f0242 Don't run timer callbacks for delayed commands (#120367)
* Don't send timer events for delayed commands

* Don't run timer callbacks for delayed commands
2024-06-24 16:21:51 -04:00
Markus Jacobsen
d0961ca473 Make Bang & Olufsen products ignore .m3u media source files (#120317) 2024-06-24 21:06:57 +02:00
Joost Lekkerkerker
72d1b3e360 Deprecate Nanoleaf gesture device trigger (#120078) 2024-06-24 21:05:23 +02:00
starkillerOG
bbb8bb31f9 Only raise Reolink re-auth flow when login fails 3 consecutive times (#120291) 2024-06-24 21:03:41 +02:00
epenet
ea09d0cbed Use HassKey in cloud integration (#120322) 2024-06-24 21:02:08 +02:00
epenet
b223cb7bb9 Ensure config_entry is added to hass in tests (#120327) 2024-06-24 21:00:12 +02:00
David Knowles
3b79ab6e18 Reduce the amount of data fetched in individual Hydrawise API calls (#120328) 2024-06-24 20:58:54 +02:00
Michael Hansen
46dcf1dc44 Prioritize custom intents over builtin (#120358) 2024-06-24 20:57:56 +02:00
Robert Resch
6689dbbcc6 Deprecate DTE Energy Bridge (#120350)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-06-24 20:56:35 +02:00
G Johansson
00621ad512 Use runtime data in version (#120363) 2024-06-24 20:53:49 +02:00
Koen van Zuijlen
fb3059e6e6 Bump justnimbus to 0.7.4 (#120355) 2024-06-24 20:47:42 +02:00
Nathan Spencer
6b78e913f2 Bump pybalboa to 1.0.2 (#120360) 2024-06-24 20:45:30 +02:00
Charles Garwood
e2b0c55883 Bump python-fullykiosk to 0.0.14 (#120361) 2024-06-24 20:42:31 +02:00
Jan Bouwhuis
a7200a70b2 Set up mqtt tests from client fixture of mqtt entry setup fixture, not both (#120274)
* Fix entry setup and cleanup issues in mqtt tests

* Reduce changes by using mqtt_client_mock alias

* Reduce sleep time where possibe
2024-06-24 19:42:32 +02:00
Mr. Bubbles
1e5f4c2d75 Add additional sensors to pyLoad integration (#120309) 2024-06-24 18:56:33 +02:00
epenet
31157828e1 Improve type hints in cloudflare tests (#120344) 2024-06-24 18:55:36 +02:00
Marc Mueller
a4e22bcba6 Update tenacity constraint (#120348) 2024-06-24 18:52:49 +02:00
Robert Resch
641507a45a Add change username endpoint (#109057) 2024-06-24 18:51:19 +02:00
J. Nick Koston
1e3ee8419f Bump async-interrupt to 1.1.2 (#120321) 2024-06-24 18:41:42 +02:00
J. Nick Koston
dd379a9a0a Bump aiozoneinfo to 0.2.1 (#120319) 2024-06-24 18:39:38 +02:00
epenet
8bad421a04 Improve type hints in config tests (#120346) 2024-06-24 18:36:57 +02:00
epenet
4089b808c3 Improve type hints in comfoconnect tests (#120345) 2024-06-24 18:33:51 +02:00
Erik Montnemery
d073fd9b37 Improve integration sensor tests (#120326) 2024-06-24 18:33:08 +02:00
J. Nick Koston
0247f91855 Bump bleak to 0.22.2 (#120325) 2024-06-24 18:32:32 +02:00
J. Nick Koston
8e26655915 Bump led-ble to 1.0.2 (#120347) 2024-06-24 17:51:30 +02:00
J. Nick Koston
eab1dc5255 Bump home-assistant-bluetooth to 1.12.2 (#120338) 2024-06-24 17:38:17 +02:00
J. Nick Koston
063a3f3bca Bump discovery30303 to 0.3.2 (#120340) 2024-06-24 17:36:48 +02:00
J. Nick Koston
b7bf61a8c9 Bump habluetooth to 3.1.3 (#120337) 2024-06-24 17:35:33 +02:00
J. Nick Koston
bd6164ad4b Bump bluetooth-data-tools to 1.19.3 (#120323) 2024-06-24 17:10:57 +02:00
Lennard Beers
e2f9ba5455 Bump eq3btsmart to 1.1.9 (#120339) 2024-06-24 17:00:37 +02:00
Marc Mueller
d1de42a299 Replace deprecated attribute in abode (#120343) 2024-06-24 16:44:59 +02:00
epenet
015bc0e172 Use HassKey in homeassistant integration (#120332) 2024-06-24 16:37:07 +02:00
Jan Bouwhuis
85720f9e02 Fix setup and tear down issues for mqtt discovery and config flow tests (#120333)
* Fix setup and tear down issues for mqtt discovery and config flow tests

* Use async callback
2024-06-24 16:20:44 +02:00
J. Nick Koston
2776b28bb7 Bump govee-ble to 0.31.3 (#120335) 2024-06-24 16:20:07 +02:00
Erik Montnemery
0d1b050520 Remove create_create from StorageCollectionWebsocket.async_setup (#119489) 2024-06-24 15:41:08 +02:00
J. Nick Koston
1a27cea6f2 Bump bluetooth-adapters to 0.19.2 (#120324) 2024-06-24 15:25:08 +02:00
Jan Bouwhuis
389b9d1ad6 Make sure ACK's are processed before mqtt tests are teared down (#120329) 2024-06-24 15:16:09 +02:00
J. Nick Koston
57cdd33537 Bump aiosteamist to 1.0.0 (#120318) 2024-06-24 14:56:48 +02:00
J. Nick Koston
e6cb68d199 Bump aiohttp-fast-zlib to 0.1.1 (#120315) 2024-06-24 14:33:16 +02:00
J. Nick Koston
604561aac0 Bump uiprotect to 3.3.1 (#120314) 2024-06-24 14:33:04 +02:00
J. Nick Koston
37c60d800e Bump aionut to 4.3.3 (#120313) 2024-06-24 14:32:52 +02:00
J. Nick Koston
8acb73df2e Bump aiooui to 0.1.6 (#120312) 2024-06-24 14:32:28 +02:00
Erik Montnemery
a5e6728227 Improve integration sensor tests (#120316) 2024-06-24 14:17:52 +02:00
J. Nick Koston
fbdc06647b Bump aiodhcpwatcher to 1.0.2 (#120311) 2024-06-24 14:05:13 +02:00
epenet
b4d0de9c0f Improve type hints in conversation tests (#120306) 2024-06-24 13:41:55 +02:00
epenet
aef2f7d707 Improve type hints in canary tests (#120305) 2024-06-24 13:34:44 +02:00
epenet
e3806d12f4 Improve type hints in simplisafe tests (#120303) 2024-06-24 13:34:23 +02:00
Mr. Bubbles
237f20de6c Add DataUpdateCoordinator to pyLoad integration (#120237)
* Add DataUpdateCoordinator

* Update tests

* changes

* changes

* test coverage

* some changes

* Update homeassistant/components/pyload/sensor.py

* use dataclass

* fix ConfigEntry

* fix configtype

* fix some issues

* remove logger

* remove unnecessary else

* revert fixture changes

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-24 12:58:37 +02:00
Joost Lekkerkerker
674dfa6e9c Add button platform to AirGradient (#119917) 2024-06-24 11:55:48 +02:00
Joost Lekkerkerker
f3a1ca6d54 Add coordinator to Knocki (#120251) 2024-06-24 11:41:33 +02:00
Jason R. Coombs
c04a6cc639 Bump jaraco.abode to 5.1.2 (#117363)
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-24 11:37:12 +02:00
Cyrill Raccaud
59dd63ea86 Remove deprecated attributes from Swiss public transport integration (#120256) 2024-06-24 11:18:10 +02:00
Erik Montnemery
e32a27a8ff Remove hass_recorder test fixture (#120295) 2024-06-24 11:14:08 +02:00
Marc Mueller
be6dfc7a70 Typing improvements (#120297) 2024-06-24 11:07:22 +02:00
Arie Catsman
158c8b8400 Add optional test fixture collection to enphase_envoy diagnostic report (#116242)
* diagnostics_fixtures

* fix codespell errors

* fix merge order and typo

* remove pointless-string-statement
2024-06-24 10:37:32 +02:00
tronikos
deee10813c Ensure flume sees the most recent notifications (#120290) 2024-06-24 10:08:51 +02:00
tronikos
0dff7e8a55 Bump PyFlume to 0.8.7 (#120288) 2024-06-24 10:02:30 +02:00
Marc Mueller
b798d76706 Update mypy-dev to 1.11.0a9 (#120289) 2024-06-24 09:57:15 +02:00
Bouwe Westerdijk
213cb6f0fd Improve Plugwise runtime-updating (#120230) 2024-06-24 09:57:04 +02:00
Joost Lekkerkerker
ab9cbf64da Add sensors to Airgradient (#120286) 2024-06-24 09:54:22 +02:00
Paulus Schoutsen
5c2db162c4 Remove "no API" prompt (#120280) 2024-06-24 08:57:59 +02:00
Joost Lekkerkerker
4785810dc3 Migrate AEMET to has entity name (#120284) 2024-06-24 08:54:46 +02:00
Allen Porter
fa9bced6b0 Load local calendar ics in background thread to avoid timezone I/O in event loop (#120276) 2024-06-24 08:43:42 +02:00
Raman Gupta
6a5c1fc613 Replace custom validator from zwave_js with from_dict funcs (#120279) 2024-06-24 08:43:13 +02:00
Luca Angemi
fdade67211 Add device info for Aemet (#120243)
* Update sensor.py

* Update weather.py

* Update sensor.py

* ruff

* add device info to entity

* remove info from sensor

* remove info from weather

* ruff

* amend entity

* Update sensor.py

* Update weather.py

* ruff again

* add DOMAIN

* type unique_id

* Update entity.py

* Update entity.py

* assert

* update tests

* change snapshot
2024-06-24 08:20:34 +02:00
Thomas55555
fe3027f7de Adjust base entities in Husqvarna Automower (#120258)
* adjust base entities

* Adjust docstrings
2024-06-24 08:16:26 +02:00
Mr. Bubbles
d095d4e60d Change suggested data rate unit to Mbit/s in pyLoad (#120275)
Change data rate unit to Mbit/s
2024-06-24 07:53:15 +02:00
Danilo Bargen
66b91a84f9 mystrom: Add MAC and Config URL to devices (#120271)
* Add MAC address to mystrom switch devices

* Add configuration URL to mystrom switch devices
2024-06-23 21:39:58 -04:00
Paulus Schoutsen
19f97a3e53 LLM to handle decimal attributes (#120257) 2024-06-23 17:09:57 -04:00
Tsvi Mostovicz
143e8d09af Fix blocking call in Jewish Calendar while initializing location (#120265) 2024-06-23 16:04:16 -05:00
J. Nick Koston
436c36e3dd Bump aioesphomeapi to 24.6.1 (#120261) 2024-06-23 22:20:46 +02:00
Steven Looman
55a2645e78 Bump async_upnp_client to 0.39.0 (#120250) 2024-06-23 14:21:56 -05:00
Abílio Costa
480ffeda2c Remove connection state handling from Idasen Desk (#120242) 2024-06-23 12:56:10 -05:00
Tsvi Mostovicz
29da88d8f6 Create a Jewish Calendar entity (#120253)
* Set has_entity_name to true

* Move common code to jewish calendar service entity

* Remove already existing assignment

* Move data to common entity

* Remove description name

* Use config entry title instead of name for the device

* Address comments
2024-06-23 19:55:27 +02:00
Matthew FitzGerald-Chamberlain
034b5e88e0 Add Aprilaire air cleaning and fresh air functionality (#120174)
* Add custom services for Aprilaire

* Add icons.json

* Use select/number entities instead of services

* Remove unneeded consts

* Remove number platform

* Code review updates

* Update homeassistant/components/aprilaire/strings.json

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

* Code review updates

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-23 19:47:09 +02:00
Cyrill Raccaud
7efd1079bd Add Swiss public transport via stations (#115891)
* add via stations

* bump minor version due to backwards incompatibility

* better coverage of many via station options in unit tests

* fix migration unit test for new minor version 1.3

* switch version bump to major and improve migration test

* fixes

* improve error messages

* use placeholders for strings
2024-06-23 19:26:55 +02:00
J. Nick Koston
5fbb965624 Bump uiprotect to 3.1.8 (#120244) 2024-06-23 11:35:58 -05:00
J. Nick Koston
fa4b7f3078 Bump yalexs to 6.4.1 (#120248) 2024-06-23 11:16:11 -05:00
Joost Lekkerkerker
080d90b63a Add airgradient param fixture (#120241) 2024-06-23 17:48:54 +02:00
Joost Lekkerkerker
9769dec44b Add number platform to AirGradient (#120247)
* Add number entity

* Add airgradient number entities

* Fix
2024-06-23 17:45:43 +02:00
Jan Bouwhuis
f1fd52bc30 Fix issue in mqtt fixture calling disconnect handler (#120246) 2024-06-23 10:37:08 -05:00
Tsvi Mostovicz
2cc34fd7e7 Improve Jewish calendar entities (#120236)
* By default don't enable all sensors

* Fix tests

* Add entity category

* Set has_entity_name to true

* Revert "Set has_entity_name to true"

This reverts commit 5ebfcde78a.
2024-06-23 17:26:45 +02:00
Mr. Bubbles
473b3b61eb Add string and icon translations to pyLoad integration (#120234)
add string and icon translations to pyLoad
2024-06-23 14:25:36 +02:00
Virenbar
001abdaccf Fix generic thermostat string (#120235) 2024-06-23 13:49:43 +02:00
Mr. Bubbles
826587abb2 Add DeviceInfo to pyLoad integration (#120232)
* Add device info to pyLoad integration

* Update homeassistant/components/pyload/sensor.py

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

* Update homeassistant/components/pyload/sensor.py

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

* remove name, add entry_type

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-23 13:16:00 +02:00
Joakim Plate
84d1d11138 Add config flow to generic hygrostat (#119017)
* Add config flow to hygrostat

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-06-23 12:56:41 +02:00
G Johansson
4474e8c7ef Remove YAML import for tado (#120231) 2024-06-23 12:51:12 +02:00
Mr. Bubbles
28fb361c64 Add config flow to pyLoad integration (#120135)
* Add config flow to pyLoad integration

* address issues

* remove suggested values

* Fix exception

* abort import flow on error

* readd repair issues on error

* fix ruff

* changes

* changes

* exception hints
2024-06-23 12:34:32 +02:00
Bouwe Westerdijk
f257fcb0d1 Bump plugwise to v0.38.3 (#120152) 2024-06-23 10:58:08 +02:00
Mr. Bubbles
f0d5640f5d Bump pyloadapi to v1.2.0 (#120218) 2024-06-22 21:22:13 -05:00
Paulus Schoutsen
bc45dcbad3 Add template config_entry_attr function (#119899)
* Template config_entry_attr function

* Complete test coverage

* Improve readability
2024-06-22 21:51:09 -04:00
tronikos
22467cc575 Avoid Opower time gaps (#117763)
* Avoid time gaps

* fix mypy

* async_get_time_zone
2024-06-22 21:33:44 -04:00
J. Nick Koston
ea0c93e3db Update uiprotect to 3.1.1 (#120173) 2024-06-22 18:11:48 -05:00
Shay Levy
57e615aa36 Don't log Shelly push update failures if there are no errors (#120189) 2024-06-23 00:36:58 +03:00
Scott K Logan
1ca187611d Bump aioraven to 0.6.0 (#120184) 2024-06-22 16:35:21 -05:00
G Johansson
b59e7ede9a Raise on incorrect suggested unit for sensor (#120180) 2024-06-22 22:05:45 +02:00
Matthias Alphart
08fae5d419 Add reconfigure flow to Fronius (#116132) 2024-06-22 21:12:32 +02:00
Franck Nijhof
135379adc3 Merge branch 'master' into dev 2024-06-22 21:10:17 +02:00
G Johansson
5ddda14e59 Remove deprecated (moved) helpers from helpers.__init__ (#120172) 2024-06-22 20:55:03 +02:00
G Johansson
f14e8b728c Remove YAML import from ping (#120176) 2024-06-22 20:39:32 +02:00
G Johansson
f06bd1b66f Remove YAML import from homeworks (#120171) 2024-06-22 20:05:34 +02:00
G Johansson
9b341f5b67 Don't record attributes in sql (#120170) 2024-06-22 19:42:55 +02:00
tronikos
725c309c0d Add image entity (screenshot) in Fully Kiosk Browser (#119622) 2024-06-22 19:37:18 +02:00
G Johansson
753ab08b5e Add capability to exclude all attributes from recording (#119725) 2024-06-22 19:30:28 +02:00
Pete Sage
3cf52a4767 Sonos add tests for media_player.play_media share link (#120169) 2024-06-22 19:13:37 +02:00
Bouke Haarsma
28eef00cce Huisbaasje rebranded to EnergyFlip (#120151)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-06-22 19:09:40 +02:00
Franck Nijhof
8e93116ed3 Update Home Assistant base image to 2024.06.1 (#120168) 2024-06-22 18:52:44 +02:00
Yazan Majadba
b2ade94d15 Add new Islamic prayer times calculation methods (#113763)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-22 18:52:18 +02:00
Thomas55555
1bd95d3596 Add service for Husqvarna Automower (#117269) 2024-06-22 18:40:13 +02:00
puddly
bd65afa207 Prioritize the correct CP2102N serial port on macOS (#116461) 2024-06-22 18:37:55 +02:00
Joakim Plate
4d982a9227 Add config flow to generic thermostat (#119930)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-06-22 18:26:39 +02:00
Etienne Soufflet
6a34e1b7ca Add tado climate swings and fan level (#117378) 2024-06-22 18:25:17 +02:00
G Johansson
cac55d0f47 Remove YAML import for lutron (#120159)
* Remove YAML import for lutron

* Restore constants
2024-06-22 18:23:35 +02:00
Christian Neumeier
6045c2bb08 Add diagnostics support to Zeversolar integration (#118245) 2024-06-22 17:34:48 +02:00
Indu Prakash
65a740f35e Fix airnow timezone look up (#120136) 2024-06-22 17:31:39 +02:00
r-xyz
cdc157de74 Add styled formatting option to Signal Messenger integration - Bump pysignalclirestapi to 0.3.24 (#117148) 2024-06-22 17:29:42 +02:00
Indu Prakash
abb88bcb8a Updated pynws to 1.8.2 (#120164) 2024-06-22 17:24:31 +02:00
Lucas Mindêllo de Andrade
3d7a47fb6b Tuya curtain robot stuck in open state (#118444) 2024-06-22 17:22:46 +02:00
Joakim Plate
b5a7fb1c33 Add valve entity to gardena (#120160)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-06-22 17:02:53 +02:00
Brent Petit
ed0e0eee71 Create auxHeatOnly switch in Ecobee integration (#116323)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-06-22 16:44:43 +02:00
Mr. Bubbles
856aa38539 Add feature to generate OTP token in One-Time Password (OTP) integration (#120055) 2024-06-22 16:43:04 +02:00
dougiteixeira
10edf85311 Update test_device_cleaning in Template (#120163) 2024-06-22 15:59:46 +02:00
dougiteixeira
02f0050819 Update test_device_cleaning in Derivative (#120162) 2024-06-22 15:54:35 +02:00
dougiteixeira
e9515b7584 Update test_device_cleaning in Utiltity Meter. (#120161) 2024-06-22 15:46:55 +02:00
dougiteixeira
61931d15cd Use the new device helpers in Threshold (#120158) 2024-06-22 15:38:58 +02:00
dougiteixeira
0b5c533669 Link the Trend helper entity to the source entity device (#119755) 2024-06-22 15:31:47 +02:00
dougiteixeira
30f3f1082f Use the new device helpers in Integral (#120157) 2024-06-22 15:30:38 +02:00
Mr. Bubbles
f2a4566eef Add re-auth flow to Bring integration (#115327) 2024-06-22 15:14:53 +02:00
tronikos
cea7231aab Add notify entities in Fully Kiosk Browser (#119371) 2024-06-22 15:04:52 +02:00
dougiteixeira
89b7bf2108 Add the ability to change the source entity of the Derivative helper (#119754) 2024-06-22 15:03:43 +02:00
SLaks
2dfa0a3c90 Add Jewish Calendar attributes for non-date sensors (#116252) 2024-06-22 14:30:19 +02:00
Joakim Plate
2ce510357d Mark ambilight as not available when off (#120155) 2024-06-22 13:42:20 +02:00
vmonkey
56d5e41b28 Add switches to Tuya dehumidifier: anion, filter_reset, and child_lock (#105200)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-06-22 13:41:45 +02:00
Dawid Pietryga
5cdd650023 Add satel integra binary switches unique_id (#118660) 2024-06-22 13:35:26 +02:00
Lenn
93e87997be Add sensors to Motionblinds BLE integration (#114226)
* Add sensors

* Add sensor.py to .coveragerc

* Move icons to icons.json

* Remove signal strength translation key

* Change native_value attribute name in entity description to initial_value

* Use str instead of enum for MotionConnectionType for options

* Add calibration options to entity description

* Fix icons

* Change translations of connection and calibration

* Move entity descriptions to __init__

* Use generic sensor class

* Use generic sensor class

* Update homeassistant/components/motionblinds_ble/strings.json

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

* Update homeassistant/components/motionblinds_ble/sensor.py

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

* Update homeassistant/components/motionblinds_ble/strings.json

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

* Update homeassistant/components/motionblinds_ble/strings.json

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

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-22 13:25:03 +02:00
Matthew FitzGerald-Chamberlain
ea8d0ba2ce Add sensors for Aprilaire integration (#113194)
* Add sensors for Aprilaire integration

* Exclude from coverage

* Exclude from coverage

* Add comment

* Update homeassistant/components/aprilaire/sensor.py

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

* Code review updates

* Code review updates

* Code review updates

* Code review updates

* Remove temperature conversion

* Add suggested display precision

* Code review updates

* Merge fix

* Code review fixes

* Fix type errors

* Revert change

* Fix type errors

* Type errors

* Use common keys

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-22 13:20:33 +02:00
Jan-Philipp Benecke
1c2aa9a49b Add preview to Threshold config & option flow (#117181)
Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-06-22 13:19:57 +02:00
Jack Boswell
2b2c4e8262 Expose altitude for Starlink device tracker (#115508) 2024-06-22 12:56:28 +02:00
On Freund
6d0ae77288 Reload Risco on connection reset (#120150) 2024-06-22 12:55:42 +02:00
GraceGRD
6a19808718 Add transparent command to opentherm_gw (#116494) 2024-06-22 12:53:13 +02:00
dougiteixeira
6e32a96ff3 Add the ability to bind the template helper entity to a device (#117753) 2024-06-22 12:45:06 +02:00
David Symonds
f258034f9c Support todoist task description in new_task service (#116203) 2024-06-22 12:42:46 +02:00
cRemE-fReSh
f8c1710753 Add Tuya pool heating pumps (#118415)
Co-authored-by: Franck Nijhof <git@frenck.dev>
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-06-22 12:42:32 +02:00
Alexandre CUER
cb045a794d Add coordinator to emoncms (#120008) 2024-06-22 12:41:54 +02:00
Michael
1a962b415e Add support to consider device holiday and summer mode in AVM Fritz!Smarthome (#119862) 2024-06-22 12:40:03 +02:00
tronikos
ad1f0db5a4 Pass prompt as system_instruction for Gemini 1.5 models (#120147) 2024-06-22 12:35:48 +02:00
Jan Bouwhuis
57eb8dab6a Fix file yaml import fails on scan_interval (#120154) 2024-06-22 12:28:41 +02:00
mletenay
f676760ab1 Add GoodWe async_update support to number/select entities (#116739) 2024-06-22 12:27:32 +02:00
Franck Nijhof
0feead385a Add unique ID support to Flux (#120142) 2024-06-22 12:23:17 +02:00
tronikos
9002d85f9b Support playback of videos in Fully Kiosk Browser (#119496) 2024-06-22 12:05:39 +02:00
Michael Oborne
1bbfe7854f Add Tuya reverse_energy_total and total_power sensors (#114801)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-06-22 11:58:54 +02:00
Marcos A L M Macedo
03d8f4162e Add sensor total production energy for Tuya (#113565) 2024-06-22 11:58:36 +02:00
Bouke Haarsma
ed2ad5ceaa Increase precision of Huisbaasje gas readings (#120138) 2024-06-22 11:46:11 +02:00
Jan Gaedicke
5e71eb4e0d Add support for VESKA-micro-inverter (VK-800) to tuya integration (#115996) 2024-06-22 11:28:59 +02:00
Erwin Douna
6e15c06aa9 Melcloud add reconfigure flow (#115999) 2024-06-22 11:25:42 +02:00
Raman Gupta
d9e26077c6 Add discovery rule for a Z-Wave Basic CC sensor (#105134) 2024-06-22 11:22:32 +02:00
Matthias Alphart
77edc149ec Add distinct import / export entities to Fronius (#116535) 2024-06-22 11:12:21 +02:00
peteS-UK
3d9f053256 Update naming to reflect name change from Logitech Media Server to Lyrion Music Server (#119480)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-06-22 10:58:23 +02:00
Ryan Mattson
f1759982ad Lyric: Only pull priority rooms when its an LCC device (#116876) 2024-06-22 10:48:02 +02:00
Kevin Stillhammer
e0d8c4d726 Ensure kraken tracked pairs can be deselected (#117461) 2024-06-22 10:47:21 +02:00
Shai Ungar
03aba7e7ab Address late seventeentrack review (#116792) 2024-06-22 10:46:31 +02:00
Marc Mueller
a76fa9f3bf Update pytest warnings filter (#120143) 2024-06-22 10:45:18 +02:00
IceBotYT
7efd547962 Fix peco integration (#117165) 2024-06-22 10:37:37 +02:00
wittypluck
0a30032b96 Enable statistics for UniFi remaining power sensors (#120073)
Unifi: Add StateClass Measurement to all power sensors
2024-06-22 10:31:20 +02:00
Charles Garwood
f3d2ba7d8d Add additional checks for Enpower supported feature (#117107) 2024-06-22 09:27:17 +02:00
Lenn
32a94fc114 Motionblinds Bluetooth options (#120110) 2024-06-22 09:13:14 +02:00
Pete Sage
88039597e5 Sonos add tests for media_player.play_media library track (#120119) 2024-06-22 09:09:38 +02:00
Pete Sage
cbfb587f2d Sonos add tests for media_player.play_media favorite_item_id (#120120) 2024-06-22 09:08:12 +02:00
Marc Mueller
bd72637fec Extend component root imports in tests (1) (#120122) 2024-06-22 09:06:31 +02:00
Marc Mueller
2e3aeae520 Extend component root imports in tests (2) (#120123) 2024-06-22 09:06:05 +02:00
Brett Adams
cb78caf455 Platinum quality on Teslemetry (#115191) 2024-06-22 08:56:50 +02:00
J. Nick Koston
47587ee3fb Fix race against is_smart_detected in unifiprotect (#120133) 2024-06-21 17:11:28 -05:00
Marc Mueller
1aa9094d3d Adjust hddtemp test Telnet patch location (#120121) 2024-06-21 23:19:47 +02:00
J. Nick Koston
4d11dd6739 Add additional license plate test coverage to unifiprotect (#120125) 2024-06-21 15:16:33 -05:00
J. Nick Koston
c3ab72a1f9 Fix comparing end of event in unifiprotect (#120124) 2024-06-21 14:48:09 -05:00
Franck Nijhof
b315b566e5 2024.6.4 (#120114) 2024-06-21 20:31:04 +02:00
starkillerOG
8b4a5042bb Use UID instead of MAC or channel for unique_ID in Reolink (#119744) 2024-06-21 20:27:30 +02:00
Michael
d6be733287 Add config flow to Feedreader (#118047) 2024-06-21 20:23:47 +02:00
tronikos
ba7388546e Implement Android TV Remote browse media with apps and activity list (#117126) 2024-06-21 20:17:04 +02:00
Marc Hörsken
c13efa3664 Bump blinkpy to 0.23.0 (#119418) 2024-06-21 20:08:08 +02:00
Thomas Kistler
febcb33545 Update pydrawise to 2024.6.4 (#119868) 2024-06-21 20:00:47 +02:00
Franck Nijhof
e62268d5ea Revert "Make UniFi services handle unloaded config entry (#120028)"
This reverts commit 39f67afa64.
2024-06-21 19:59:25 +02:00
J. Nick Koston
f7e194b32c Adjust blocking I/O messages to provide developer help (#120113) 2024-06-21 12:55:22 -05:00
Ludovic BOUÉ
2ad5b1c3a6 Add Matter discovery schemas for BooleanState sensors (#117870)
Co-authored-by: Stefan Agner <stefan@agner.ch>
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
Co-authored-by: Marcel van der Veldt <m.vanderveldt@outlook.com>
2024-06-21 18:57:18 +02:00
Erwin Douna
cb563f25fa Add DSMR MQTT subscribe error handling (#118316)
Add eror handling
2024-06-21 18:52:39 +02:00
Franck Nijhof
c1dc6fd511 Bump version to 2024.6.4 2024-06-21 18:42:30 +02:00
Michael Hansen
92c12fdf0a Bump intents to 2024.6.21 (#120106) 2024-06-21 18:42:19 +02:00
Álvaro Fernández Rojas
53a21dcb6b Update AEMET-OpenData to v0.5.2 (#120065) 2024-06-21 18:42:17 +02:00
Jan Bouwhuis
59b2f4e56f Bump aioimaplib to 1.1.0 (#120045) 2024-06-21 18:42:13 +02:00
Glenn Waters
75a469f4d6 Bump env-canada to 0.6.3 (#120035)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-21 18:42:10 +02:00
Robert Svensson
39f67afa64 Make UniFi services handle unloaded config entry (#120028) 2024-06-21 18:41:33 +02:00
BestPig
5b322f1af5 Fix songpal crash for soundbars without sound modes (#119999)
Getting soundField on soundbar that doesn't support it crash raise an exception, so it make the whole components unavailable. As there is no simple way to know if soundField is supported, I just get all sound settings, and then pick soundField one if present. If not present, then return None to make it continue, it will just have to effect to display no sound mode and not able to select one (Exactly what we want).
2024-06-21 18:41:30 +02:00
Thomas Kistler
5edf480a15 Fix Hydrawise volume unit bug (#119988) 2024-06-21 18:41:27 +02:00
Erik Montnemery
96adf98625 Always create a new HomeAssistant object when falling back to recovery mode (#119969) 2024-06-21 18:41:24 +02:00
Bouwe Westerdijk
500ef94ad4 Bump plugwise to v0.37.4.1 (#119963)
* Bump plugwise to v0.37.4

* bump plugwise to v0.37.4.1
2024-06-21 18:41:21 +02:00
Artur Pragacz
a55e82366a Fix Onkyo zone volume (#119949) 2024-06-21 18:41:18 +02:00
G Johansson
c3607bd6d5 Bump python-holidays to 0.51 (#119918) 2024-06-21 18:41:15 +02:00
G Johansson
16314c5c7c Bump babel to 2.15.0 (#119006) 2024-06-21 18:41:10 +02:00
Jeef
91064697b5 Bump weatherflow4py to 0.2.21 (#119889) 2024-06-21 18:39:45 +02:00
Tsvi Mostovicz
5b1b137fd2 Bump hdate to 0.10.9 (#119887) 2024-06-21 18:39:42 +02:00
Brent Petit
e1225d3f56 Fix up ecobee windspeed unit (#119870) 2024-06-21 18:39:39 +02:00
J. Nick Koston
99d1de901e Bump aiozoneinfo to 0.2.0 (#119845) 2024-06-21 18:39:35 +02:00
AlCalzone
a1884ed821 Add discovery for Z-Wave Meter Reset (#119968) 2024-06-21 18:39:22 +02:00
Marc Mueller
08578147f5 Pin tenacity to 8.3.0 (#119815) 2024-06-21 18:36:10 +02:00
0bmay
0b4bbbffc8 Bump py-canary to v0.5.4 (#119793)
fix gathering data from Canary sensors
2024-06-21 18:36:06 +02:00
dubstomp
98aeb0b034 Add Kasa Dimmer to Matter TRANSITION_BLOCKLIST (#119751) 2024-06-21 18:36:03 +02:00
jjlawren
7a9537dcc9 Fix model import in Spotify (#119747)
* Always import HomeAssistantSpotifyData in spotify.media_browser

Relocate HomeAssistantSpotifyData to avoid circular import

* Fix moved import

* Rename module to 'models'

* Adjust docstring
2024-06-21 18:36:00 +02:00
Tsvi Mostovicz
8e63bd3ac0 Fix Jewish Calendar unique id migration (#119683)
* Implement correct passing fix

* Keep the test as is, as it simulates the current behavior

* Last minor change
2024-06-21 18:35:57 +02:00
Lode Smets
ddec6d04e1 Fix for Synology DSM shared images (#117695)
* Fix for shared images

* - FIX: Synology shared photos

* - changes after review

* Added test

* added test

* fix test
2024-06-21 18:35:48 +02:00
J. Nick Koston
5e375dbf38 Update uiprotect to 1.20.0 (#120108) 2024-06-21 18:26:14 +02:00
Michael Hansen
8aed04cd3c Bump intents to 2024.6.21 (#120106) 2024-06-21 18:19:52 +02:00
TheJulianJES
1bebf79e5c Fix Solarlog snapshot missing self-consumption sensor (#120111) 2024-06-21 17:53:05 +02:00
Robert Contreras
842763bd27 Add Home Connect binary_sensor unit tests (#115323) 2024-06-21 17:37:22 +02:00
Joost Lekkerkerker
2770811dda Add Knocki integration (#119140)
Co-authored-by: Josef Zweck <24647999+zweckj@users.noreply.github.com>
2024-06-21 17:22:03 +02:00
Thomas55555
710e245819 Also test if command can be send successfully in Husqvarna Automower (#120107) 2024-06-21 17:02:20 +02:00
Matthias Alphart
c342c1e4d6 Device automation extra fields translation for ZHA (#119520)
Co-authored-by: Matthias Alphart <farmio@alphart.net>
Co-authored-by: puddly <32534428+puddly@users.noreply.github.com>
2024-06-21 17:00:55 +02:00
epenet
f03759295f Refactor Tibber realtime entity creation (#118031) 2024-06-21 16:52:09 +02:00
Marcel van der Veldt
4110f4f393 Fix Matter entity names (#120038) 2024-06-21 16:42:22 +02:00
Thomas Kistler
180c244a78 Change Ambient Network timestamp updates (#116941) 2024-06-21 16:36:53 +02:00
Álvaro Fernández Rojas
f353b3fa54 Add Airzone Cloud air/floor demand binary sensors (#120103) 2024-06-21 16:22:05 +02:00
dontinelli
97a025ccc1 Add sensor for self-consumption in solarlog (#119885) 2024-06-21 16:16:09 +02:00
tronikos
b931c3ffcf Include required name in reauth_confirm of Opower (#119627) 2024-06-21 16:14:55 +02:00
Robert Resch
db826c9727 Bum uv to 0.2.13 (#120101) 2024-06-21 16:10:57 +02:00
Ethem Cem Özkan
7f5a71d281 Tado water heater code quality changes (#119811)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2024-06-21 16:01:57 +02:00
Álvaro Fernández Rojas
289a54d632 Update aioairzone-cloud to v0.5.3 (#120100) 2024-06-21 15:59:57 +02:00
Mr. Bubbles
7fa74fcb07 Refactor sensor platform of Pyload integration (#119716) 2024-06-21 15:57:36 +02:00
Erik Montnemery
a10f9a5f6d Allow opting out of warnings when removing unknown frontend panel (#119824) 2024-06-21 15:56:22 +02:00
jvmahon
12f812d6da Add number platform to Matter integration (#119770)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
Co-authored-by: Marcel van der Veldt <m.vanderveldt@outlook.com>
2024-06-21 15:53:50 +02:00
epenet
648ef94888 Improve type hints in core helper tests (#120096) 2024-06-21 15:43:27 +02:00
Thomas55555
4aecd23f1d Fix Husqvarna Automower schedule switch turning back on (#117692) 2024-06-21 15:27:39 +02:00
Josef Zweck
e149aa6b2e Add backflush sensor to lamarzocco (#119888)
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-21 15:27:22 +02:00
tronikos
6caf614efd Add camera entity in Fully Kiosk Browser (#119483) 2024-06-21 15:08:32 +02:00
Erwin Douna
7f20173f6d MelCloud add diagnostics platform (#115962) 2024-06-21 15:07:43 +02:00
Marcel van der Veldt
bad5eaf329 Add entity ids to grouped hue light (#113053) 2024-06-21 15:04:42 +02:00
karwosts
7ba1e4446c Fix for in climate hvac_mode_changed trigger (#116455) 2024-06-21 14:53:28 +02:00
Lenn
af59072203 Bump motionblindsble to 0.1.0 (#120093) 2024-06-21 14:50:37 +02:00
dougiteixeira
a8ba22f6bb Add device linking and stale device link clean up helpers (#119761) 2024-06-21 14:46:39 +02:00
epenet
e2a34d209f Improve type hints in Config entry oauth2 tests (#120090) 2024-06-21 14:44:28 +02:00
Marc Mueller
5c2f78a4b9 Fix solarlog client close (#120092) 2024-06-21 14:35:45 +02:00
Mr. Bubbles
905c1c5700 Fix removed exception InternalServerError in ista EcoTrend integration (#120089) 2024-06-21 13:51:46 +02:00
Brent Petit
901317ec39 Remove rstrip from ecobee binary_sensor __init__ (#118062) 2024-06-21 13:40:26 +02:00
starkillerOG
225e90c99e Add playback of autotrack lens to Reolink (#119829)
Co-authored-by: Robert Resch <robert@resch.dev>
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-06-21 13:38:51 +02:00
dontinelli
a0f81cb401 Add solarlog reconfigure flow (#119913) 2024-06-21 13:35:22 +02:00
Tobias Schmitt
988148d385 Add ZHA cod.m coordinator discovery (#115471) 2024-06-21 13:33:53 +02:00
Aidan Timson
7d86921d09 Reduce line length for unique id (#120086) 2024-06-21 13:30:21 +02:00
neturmel
c9ddabaead Support tuya diivoo dual zone irrigationkit (ggq) (#115090)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-06-21 13:28:20 +02:00
Erwin Douna
b186b3536f Add Home Connect child lock (#118544) 2024-06-21 13:26:37 +02:00
Mr. Bubbles
f5f2e04126 Add reauth flow to ista EcoTrend integration (#118955) 2024-06-21 13:25:24 +02:00
Michael Hansen
18767154df Generate and keep conversation id for Wyoming satellite (#118835) 2024-06-21 13:24:53 +02:00
TheJulianJES
955685e116 Pin codecov-cli to v0.6.0 (#120084) 2024-06-21 13:22:32 +02:00
Jan Čermák
4707108146 Samsung AC Wind Mode (#119750) 2024-06-21 13:19:42 +02:00
Marc Mueller
f0452e9ba0 Update mypy dev 1.11.0a8 (#120032) 2024-06-21 13:15:18 +02:00
Aidan Timson
01d4629a2b Move coordinator store to entry runtime data for Azure DevOps (#119408)
Co-authored-by: Josef Zweck <24647999+zweckj@users.noreply.github.com>
2024-06-21 13:14:32 +02:00
c0ffeeca7
7bfa1e4729 System information: apply sentence-style capitalization (#119893) 2024-06-21 12:59:57 +02:00
Robert Svensson
ed7a888c07 Add one UniFi sensor test to validate entity attributes (#119914) 2024-06-21 12:59:31 +02:00
Rami Mosleh
e1a6ac59e1 Move transmission services registration to async_setup (#119593)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-06-21 12:58:33 +02:00
G Johansson
127af149ca Remove legacy template hass config option (#119925) 2024-06-21 12:53:55 +02:00
Joakim Plate
6420837d58 Calculate device class as soon as it is known in integral (#119940) 2024-06-21 12:47:57 +02:00
dontinelli
af9f4f310b Add additional tests for solarlog (#119928) 2024-06-21 12:44:25 +02:00
epenet
904cf26d31 Add MockToggleEntity type hints in tests (#120075) 2024-06-21 12:32:03 +02:00
Joost Lekkerkerker
fa1e4a225d Bump aiomealie to 0.4.0 (#120076) 2024-06-21 12:27:33 +02:00
J. Nick Koston
324f07378a Bump uiprotect to 1.19.3 (#120079) 2024-06-21 05:25:28 -05:00
G Johansson
1c1d5a8d9b Add unrecorded attributes in dnsip (#119726)
* Add unrecorded attributes in dnsip

* Fix names
2024-06-21 12:25:03 +02:00
Igor Santos
a52a2383c5 Tuya's light POS actually means "opposite state" (#119948) 2024-06-21 12:22:33 +02:00
Evgeny
0aacc67c38 OpenWeatherMap remove obsolete forecast sensors (#119922) 2024-06-21 12:21:57 +02:00
Robert Svensson
6ddc872655 Improve UniFi device tracker client tests (#119982) 2024-06-21 12:20:13 +02:00
Max Gross
2157d0c05e Fix unit of measurement for Comed Hourly Pricing (#115594)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-21 12:16:13 +02:00
Mr. Bubbles
79bc6fc1a8 Bump pyecotrend-ista to 3.3.1 (#120037) 2024-06-21 12:14:44 +02:00
epenet
5bbc4c80c5 Adjust CI job for Check pylint on tests (#120080)
* Adjust Check pylint on tests CI job

* Apply suggestion

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

---------

Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-21 12:12:15 +02:00
J. Nick Koston
15e52de7e9 Avoid constructing unifiprotect enabled callable when unused (#120074) 2024-06-21 11:58:45 +02:00
starkillerOG
c8ce935ec7 Check Reolink IPC channels for firmware repair issue (#119241)
* Add IPC channels to firmware repair issue

* fix tests

* fix typo
2024-06-21 11:57:48 +02:00
Brett Adams
ecd61c6b6d Add entities with no data in Tessie (#119550) 2024-06-21 11:57:19 +02:00
epenet
55134e23ea Add type hints in automation tests (#120077) 2024-06-21 11:56:52 +02:00
G Johansson
5cdafba667 Make attribute names in dnsip lowercase (for translation) (#119727) 2024-06-21 11:43:53 +02:00
Brett Adams
fde7ddfa71 Fix charge behavior in Tessie (#119546) 2024-06-21 11:30:57 +02:00
Robert Hillis
64cef6e082 Store runtime data inside the config entry in Litter Robot (#119547) 2024-06-21 11:28:44 +02:00
G Johansson
9c5879656c Remove legacy list event calendar service (#118663) 2024-06-21 11:18:51 +02:00
Joost Lekkerkerker
d21908a0e4 Add event entity to Nanoleaf (#120013)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-06-21 11:16:00 +02:00
epenet
7af79ba013 Add MockModule type hints in tests (#120007) 2024-06-21 11:11:48 +02:00
dontinelli
0dd5391cd7 Add Siemes and Millisiemens as additional units of conductivity and enable conversion between conductivity units (#118728) 2024-06-21 11:10:15 +02:00
Mr. Bubbles
818750dfd1 Add icons to One-Time Password (OTP) (#120066) 2024-06-21 11:07:45 +02:00
Erik Montnemery
d2a5683fa0 Raise repair issues when automations can't be set up (#120010) 2024-06-21 11:07:30 +02:00
Joost Lekkerkerker
5138c3de0a Add Mealie integration (#119678) 2024-06-21 11:04:55 +02:00
epenet
dc6c1f4e87 Add MockPlatform type hints in tests (#120012)
* Add MockPlatform type hints in tests

* Remove useless code

* Improve

* Revert "Improve"

This reverts commit 9ad04f9255.
2024-06-21 11:04:15 +02:00
Joost Lekkerkerker
53022df8a4 Add sensor tests for APSystems (#117512) 2024-06-21 11:01:42 +02:00
epenet
54d8ce5ca9 Revert "Temporary pin CI to Python 3.12.3" (#119454) 2024-06-21 11:00:07 +02:00
Robert Svensson
94800cb11e UniFi temp fix to handle runtime data (#120031)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-06-21 10:55:21 +02:00
Thomas Kistler
aba5bb08dd Add Ambient Weather brand (#115898) 2024-06-21 10:51:46 +02:00
Joost Lekkerkerker
a6724db01b Fix calculation in Refoss (#120069) 2024-06-21 10:42:25 +02:00
Glenn Waters
3b6189a432 Bump env-canada to 0.6.3 (#120035)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-21 10:37:51 +02:00
Robert Svensson
6fb5a12ef1 Make UniFi services handle unloaded config entry (#120028) 2024-06-21 10:36:52 +02:00
Álvaro Fernández Rojas
f30b20b4df Update AEMET-OpenData to v0.5.2 (#120065) 2024-06-21 10:34:39 +02:00
J. Nick Koston
7375764301 Bump anyio to 4.4.0 (#120061) 2024-06-21 10:31:37 +02:00
Mr. Bubbles
4515eedea9 Add unique_id to One-Time Password (OTP) (#120050) 2024-06-21 10:28:52 +02:00
Álvaro Fernández Rojas
53d3475b1d Update aioairzone to v0.7.7 (#120067) 2024-06-21 10:28:11 +02:00
Marc Mueller
e5846fdffd Update pydantic to 1.10.17 (#119430) 2024-06-21 10:16:36 +02:00
Raman Gupta
3a8b0c3573 Bump zwave-js-server-python to 0.57.0 (#120047) 2024-06-21 09:29:10 +02:00
Mr. Bubbles
f770fa0de0 Fix translation key in config flow of One-Time Password (OTP) integration (#120053) 2024-06-21 09:22:55 +02:00
Thomas Kistler
4aa7a9faee Fix Hydrawise volume unit bug (#119988) 2024-06-21 09:07:14 +02:00
dependabot[bot]
b3722d60cb Bump actions/checkout from 4.1.6 to 4.1.7 (#120063)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-21 08:55:06 +02:00
Jan Bouwhuis
2add53e334 Bump aioimaplib to 1.1.0 (#120045) 2024-06-21 08:47:50 +02:00
Markus Jacobsen
1962759953 Add Bang olufsen init testing (#119834) 2024-06-21 07:35:38 +01:00
RJPoelstra
353e4865e1 Make preset list indicate whether the current mount position matches a preset in Vogel's Motionmount (#118731) 2024-06-21 06:22:12 +01:00
J. Nick Koston
4de8cca911 Disable generic unifiprotect object sensors by default (#120059) 2024-06-20 22:12:31 -05:00
J. Nick Koston
68462b014c Fix unifiprotect smart detection when end is set (#120027) 2024-06-20 22:03:07 -05:00
Leo Shen
ecadaf314d Add support for Switchbot Lock Pro (#119326)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-20 19:26:43 -05:00
J. Nick Koston
fb25902de9 Cleanup unifiprotect subscriptions logic (#120049) 2024-06-20 18:35:35 -05:00
J. Nick Koston
ee85c0e44c Bump uiprotect to 1.19.2 (#120048) 2024-06-20 18:34:57 -05:00
Robert Svensson
87e405396b Bump aiounifi to v79 (#120033) 2024-06-20 20:12:40 +02:00
epenet
325a49e8ff Enable pylint on tests (#119279)
* Enable pylint on tests

* Remove jobs==1
2024-06-20 16:02:49 +02:00
BestPig
7c5fcec062 Fix songpal crash for soundbars without sound modes (#119999)
Getting soundField on soundbar that doesn't support it crash raise an exception, so it make the whole components unavailable. As there is no simple way to know if soundField is supported, I just get all sound settings, and then pick soundField one if present. If not present, then return None to make it continue, it will just have to effect to display no sound mode and not able to select one (Exactly what we want).
2024-06-20 13:06:30 +02:00
mikosoft83
99cae16b75 Change meteoalarm scan interval (#119194) 2024-06-20 12:59:30 +02:00
epenet
1235338f1b Fix hass-component-root-import warnings in otp tests (#120019) 2024-06-20 12:39:26 +02:00
Joost Lekkerkerker
e89b9b0093 Small clean up for Refoss sensor platform (#120015) 2024-06-20 11:49:03 +02:00
Joost Lekkerkerker
4d7a857555 Use runtimedata in nanoleaf (#120009)
* Use runtimedata in nanoleaf

* Update homeassistant/components/nanoleaf/light.py

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

* Apply suggestions from code review

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

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-06-20 11:08:01 +02:00
ashionky
3224224bf8 Add Sensor for Refoss Integration (#116965)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-20 10:29:37 +02:00
Mr. Bubbles
1eb8b5a27c Add config flow to One-Time Password (OTP) integration (#118493) 2024-06-20 10:03:29 +02:00
Jan Bouwhuis
60ba80a28d Only (re)subscribe MQTT topics using the debouncer (#119995)
* Only (re)subscribe using the debouncer

* Update test

* Fix test

* Reset mock
2024-06-19 23:57:18 +02:00
Leo Shen
0053c92d2b Update PySwitchbot to 0.48.0 (#119998) 2024-06-19 16:56:20 -05:00
Pete Sage
ebbb63cd08 Fix Sonos album images with special characters not displaying in media browser UI (#118249)
* initial commit

* initial commit

* simplify tests

* rename symbol

* original_uri -> original_url

* change symbol name

---------

Co-authored-by: Dave T <17680170+davet2001@users.noreply.github.com>
2024-06-19 22:38:49 +01:00
G Johansson
e6967298ec Remove circuit integration (#119921) 2024-06-19 23:14:43 +02:00
Erik Montnemery
f32cb8545c Use MockHAClientWebSocket.send_json_auto_id in blueprint tests (#119956) 2024-06-19 23:07:56 +02:00
Artur Pragacz
42b62ec427 Fix Onkyo zone volume (#119949) 2024-06-19 22:48:34 +02:00
Robert Resch
bae008b0e2 Remove legacy_api_password auth provider (#119976) 2024-06-19 22:46:30 +02:00
Erik Montnemery
7d14b9c5c8 Always create a new HomeAssistant object when falling back to recovery mode (#119969) 2024-06-19 22:45:59 +02:00
Alexandre CUER
6dc680d251 Use aiohttp.ClientSession in EmoncmsClient (#119989) 2024-06-19 22:41:32 +02:00
Robert Svensson
49349de74e Unifi break out switch availability test to separate test (#119990) 2024-06-19 22:40:13 +02:00
Joost Lekkerkerker
52bf3a028f Move Nanoleaf event canceling (#119909)
* Move Nanoleaf event canceling

* Fix

* Fix
2024-06-19 22:16:16 +02:00
J. Nick Koston
d9c7887bbf Update yalexs to 6.4.0 (#119987) 2024-06-19 14:11:36 -05:00
Pete Sage
528422d238 Address Hydrawise review (#119965)
adjust formatting
2024-06-19 20:37:26 +02:00
Franck Nijhof
6c80f865f5 Remove deprecated WLED binary sensor platform (#119984) 2024-06-19 20:29:40 +02:00
Erik Montnemery
5ee418724b Tweak type annotations of energy websocket handlers (#119957) 2024-06-19 20:01:02 +02:00
epenet
f0dc39a903 Improve typing in core tests (#119958)
Add missing return values in core tests
2024-06-19 19:58:07 +02:00
G Johansson
8e3b58dc28 Clean weather tests (#119916) 2024-06-19 19:55:20 +02:00
Jan Bouwhuis
8ad63a0020 Fix flaky todoist test (#119954)
Fix flakey todoist test
2024-06-19 20:43:05 +03:00
Robert Svensson
970836da0c Clean up config option tests in UniFi device tracker tests (#119978) 2024-06-19 19:42:23 +02:00
Joost Lekkerkerker
6fa54229fe Bump airgradient to 0.6.0 (#119962)
* Bump airgradient to 0.6.0

* Bump airgradient to 0.6.0

* Bump airgradient to 0.6.0

* Bump airgradient to 0.6.0
2024-06-19 20:38:57 +03:00
Bouwe Westerdijk
e1f244e1c2 Bump plugwise to v0.37.4.1 (#119963)
* Bump plugwise to v0.37.4

* bump plugwise to v0.37.4.1
2024-06-19 19:23:14 +02:00
Tsvi Mostovicz
9371277b85 Bump hdate to 0.10.9 (#119887) 2024-06-19 09:21:43 -05:00
J. Nick Koston
87e52bb660 Small cleanups to august (#119950) 2024-06-19 09:21:04 -05:00
epenet
52bc006a72 Update default pylint.importStrategy in dev container (#119900) 2024-06-19 11:27:01 +02:00
Jan Bouwhuis
854b6c99fe Address review on comment group registry maintenance (#119952)
Address late review on comment group registry maintenance
2024-06-19 10:51:56 +02:00
J. Nick Koston
a642454e6f Bump sqlalchemy to 2.0.31 (#119951) 2024-06-19 08:09:04 +02:00
J. Nick Koston
5ae13c2ae2 Make use_device_name a cached_property in the base entity class (#119758)
There is a small risk that _attr_name or entity_description
would not be set before state was first written, but that
would likely be a bug.
2024-06-18 21:52:36 -04:00
J. Nick Koston
6a3778c48e Deprecate register_static_path in favor of async_register_static_paths (#119895)
* Deprecate register_static_path in favor of async_register_static_path

`hass.http.register_static_path` is deprecated because it does blocking I/O in the event loop, instead call `await hass.http.async_register_static_path([StaticPathConfig(url_path, path, cache_headers)])`

The arguments to `async_register_static_path` are the same as `register_static_path` except they are wrapped in the `StaticPathConfig` dataclass and an iterable of them is accepted to allow registering multiple paths at once to avoid multiple executor jobs.

* add date

* spacing
2024-06-18 21:51:24 -04:00
J. Nick Koston
b11801df50 Reduce code needed to set august unique ids (#119942)
* Reduce code needed to set august unique ids

Set the unique ids in the base class since they always
use the same format

* Reduce code needed to set august unique ids

Set the unique ids in the base class since they always
use the same format
2024-06-18 21:43:06 -04:00
J. Nick Koston
f88b24f8a4 Combine statements that return the same result in august binary_sensor (#119944) 2024-06-18 21:40:21 -04:00
J. Nick Koston
c686eda305 Reduce duplicate code in baf for entities with descriptions (#119945)
* Reduce duplicate code in baf for entities with descriptions

* Reduce duplicate code in baf for entities with descriptions

* no cover

* no cover
2024-06-18 21:39:32 -04:00
Joakim Plate
ef51fc0d97 Remove code slated for deletion in integral (#119935)
* Remove code slated for deletion in integral
2024-06-19 02:25:11 +02:00
J. Nick Koston
60e64d14af Bump yalexs to 6.3.0 to move camera logic to the lib (#119941) 2024-06-18 18:52:41 -05:00
J. Nick Koston
8f3dcd6557 Cleanup august dataclasses (#119938) 2024-06-18 18:21:19 -05:00
J. Nick Koston
025d861e67 Update yalexs to 6.1.0 (#119910) 2024-06-18 17:36:07 -05:00
J. Nick Koston
39e5e517b0 Small cleanups to august (#119931) 2024-06-18 17:35:55 -05:00
J. Nick Koston
98140e0171 Reduce duplicate code in august to create entities (#119934) 2024-06-18 17:35:38 -05:00
Maciej Bieniek
54f8b5afdf Add pulse counter frequency sensors to Shelly (#119898)
* Add pulse counter frequency sensors

* Cleaning

---------

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-18 23:08:30 +02:00
J. Nick Koston
3d45ced02e Cleanup code to add august sensors (#119929) 2024-06-18 16:03:46 -05:00
J. Nick Koston
b8cafe7e5e Small cleanups to august (#119912) 2024-06-18 15:43:16 -05:00
Joost Lekkerkerker
8a38424c24 Add more airgradient configuration entities (#119191) 2024-06-18 22:34:11 +02:00
Jeef
f0026d171e Bump weatherflow4py to 0.2.21 (#119889) 2024-06-18 15:31:59 -05:00
Franck Nijhof
b419ca2241 Register Z-Wave services on integration setup (#119924) 2024-06-18 22:27:52 +02:00
G Johansson
fe8805de6d Remove deprecated blink refresh service (#119919)
* Remove deprecated blink refresh service

* Remove string

* Fix tests
2024-06-18 22:26:44 +02:00
Shay Levy
f61347719f Allow removal of a Switcher device (#119927)
Allow removal of Switcher device
2024-06-18 23:26:29 +03:00
G Johansson
08864959ee Remove YAML import for Suez Water (#119923)
Remove YAML import for suez water
2024-06-18 22:26:10 +02:00
HarvsG
adcd0cc2a4 DNS IP custom ports for IPv4 (#113993)
* squash DNS IP enable port

* linting

* fix config entries in tests.

* fix more config entries

* fix parameter order

* Add defaults for legacy config entries

* test legacy config are not broken

* test driven migration

* define versions for future proofing

* remove defaults as should be covered by migrations in the future

* adds config migration

* spacing

* Review: remove unnecessary statements

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

* Apply suggestions from code review

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

* make default ports the same

* test migration from future error

* linting

* Small tweaks

---------

Co-authored-by: G Johansson <goran.johansson@shiftit.se>
2024-06-18 22:24:36 +02:00
G Johansson
9723b97f4b Bump python-holidays to 0.51 (#119918) 2024-06-18 22:05:11 +02:00
Thomas55555
0a781b8fa2 Add button platform to Husqvarna Automower (#119856)
* Add button platform to Husqvarna Automower

* test coverage

* adapt to library changes

* Address review
2024-06-18 21:24:09 +02:00
Joost Lekkerkerker
484a24512c Bump airgradient to 0.5.0 (#119911) 2024-06-18 20:51:54 +02:00
MallocArray
be4db90c91 Update airgradient names to NOx index and VOC index (#119152)
* Update names to NOx index and VOC index

* Fix snapshots

* Fix snapshots

---------

Co-authored-by: Joostlek <joostlek@outlook.com>
2024-06-18 20:31:33 +02:00
epenet
ec9f2f698c Add type hints to MockGroup and MockUser in tests (#119897) 2024-06-18 13:11:10 -05:00
Jan Bouwhuis
66faeb28d7 Fix late group platform registration (#119789)
* Fix late group platform registration

* use a callback instead

* Run thread safe

* Not working domain filter

* Also update if a group has nested group's

* Only update if the siingle state type key could change

* Avoid redundant regisister hooks

* Use set, add comment

* Revert changes

* Keep callback cleanup const

* Cleanup after dependencies

* Preimport and cleanup excluded domains

* Revert test changes as we assume early set up now

* Migrate alarm_control_panel

* Migrate climate

* Migrate cover

* Migrate device_tracker

* Migrate lock

* Migrate media_player

* Migrate person

* Migrate plant

* Migrate vacuum

* Migrate water_heater

* Remove water_heater group_pre_import

* Use Platform enum if possible

* Also use platform enum for excluded domains

* Set registry to self._registry

* move deregistering call back hook to async_added_to_hass

* Add comment

* Do no pass mutable reference to EXCLUDED_DOMAINS

* Remove unneeded type hint
2024-06-18 20:01:16 +02:00
Joost Lekkerkerker
edb391a0bd Extract coordinator to separate module in Nanoleaf (#119896)
* Extract coordinator to separate module in Nanoleaf

* Extract coordinator to separate module in Nanoleaf

* Extract coordinator to separate module in Nanoleaf
2024-06-18 19:50:07 +02:00
J. Nick Koston
419dcbf9a1 Fix typo in KEY_ALLOW_CONFIGRED_CORS (#119905) 2024-06-18 12:44:27 -05:00
J. Nick Koston
d2faaa1531 Remove useless function get_ufp_event from unifiprotect (#119906) 2024-06-18 12:29:26 -05:00
J. Nick Koston
407df2aedf Small cleanup to unifiprotect entity descriptions (#119904) 2024-06-18 12:08:22 -05:00
Joost Lekkerkerker
e0de436a58 Add myself as codeowner for Nanoleaf (#119892) 2024-06-18 12:03:30 -05:00
Erik Montnemery
7940303149 Add WS command frontend/subscribe_extra_js (#119833)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-18 16:18:42 +02:00
Erik Montnemery
0ca3f25c57 Add WS command for subscribing to storage collection changes (#119481) 2024-06-18 16:15:42 +02:00
Paulus Schoutsen
3c08a02ecf Update cover intent response (#119756)
* Update cover response

* Fix intent test
2024-06-18 15:54:08 +02:00
Josef Zweck
25b3fe6b64 Bump lmcloud to 1.1.13 (#119880)
* bump lmcloud to 1.1.12

* update diagnostics

* bump to 1.1.13
2024-06-18 14:49:04 +02:00
Markus Jacobsen
3046329f4f Add Tidal play_media support to Bang & Olufsen (#119838)
Add tidal play_media support
2024-06-18 13:00:27 +01:00
epenet
041746a50b Improve type hints in data_entry_flow tests (#119877) 2024-06-18 13:25:28 +02:00
Robert Hillis
6b27e9a745 Store runtime data inside the config entry in Deluge (#119549) 2024-06-18 13:23:11 +02:00
epenet
a1a8d38181 Move fixtures to decorators in netgear_lte tests (#119882) 2024-06-18 12:40:06 +02:00
epenet
f5fd389512 Fix hass-component-root-import warning in esphome tests (#119883) 2024-06-18 12:39:36 +02:00
Robert Hillis
dc388c76f9 Store runtime data inside the config entry in Steam (#119881) 2024-06-18 12:28:43 +02:00
Joost Lekkerkerker
9128dc198a Centralize lidarr device creation (#119822) 2024-06-18 12:10:11 +02:00
epenet
0ff0022877 Ignore use-implicit-booleaness-not-comparison pylint warnings in tests (#119876) 2024-06-18 12:00:24 +02:00
Franck Nijhof
fa1e23e905 Merge branch 'master' into dev 2024-06-18 11:49:25 +02:00
Thomas Kistler
2906fca40c Update pydrawise to 2024.6.4 (#119868) 2024-06-18 10:26:31 +02:00
Jan Bouwhuis
6eb9d1e01d Gracefully disconnect MQTT entry if entry is reloaded (#119753) 2024-06-18 09:29:22 +02:00
Robert Hillis
67223b2a2d Store runtime data inside the config entry in Lidarr (#119548) 2024-06-18 09:13:24 +02:00
Robert Hillis
d5d906e148 Add update coordinator to Netgear LTE (#115474) 2024-06-18 09:12:02 +02:00
dontinelli
2555827030 Replace Solarlog unmaintained library (#117484)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-18 09:06:22 +02:00
J. Nick Koston
faa55de538 Fix blocking I/O in the event loop when registering static paths (#119629) 2024-06-18 08:18:31 +02:00
Paulus Schoutsen
eb89ce47ea Inline primary integration (#119860) 2024-06-18 08:08:08 +02:00
Brent Petit
4be3b53143 Fix up ecobee windspeed unit (#119870) 2024-06-18 07:58:00 +02:00
Thomas55555
dc553a81a1 Bump aioautomower to 2024.6.1 (#119871) 2024-06-18 07:50:05 +02:00
Jesse Hills
f8711dbfbf Add esphome native device update entities (#119339)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-18 16:31:50 +12:00
Robert Hillis
faf2a447a4 Store runtime data inside the config entry in Sense (#119740) 2024-06-17 20:43:45 -05:00
Robert Hillis
ac51851664 Handle general update failure in Sense (#119739) 2024-06-17 19:53:46 -05:00
J. Nick Koston
a876a55d2f Bump uiprotect to 0.19.0 (#119863) 2024-06-17 17:08:43 -05:00
Christoph
7410db08fb Bump xiaomi_ble to 0.30.0 (#119859)
* bump xiaome_ble to 0.30.0

bump xiaomi_ble to 0.30.0

* bump xiaome_ble to 0.30.0

bump xiaomi_ble to 0.30.0

* bump xiaome_ble to 0.30.0

bump xiaomi_ble to 0.30.0
2024-06-17 23:57:47 +02:00
Maciej Bieniek
f5dfefb3a6 Use the humidity value in Shelly Wall Display climate entity (#119830)
* Use the humidity value with the climate entity if available

* Update tests

* Use walrus

---------

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-17 23:17:05 +03:00
G Johansson
b6b6248713 Remove legacy get forecast service from Weather (#118664)
* Remove legacy get forecast service from Weather

* Fix tests

* Fix test

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-17 21:13:28 +02:00
J. Nick Koston
75e8fc0f9c Fix homekit_controller haa fixture (#119855) 2024-06-17 13:34:05 -05:00
Robert Hillis
adacdd3a9f Run Radarr movie coordinator first refresh in background (#119827) 2024-06-17 19:18:59 +02:00
Joost Lekkerkerker
e5eef7c6dd Fix Dremel 3D printer tests (#119853) 2024-06-17 19:17:52 +02:00
J. Nick Koston
2560d7aeda Bump uiprotect to 1.18.1 (#119848)
changelog: https://github.com/uilibs/uiprotect/compare/v1.17.0...v1.18.1
2024-06-17 19:17:36 +02:00
Maciej Bieniek
87c1d5a6a7 Remove the switch entity for Shelly Gas Valve (#119817)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-17 19:17:06 +02:00
J. Nick Koston
57308599cd Bump aiozoneinfo to 0.2.0 (#119845) 2024-06-17 19:05:44 +02:00
jvmahon
71a9ba25dc Use "Button" label to name Matter event (#119768) 2024-06-17 15:30:59 +02:00
Erik Montnemery
8af5748716 Add frontend.remove_extra_js_url (#119831) 2024-06-17 15:15:00 +02:00
Erik Montnemery
c0a3b507c0 Add tests of frontend.add_extra_js_url (#119826) 2024-06-17 14:39:07 +02:00
Alexandre CUER
442554c223 Migrate Emoncms to external library (#119772)
* Migrate Emoncms to external library

https://github.com/Open-Building-Management/pyemoncms

* Remove the throttle decorator

* Remove MIN_TIME_BETWEEN_UPDATES as not used
2024-06-17 13:59:47 +02:00
Robert Hillis
dcca749d50 Store runtime data inside the config entry in Radarr (#119749)
* Store runtime data inside the config entry in Radarr

* move entry typing outside constructor
2024-06-17 13:47:49 +02:00
Joost Lekkerkerker
9f46b582d3 Avoid touching internals in Radarr tests (#119821)
* Avoid touching internals in Radarr tests

* Fix

* Fix
2024-06-17 13:33:36 +02:00
Joost Lekkerkerker
cfbc854c84 Remove deprecated import swiss public transport import flow (#119813) 2024-06-17 13:24:10 +02:00
starkillerOG
d34be0e8fa Bump reolink-aio to 0.9.3 (#119820) 2024-06-17 12:58:58 +02:00
Tsvi Mostovicz
369f9772f2 Fix Jewish Calendar unique id migration (#119683)
* Implement correct passing fix

* Keep the test as is, as it simulates the current behavior

* Last minor change
2024-06-17 12:37:30 +02:00
Erik Montnemery
e0378f79a4 Remove create_list from StorageCollectionWebsocket.async_setup (#119508) 2024-06-17 12:16:36 +02:00
dubstomp
0ae4903686 Add Kasa Dimmer to Matter TRANSITION_BLOCKLIST (#119751) 2024-06-17 11:31:18 +02:00
Marc Mueller
1d873115f3 Pin tenacity to 8.3.0 (#119815) 2024-06-17 11:17:35 +02:00
epenet
4e3cc43343 Fix consider-using-tuple warning in tplink_omada tests (#119814)
Fix consider-using-tuple in tplink_omada tests
2024-06-17 11:13:34 +02:00
azerty9971
75fa0b91d8 Add support for Tuya energy data for WKCZ devices (#119635)
Add support for energy sensors for  WKCZ devices
2024-06-17 10:59:36 +02:00
Marlon
496338fa4e Add number input for apsystems (#118825)
* Add number input for apsystems

* Exclude number from apsystems from coverage

* Remove unnecessary int-float conversion in apsystems number

* Remove unnecessary int-float conversion in apsystems number and redundant and single use variables

* Add translation for apsystems number
2024-06-17 10:31:21 +02:00
G Johansson
8556f3e7c8 Remove deprecated speedtest service from Fast.com (#119780)
* Remove deprecated speedtest service from Fast.com

* Remove not needed tests
2024-06-17 10:04:46 +02:00
G Johansson
d1d21811fa Remove YAML import from streamlabswater (#119783) 2024-06-17 10:04:18 +02:00
0bmay
09b49ee505 Bump py-canary to v0.5.4 (#119793)
fix gathering data from Canary sensors
2024-06-17 10:02:42 +02:00
G Johansson
75b0acf6b6 Remove YAML import from System monitor (#119782) 2024-06-17 09:52:25 +02:00
J. Nick Koston
b1c5845d35 Bump uiprotect to 1.17.0 (#119802)
* Bump uiprotect to 1.16.0

changelog: https://github.com/uilibs/uiprotect/compare/v1.12.1...v1.16.0

* one more bump
2024-06-17 09:51:28 +02:00
MarkGodwin
f09063d706 Add device trackers to tplink_omada (#115601)
* Add device trackers to tplink_omada

* tplink_omada - Remove trackers and options flow

* Addressed code review feedback

* Run linter

* Use entity registry fixture
2024-06-17 07:36:35 +02:00
G Johansson
bd37ce6e9a Remove beat (internet time) from time_date (#119785) 2024-06-16 23:36:06 -04:00
J. Nick Koston
fc3fbc6862 Bump uiprotect to 1.12.1 (#119799) 2024-06-16 18:06:45 -05:00
J. Nick Koston
4879c8b72e Increase unifiprotect polling interval to 60s (#119800) 2024-06-16 17:31:28 -05:00
Jan Bouwhuis
05e690ba0d Remove not used group class method (#119798) 2024-06-17 00:27:07 +02:00
J. Nick Koston
8c613bc869 Cleanup unifiprotect ProtectData object (#119787) 2024-06-16 17:08:09 -05:00
J. Nick Koston
85ca6f15be Add some suggested units to unifiprotect sensors (#119790) 2024-06-16 15:04:28 -05:00
J. Nick Koston
affbc30d0d Move unifiprotect services register to async_setup (#119786) 2024-06-16 14:50:03 -05:00
J. Nick Koston
151b3b3b0a Reduce duplicate code in unifiprotect entities (#119779) 2024-06-16 14:14:59 -05:00
J. Nick Koston
2713a3fdb1 Bump uiprotect to 1.12.0 (#119763) 2024-06-16 14:14:41 -05:00
J. Nick Koston
03027893ff Fix precision for unifiprotect sensors (#119781) 2024-06-16 13:54:58 -05:00
Paulus Schoutsen
54e6459a41 Speed up getting conversation agent languages (#119554)
Speed up getting conversation languages
2024-06-16 13:35:43 -04:00
Paulus Schoutsen
836abe68c7 Track primary integration (#119741)
* Track primary integration

* Update snapshots

* More snapshots updated

* Uno mas

* Update snapshot
2024-06-16 13:26:06 -04:00
J. Nick Koston
59ca5b04fa Migrate unifiprotect to use has_entity_name (#119759) 2024-06-16 09:00:14 -05:00
Shay Levy
b20160a465 Cleanup Shelly entry unload (#119748)
* Cleanup Shelly entry unload

* store platforms on runtime_data
2024-06-16 08:25:23 -05:00
starkillerOG
3a672642ea Reolink extend diagnostic data (#119745)
* Add diagnostic info

* fix

* change order

* update tests
2024-06-16 14:02:10 +02:00
J. Nick Koston
c519e12042 Cleanup unifiprotect entity model (#119746)
* Small cleanups to unifiprotect

* Small cleanups to unifiprotect

* Small cleanups to unifiprotect

* Small cleanups to unifiprotect

* tweak

* comments

* comments

* stale docstrings

* missed one

* remove dead code

* remove dead code

* remove dead code

* remove dead code

* cleanup
2024-06-15 22:02:03 -04:00
Lode Smets
c0a680a80a Fix for Synology DSM shared images (#117695)
* Fix for shared images

* - FIX: Synology shared photos

* - changes after review

* Added test

* added test

* fix test
2024-06-16 00:48:08 +02:00
jjlawren
59ade9cf93 Fix model import in Spotify (#119747)
* Always import HomeAssistantSpotifyData in spotify.media_browser

Relocate HomeAssistantSpotifyData to avoid circular import

* Fix moved import

* Rename module to 'models'

* Adjust docstring
2024-06-16 00:47:47 +02:00
Franck Nijhof
394dafd980 2024.6.3 (#119742) 2024-06-15 21:05:26 +02:00
Franck Nijhof
eba429dc54 Temporary pin CI to Python 3.12.3 (#119261) 2024-06-15 20:36:35 +02:00
Franck Nijhof
89ce8478de Bump version to 2024.6.3 2024-06-15 18:23:39 +02:00
Franck Nijhof
a4a8315376 Ensure workday issues are not persistent (#119732) 2024-06-15 18:23:29 +02:00
Franck Nijhof
3a705fd668 Ensure UniFi Protect EA warning is not persistent (#119730) 2024-06-15 18:23:25 +02:00
TheJulianJES
dc0fc318b8 Bump ZHA dependencies (#119713)
* Bump bellows to 0.39.1

* Bump zigpy to 0.64.1
2024-06-15 18:23:22 +02:00
J. Nick Koston
5ceb8537eb Bump uiprotect to 1.7.2 (#119705)
changelog: https://github.com/uilibs/uiprotect/compare/v1.7.1...v1.7.2
2024-06-15 18:23:19 +02:00
J. Nick Koston
d7d7782a69 Bump uiprotect to 1.7.1 (#119694)
changelog: https://github.com/uilibs/uiprotect/compare/v1.6.0...v1.7.0
2024-06-15 18:23:16 +02:00
G Johansson
2d4176d581 Fix alarm default code in concord232 (#119691) 2024-06-15 18:23:12 +02:00
J. Nick Koston
204e9a79c5 Bump uiprotect to 1.6.0 (#119661) 2024-06-15 18:23:09 +02:00
J. Nick Koston
ace7da2328 Bump uiprotect to 1.4.1 (#119653) 2024-06-15 18:21:52 +02:00
mletenay
dfe25ff804 Bump goodwe to 0.3.6 (#119646) 2024-06-15 18:21:49 +02:00
J. Nick Koston
2b44cf898e Soften unifiprotect EA channel message (#119641) 2024-06-15 18:21:45 +02:00
Paul Bottein
c77ed921de Update frontend to 20240610.1 (#119634) 2024-06-15 18:21:03 +02:00
Jan Bouwhuis
78e13d138f Fix group enabled platforms are preloaded if they have alternative states (#119621) 2024-06-15 18:20:05 +02:00
J. Nick Koston
4e394597bd Bump uiprotect to 1.2.1 (#119620)
* Bump uiprotect to 1.2.0

changelog: https://github.com/uilibs/uiprotect/compare/v1.1.0...v1.2.0

* bump
2024-06-15 18:20:02 +02:00
starkillerOG
78c2dc708c Fix error for Reolink snapshot streams (#119572) 2024-06-15 18:19:58 +02:00
Ethem Cem Özkan
4c1d2e7ac8 Revert "Revert Use integration fallback configuration for tado water fallback" (#119526)
* Revert "Revert Use integration fallback configuration for tado water heater fallback (#119466)"

This reverts commit ade936e6d5.

* add decide method for duration

* add repair issue to let users know

* test module for repairs

* Update strings.json

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

* repair issue should not be persistent

* use issue_registery fixture instead of mocking

* fix comment

* parameterize repair issue created test case

---------

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-06-15 18:19:55 +02:00
Jan-Philipp Benecke
7b809a8e55 Partially revert "Add more debug logging to Ping integration" (#119487) 2024-06-15 18:19:52 +02:00
Erwin Douna
4eea448f9d Revert Use integration fallback configuration for tado water heater fallback (#119466) 2024-06-15 18:19:48 +02:00
Joakim Plate
f58882c878 Add loggers to gardena bluetooth (#119460) 2024-06-15 18:19:45 +02:00
J. Nick Koston
4e6e9f35b5 Bump uiprotect to 1.1.0 (#119449) 2024-06-15 18:19:42 +02:00
Sebastian Goscik
d5e9976b2c Bump uiprotect to v1.0.1 (#119436) 2024-06-15 18:19:39 +02:00
MJJ
8d547d4599 Bump buieradar to 1.0.6 (#119433) 2024-06-15 18:19:32 +02:00
J. Nick Koston
94d79440a0 Fix incorrect key name in unifiprotect options strings (#119417) 2024-06-15 18:19:29 +02:00
J. Nick Koston
d602b7d19b Bump uiprotect to 1.0.0 (#119415) 2024-06-15 18:19:26 +02:00
J. Nick Koston
fb5de55c3e Bump uiprotect to 0.13.0 (#119344) 2024-06-15 18:19:23 +02:00
J. Nick Koston
5cf0ee936d Bump uiprotect to 0.10.1 (#119327)
Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com>
2024-06-15 18:19:19 +02:00
tronikos
7443878333 Make remaining time of timers available to LLMs (#118696)
* Include speech_slots in IntentResponse.as_dict

* Populate speech_slots only if available

* fix typo

* Add test

* test all fields

* Fix another test

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-06-15 18:19:16 +02:00
Ethem Cem Özkan
9065042960 Revert "Revert Use integration fallback configuration for tado water fallback" (#119526)
* Revert "Revert Use integration fallback configuration for tado water heater fallback (#119466)"

This reverts commit ade936e6d5.

* add decide method for duration

* add repair issue to let users know

* test module for repairs

* Update strings.json

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

* repair issue should not be persistent

* use issue_registery fixture instead of mocking

* fix comment

* parameterize repair issue created test case

---------

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-06-15 18:16:10 +02:00
Robert Hillis
410ef8ce14 Store runtime data inside the config entry in Efergy (#119551)
* Store runtime data inside the config entry in Efergy

* store later
2024-06-15 18:14:34 +02:00
Jan Bouwhuis
b405e2f03e Improve logging use of deprecated schema option for mqtt vacuum (#119724) 2024-06-15 16:50:12 +02:00
Franck Nijhof
af0f540dd4 Ensure UniFi Protect EA warning is not persistent (#119730) 2024-06-15 08:05:18 -04:00
Franck Nijhof
08ef556736 Ensure workday issues are not persistent (#119732) 2024-06-15 08:04:42 -04:00
Erik Montnemery
7e61ec96e7 Make the radius of the home zone configurable (#119385) 2024-06-15 13:22:01 +02:00
Diogo Gomes
8cf1890772 Moves diagnostic information from attributes to diagnostic in Utility Meter (#118637)
* move diag information from attributes to diagnostic

* remove constant attributes

---------

Co-authored-by: G Johansson <goran.johansson@shiftit.se>
2024-06-15 12:50:19 +02:00
Brett Adams
dac661831e Add unique IDs to config entries for Teslemetry (#115616)
* Add basic UID

* Add Unique IDs

* Add debug message

* Readd debug message

* Minor bump config version

* Ruff

* Rework migration

* Fix migration return

* Review feedback

* Add test for v2
2024-06-15 12:10:02 +02:00
Josef Zweck
a515562a11 Bring back auto on off switches to lamarzocco (#119421)
* add auto on off switches
2024-06-15 11:33:29 +02:00
Matthias Alphart
c8e9a3a8f4 Device automation extra fields translation for KNX (#119518) 2024-06-15 11:31:10 +02:00
Sid
8c5c7203ea Bump ruff to 0.4.9 (#119721) 2024-06-15 11:28:10 +02:00
Paul Bottein
7a3a57c78e Add open state support to matter lock (#119682) 2024-06-15 11:24:33 +02:00
Aidan Timson
f1f82ffbf8 Update aioazuredevops to 2.1.1 (#119720)
* Update aioazuredevops to 2.1.1

* Update tests
2024-06-15 05:30:38 +02:00
TheJulianJES
c75db797d0 Bump ZHA dependencies (#119713)
* Bump bellows to 0.39.1

* Bump zigpy to 0.64.1
2024-06-14 22:33:38 +02:00
Jay
8397d6a29f Envisalink add arming as a state to alarm control panel (#119702)
Envisalink Add Arming as a State
2024-06-14 21:51:20 +02:00
starkillerOG
2639336ab0 Prefer mp4 playback in Reolink (#119630)
* If possible use PLAYBACK of mp4 files

* bring test_coverage back to 100%

* Do not reasign the vod_type multiple times

Co-authored-by: Dave T <17680170+davet2001@users.noreply.github.com>

* fix indent

* add white space

* fix tests

* Update homeassistant/components/reolink/media_source.py

Co-authored-by: Dave T <17680170+davet2001@users.noreply.github.com>

---------

Co-authored-by: Dave T <17680170+davet2001@users.noreply.github.com>
2024-06-14 21:38:53 +02:00
Thomas55555
c2e31e9846 Add work area sensor for Husqvarna Automower (#119704)
* Add work area sensor to Husqvarna Automower

* fix exist_fn
2024-06-14 21:34:47 +02:00
J. Nick Koston
c0ff2d866f Reduce code needed to check unifiprotect attrs (#119706)
* Reduce code needed to check unifiprotect attrs

* Apply suggestions from code review

* Update homeassistant/components/unifiprotect/manifest.json

* Apply suggestions from code review

* revert

* adjust

* tweak

* make mypy happy
2024-06-14 21:29:18 +02:00
J. Nick Koston
f8bf357811 Remove set default doorbell text service from unifiprotect (#119695)
UI has removed this functionality in UI Protect 4.x

discovered via https://github.com/uilibs/uiprotect/issues/57
2024-06-14 21:25:14 +02:00
tronikos
6b8bddf6e3 Make remaining time of timers available to LLMs (#118696)
* Include speech_slots in IntentResponse.as_dict

* Populate speech_slots only if available

* fix typo

* Add test

* test all fields

* Fix another test

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-06-14 20:47:41 +02:00
Mr. Bubbles
c077c2a972 Fix pyload async_update SensorEntity raising exceptions (#119655)
* Fix Sensorentity raising exceptions

* Increase test coverage
2024-06-14 20:47:06 +02:00
G Johansson
05cbda0e50 Fix alarm default code in concord232 (#119691) 2024-06-14 20:45:27 +02:00
J. Nick Koston
6bdfed6910 Bump uiprotect to 1.7.2 (#119705)
changelog: https://github.com/uilibs/uiprotect/compare/v1.7.1...v1.7.2
2024-06-14 20:43:40 +02:00
J. Nick Koston
d2bcd5d1fb Refactor unifiprotect switch to match other platforms (#119698)
- Use _attr_is_on for nvr entities
- implement _async_get_state_attrs for nvr entities
- define MODEL_DESCRIPTIONS_WITH_CLASS
2024-06-14 13:22:12 -05:00
J. Nick Koston
6e322c310b Split binary sensor classes in unifiprotect (#119696)
* Split binary sensor classes in unifiprotect

There were two types of binary sensors, ones that can change device_class at
run-time (re-mountable ones), and ones that cannot. Instead of having
branching in the class, split the class

* tweak order to match name
2024-06-14 13:16:49 -05:00
J. Nick Koston
10a2fd7cb6 Bump uiprotect to 1.7.1 (#119694)
changelog: https://github.com/uilibs/uiprotect/compare/v1.6.0...v1.7.0
2024-06-14 10:56:26 -05:00
starkillerOG
da64f61083 Add firmware update entities for Reolink IPC channel cameras (#119637) 2024-06-14 08:12:55 -04:00
epenet
01be5d5f6b Move fixtures to decorators in core tests (#119675) 2024-06-14 13:32:42 +02:00
dependabot[bot]
b80f7185b2 Bump codecov/codecov-action from 4.4.1 to 4.5.0 (#119668)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-14 09:28:17 +02:00
dependabot[bot]
fb801946bb Bump github/codeql-action from 3.25.9 to 3.25.10 (#119669)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-14 09:27:54 +02:00
epenet
453564fd03 Force full CI on all root test files (#119673) 2024-06-14 09:27:18 +02:00
epenet
3e9d25f81d Add missing argument type hints to component tests (#119671) 2024-06-14 09:26:46 +02:00
epenet
83b97d3218 Add missing argument type hints to recorder tests (#119672) 2024-06-14 09:25:26 +02:00
Erik Montnemery
003f216820 Rename collection.CollectionChangeSet to collection.CollectionChange (#119532) 2024-06-14 08:54:37 +02:00
J. Nick Koston
9082dc2a79 Reduce recorder overhead when entity filter is empty (#119631) 2024-06-14 08:43:51 +02:00
epenet
9f41133bbc Add missing argument type to core tests (#119667) 2024-06-14 08:42:01 +02:00
Rami Mosleh
f3ce562847 Store Glances coordinator in runtime_data (#119607) 2024-06-14 08:39:04 +02:00
mletenay
1d62056d9b Bump goodwe to 0.3.6 (#119646) 2024-06-14 08:29:32 +02:00
epenet
4b29c35453 Tweak logging statements in tests (#119664) 2024-06-14 08:28:47 +02:00
J. Nick Koston
e6b7301367 Fix blocking I/O in CachingStaticResource (#119663) 2024-06-14 08:27:50 +02:00
epenet
38a6e666a7 Add missing return type to some test functions (#119665) 2024-06-14 08:26:45 +02:00
epenet
26e21bb356 Adjust incorrect unnecessary-lambda pylint disable statement in demo tests (#119666) 2024-06-14 08:25:35 +02:00
Erik Montnemery
471e2a17a2 Improve error messages when config entry is in wrong state (#119591)
* Improve error messages when config entry is in wrong state

* Apply suggestions from code review

Co-authored-by: Joakim Sørensen <ludeeus@ludeeus.dev>

* Adjust tests

---------

Co-authored-by: Joakim Sørensen <ludeeus@ludeeus.dev>
2024-06-14 08:00:36 +02:00
Jan Bouwhuis
9e146a51c2 Fix group enabled platforms are preloaded if they have alternative states (#119621) 2024-06-14 07:46:24 +02:00
Matrix
3336bdb402 Fix Yolink device incorrect state (#119658)
fix device incorrect state
2024-06-14 07:31:02 +02:00
Joakim Plate
097844aca6 Allow arm levels be in order for google assistant (#119645) 2024-06-14 07:18:57 +02:00
J. Nick Koston
95b9e15306 Bump uiprotect to 1.6.0 (#119661) 2024-06-13 23:34:55 -05:00
J. Nick Koston
b11d832fb1 Bump uiprotect to 1.4.1 (#119653) 2024-06-13 21:01:25 -05:00
Shay Levy
efa7240ac5 Use single list for Shelly non-sleeping platforms (#119540) 2024-06-13 20:27:40 -05:00
tronikos
87ddb02828 Bump python-fullykiosk to 0.0.13 (#119544)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-13 20:41:37 -04:00
Jan Bouwhuis
a992654a8b Fix blocking IO calls in mqtt client setup (#119647) 2024-06-13 17:47:38 -05:00
dougiteixeira
cd80b9b318 Remove obsolete device links in Utility Meter helper (#119328)
* Make sure we update the links between the devices and config entries when the changes source device
2024-06-13 23:44:13 +02:00
J. Nick Koston
09aa9cf842 Soften unifiprotect EA channel message (#119641) 2024-06-13 16:31:39 -05:00
J. Nick Koston
0c3a5ae5da Dispatch unifiprotect websocket messages based on model (#119633) 2024-06-13 16:17:31 -05:00
J. Nick Koston
de27f24a4c Use the existing api client for unifiprotect repairs if available (#119640)
Co-authored-by: TheJulianJES <TheJulianJES@users.noreply.github.com>
2024-06-13 16:17:11 -05:00
Mr. Bubbles
7bbd28d385 Migrate library to PyLoadAPI 1.1.0 in pyLoad integration (#116053)
* Migrate pyLoad integration to externa API library

* Add const to .coveragerc

* raise update failed when cookie expired

* fix exceptions

* Add tests

* bump to PyLoadAPI 1.1.0

* remove unreachable code

* fix tests

* Improve logging and exception handling

- Modify manifest.json to update logger configuration.
- Improve error messages for authentication failures in sensor.py.
- Simplify and rename pytest fixtures in conftest.py.
- Update test cases in test_sensor.py to check for log entries and remove unnecessary code.

* remove exception translations
2024-06-13 22:52:19 +02:00
Shay Levy
40b98b70b0 Wait for background tasks in Shelly tests (#119636) 2024-06-13 22:36:03 +03:00
Paul Bottein
72c6257131 Update frontend to 20240610.1 (#119634) 2024-06-13 15:34:58 -04:00
starkillerOG
b8851f2f3c Cleanup Reolink firmware update entity (#119239) 2024-06-13 21:27:30 +02:00
Thomas55555
b4a77f8341 Bump aioautomower to 2024.6.0 (#119625) 2024-06-13 19:58:04 +02:00
J. Nick Koston
fc6dd7ce7d Bump uiprotect to 1.2.1 (#119620)
* Bump uiprotect to 1.2.0

changelog: https://github.com/uilibs/uiprotect/compare/v1.1.0...v1.2.0

* bump
2024-06-13 19:28:42 +02:00
J. Nick Koston
6d31991021 Reduce duplicate code in unifiprotect (#119624) 2024-06-13 11:44:29 -05:00
epenet
8e1103050c Fix dangerous-default-value warnings in core tests (#119568) 2024-06-13 17:10:37 +02:00
epenet
a80a372c1c Fix dangerous-default-value warnings in nzbget tests (#119580) 2024-06-13 17:10:00 +02:00
epenet
ed52ff3076 Fix dangerous-default-value warnings in ezviz tests (#119589) 2024-06-13 17:09:26 +02:00
epenet
75e0aee8fc Fix dangerous-default-value warnings in homematicip_cloud tests (#119583) 2024-06-13 17:08:40 +02:00
epenet
835d422a90 Fix dangerous-default-value warnings in control4 tests (#119592) 2024-06-13 17:06:12 +02:00
epenet
6901c24ab7 Fix dangerous-default-value warnings in aussie broadband tests (#119596) 2024-06-13 17:03:16 +02:00
epenet
382eb1e3b2 Fix dangerous-default-value warnings in rituals_perfume_genie tests (#119590) 2024-06-13 17:02:26 +02:00
epenet
1440ad26c8 Fix dangerous-default-value warnings in plex tests (#119603) 2024-06-13 17:01:52 +02:00
epenet
97e19cb61c Fix dangerous-default-value warnings in cloudflare tests (#119598) 2024-06-13 17:00:18 +02:00
epenet
49b28cca62 Fix consider-using-with warnings in core tests (#119606) 2024-06-13 16:59:40 +02:00
epenet
384fa53cc0 Fix dangerous-default-value warnings in panasonic_viera tests (#119602) 2024-06-13 16:59:05 +02:00
epenet
ca8d3e0c83 Ignore unnecessary-lambda warnings in tests (#119564) 2024-06-13 16:58:41 +02:00
Rami Mosleh
bb2883a5a8 Store imap coordinator in runtime_data (#119611) 2024-06-13 16:58:05 +02:00
epenet
50fe29ccc1 Fix attribute-defined-outside-init in harmony tests (#119614) 2024-06-13 16:57:20 +02:00
epenet
3b8337985c Fix dangerous-default-value warnings in environment_canada tests (#119586) 2024-06-13 16:56:22 +02:00
epenet
349ac54616 Fix dangerous-default-value warnings in auth tests (#119597) 2024-06-13 16:55:48 +02:00
epenet
2a061f58eb Fix dangerous-default-value warnings in tessie tests (#119605) 2024-06-13 16:55:06 +02:00
Rami Mosleh
f2ce510484 Store islamic prayer times coordinator in runtime_data (#119612) 2024-06-13 16:54:40 +02:00
epenet
23edbf7bbf Fix dangerous-default-value warnings in subaru tests (#119604) 2024-06-13 16:53:00 +02:00
epenet
27ee204e2f Fix dangerous-default-value warnings in mqtt tests (#119584) 2024-06-13 16:51:45 +02:00
epenet
e34c42c0a9 Fix dangerous-default-value warnings in greeneye_monitor tests (#119581) 2024-06-13 16:47:53 +02:00
Erik Montnemery
9f322b20d1 Use send_json_auto_id in some collection tests (#119570)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-06-13 16:04:32 +02:00
epenet
8871090463 Fix dangerous-default-value warnings in fronius tests (#119600) 2024-06-13 13:53:17 +02:00
epenet
27c08bcb5e Fix dangerous-default-value warnings in lastfm tests (#119601) 2024-06-13 11:57:45 +02:00
epenet
315e5f1d95 Fix import-outside-toplevel pylint warnings in zha tests (#119451) 2024-06-13 11:55:56 +02:00
epenet
40d9d22e76 Fix dangerous-default-value warnings in deconz tests (#119599) 2024-06-13 11:55:37 +02:00
Rami Mosleh
030fe6df4a Store Mikrotik coordinator in runtime_data (#119594) 2024-06-13 11:53:32 +02:00
Robert Resch
f5b86154b4 Bump deebot-client to 8.0.0 (#119515)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-06-13 11:49:20 +02:00
epenet
d211af75ef Fix dangerous-default-value warnings in cloud tests (#119585) 2024-06-13 10:30:44 +02:00
Matrix
55f8a36572 Improve code readability (#119558) 2024-06-13 09:31:29 +02:00
starkillerOG
440771bdea Fix error for Reolink snapshot streams (#119572) 2024-06-13 09:30:53 +02:00
William Grant
c02ac5e538 Classify more ecowitt power supply sensors as diagnostics (#119555) 2024-06-13 09:29:57 +02:00
epenet
b2be3e0a9b Fix dangerous-default-value warnings in automation tests (#119576) 2024-06-13 09:29:04 +02:00
epenet
cadb6317bf Fix dangerous-default-value warnings in canary tests (#119578) 2024-06-13 09:28:11 +02:00
epenet
b5d16bb3ca Fix dangerous-default-value warnings in version tests (#119577) 2024-06-13 09:27:51 +02:00
epenet
92d150ff57 Fix dangerous-default-value warnings in integration tests (#119574) 2024-06-13 09:21:59 +02:00
epenet
a06f098312 Fix dangerous-default-value warnings in switchbot tests (#119575) 2024-06-13 09:20:53 +02:00
dependabot[bot]
08403df20e Bump actions/checkout from 4.1.6 to 4.1.7 (#119566)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-13 09:19:26 +02:00
Robert Hillis
cad6163162 Store runtime data inside the config entry in Tautulli (#119552) 2024-06-13 08:57:28 +02:00
epenet
610f21c4a6 Fix unnecessary-lambda warnings in tests (#119563) 2024-06-13 08:56:14 +02:00
dependabot[bot]
4af3879fc2 Bump github/codeql-action from 3.25.8 to 3.25.9 (#119567)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-13 08:56:04 +02:00
dependabot[bot]
0a727aba4a Bump dawidd6/action-download-artifact from 5 to 6 (#119565)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-13 08:55:50 +02:00
J. Nick Koston
d52ce03aa4 Ensure asyncio blocking checks are undone after tests run (#119542)
* Ensure asyncio blocking checks are undone after tests run

* no reason to ever enable twice

* we are patching objects, make it more generic

* make sure bootstrap unblocks as well

* move disable to tests only

* re-protect

* Update tests/test_block_async_io.py

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

* Revert "Update tests/test_block_async_io.py"

This reverts commit 2d46028e21.

* tweak name

* fixture only

* Update tests/conftest.py

* Update tests/conftest.py

* Apply suggestions from code review

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-06-13 08:52:01 +02:00
epenet
669569ca49 Fix dangerous-default-value in zha tests (#119560) 2024-06-13 08:35:05 +02:00
epenet
dda6ccccd2 Fix dangerous-default-value in nest tests (#119561)
* Fix dangerous-default-value in nest tests

* Adjust

* Adjust
2024-06-12 23:32:55 -07:00
J. Nick Koston
dbd3147c9b Remove async_late_forward_entry_setups and instead implicitly hold the lock (#119088)
* Refactor config entry forwards to implictly obtain the lock instead of explictly

This is a bit of a tradeoff to not need async_late_forward_entry_setups

The downside is we can no longer detect non-awaited plastform setups
as we will always implicitly obtain the lock instead of explictly.

Note, this PR is incomplete and is only for discussion purposes
at this point

* preen

* cover

* cover

* restore check for non-awaited platform setup

* cleanup

* fix missing word

* make non-awaited test safer
2024-06-12 21:06:11 -04:00
Josef Zweck
4e121fcbe8 Remove steam temp sensor for Linea Mini (#119423) 2024-06-12 23:35:51 +02:00
Jan-Philipp Benecke
fd83b9a7c6 Add missing attribute translations to water heater entity component (#119531) 2024-06-12 23:34:01 +02:00
Jan Bouwhuis
532f6d1d97 Return override target temp for incomfort climate (#119528) 2024-06-12 23:13:12 +02:00
Erik Montnemery
51891ff8e2 Fix typo in google_assistant (#119522) 2024-06-12 22:45:41 +02:00
Matthias Alphart
929dd9f5da Device automation extra fields translation for LCN (#119519) 2024-06-12 22:45:10 +02:00
Matthias Alphart
39f3a294dc Device automation extra fields translation for Z-Wave-JS (#119529) 2024-06-12 22:44:50 +02:00
epenet
e3e80c83b7 Fix contextmanager-generator-missing-cleanup warning in tests (#119478) 2024-06-12 22:38:11 +02:00
epenet
f7326d3baf Ignore too-many-nested-blocks warning in zha tests (#119479) 2024-06-12 22:33:40 +02:00
Jan Bouwhuis
541c941006 Add state icons to incomfort water_heater entities (#119527) 2024-06-12 22:25:49 +02:00
J. Nick Koston
a586e7fb72 Remove useless delegation in unifiprotect (#119514) 2024-06-12 22:23:18 +02:00
Erik Montnemery
2661581d4e Fix typos in collection helper (#119524) 2024-06-12 20:37:38 +02:00
Erik Montnemery
a4c34fe207 Fix typo in lovelace (#119523) 2024-06-12 14:14:59 -04:00
J. Nick Koston
ae3134d875 Simplify unifiprotect device removal code (#119517) 2024-06-12 12:03:12 -05:00
J. Nick Koston
8f7686082c Refactor unifiprotect media_source to remove type ignores (#119516) 2024-06-12 12:02:53 -05:00
Caius-Bonus
7f7128adbf Add Danfoss Ally thermostat and derivatives to ZHA (#86907)
* zha integration: Add danfoss specific clusters and attributes; add thermostat.pi_heating_demand and thermostat_ui.keypad_lockout

* zha integration: fix Danfoss thermostat viewing direction not working because of use of bitmap8 instead of enum8

* ZHA Integration: add missing ThermostatChannelSensor

* ZHA integration: format using black

* zha integration: fix flake8 issues

* ZHA danfoss: Add MinHeatSetpointLimit, MaxHeatSetpointLimit, add reporting and read config for danfoss and keypad_lockout.

* ZHA danfoss: fix mypy complaining about type of _attr_entity_category

* ZHA danfoss: ruff fix

* fix tests

* pylint: disable-next=hass-invalid-inheritance

* fix pylint tests

* refactoring

* remove scheduled setpoint

* remove scheduled setpoint in manufacturer specific

* refactor

* fix tests

* change cluster ids

* remove custom clusters

* code quality

* match clusters in manufacturerspecific on quirk class

* fix comment

* fix match on quirk in manufacturerspecific.py

* correctly extend cluster handlers in manufacturerspecific.py and remove workaround for illegal use of attribute updated signals in climate.py

* fix style

* allow non-danfoss thermostats to work in manufacturerspecific.py

* correct order of init of parent and subclasses in manufacturerspecific.py

* improve entity names

* fix pylint

* explicitly state changing size of tuple

* ignore tuple size change error

* really ignore error

* initial

* fix tests

* match on specific name and quirk name

* don't restructure file as it is out of scope

* move back

* remove unnecessary change

* fix tests

* fix tests

* remove code duplication

* reduce code duplication

* empty line

* remove unused variable

* end file on newline

* comply with recent PRs

* correctly initialize all attributes

* comply with recent PRs

* make class variables private

* forgot one reference

* swap 2 lines for consistency

* reorder 2 lines

* fix tests

* align with recent PR

* store cluster handlers in only one place

* edit tests

* use correct device for quirk id

* change quirk id

* fix tests

* even if there is a quirk id, it doesn't have to have a specific cluster handler

* add tests

* use quirk id for manufacturer specific cluster handlers

* use quirk_ids instead of quirks_classes

* rename quirk_id

* rename quirk_id

* forgot to rename here

* rename id

* add tests

* fix tests

* fix tests

* use quirk ids from zha_quirks

* use quirk id from zha_quirks

* wrong translation

* sync changes with ZCL branch

* sync

* style

* merge error

* move bitmapSensor

* merge error

* merge error

* watch the capitals

* fix entity categories

* more decapitalization

* translate BitmapSensor

* translate all enums

* translate all enums

* don't convert camelcase to snakecase

* don't change enums at all

* remove comments

* fix bitmaps and add enum for algorithm scale factor

* improve readability if bitmapsensor

* fix capitals

* better setpoint response time

* feedback

* lowercase every enum to adhere to the translation_key standard

* remove enum state translations and use enums from quirks

* correctly capitalize OrientationEnum

* bump zha dependencies; this will have to be done in a separate PR, but this aids review

* accidentally removed enum

* tests

* comment

* Migrate reporting and ZCL attribute config out of `__init__`

* hvac.py shouldn't be changed in this pull request

* change wording comment

* I forgot I changed the size of the tuple.

---------

Co-authored-by: puddly <32534428+puddly@users.noreply.github.com>
2024-06-12 12:48:37 -04:00
Robert Svensson
707e422a31 Add UniFi sensor for number of clients connected to a device (#119509)
Co-authored-by: Kim de Vos <kim.de.vos@vippsmobilepay.com>
2024-06-12 18:20:31 +02:00
J. Nick Koston
4fb8202de1 Refactor adding entities to unifiprotect (#119512) 2024-06-12 18:11:59 +02:00
Jan-Philipp Benecke
b92372c4ca Partially revert "Add more debug logging to Ping integration" (#119487) 2024-06-12 18:08:44 +02:00
epenet
2f5f372f63 Remove pointless TODO in recorder tests (#119490) 2024-06-12 18:08:01 +02:00
J. Nick Koston
db3029dc5f Remove unreachable sensor code in unifiprotect (#119501) 2024-06-12 18:07:20 +02:00
epenet
0f0c2f0553 Fix redefined-argument-from-local pylint warning in tests (#119475) 2024-06-12 17:58:58 +02:00
epenet
44901bdcd1 Fix deprecated-typing-alias pylint warnings in zha tests (#119453) 2024-06-12 17:57:27 +02:00
epenet
0489d0b396 Fix attribute-defined-outside-init pylint warning in anova tests (#119472) 2024-06-12 17:56:52 +02:00
epenet
a0c445764c Ignore super-init-not-called pylint warnings in tests (#119474) 2024-06-12 17:54:38 +02:00
epenet
3d1165519d Fix broad-exception-raised in component tests (#119467) 2024-06-12 17:53:42 +02:00
Robert Hillis
aaa674955c Store runtime data inside the config entry in Dlink (#119442) 2024-06-12 17:52:10 +02:00
epenet
c3c3a705fa Fix attribute-defined-outside-init pylint warnings in tests (#119471) 2024-06-12 17:51:08 +02:00
J. Nick Koston
3f188b7e27 Migrate unifiprotect to use entry.runtime_data (#119507) 2024-06-12 17:49:18 +02:00
Joost Lekkerkerker
4766f48f47 Migrate Airzone to runtime_data (#119494) 2024-06-12 17:44:03 +02:00
Joost Lekkerkerker
b953ff73c0 Migrate Airzone cloud to runtime_data (#119495) 2024-06-12 17:42:51 +02:00
Maciej Bieniek
cd928d5571 Support reconfigure flow in Brother integration (#117298)
* Add reconfigure flow

* Improve config flow

* Check if it is the same printer

* Improve description

* Add tests

* Improve strings

* Add missing reconfigure_successful string

* Improve test names and comments

* Format

* Mock unload entry

* Use add_suggested_values_to_schema()

* Do not abort when another device's IP has been used

* Remove unnecessary code

* Suggested changes

---------

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-12 17:39:44 +02:00
Robert Hillis
5b91ea4550 Store runtime data inside the config entry in Goalzero (#119440) 2024-06-12 16:52:18 +02:00
Robert Hillis
dc3ade6558 Store runtime data inside the config entry in Google Mail (#119439) 2024-06-12 16:49:40 +02:00
Joost Lekkerkerker
420ee782ff Migrate Airtouch4 to runtime_data (#119493) 2024-06-12 16:45:21 +02:00
epenet
99b349fa2c Fix consider-using-dict-items warnings in tests (#119497) 2024-06-12 16:44:29 +02:00
epenet
cb39d2d16b Ignore existing fixme pylint warnings in tests (#119500)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-12 16:40:26 +02:00
epenet
4962895f19 Fix consider-using-enumerate warnings in tests (#119506) 2024-06-12 16:27:56 +02:00
epenet
fb1b0058ee Fix consider-using-tuple pylint warnings in component tests (#119464)
* Fix consider-using-tuple pylint warnings in component tests

* Apply su

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

---------

Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com>
2024-06-12 15:50:27 +02:00
Rami Mosleh
e065c70969 Store transmission coordinator in runtime_data (#119502)
store transmission coordinator in runtime_data
2024-06-12 15:38:35 +02:00
tronikos
2ca580898d Fix typo in Camera.turn_on (#119386) 2024-06-12 08:50:34 -04:00
Joost Lekkerkerker
3a4b46208f Migrate AirGradient to runtime_data (#119491)
* Migrate AirGradient to runtime_data

* Migrate AirGradient to runtime_data
2024-06-12 08:49:03 -04:00
Matthias Alphart
171707e8b7 Translation support for device automation extra fields (#115892)
* Translation support for device trigger extra fields

* Move extra_fields translations to backend
2024-06-12 14:10:02 +02:00
AlCalzone
8ca0de1d20 Forward Z-Wave JS node found event to frontend (#118866)
* forward Z-Wave `node found` event to frontend

* add tests
2024-06-12 13:48:47 +02:00
David Bonnes
e6b2a9b5c4 Remove redundant logging from evohome (#119482)
remove redundant logging
2024-06-12 13:45:03 +02:00
Robert Hillis
35b13e355b Store runtime data inside the config entry in Google Sheets (#119438) 2024-06-12 12:48:55 +02:00
Erwin Douna
ade936e6d5 Revert Use integration fallback configuration for tado water heater fallback (#119466) 2024-06-12 12:47:47 +02:00
epenet
20817955af Fix bad-chained-comparison pylint warning in tests (#119477) 2024-06-12 12:35:55 +02:00
epenet
abb8c58b87 Fix consider-using-tuple pylint warnings in core tests (#119463) 2024-06-12 12:35:01 +02:00
Robert Hillis
10b32e6a24 Store runtime data inside the config entry in Dremel 3D Printer (#119441)
* Store runtime data inside the config entry in Dremel 3D Printer

* add typing for config entry
2024-06-12 12:27:44 +02:00
epenet
c70cfbb535 Fix arguments-renamed pylint warning in tests (#119473) 2024-06-12 12:25:29 +02:00
epenet
d69e62c096 Ignore undefined-loop-variable pylint warnings in zha tests (#119476) 2024-06-12 12:24:16 +02:00
epenet
8323266960 Use pytest.mark.parametrize in airthings_ble tests (#119461) 2024-06-12 12:23:24 +02:00
epenet
7d631c28a6 Ignore attribute-defined-outside-init pylint warnings in tests (#119470) 2024-06-12 12:22:31 +02:00
epenet
2a7e78a80f Ignore broad-exception-raised pylint warnings in tests (#119468) 2024-06-12 12:21:41 +02:00
J. Nick Koston
0c79eeabdf Bump uiprotect to 1.1.0 (#119449) 2024-06-12 10:10:40 +02:00
Joakim Plate
47d3993805 Add loggers to gardena bluetooth (#119460) 2024-06-12 10:08:41 +02:00
Sebastian Goscik
35417649cd Bump uiprotect to v1.0.1 (#119436) 2024-06-11 18:20:00 -05:00
MJJ
34cfa0fd0e Bump buieradar to 1.0.6 (#119433) 2024-06-11 17:01:11 -05:00
Josef Zweck
bce8f2a25a Migrate lamarzocco to entry.runtime_data (#119425)
migrate lamarzocco to entry.runtime_data
2024-06-11 22:27:47 +02:00
J. Nick Koston
400b8a8361 Bump uiprotect to 1.0.0 (#119415) 2024-06-11 20:59:28 +02:00
J. Nick Koston
4f28f3a5fc Fix incorrect key name in unifiprotect options strings (#119417) 2024-06-11 20:58:05 +02:00
Douglas Krahmer
e6df0be072 Add support for Tuya non-standard contact sensors (#115557)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-06-11 18:09:57 +02:00
Aidan Timson
c907912dd1 Restructure and setup dedicated coordinator for Azure DevOps (#119199) 2024-06-11 18:08:58 +02:00
epenet
a0abd537c6 Adjust nacl import in tests (#119392) 2024-06-11 18:06:30 +02:00
epenet
9e8f9abbf7 Ignore misplaced-bare-raise warnings in tests (#119403) 2024-06-11 17:59:54 +02:00
epenet
7388271689 Fix unspecified-encoding warnings in tests (#119405) 2024-06-11 17:58:40 +02:00
epenet
6bb9011db3 Fix use-implicit-booleaness-not-len warnings in tests (#119407) 2024-06-11 17:57:58 +02:00
epenet
7384140a60 Fix pointless-exception-statement warning in tests (#119402) 2024-06-11 17:20:23 +02:00
epenet
5531e54745 Ignore no-name-in-module warnings in tests (#119401) 2024-06-11 16:37:07 +02:00
Erik Montnemery
8620bef5b0 Support shared keys starting with period in services.yaml (#118789) 2024-06-11 16:31:19 +02:00
epenet
ea571a6997 Fix unnecessary-dunder-call pylint warnings in tests (#119379) 2024-06-11 16:18:16 +02:00
epenet
bdf69c2e5b Remove deprecated imports in config tests (#119393) 2024-06-11 16:11:10 +02:00
epenet
fce4fc663e Fix import-outside-toplevel pylint warnings in core tests (#119394) 2024-06-11 16:10:34 +02:00
epenet
4bca0ad956 Fix incorrect constants in google_travel_time tests (#119395) 2024-06-11 16:10:17 +02:00
epenet
50356aa877 Drop use of deprecated constant in zha tests (#119397) 2024-06-11 16:09:53 +02:00
epenet
68a84c365d Fix incorrect constants in streamlabswater tests (#119399) 2024-06-11 16:09:02 +02:00
Sebastian Schneider
6df7c34aa2 Add switch to Tuya thermostat: child_lock (#113052) 2024-06-11 15:22:49 +02:00
Erik Montnemery
8c27214dc9 Use statistic tables' duration attribute instead of magic numbers (#119356) 2024-06-11 15:12:20 +02:00
epenet
18722aeccb Improve type hints and fix pylint warnings in util tests (#119355) 2024-06-11 15:07:40 +02:00
epenet
e14146d7c9 Fix consider-using-with pylint warnings in matrix tests (#119365) 2024-06-11 15:06:44 +02:00
epenet
2e9f63ced6 Fix use-maxsplit-arg pylint warnings in tests (#119366) 2024-06-11 15:06:16 +02:00
Jafar Atili
9af13e54c1 Bump pyElectra to 1.2.3 (#119369) 2024-06-11 15:05:53 +02:00
epenet
65befcf5d4 Fix import pylint warning in core tests (#119359) 2024-06-11 15:04:00 +02:00
epenet
e57bac6da8 Fix confusing-with-statement pylint warnings (#119364) 2024-06-11 15:03:03 +02:00
epenet
1974ea4fdd Improve type hints in yaml util tests (#119358) 2024-06-11 15:01:54 +02:00
epenet
d9b3ee35a0 Fix typo in pylint plugin (#119362) 2024-06-11 15:01:14 +02:00
epenet
5abdc83b2e Fix non-parent-init-called pylint warning in google_assistant tests (#119367) 2024-06-11 15:00:23 +02:00
epenet
d376371c25 Fix pylint warnings in testing config custom components (#119370) 2024-06-11 14:59:49 +02:00
epenet
2c7022950c Fix import-outside-toplevel pylint warnings in tests (#119389) 2024-06-11 14:57:50 +02:00
epenet
43db0e457c Fix pylint warnings in xiaomi tests (#119373) 2024-06-11 14:56:53 +02:00
Franck Nijhof
090d296135 2024.6.2 (#119376) 2024-06-11 14:41:12 +02:00
Erik Montnemery
f9cf7598da Fix missing checks in core config test (#119387) 2024-06-11 14:13:12 +02:00
Erik Montnemery
27fe00125d Fix typo in auth (#119388) 2024-06-11 14:01:23 +02:00
Erik Montnemery
904b89df80 Allow importing typing helper in core files (#119377)
* Allow importing typing helper in core files

* Really fix the circular import

* Update test
2024-06-11 13:48:12 +02:00
epenet
572700a326 Ignore c-extension-no-member pylint warnings in tests (#119378) 2024-06-11 12:57:43 +02:00
epenet
18f30d2ee9 Fix pointless-string-statement pylint warning in emulated_hue tests (#119368) 2024-06-11 11:57:54 +02:00
Franck Nijhof
415bfb40a7 Bump version to 2024.6.2 2024-06-11 11:21:51 +02:00
Maciej Bieniek
7ced4e981e Bump imgw-pib backend library to version 1.0.5 (#119360)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-11 11:17:29 +02:00
swcloudgenie
b656ef4d4f Fix AladdinConnect OAuth domain (#119336)
fix aladdin connect oauth domain
2024-06-11 11:17:26 +02:00
Erik Montnemery
6ea18a7b24 Fix statistic_during_period after core restart (#119323) 2024-06-11 11:17:22 +02:00
Bram Kragten
a0ac9fe6c9 Update frontend to 20240610.0 (#119320) 2024-06-11 11:16:04 +02:00
Jan-Philipp Benecke
135735126a Add more debug logging to Ping integration (#119318) 2024-06-11 11:10:36 +02:00
J. Nick Koston
3bc6cf666a Bump uiprotect to 0.4.1 (#119308) 2024-06-11 11:10:33 +02:00
Franck Nijhof
1929e103c0 Fix persistence on OpenWeatherMap raised repair issue (#119289) 2024-06-11 11:10:30 +02:00
J. Nick Koston
74b49556f9 Improve workday test coverage (#119259) 2024-06-11 11:10:27 +02:00
J. Nick Koston
8d40f4d39f Bump uiprotect to 0.4.0 (#119256) 2024-06-11 11:10:24 +02:00
Allen Porter
eed126c6d4 Bump google-nest-sdm to 4.0.5 (#119255) 2024-06-11 11:10:21 +02:00
J. Nick Koston
38cd84fa5f Fix climate on/off in nexia (#119254) 2024-06-11 11:10:18 +02:00
Abílio Costa
a28f5baeeb Fix wrong arg name in Idasen Desk config flow (#119247) 2024-06-11 11:10:14 +02:00
J. Nick Koston
f9352dfe8f Switch unifiprotect lib to use uiprotect (#119243) 2024-06-11 11:09:20 +02:00
J. Nick Koston
5beff34069 Remove myself as codeowner for unifiprotect (#118824) 2024-06-11 10:59:51 +02:00
Joakim Plate
119d4c2316 Always provide a currentArmLevel in Google assistant (#119238) 2024-06-11 10:29:34 +02:00
epenet
1e7ab07d9e Revert SamsungTV migration (#119234) 2024-06-11 10:29:31 +02:00
Ethem Cem Özkan
7896e7675c Bump python-roborock to 2.3.0 (#119228) 2024-06-11 10:29:28 +02:00
wittypluck
8b415a0376 Fix Glances v4 network and container issues (glances-api 0.8.0) (#119226) 2024-06-11 10:29:25 +02:00
Angel Nunez Mencias
6a656c5d49 Fixes crashes when receiving malformed decoded payloads (#119216)
Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com>
2024-06-11 10:29:21 +02:00
G Johansson
8d094bf12e Fix envisalink alarm (#119212) 2024-06-11 10:29:18 +02:00
Sid
c71b6bdac9 Add fallback to entry_id when no mac address is retrieved in enigma2 (#119185) 2024-06-11 10:29:15 +02:00
tronikos
57cc1f841b Bump opower to 0.4.7 (#119183) 2024-06-11 10:29:12 +02:00
Quentin
d8f3778d77 Fix elgato light color detection (#119177) 2024-06-11 10:29:08 +02:00
Shay Levy
9a8e3ad5cc Handle Shelly BLE errors during connect and disconnect (#119174) 2024-06-11 10:29:05 +02:00
Michael
019d33c06c Use more conservative timeout values in Synology DSM (#119169)
use ClientTimeout object
2024-06-11 10:29:02 +02:00
Michael
40ebf3b2a9 Bump py-synologydsm-api to 2.4.4 (#119156)
bump py-synologydsm-api to 2.4.4
2024-06-11 10:28:58 +02:00
Tom Brien
7912c9e95c Fix workday timezone (#119148) 2024-06-11 10:28:55 +02:00
Paulus Schoutsen
4bb1ea1da1 Ensure intent tools have safe names (#119144) 2024-06-11 10:28:51 +02:00
Joost Lekkerkerker
a696ea18d3 Bump aiowaqi to 3.1.0 (#119124) 2024-06-11 10:28:48 +02:00
Shay Levy
df96b94985 Bump aioshelly to 10.0.1 (#119123) 2024-06-11 10:28:45 +02:00
tronikos
0f8ed4e73d Catch GoogleAPICallError in Google Generative AI (#119118) 2024-06-11 10:28:41 +02:00
tronikos
34477d3559 Properly handle escaped unicode characters passed to tools in Google Generative AI (#119117) 2024-06-11 10:28:38 +02:00
Austin Drummond
96ac566032 Fix control 4 on os 2 (#119104) 2024-06-11 10:28:35 +02:00
J. Nick Koston
87f48b15d1 Ensure multiple executions of a restart automation in the same event loop iteration are allowed (#119100)
* Add test for restarting automation

related issue #119097

* fix

* add a delay since restart is an infinite loop

* tests
2024-06-11 10:28:31 +02:00
kaareseras
a1f2140ed7 Fix Azure data explorer (#119089)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-11 10:28:28 +02:00
tronikos
db7a9321be Bump google-generativeai to 0.6.0 (#119062) 2024-06-11 10:28:24 +02:00
G Johansson
ebb0a453f4 Calculate attributes when entity information available in Group sensor (#119021) 2024-06-11 10:28:21 +02:00
Joakim Plate
7da10794a8 Update gardena library to 1.4.2 (#119010) 2024-06-11 10:28:18 +02:00
Ruben Bokobza
461f0865af Bump pyElectra to 1.2.1 (#118958) 2024-06-11 10:28:15 +02:00
karwosts
fc83bb1737 Fix statistic_during_period wrongly prioritizing ST statistics over LT (#115291)
* Fix statistic_during_period wrongly prioritizing ST statistics over LT

* comment

* start of a test

* more testcases

* fix sts insertion range

* update from review

* remove unneeded comments

* update logic

* min/mean/max testing
2024-06-11 10:28:09 +02:00
Jirka
a3356f4ee6 Fix typo in Tibber service description (#119354) 2024-06-11 09:36:12 +02:00
G Johansson
fc915dc1bf Calculate attributes when entity information available in Group sensor (#119021) 2024-06-11 09:26:44 +02:00
Maciej Bieniek
b84ea1edeb Bump imgw-pib backend library to version 1.0.5 (#119360)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-11 09:22:55 +02:00
kaareseras
511547c29a Fix Azure data explorer (#119089)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-11 09:18:06 +02:00
epenet
08eb8232e5 Fix namespace-import pylint warning in shelly tests (#119349) 2024-06-11 08:08:47 +02:00
epenet
a3ac0af56d Ignore some pylint errors in component tests (#119352) 2024-06-11 08:01:52 +02:00
epenet
4320445c30 Use absolute import in roborock tests (#119353) 2024-06-11 07:59:46 +02:00
epenet
ecad1bef7e Avoid cross-domain imports in scrape tests (#119351) 2024-06-11 07:57:45 +02:00
Paulus Schoutsen
0ea9581cfc OpenAI to respect custom conversation IDs (#119307) 2024-06-11 07:49:14 +02:00
Jesse Hills
cdd9f19cf9 Bump aioesphomeapi to 24.6.0 (#119348) 2024-06-11 07:32:40 +02:00
Jan Bouwhuis
8942088419 Customize incomfort binary sensor icons (#119331) 2024-06-11 07:07:52 +02:00
Ishima
013c117570 Add Xiaomi Air Purifier Pro H EU (zhimi.airpurifier.vb2) (#119149) 2024-06-11 07:06:25 +02:00
Ruben Bokobza
35347929ca Bump pyElectra to 1.2.1 (#118958) 2024-06-11 07:04:25 +02:00
middlingphys
cceb0d8b47 Fix typo in Ecovacs integration (#119346) 2024-06-11 06:56:31 +02:00
Jan Bouwhuis
dd6cfdf731 Bump incomfort backend client to v0.6.2 (#119330) 2024-06-11 06:55:05 +02:00
Joakim Plate
958a456275 Allow source sensor to be changed in threshold helper (#119157)
* Allow source sensor to be changed in threshold helper

* Make sure old device link is removed on entry change

* Add test case for changed association
2024-06-11 06:41:29 +02:00
J. Nick Koston
f02383e10d Bump uiprotect to 0.13.0 (#119344) 2024-06-10 22:50:44 -05:00
Jake Martin
9bb9792607 Move runtime_data deletion after unload (#119224)
* Move runtime_data deletion after unload.

Doing this before unload means we can't use, eg. the coordinator, during teardown.

* Re-order config entry on unload

* Add test

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-06-10 22:11:07 -04:00
J. Nick Koston
3308f07d4b Speed up generating large stats results (#119210)
* Speed up generating large stats results

* naming

* fix type

* fix type

* tweak

* tweak

* delete unused code
2024-06-10 21:22:59 -04:00
J. Nick Koston
0149698002 Bump uiprotect to 0.10.1 (#119327)
Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com>
2024-06-10 20:03:23 -05:00
Jan Bouwhuis
ea6729ab5f Fix enigma2 option flow (#119335) 2024-06-10 23:43:30 +02:00
swcloudgenie
68a9f3a048 Fix AladdinConnect OAuth domain (#119336)
fix aladdin connect oauth domain
2024-06-10 23:40:24 +02:00
J. Nick Koston
8855289d9c Migrate august to use yalexs 6.0.0 (#119321) 2024-06-10 21:50:11 +02:00
Erik Montnemery
def9d5b101 Fix statistic_during_period after core restart (#119323) 2024-06-10 21:44:55 +02:00
Álvaro Fernández Rojas
632f136c02 Update Airzone Cloud to v0.5.2 and add fan speeds to Zones (#119314)
* Update aioairzone-cloud to v0.5.2
* airzone_cloud: climate: add zone fan speeds support

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2024-06-10 21:18:48 +02:00
Bas Brussee
b30a924e03 Add price service call to Tibber (#117366)
Co-authored-by: Daniel Hjelseth Høyer <mail@dahoiv.net>
Co-authored-by: Jason R. Coombs <jaraco@jaraco.com>
2024-06-10 21:16:51 +02:00
Sid
6184fd26d3 Add options flow to enigma2 (#115795)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-06-10 21:13:12 +02:00
Brett Adams
4a9ebd9af1 Refactor helpers and bump Teslemetry (#119246) 2024-06-10 21:12:09 +02:00
Quentin
04c8a5574a Fix elgato light color detection (#119177) 2024-06-10 20:58:15 +02:00
Jan Bouwhuis
51d78c3c25 Improve incomfort binary sensors (#119292)
* Improve incomfort binary_sensor, add is_burning, is_pumping and is_tapping

* Update test snapshot

* Use helper for fault code label name

* Update tests

* Remove extra state attribute

* Make default Fault `none` to supprt localization

* Update snapshot
2024-06-10 20:57:36 +02:00
osohotwateriot
53d5a65f2c Add OSO Energy temperature sensors (#119301) 2024-06-10 20:48:41 +02:00
Cyr-ius
8d3e3faf02 Use runtime_data in Husqvarna Automower (#119309) 2024-06-10 20:46:29 +02:00
epenet
650cf13bca Improve type hints in aiohttp_client helper tests (#119300) 2024-06-10 20:31:19 +02:00
J. Nick Koston
612743077a Improve workday test coverage (#119259) 2024-06-10 20:26:52 +02:00
epenet
eb6af2238c Improve type hints in registry helper tests (#119302) 2024-06-10 20:25:34 +02:00
karwosts
aa419686cb Fix statistic_during_period wrongly prioritizing ST statistics over LT (#115291)
* Fix statistic_during_period wrongly prioritizing ST statistics over LT

* comment

* start of a test

* more testcases

* fix sts insertion range

* update from review

* remove unneeded comments

* update logic

* min/mean/max testing
2024-06-10 20:23:21 +02:00
Bram Kragten
f75cc1da24 Update frontend to 20240610.0 (#119320) 2024-06-10 20:22:04 +02:00
epenet
ac08cd1201 Revert SamsungTV migration (#119234) 2024-06-10 20:20:25 +02:00
Jan-Philipp Benecke
508564ece2 Add more debug logging to Ping integration (#119318) 2024-06-10 20:09:39 +02:00
Josef Zweck
42b984ee4f Migrate lamarzocco to lmcloud 1.1 (#113935)
* migrate to 1.1

* bump to 1.1.1

* fix newlines docstring

* cleanup entity_description fns

* strict generics

* restructure import

* tweaks to generics

* tweaks to generics

* removed exceptions

* move initialization, websocket clean shutdown

* get rid of duplicate entry addign

* bump lmcloud

* re-add calendar, auto on/off switches

* use asdict for diagnostics

* change number generator

* use name as entry title

* also migrate title

* don't migrate title

* remove generics for now

* satisfy mypy

* add s

* adapt

* migrate entry.runtime_data

* remove auto/onoff

* add issue on wrong gw firmware

* silence mypy

* remove breaks in ha version

* parametrize issue test

* Update update.py

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

* Update test_config_flow.py

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

* regen snapshots

* mapping steam level

* remove commented code

* fix typo

* coderabbitai availability tweak

* remove microsecond moving

* additonal schedule for coverage

* be more specific on date offset

* keep mappings the same

* config_entry imports sharpened

* remove unneccessary testcase, clenup date moving

* remove superfluous calendar testcase from diag

* guard against future version downgrade

* use new entry for downgrade test

* switch to lmcloud 1.1.11

* revert runtimedata

* revert runtimedata

* version to helper

* conistent Generator

* generator from typing_extensions

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-10 19:59:39 +02:00
Jan Bouwhuis
b7f74532dc Fix incomfort water heater return translated fault code (#119311) 2024-06-10 19:30:12 +02:00
Jan Bouwhuis
d6bcb1c5fd Add HVACAction to incomfort climate devices (#119315)
* Add HVACAction to incomfort climate devices

* Use IDLE state when not heating
2024-06-10 19:23:12 +02:00
J. Nick Koston
d74d418c06 Bump uiprotect to 0.4.1 (#119308) 2024-06-10 18:58:26 +02:00
Simone Chemelli
404ff9fd69 bump aiobotocore to 2.13.0 (#119297)
bump aiobotocore
2024-06-10 18:57:25 +03:00
tronikos
5f9455e0fd Log errors in Intent.async_handle (#119182)
* Log errors in Intent.async_handle

* log exception stack trace

* Update homeassistant/helpers/intent.py

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2024-06-10 11:33:12 -04:00
William Taylor
30fab7b807 Add support for animal detection in unifiprotect (#116290)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-10 10:16:36 -05:00
chammp
52379ad7cb Add code_format_template to template locks (#106947)
* Add code_format to template locks

* Replace code_format with code_format_template

* Add test case for template eval to None

* Apply suggestion to not call super()

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

* Add more negative tests

* Handle template render errors

* Better error message

* Add custom test lock config for code format

* Add type hints from upstream

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-06-10 16:54:17 +02:00
epenet
c896458fcf Fix namespace-import pylint warning in components (#119299) 2024-06-10 15:55:08 +02:00
epenet
fbaba3753b Fix root-import pylint warning in components (#119294)
* Fix root-import pylint warning in components

* Adjust

* Adjust
2024-06-10 15:14:49 +02:00
epenet
94b9ae14c9 Use Registry fixture in zwave_js tests (#119277) 2024-06-10 15:00:05 +02:00
epenet
6733f86c61 Use service_calls fixture in helper tests (#119275)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2024-06-10 14:57:34 +02:00
epenet
9c12067565 Don't run tests if lint-ruff-format fails (#119291) 2024-06-10 14:55:47 +02:00
Franck Nijhof
bedff29165 Fix persistence on OpenWeatherMap raised repair issue (#119289) 2024-06-10 14:55:28 +02:00
Sébastien Clément
80b2b05bd8 Change qBittorrent lib to qbittorrentapi (#113394)
* Change qBittorrent lib to qbittorrentapi

* Fix tests

* Convert qbittorrent service to new lib

* Add missing translation key

* Catch APIConnectionError in service call

* Replace type ignore by Any typing

* Remove last type: ignore

* Use lib type for torrent_filter

* Change import format

* Fix remaining Any type

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-06-10 14:27:20 +02:00
epenet
960d1289ef Avoid references to websocket_api.const in core and other components (#119285) 2024-06-10 13:49:44 +02:00
epenet
2e3c3789d3 Use relative imports in tests [s-z] (#119283) 2024-06-10 13:33:15 +02:00
epenet
ac588ddc75 Use relative imports in tests [j-r] (#119282) 2024-06-10 13:32:31 +02:00
epenet
94720fd015 Fix root-import pylint warning in dlna_dmr tests (#119286) 2024-06-10 13:31:29 +02:00
epenet
8cbfc5a58b Use service_calls fixture in arcam_fmj tests (#119274) 2024-06-10 13:09:51 +02:00
epenet
b8e57f6174 Use relative imports in tests [a-i] (#119280) 2024-06-10 12:52:34 +02:00
epenet
e818de1da8 Use service_calls fixture in scaffold (#119266) 2024-06-10 10:44:00 +02:00
Jan Bouwhuis
e114e6f862 Improve incomfort boiler state strings (#119270) 2024-06-10 10:07:38 +02:00
epenet
42f3dd636f Use service_calls fixture in bthome tests (#119268) 2024-06-10 10:05:47 +02:00
epenet
a5cde4b32b Use device_registry fixture in webostv tests (#119269) 2024-06-10 09:40:54 +02:00
epenet
1ebc1685f7 Improve type hints in camera tests (#119264) 2024-06-10 09:30:00 +02:00
epenet
d9362a2f2f Improve type hints in axis tests (#119260)
* Improve type hints in axis tests

* A couple more

* One more

* Improve light

* Improve hub

* Improve config-flow
2024-06-10 08:49:43 +02:00
epenet
2d2f5de191 Improve type hints in blueprint tests (#119263) 2024-06-10 08:49:18 +02:00
Austin Drummond
ea3097f84c Fix control 4 on os 2 (#119104) 2024-06-10 08:48:11 +02:00
Diogo Gomes
0873322af7 Moves V2C from hass.data to config_entry.runtime_data (#119165)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2024-06-10 08:47:08 +02:00
Angel Nunez Mencias
731df892c6 Fixes crashes when receiving malformed decoded payloads (#119216)
Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com>
2024-06-10 08:41:22 +02:00
epenet
733e563500 Improve type hints in blackbird tests (#119262) 2024-06-10 08:39:24 +02:00
J. Nick Koston
d4baad62ef Bump uiprotect to 0.4.0 (#119256) 2024-06-10 08:36:36 +02:00
Allen Porter
edc7c58bba Bump google-nest-sdm to 4.0.5 (#119255) 2024-06-10 08:35:54 +02:00
Kevin Stillhammer
42e2c2b3e9 google_travel_time: Merge user_input validation (#119221) 2024-06-10 08:26:24 +02:00
wittypluck
f6c6b3cf6c Fix Glances v4 network and container issues (glances-api 0.8.0) (#119226) 2024-06-10 08:25:39 +02:00
Allen Porter
f046545883 Fix nest to cancel event listener on config entry unload (#119257) 2024-06-10 08:18:50 +02:00
J. Nick Koston
8b6fbd5b3f Fix climate on/off in nexia (#119254) 2024-06-10 08:17:29 +02:00
Franck Nijhof
8b5627b1be Temporary pin CI to Python 3.12.3 (#119261) 2024-06-10 08:08:52 +02:00
Brett Adams
159503b8d3 Add model to Teslemetry Wall Connectors (#119251) 2024-06-10 07:48:09 +02:00
Joakim Plate
8a0cc55278 Always provide a currentArmLevel in Google assistant (#119238) 2024-06-10 07:47:16 +02:00
Jan Bouwhuis
4376e0931a Add boiler entity state translations for incomfort water_heater entities (#119211) 2024-06-10 07:46:07 +02:00
Abílio Costa
be22214a33 Fix wrong arg name in Idasen Desk config flow (#119247) 2024-06-10 03:02:38 +02:00
J. Nick Koston
d657feafa6 Switch unifiprotect lib to use uiprotect (#119243) 2024-06-09 18:25:39 -05:00
starkillerOG
b70a33a718 Add Reolink manual record switch (#119232)
Add manual record switch
2024-06-09 23:02:11 +02:00
Ethem Cem Özkan
39820caa1a Bump python-roborock to 2.3.0 (#119228) 2024-06-09 22:58:49 +02:00
starkillerOG
0c585e1836 Bump reolink-aio to 0.9.2 (#119236) 2024-06-09 22:57:12 +02:00
David Knowles
9b41fa5f25 Bump pyschlage to 2024.6.0 (#119233) 2024-06-09 22:56:19 +02:00
Robert Svensson
325352e197 Fixture cleanup in UniFi tests (#119227)
* Make sure all mock_device_registry are used with usefixtuers

* Make sure to use name with fixtures and rename functions to start with fixture_

* Streamline config_entry_setup

* Type all *_payload

* Mark @pytest.mark.usefixtures("mock_default_requests")

* Clean up unnecessary newlines after docstring
2024-06-09 16:07:36 -04:00
epenet
7dfaa05793 Improve type hints in amberelectric tests (#119229) 2024-06-09 22:04:40 +02:00
epenet
06c1c435d1 Improve type hints in ambient_station tests (#119230) 2024-06-09 21:50:13 +02:00
Jake Martin
c03f9d264e Bump monzopy to 1.3.0 (#119225) 2024-06-09 20:24:33 +02:00
Jan Bouwhuis
4ca38f227a Fix - Remove unneeded assert in teslemetry test (#119219)
Remove unneded assert in teslemetry test
2024-06-09 19:21:37 +02:00
J. Nick Koston
7065c0993d Reduce overhead to reduce statistics (#119187) 2024-06-09 18:33:10 +02:00
J. Nick Koston
909df675e0 Use a listcomp for history results (#119188) 2024-06-09 18:32:33 +02:00
Brett Adams
38ab121db5 Add cabin overheat protection entity to Teslemetry (#118449)
* test_cabin_overheat_protection

* Fix snapshot

* Translate error

* Review Feedback
2024-06-09 18:30:36 +02:00
Joakim Plate
30e11ed068 Update links between config entry and device on sensor change in integral (#119213) 2024-06-09 18:26:33 +02:00
G Johansson
09ba9547ed Fix envisalink alarm (#119212) 2024-06-09 18:14:46 +02:00
Kevin Stillhammer
93fa9e778b Add reconfigure step for google_travel_time (#115178)
* Add reconfigure step for google_travel_time

* Do not allow to change name

* Duplicate tests for reconfigure

* Use link for description in strings.json

* Try except else

* Extend existing config flow tests
2024-06-09 18:13:32 +02:00
Jan Bouwhuis
361c46d491 Bump incomfort backend client to v0.6.1 (#119209) 2024-06-09 17:48:17 +02:00
Joost Lekkerkerker
b4c9b3f109 Create DWD device with unique_id instead of entry_id (#116498)
Co-authored-by: Matthias Alphart <farmio@alphart.net>
2024-06-09 16:36:36 +02:00
Erik Montnemery
04a5a1d18b Improve demo config flow and add tests (#118481)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-06-09 16:02:58 +02:00
Joost Lekkerkerker
b26f613d06 Add config flow to MPD (#117907) 2024-06-09 16:01:19 +02:00
Robert Svensson
c9911e4dd4 Rework UniFi tests to not use runtime data (#119202) 2024-06-09 15:56:26 +02:00
Jan Bouwhuis
34f20fce36 Bump incomfort backend library to v0.6.0 (#119207) 2024-06-09 15:52:34 +02:00
Joost Lekkerkerker
279f183ce3 Remove Harmony switches (#119206) 2024-06-09 15:51:01 +02:00
J. Nick Koston
d9f1d40805 Migrate august to use yalexs 5.2.0 (#119178) 2024-06-09 12:30:41 +02:00
Robert Svensson
ff493a8a9d Rewrite the UniFi button entity tests (#118771) 2024-06-09 12:25:06 +02:00
Jonathan Jogenfors
5829d9d8ab Fix sia custom bypass arming in night mode (#119168) 2024-06-09 12:03:15 +02:00
Shay Levy
04222c32b5 Handle Shelly BLE errors during connect and disconnect (#119174) 2024-06-09 11:59:40 +02:00
Sid
b937fc0cfe Add fallback to entry_id when no mac address is retrieved in enigma2 (#119185) 2024-06-09 11:59:14 +02:00
Jakob Schlyter
f32b29e700 Add myself as codeowner for amazon_polly (#119189) 2024-06-09 11:57:54 +02:00
tronikos
9e7a6408c2 Bump opower to 0.4.7 (#119183) 2024-06-09 09:45:59 +02:00
Robert Hillis
a38d88730d Remove Netgear LTE yaml import (#119180)
Remove Netgear LTE yaml config
2024-06-09 09:44:56 +02:00
Michael
b577ce61b8 Use more conservative timeout values in Synology DSM (#119169)
use ClientTimeout object
2024-06-08 23:52:14 +02:00
J. Nick Koston
ad7097399e Ensure multiple executions of a restart automation in the same event loop iteration are allowed (#119100)
* Add test for restarting automation

related issue #119097

* fix

* add a delay since restart is an infinite loop

* tests
2024-06-08 17:07:39 -04:00
tronikos
0ca4314d48 Make supported_features of manual alarm_control_panel configurable (#119122) 2024-06-08 16:54:32 -04:00
Guy Shefer
7e1806229b Fix Tami4 component breaking API changes (#119158)
* fix tami4 api breaking changes

* fix tests
2024-06-08 16:52:15 -04:00
Robert Svensson
d6097573f5 Remove old UniFi test infrastructure (#119160)
Clean up hub
2024-06-08 16:44:24 -04:00
Michael
d6ec8a4a96 Bump py-synologydsm-api to 2.4.4 (#119156)
bump py-synologydsm-api to 2.4.4
2024-06-08 21:24:59 +02:00
Sid
a662ee772c Use runtime_data for enigma2 (#119154)
* Use runtime_data for enigma2

* Update __init__.py
2024-06-08 20:40:34 +02:00
xyzroe
ae0e751a6d Add ZHA XZG firmware discovery (#116828) 2024-06-08 18:06:25 +02:00
Sid
721b2c2ca8 Enable Ruff PT012 (#113957) 2024-06-08 17:59:08 +02:00
Robert Svensson
915658daa1 Fix failing UniFi tests related to utcnow (#119131)
* test

* Fix missed test
2024-06-08 17:58:47 +02:00
Paulus Schoutsen
c49ca5ed56 Ensure intent tools have safe names (#119144) 2024-06-08 17:53:47 +02:00
Tom Brien
fff2c1115d Fix workday timezone (#119148) 2024-06-08 17:53:20 +02:00
Franck Nijhof
a64d6e548c Update Home Assistant base image to 2024.06.0 (#119147) 2024-06-08 17:52:23 +02:00
Raman Gupta
2c41451abc Add new security keys to zwave_js config flow (#115835) 2024-06-08 11:31:05 -04:00
Richard Kroegel
43343ea44a Adjust BMW enum sensors translations (#118754)
Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-06-08 17:08:37 +02:00
Christian Neumeier
a2504dafbc Refactor Zeversolar init tests (#118551)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-06-08 16:34:17 +02:00
epenet
5166426d0a Add type hints for service_calls fixture in pylint plugin (#118356) 2024-06-08 16:32:27 +02:00
Richard Kroegel
b04a65f4d1 Change BMW select and sensor enums to lowercase (#118751)
Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-06-08 16:25:45 +02:00
Maciej Bieniek
cb672b85f4 Add icon translations to AccuWeather (#119134)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-08 15:57:22 +02:00
Maciej Bieniek
27df79daf1 Use translation placeholders in AccuWeather (#118760)
* Use translation placeholder

* Update test snapshot

---------

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-08 14:00:55 +02:00
Joost Lekkerkerker
53f1cd8e72 Improve withings diagnostics (#119128) 2024-06-08 12:27:24 +02:00
Joost Lekkerkerker
522a1e9d56 Add support for segmental measurements in Withings (#119126) 2024-06-08 11:56:23 +02:00
Joost Lekkerkerker
675048cc38 Bump aiowaqi to 3.1.0 (#119124) 2024-06-08 11:28:45 +02:00
Matthias Alphart
fff5715a06 Require KNX boolean service descriptor selectors (#118597) 2024-06-08 11:09:52 +02:00
Lucas Mindêllo de Andrade
ad2ff500de Bump sunweg to 3.0.1 (#118435) 2024-06-08 10:57:44 +02:00
Shay Levy
742dd61d36 Bump aioshelly to 10.0.1 (#119123) 2024-06-08 10:44:37 +02:00
t0bst4r
deac59f1ee Add intelligent language matching for Google Assistant SDK Agents (#112600)
Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-06-08 09:50:15 +02:00
tronikos
f605c10f42 Properly handle escaped unicode characters passed to tools in Google Generative AI (#119117) 2024-06-08 09:02:00 +02:00
rwalker777
f07e7ec543 Add Tuya based bluetooth lights (#119103) 2024-06-08 08:59:14 +02:00
tronikos
5fdfafd57f Catch GoogleAPICallError in Google Generative AI (#119118) 2024-06-08 08:51:42 +02:00
Brett Adams
e4be3d8435 Improve the reliability of tests in Tessie (#118596) 2024-06-07 22:11:35 +02:00
Marc Mueller
00f78dc522 Update typing-extensions to 4.12.2 (#119098) 2024-06-07 22:06:51 +02:00
Robert Svensson
20df747806 Use fixtures in UniFi device tracker tests (#118912) 2024-06-07 21:28:02 +02:00
Franck Nijhof
b28cdcfc49 2024.6.1 (#119096) 2024-06-07 21:20:44 +02:00
Erik Montnemery
6c15351c18 Add support for common references in strings.json (#118783)
* Add support for common references in strings.json

* Update tests
2024-06-07 20:59:26 +02:00
epenet
b2a54c50e2 Move mock_zeroconf to decorator in tests (#119061) 2024-06-07 20:55:20 +02:00
tronikos
ae59d0eadf Bump google-generativeai to 0.6.0 (#119062) 2024-06-07 20:50:55 +02:00
epenet
4a4c98caad Move mock_async_zeroconf to decorator in zeroconf tests (#119063) 2024-06-07 20:49:58 +02:00
J. Nick Koston
1bda33b1e9 Bump home-assistant-bluetooth to 1.12.1 (#119026) 2024-06-07 13:48:36 -05:00
OzGav
aa121ebf73 Add previous track intent (#113222)
* add previous track intent

* add stop and clear playlist

* Remove clear_playlist and stop

* Remove clear_playlist and stop

* Use extra constraints

---------

Co-authored-by: Michael Hansen <mike@rhasspy.org>
2024-06-07 13:34:22 -05:00
Franck Nijhof
3f70e2b6f0 Bump version to 2024.6.1 2024-06-07 20:26:53 +02:00
Joost Lekkerkerker
ed22e98861 Fix Azure Data Explorer strings (#119067) 2024-06-07 20:24:03 +02:00
Marc Mueller
093f07c04e Add type ignore comments (#119052) 2024-06-07 20:24:00 +02:00
Joost Lekkerkerker
b5693ca604 Fix AirGradient name (#119046) 2024-06-07 20:23:57 +02:00
J. Nick Koston
20b77aa15f Fix remember_the_milk calling configurator async api from the wrong thread (#119029) 2024-06-07 20:23:53 +02:00
J. Nick Koston
1cbd3ab930 Fix refactoring error in snmp switch (#119028) 2024-06-07 20:23:50 +02:00
Matthias Alphart
31b44b7846 Fix KNX climate.set_hvac_mode not turning on (#119012) 2024-06-07 20:23:47 +02:00
Matthias Alphart
de3a0841d8 Increase test coverage for KNX Climate (#117903)
* Increase test coverage fro KNX Climate

* fix test type annotation
2024-06-07 20:23:40 +02:00
Mike Degatano
581fb2f9f4 Always have addon url in detached_addon_missing (#119011) 2024-06-07 20:21:25 +02:00
Shay Levy
5bb4e4f5d9 Hold connection lock in Shelly RPC reconnect (#119009) 2024-06-07 20:21:22 +02:00
J. Nick Koston
cfa619b67e Remove isal from after_dependencies in http (#119000) 2024-06-07 20:21:18 +02:00
Michael Hansen
56db7fc7dc Fix exposure checks on some intents (#118988)
* Check exposure in climate intent

* Check exposure in todo list

* Check exposure for weather

* Check exposure in humidity intents

* Add extra checks to weather tests

* Add more checks to todo intent test

* Move climate intents to async_match_targets

* Update test_intent.py

* Update test_intent.py

* Remove patch
2024-06-07 20:20:41 +02:00
Joost Lekkerkerker
1f6be7b4d1 Fix unit of measurement for airgradient sensor (#118981) 2024-06-07 20:18:45 +02:00
Maciej Bieniek
52d1432d81 Bump imgw-pib library to version 1.0.4 (#118978)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-07 20:18:41 +02:00
David Knowles
14da1e9b23 Bump pydrawise to 2024.6.3 (#118977) 2024-06-07 20:18:38 +02:00
G Johansson
d6e1d05e87 Bump python-holidays to 0.50 (#118965) 2024-06-07 20:18:35 +02:00
G Johansson
62f73cfcca Fix Alarm control panel not require code in several integrations (#118961) 2024-06-07 20:18:32 +02:00
Maciej Bieniek
6e9a53d02e Bump imgw-pib backend library to version 1.0.2 (#118953)
Bump imgw-pib to version 1.0.2

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-07 20:18:28 +02:00
J. Nick Koston
394c13af1d Revert "Bump orjson to 3.10.3 (#116945)" (#118920)
This reverts commit dc50095d06.
2024-06-07 20:17:01 +02:00
Jan-Philipp Benecke
86b13e8ae3 Fix flaky Google Assistant test (#118914)
* Fix flaky Google Assistant test

* Trigger full ci
2024-06-07 20:16:58 +02:00
Rami Mosleh
5a7332a135 Check if imap message text has a value instead of checking if its not None (#118901)
* Check if message_text has a value instead of checking if its not None

* Strip message_text to ensure that its actually empty or not

* Add test with multipart payload having empty plain text
2024-06-07 20:16:55 +02:00
Michael Hansen
0f9a91d369 Prioritize literal text with name slots in sentence matching (#118900)
Prioritize literal text with name slots
2024-06-07 20:16:52 +02:00
Marc Mueller
00dd86fb4b Update requests to 2.32.3 (#118868)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-07 20:16:47 +02:00
J. Nick Koston
440185be25 Fix refactoring error in snmp switch (#119028) 2024-06-07 20:09:48 +02:00
epenet
cd7f2f9f77 Fix incorrect type hints in azure_data_explorer tests (#119065) 2024-06-07 20:07:38 +02:00
epenet
9008b4295c Improve type hints in assist_pipeline tests (#119066) 2024-06-07 12:39:25 -05:00
paulusbrand
624017a0f9 Add template Base64 decode encoding parameter (#116603)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-07 17:01:35 +02:00
Joost Lekkerkerker
0556d9d4ed Fix Azure Data Explorer strings (#119067) 2024-06-07 16:31:50 +02:00
epenet
37b0e8fa33 Improve type hints in airvisual test fixtures (#119079) 2024-06-07 07:35:33 -06:00
epenet
5bf42e64e3 Improve type hints in arcam_fmj tests (#119072) 2024-06-07 15:33:43 +02:00
Dos Moonen
59c8270b1a Bump solax from 3.1.0 to 3.1.1 (#118888) 2024-06-07 15:16:07 +02:00
epenet
549f66fd6f Move mock_async_zeroconf to decorator in homekit tests (#119060) 2024-06-07 12:30:02 +02:00
Yuxin Wang
81ee5fb46b Refine sensor descriptions for APCUPSD (#114137)
* Refine sensor descriptions for APCUPSD

* Add device class for cumonbatt

* Add UoM to STESTI and TIMELEFT

* Remove device class for STESTI
2024-06-07 12:28:59 +02:00
Greg Dowling
92ed20ffbf Add mute_toggle to roon volume events (#114171)
Add mute_toggle event.
2024-06-07 12:25:14 +02:00
Robert Svensson
a8becb1248 Use fixtures in UniFi sensor tests (#118921) 2024-06-07 12:15:03 +02:00
Joost Lekkerkerker
f6c66dfd27 Bump aiowithings to 3.0.1 (#118854) 2024-06-07 12:11:15 +02:00
epenet
bfff3c0524 Add type hint to mock_async_zeroconf in test fixtures (#119057) 2024-06-07 12:09:18 +02:00
epenet
5f309b69cf Add type hints to current_request_with_host in tests (#119054) 2024-06-07 11:40:23 +02:00
epenet
907297cd1a Improve type hints in config tests (#119055) 2024-06-07 11:40:03 +02:00
epenet
1c8a9cc3b8 Remove unused caplog fixtures in tests (#119056) 2024-06-07 11:38:56 +02:00
epenet
b3a71dcea3 Improve type hints in homekit_controller tests (#119053) 2024-06-07 11:31:45 +02:00
Marc Mueller
af65da3875 Add type ignore comments (#119052) 2024-06-07 11:13:33 +02:00
Jeef
4600960895 Align weatherflow_cloud weather conditions with Home Assistant supported conditions (#114497)
* WeatherFlow Cloud changing icon mapping specificaly for Colorado

* changing name to state_map
2024-06-07 11:02:41 +02:00
Huyuwei
7947f63860 Enable retrieving sensor data from WoHub2 device and update pySwitchbot to 0.47.2 (#118567) 2024-06-07 10:56:12 +02:00
dependabot[bot]
5fafbebf87 Bump dawidd6/action-download-artifact from 4 to 5 (#118851)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-07 10:54:31 +02:00
G Johansson
f2d674d28d Bump babel to 2.15.0 (#119006) 2024-06-07 10:53:54 +02:00
Mike Degatano
78f53341b7 Always have addon url in detached_addon_missing (#119011) 2024-06-07 10:52:15 +02:00
epenet
42b1cfe6b9 Improve type hints in azure_event_hub tests (#119047)
Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
2024-06-07 10:50:03 +02:00
epenet
7638380add Improve type hints in kaleidescape tests (#119040) 2024-06-07 10:49:09 +02:00
epenet
c107d980fa Improve type hints in motionblinds_ble tests (#119049) 2024-06-07 10:43:56 +02:00
epenet
d5a68ad311 Improve type hints in zamg tests (#119042) 2024-06-07 10:25:11 +02:00
Christopher Fenner
539b9d76fc Add photovoltaic sensors to ViCare integration (#113664)
* Add photovoltaic sensors

* Update strings.json

* Apply suggestions from code review

* change uom for daily sensor
2024-06-07 10:21:24 +02:00
Lorenzo Monaco
78c7af40ed Ecovacs get_positions service (#118572)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-07 10:11:49 +02:00
Shay Levy
9a6902d827 Hold connection lock in Shelly RPC reconnect (#119009) 2024-06-07 09:50:05 +02:00
J. Nick Koston
6ba8b7a5d6 Remove isal from after_dependencies in http (#119000) 2024-06-07 09:21:53 +02:00
G Johansson
c60dee16bc Ignore deprecation warning in python-holidays (#119007) 2024-06-07 09:21:04 +02:00
epenet
4f6a98cee3 Remove unused request fixtures (#119044) 2024-06-07 09:19:03 +02:00
Joost Lekkerkerker
6e9db52a5f Fix AirGradient name (#119046) 2024-06-07 09:18:16 +02:00
Joost Lekkerkerker
6027af3d36 Fix unit of measurement for airgradient sensor (#118981) 2024-06-07 09:17:36 +02:00
J. Nick Koston
aa0a90cd98 Fix remember_the_milk calling configurator async api from the wrong thread (#119029) 2024-06-07 09:07:47 +02:00
epenet
8628a1e449 Improve type hints in airnow tests (#119038) 2024-06-07 09:03:35 +02:00
Marc Mueller
274cd41d57 Fix Generator annotations in tests (1) (#119018) 2024-06-07 08:43:32 +02:00
Marc Mueller
7195a21126 Fix Generator annotations in tests (2) (#119019) 2024-06-07 08:34:38 +02:00
Maciej Bieniek
27e8a4ed6f Add the missing humidity value to the Accuweather daily forecast (#119013)
Add the missing humidity value to the daily forecast

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-07 07:23:44 +02:00
Michael Hansen
87114bf19b Fix exposure checks on some intents (#118988)
* Check exposure in climate intent

* Check exposure in todo list

* Check exposure for weather

* Check exposure in humidity intents

* Add extra checks to weather tests

* Add more checks to todo intent test

* Move climate intents to async_match_targets

* Update test_intent.py

* Update test_intent.py

* Remove patch
2024-06-06 20:41:25 -05:00
Joakim Plate
8c025ea1f7 Update gardena library to 1.4.2 (#119010) 2024-06-07 00:48:23 +02:00
Rami Mosleh
7337c13747 Use torrent id to identify torrents that should trigger events (#118897) 2024-06-07 00:44:21 +02:00
Matthias Alphart
a7429e5f50 Fix KNX climate.set_hvac_mode not turning on (#119012) 2024-06-06 22:40:04 +02:00
Jordi
7219a4fa98 Add Aquacell integration (#117117)
* Initial commit

* Support changed API
Change sensor entity descriptions

* Fix sensor not handling coordinator update

* Implement re-authentication flow and handle token expiry

* Bump aioaquacell

* Bump aioaquacell

* Cleanup and initial tests

* Fixes for config flow tests

* Cleanup

* Fixes

* Formatted

* Use config entry runtime
Use icon translations
Removed reauth
Removed last updated sensor
Changed lid in place to binary sensor
Cleanup

* Remove reauth strings

* Removed binary_sensor platform
Fixed sensors not updating properly

* Remove reauth tests
Bump aioaquacell

* Moved softener property to entity class
Inlined validate_input method
Renaming of entities
Do a single async_add_entities call to add all entities
Reduced code in try blocks

* Made tests parameterized and use test fixture for api
Cleaned up unused code
Removed traces of reauth

* Add check if refresh token is expired
Add tests

* Add missing unique_id to config entry mock
Inlined _update_config_entry_refresh_token method
Fix incorrect test method name and comment

* Add snapshot test
Changed WiFi level to WiFi strength

* Bump aioaquacell to 0.1.7

* Move test_coordinator tests to test_init
Add test for duplicate config entry
2024-06-06 22:33:58 +02:00
Robert Svensson
ec3a976410 Use fixtures in UniFi image tests (#118887) 2024-06-06 14:23:10 -04:00
Robert Svensson
d695660164 Use fixtures in UniFi diagnostics tests (#118905) 2024-06-06 14:22:41 -04:00
Michael Hansen
bca8958d4b Prioritize literal text with name slots in sentence matching (#118900)
Prioritize literal text with name slots
2024-06-06 14:20:34 -04:00
Gedaliah Knizhnik
696a079ba8 Add extra sensor to the Jewish Calendar integration (#116734)
* Added sensor for always three star tzeit

* Changed sensor name

* Change sensor name
2024-06-06 14:17:52 -04:00
Steven B
333ac56904 Fully mock the ring_doorbell api and remove requests_mock (#113140)
* Fully mock ring_doorbell library

* Add comments and docstrings

* Simplify devices_mocks and fake RingDevices

* Update post review

* Consolidate device filtering in conftest

* Fix ruff lambda assignment failure

* Fix ruff check fail

* Update post review
2024-06-06 20:13:19 +02:00
Mr. Bubbles
99b85e16d1 Set username as entry title in Bring integration (#118974)
Set username as entry title
2024-06-06 20:03:58 +02:00
David Bonnes
d40c940c20 Move evohome's API broker to the coordinator module (#118565)
* move Broker to coordinator module

* mypy tweak

* mypy
2024-06-06 13:02:50 -04:00
J. Nick Koston
62b1bde0e8 Only entity verify state writable once after success unless hass is missing (#118896) 2024-06-06 11:46:44 -05:00
Marc Mueller
ffea72f866 Increment ci cache version (#118998) 2024-06-06 18:25:24 +02:00
epenet
5914ff0de8 Improve type hints in apple_tv tests (#118980) 2024-06-06 17:44:22 +02:00
Marc Mueller
837ee7c4fb Import Generator from typing_extensions (4) (#118992) 2024-06-06 17:41:37 +02:00
Marc Mueller
59e178df3b Import Generator from typing_extensions (5) (#118993) 2024-06-06 17:33:27 +02:00
epenet
632238a7f9 Move mock_bluetooth* fixtures to decorator (#118846) 2024-06-06 17:31:08 +02:00
Marc Mueller
33ed4fd862 Import Generator from typing_extensions (3) (#118990) 2024-06-06 17:28:59 +02:00
David Knowles
0ecab967dd Bump pydrawise to 2024.6.3 (#118977) 2024-06-06 17:28:13 +02:00
epenet
fb51163075 Move socket_enabled fixture to decorator (#118847) 2024-06-06 17:27:38 +02:00
epenet
6de26ca811 Unhide facebook tests (#118867) 2024-06-06 17:24:48 +02:00
Marc Mueller
279483ddb0 Import Generator from typing_extensions (2) (#118989) 2024-06-06 17:24:22 +02:00
Maciej Bieniek
49c7b1aab9 Bump imgw-pib library to version 1.0.4 (#118978)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-06 17:14:02 +02:00
Marc Mueller
c3456215b8 Update requests to 2.32.3 (#118868)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-06 17:11:49 +02:00
Marc Mueller
fe21e2b8ba Import Generator from typing_extensions (1) (#118986) 2024-06-06 17:02:13 +02:00
Marc Mueller
69708db8e0 Update mypy-dev to 1.11.0a6 (#118881) 2024-06-06 16:14:39 +02:00
Rami Mosleh
cab58fa9b2 Check if imap message text has a value instead of checking if its not None (#118901)
* Check if message_text has a value instead of checking if its not None

* Strip message_text to ensure that its actually empty or not

* Add test with multipart payload having empty plain text
2024-06-06 14:10:03 +02:00
G Johansson
4ec6ba445b Remove unused constant in Tag (#118966)
Remove not used constant in Tag
2024-06-06 13:49:17 +02:00
G Johansson
0d2e441de5 Bump python-holidays to 0.50 (#118965) 2024-06-06 13:34:03 +02:00
Åke Strandberg
3d8fc96592 Migrate myuplink to runtime_data (#118960) 2024-06-06 13:31:47 +02:00
G Johansson
2a4f7439a2 Fix Alarm control panel not require code in several integrations (#118961) 2024-06-06 13:21:30 +02:00
Sebastian Lövdahl
a5959cfb83 Address post-merge review comments from Vallox reconfigure support PR (#118903)
Address late review comments from Vallox reconfigure support PR
2024-06-06 12:52:57 +02:00
epenet
622a69447d Add type hints to hdmi_cec assert_state function (#118940)
Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
2024-06-06 12:39:24 +02:00
Maciej Bieniek
29952d8128 Bump imgw-pib backend library to version 1.0.2 (#118953)
Bump imgw-pib to version 1.0.2

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-06 12:26:07 +02:00
epenet
857b5c9c1b Fix type hints in google tests (#118941) 2024-06-06 12:19:41 +02:00
epenet
492b158818 Add return type hints in tests (a-i) (#118939) 2024-06-06 12:17:08 +02:00
Mr. Bubbles
6e8d6f5994 Load fixture with decorator to avoid variable not accessed error (#118954)
Use fixture decorator
2024-06-06 12:15:13 +02:00
epenet
f425420899 Improve type hints in rainforest_raven tests (#118950) 2024-06-06 12:10:13 +02:00
Sid
121bfc9766 Bump ruff to 0.4.8 (#118894) 2024-06-06 12:05:35 +02:00
epenet
c373e36995 Centralize duplicate fixtures in rainforest_raven tests (#118945) 2024-06-06 10:44:02 +02:00
epenet
7eda8aafc8 Ignore nested functions when enforcing type hints in tests (#118948) 2024-06-06 10:43:31 +02:00
Mr. Bubbles
093e85d59a Fix some minor typos in ista EcoTrend integration (#118949)
Fix typos
2024-06-06 10:43:12 +02:00
J. Nick Koston
e37ee68434 Bump cryptography to 42.0.8 (#118889) 2024-06-06 10:20:39 +02:00
epenet
c7cc465e5c Add return type hints in tests (k-z) (#118942) 2024-06-06 10:11:29 +02:00
Regin Larsen
b5b7c9bcd5 Bump xiaomi-ble to 0.29.0 (#118895) 2024-06-06 09:16:57 +02:00
Mr. Bubbles
4596b89201 Bump pyecotrend_ista to 3.2.0 (#118924) 2024-06-06 09:10:46 +02:00
J. Nick Koston
f9205cd88d Avoid additional timestamp conversion to set state (#118885)
Avoid addtional timestamp conversion to set state

Since we already have the timestamp, we can pass it on to the State
object and avoid the additional timestamp conversion which can be as
much as 30% of the state write runtime.

Since datetime objects are limited to microsecond precision, we need
to adjust some tests to account for the additional precision that we
will now be able to get in the database
2024-06-05 23:43:34 -04:00
J. Nick Koston
475c20d529 Always do thread safety check when writing state (#118886)
* Always do thread safety check when writing state

Refactor the 3 most common places where the thread safety check
for the event loop to be inline to make the check fast enough
that we can keep it long term. While code review catches most
of the thread safety issues in core, some of them still make
it through, and new ones keep getting added. Its not possible
to catch them all with manual code review, so its worth the
tiny overhead to check each time.

Previously the check was limited to custom components
because they were the most common source of thread
safety issues.

* Always do thread safety check when writing state

Refactor the 3 most common places where the thread safety check
for the event loop to be inline to make the check fast enough
that we can keep it long term. While code review catches most
of the thread safety issues in core, some of them still make
it through, and new ones keep getting added. Its not possible
to catch them all with manual code review, so its worth the
tiny overhead to check each time.

Previously the check was limited to custom components
because they were the most common source of thread
safety issues.

* async_fire is more common than expected with ccs

* fix mock

* fix hass mocking
2024-06-05 23:41:55 -04:00
Ernst Klamer
64b23419e0 Bump bthome-ble to 3.9.1 (#118907)
bump bthome-ble to 3.9.1
2024-06-05 23:38:30 -04:00
J. Nick Koston
a0957069f0 Revert "Bump orjson to 3.10.3 (#116945)" (#118920)
This reverts commit dc50095d06.
2024-06-05 23:37:35 -04:00
Jan-Philipp Benecke
7407995ff1 Fix flaky Google Assistant test (#118914)
* Fix flaky Google Assistant test

* Trigger full ci
2024-06-05 17:37:14 -04:00
Josef Zweck
feaf50eee7 Address Webhook async_generate_url review (#118910)
code styling
2024-06-05 22:38:23 +02:00
Franck Nijhof
460909a7f6 2024.6.0 (#118400) 2024-06-05 20:06:01 +02:00
Franck Nijhof
21fd012447 Bump version to 2024.6.0 2024-06-05 19:00:08 +02:00
Robert Resch
c27f0c560e Replace slave by meter in v2c (#118893) 2024-06-05 18:59:52 +02:00
Michael Hansen
0f4a1b421e Bump intents to 2024.6.5 (#118890) 2024-06-05 18:59:49 +02:00
Erik Montnemery
5e35ce2996 Improve WS command validate_config (#118864)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-05 18:59:44 +02:00
Erik Montnemery
8099ea8817 Improve WS command validate_config (#118864)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-05 18:53:44 +02:00
Michael Hansen
6efc3b95a4 Bump intents to 2024.6.5 (#118890) 2024-06-05 18:43:28 +02:00
Robert Resch
0562c3085f Replace slave by meter in v2c (#118893) 2024-06-05 18:21:03 +02:00
Åke Strandberg
e2dd88be6e Add more unit-based sensor descriptions to myuplink (#113104)
* Add more unit-based sensor descriptions

* Move late addition to icon translations
2024-06-05 17:45:52 +02:00
r-xyz
0487b38ed3 Add support for sending telegram messages to topics (#112715)
* Add support for sending telegram messages to topics
    Based on original PR #104059 by [jgresty](https://github.com/jgresty).
    Did not manage to merge conflicts, so I remade the changes from scratch, including suggestions from previous PR reviews.

    Topics were added to telegram groups in November 2022, and to the
    telegram-bot library in version 20.0. They are a purely additive change
    that is exposed by a single parameter `message_thread_id`. Not passing
    this parameter will not change the behaviour from current.

    This same parameter is used to send messages to threads and messages to
    topics inside groups.

    https://telegram.org/blog/topics-in-groups-collectible-usernames/it?setln=en#topics-in-groups

    Fixes #81888
    Fixes #91750

* telegram_bot: add tests for threads feature.

* telegram_bot: fixed tests for threads.

* telegram_bot: fixed wrong line.

* Update test_telegram_bot.py

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-06-05 17:41:40 +02:00
Robert Svensson
862c04a4b6 Use fixtures in UniFi service tests (#118838)
* Use fixtures in UniFi service tests

* Fix comments
2024-06-05 17:04:28 +02:00
Joost Lekkerkerker
c4cfd9adf0 Add entity translations to incomfort (#118876) 2024-06-05 17:03:58 +02:00
Joost Lekkerkerker
60c06732b1 Add state and device class to incomfort (#118877)
* Add state and device class to incomfort

* Add state and device class to incomfort
2024-06-05 16:06:23 +02:00
Dmitriy
906c906653 Fix Ezviz last alarm picture (#112074)
* Fix Ezviz last alarm picture

* Review fixes
2024-06-05 15:55:59 +02:00
Josef Zweck
d0a036c617 Allow more input params to webhook generate_url helper (#112334)
* allow more params to helper

* switch back to f-string

* add test

* switch to proper method

* add allow_external, internal params

* fx default

* add signature comparison

* remove test, change prefer_external

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-06-05 15:55:37 +02:00
Franck Nijhof
e5804307e7 Bump version to 2024.6.0b9 2024-06-05 15:51:19 +02:00
Bram Kragten
3b74b63b23 Update frontend to 20240605.0 (#118875) 2024-06-05 15:51:08 +02:00
Marc Mueller
06df32d9d4 Fix TypeAliasType not callable in senz (#118872) 2024-06-05 15:51:05 +02:00
Jan Bouwhuis
63947e4980 Improve repair issue when notify service is still being used (#118855)
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2024-06-05 15:51:02 +02:00
Ethem Cem Özkan
ac6a377478 Bump python-roborock to 2.2.3 (#118853)
Co-authored-by: G Johansson <goran.johansson@shiftit.se>
2024-06-05 15:50:59 +02:00
Paulus Schoutsen
18af423a78 Fix the radio browser doing I/O in the event loop (#118842) 2024-06-05 15:50:56 +02:00
Franck Nijhof
f1445bc8f5 Fix capitalization of protocols in Reolink option flow (#118839) 2024-06-05 15:50:53 +02:00
starkillerOG
3784c99305 Conserve Reolink battery by not waking the camera on each update (#118773)
* update to new cmd_list type

* Wake battery cams each 1 hour

* fix styling

* fix epoch

* fix timezone

* force full update when using generic update service

* improve comment

* Use time.time() instead of datetime

* fix import order
2024-06-05 15:50:50 +02:00
Pete Sage
0084d6c5bd Fix Hydrawise sensor availability (#118669)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-05 15:50:47 +02:00
Jan Bouwhuis
066cd6dbef Improve repair issue when notify service is still being used (#118855)
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2024-06-05 15:41:22 +02:00
starkillerOG
edd3c45c09 Add binary "sleeping" sensor to Reolink (#118774) 2024-06-05 14:30:15 +02:00
Pete Sage
0d1fb1fc9f Fix Hydrawise sensor availability (#118669)
Co-authored-by: Robert Resch <robert@resch.dev>
2024-06-05 14:18:41 +02:00
Bram Kragten
3a4b84a4ce Update frontend to 20240605.0 (#118875) 2024-06-05 13:32:50 +02:00
epenet
4b663dbf01 Rename esphome fixture (#118865) 2024-06-05 13:31:59 +02:00
Marc Mueller
873a842166 Update coverage to 7.5.3 (#118870) 2024-06-05 13:31:31 +02:00
Joost Lekkerkerker
986d8986a9 Introduce incomfort boiler entity (#118861) 2024-06-05 13:09:24 +02:00
Joost Lekkerkerker
8d11279bc9 Remove obsolete polling from incomfort water heater (#118860)
Remove obsolete polling
2024-06-05 12:55:40 +02:00
Joost Lekkerkerker
239984f87d Add entity descriptions to incomfort binary sensor (#118863)
* Detach name from unique id in incomfort

* Add entity descriptions to incomfort

* Revert "Detach name from unique id in incomfort"

This reverts commit 1744844466.

* yes
2024-06-05 12:51:39 +02:00
Marc Mueller
68a537a05a Fix TypeAliasType not callable in senz (#118872) 2024-06-05 12:47:52 +02:00
Michał Jaworski
aedb0a3ca4 Add new sensors to blebox (#118837)
blebox: add mapping for new sensor types introduced in blebox_uniapi>-2.4.0

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-06-05 12:17:56 +02:00
Michał Jaworski
5e9eae14fc Bump blebox-uniapi fom 2.2.2 to 2.4.2 (#118836)
* blebox: udpdate version in manifest and add new sensor key mapping

* blebox: add more sensor types

* blebox: use blebox_uniapi==2.4.1

* blebox: use blebox_uniapi==2.4.2

* blebox: update requirements_all.txt

* blebox: revert introduction of illuminance and power meter sensors set
2024-06-05 12:11:49 +02:00
Joost Lekkerkerker
7a7a9c610a Detach name from unique id in incomfort (#118862)
* Detach name from unique id in incomfort

* Add entity descriptions to incomfort

* Revert "Add entity descriptions to incomfort"

This reverts commit 2b6ccd4c3b.
2024-06-05 11:40:37 +02:00
Jan Bouwhuis
9a510cfe32 Add data coordinator to incomfort integration (#118816)
* Add data coordinator to incomfort integration

* Remove unused code and redundant comment, move entity class

* Use freezer

* Cleanup snapshot

* Use entry.runtime_data

* Use freezer, use mock_config_entry

* Use tick

* Use ConfigEntryError while we do not yet support a re-auth flow, update tests

* Use tick with async_fire_time_changed
2024-06-05 10:45:01 +02:00
Ethem Cem Özkan
adc21e7c55 Bump python-roborock to 2.2.3 (#118853)
Co-authored-by: G Johansson <goran.johansson@shiftit.se>
2024-06-05 10:22:05 +02:00
epenet
9c8aa8456e Move enable_bluetooth fixture to decorator (#118849) 2024-06-05 09:20:48 +02:00
epenet
c7e065c413 Move enable_custom_integrations fixture to decorator (#118844) 2024-06-05 09:20:08 +02:00
Erwin Douna
985e42e50c Add more typing to DSMR Reader (#118852) 2024-06-05 09:05:31 +02:00
dependabot[bot]
357cc7d4cc Bump github/codeql-action from 3.25.7 to 3.25.8 (#118850)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-05 08:58:48 +02:00
Diogo Gomes
ba7f82d5e2 Add diagnostic to V2C (#118823)
* add diagnostic platform

* add diagnostic platform

* add diagnostic platform
2024-06-05 08:55:49 +02:00
Paulus Schoutsen
72309364f5 Fix the radio browser doing I/O in the event loop (#118842) 2024-06-04 23:59:25 -04:00
starkillerOG
678c06beb3 Conserve Reolink battery by not waking the camera on each update (#118773)
* update to new cmd_list type

* Wake battery cams each 1 hour

* fix styling

* fix epoch

* fix timezone

* force full update when using generic update service

* improve comment

* Use time.time() instead of datetime

* fix import order
2024-06-04 21:54:31 -04:00
starkillerOG
8723441227 Add Reolink serial number to device info of IPC camera (#118834)
* Add UID to dev info

* Add camera_uid to test
2024-06-04 21:37:40 -04:00
Franck Nijhof
46bb9cb014 Fix capitalization of protocols in Reolink option flow (#118839) 2024-06-04 21:35:54 -04:00
J. Nick Koston
ed0568c655 Ensure config entries are not unloaded while their platforms are setting up (#118767)
* Report non-awaited/non-locked config entry platform forwards

Its currently possible for config entries to be reloaded while their platforms
are being forwarded if platform forwards are not awaited or done after the
config entry is setup since the lock will not be held in this case.

In https://developers.home-assistant.io/blog/2022/07/08/config_entry_forwards
we advised to await platform forwards to ensure this does not happen, however
for sleeping devices and late discovered devices, platform forwards may happen
later.

If config platform forwards are happening during setup, they should be awaited

If config entry platform forwards are not happening during setup, instead
async_late_forward_entry_setups should be used which will hold the lock to
prevent the config entry from being unloaded while its platforms are being
setup

* Report non-awaited/non-locked config entry platform forwards

Its currently possible for config entries to be reloaded while their platforms
are being forwarded if platform forwards are not awaited or done after the
config entry is setup since the lock will not be held in this case.

In https://developers.home-assistant.io/blog/2022/07/08/config_entry_forwards
we advised to await platform forwards to ensure this does not happen, however
for sleeping devices and late discovered devices, platform forwards may happen
later.

If config platform forwards are happening during setup, they should be awaited

If config entry platform forwards are not happening during setup, instead
async_late_forward_entry_setups should be used which will hold the lock to
prevent the config entry from being unloaded while its platforms are being
setup

* run with error on to find them

* cert_exp, hold lock

* cert_exp, hold lock

* shelly async_late_forward_entry_setups

* compact

* compact

* found another

* patch up mobileapp

* patch up hue tests

* patch up smartthings

* fix mqtt

* fix esphome

* zwave_js

* mqtt

* rework

* fixes

* fix mocking

* fix mocking

* do not call async_forward_entry_setup directly

* docstrings

* docstrings

* docstrings

* add comments

* doc strings

* fixed all in core, turn off strict

* coverage

* coverage

* missing

* coverage
2024-06-04 21:34:39 -04:00
Franck Nijhof
f1e6375406 Bump version to 2024.6.0b8 2024-06-04 21:32:36 +02:00
Jan-Philipp Benecke
9157905f80 Initialize the Sentry SDK within an import executor job to not block event loop (#118830) 2024-06-04 21:31:49 +02:00
J. Nick Koston
b02c9aa2ef Ensure name of task is logged for unhandled loop exceptions (#118822) 2024-06-04 21:31:45 +02:00
Bram Kragten
6e30fd7633 Update frontend to 20240604.0 (#118811) 2024-06-04 21:31:42 +02:00
Stefan Agner
74b29c2e54 Bump Python Matter Server library to 6.1.0 (#118806) 2024-06-04 21:31:38 +02:00
Maciej Bieniek
b1b26af92b Check if Shelly entry.runtime_data is available (#118805)
* Check if runtime_data is available

* Add tests

* Use `is` operator

---------

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-04 21:31:33 +02:00
arturyak
b107ffd30d Add missing FAN_ONLY mode to ccm15 (#118804) 2024-06-04 21:31:28 +02:00
Joost Lekkerkerker
776675404a Set unique id in aladdin connect config flow (#118798) 2024-06-04 21:30:08 +02:00
Paulus Schoutsen
38ee32fed2 Include script description in LLM exposed entities (#118749)
* Include script description in LLM exposed entities

* Fix race in test

* Fix type

* Expose script

* Remove fields
2024-06-04 21:21:26 +02:00
Tsvi Mostovicz
111d11aaca Fix updating options in Jewish Calendar (#118643) 2024-06-04 21:21:23 +02:00
Jack Boswell
ff8752ea4f Fix calculation of Starlink sleep end setting (#115507)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-04 21:21:13 +02:00
J. Nick Koston
67b3be8432 Remove useless threading locks in mqtt (#118737) 2024-06-04 14:21:03 -05:00
Jack Boswell
278751607f Fix calculation of Starlink sleep end setting (#115507)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-04 14:19:09 -05:00
Robert Svensson
b4f6325278 Use fixtures in UniFi switch tests (#118831) 2024-06-04 21:01:03 +02:00
Robert Svensson
c2e245f9d4 Use fixtures in UniFi update tests (#118818) 2024-06-04 21:00:50 +02:00
arturyak
513262c0ff Add missing FAN_ONLY mode to ccm15 (#118804) 2024-06-04 20:58:58 +02:00
Tsvi Mostovicz
98455cbd93 Fix updating options in Jewish Calendar (#118643) 2024-06-04 20:55:38 +02:00
Gerben Jongerius
f18ddb628c Bump youless dependency version to 2.1.0 (#118820) 2024-06-04 20:52:37 +02:00
Jan Bouwhuis
956623d964 Fix device name not set on all incomfort platforms (#118827)
* Prelimenary tests for incomfort integration

* Use snapshot_platform

* Use helper

* Ensure the device name is set in device info

* Move snapshot tests to platform test modules

* Move unused snapshot file

* Naming and docstr

* update snapshots

* cleanup snapshots

* Add water heater tests
2024-06-04 20:51:34 +02:00
Michał Huryn
5fca2c09c5 blebox: update codeowners (#118817) 2024-06-04 20:49:00 +02:00
Jan-Philipp Benecke
c83aba0fd1 Initialize the Sentry SDK within an import executor job to not block event loop (#118830) 2024-06-04 20:47:06 +02:00
J. Nick Koston
c8e7298556 Remove myself as codeowner for unifiprotect (#118824) 2024-06-04 13:21:56 -05:00
J. Nick Koston
72e4aee155 Ensure name of task is logged for unhandled loop exceptions (#118822) 2024-06-04 12:48:29 -04:00
Maciej Bieniek
709e32a38a Check if Shelly entry.runtime_data is available (#118805)
* Check if runtime_data is available

* Add tests

* Use `is` operator

---------

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-04 18:40:18 +02:00
Bram Kragten
6483c46991 Update frontend to 20240604.0 (#118811) 2024-06-04 18:26:47 +02:00
Stefan Agner
e2f45bfbdc Bump Python Matter Server library to 6.1.0 (#118806) 2024-06-04 18:23:22 +02:00
epenet
b81f0b600f Move current_request_with_host fixture to decorator (#118810)
* Move current_request_with_host fixture to decorator

* One more
2024-06-04 17:50:22 +02:00
Paulus Schoutsen
52ad90a68d Include script description in LLM exposed entities (#118749)
* Include script description in LLM exposed entities

* Fix race in test

* Fix type

* Expose script

* Remove fields
2024-06-04 11:18:07 -04:00
ollo69
8610436948 Add remote entity to AndroidTV (#103496)
* Add remote entity to AndroidTV

* Add tests for remote entity

* Requested changes on tests
2024-06-04 17:02:30 +02:00
epenet
b09f3eb313 Fix incorrect current_request_with_host type hint (#118809) 2024-06-04 16:26:39 +02:00
epenet
80975d7a63 Move None bluetooth fixtures to decorator (#118802) 2024-06-04 16:26:07 +02:00
epenet
f120f55d86 Move enable_bluetooth fixture to decorator (#118803) 2024-06-04 16:20:11 +02:00
epenet
3d31af3eb4 Move entity_registry_enabled_by_default to decorator [a-p] (#118794) 2024-06-04 16:18:42 +02:00
epenet
089874f818 Move mock_hass_config fixture to decorator (#118807) 2024-06-04 16:05:56 +02:00
Joost Lekkerkerker
2ac5f8db06 Set unique id in aladdin connect config flow (#118798) 2024-06-04 16:00:53 +02:00
Richard Kroegel
1eb13b48a2 Add tests for BMW binary_sensor and lock (#118436)
* BMW: Add tests for binary_sensor & lock

* Use entity_registry_enabled_by_default fixture

* Update tests/components/bmw_connected_drive/test_binary_sensor.py

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

* Move fixtures to decorator

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

* Use fixture decorators if possible

* Fix rebase

* Spelling adjustments

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

* Use snapshot_platform helper

* Spelling

* Remove comment

---------

Co-authored-by: Richard <rikroe@users.noreply.github.com>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-06-04 15:08:15 +02:00
Markus Jacobsen
67e9e90346 Bang & Olufsen add overlay/announce play_media functionality (#113434)
* Add overlay service

* Convert custom service to play_media announce

* Remove debugging
2024-06-04 13:48:22 +02:00
Joost Lekkerkerker
0aac4b26a4 Make Weatherflow a brand (#118785) 2024-06-04 13:40:48 +02:00
Joost Lekkerkerker
1877c1eec9 Make Ruuvi a brand (#118786) 2024-06-04 13:40:06 +02:00
epenet
20b5aa3e0e Move entity_registry_enabled_by_default to decorator [q-z] (#118793) 2024-06-04 13:38:32 +02:00
Franck Nijhof
2151f7ebf3 Bump version to 2024.6.0b7 2024-06-04 12:20:22 +02:00
Richard Kroegel
50efce4e53 Allow per-sensor unit conversion on BMW sensors (#110272)
* Update BMW sensors to use device_class

* Test adjustments

* Trigger CI

* Remove unneeded cast

* Set suggested_display_precision to 0

* Rebase for climate_status

* Change charging_status to ENUM device class

* Add test for Enum translations

* Pin Enum sensor values

* Use snapshot_platform helper

* Remove translation tests

* Formatting

* Remove comment

* Use const.STATE_UNKOWN

* Fix typo

* Update strings

* Loop through Enum sensors

* Revert enum sensor changes

---------

Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-06-04 12:20:08 +02:00
Richard Kroegel
c8538f3c08 Use snapshot_platform helper for BMW tests (#118735)
* Use snapshot_platform helper

* Remove comments

---------

Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-06-04 12:19:01 +02:00
Richard Kroegel
4bfff12570 Set lock state to unkown on BMW API error (#118559)
* Revert to previous lock state on BMW API error

* Set lock state to unkown on error and force refresh from API

---------

Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-06-04 12:02:47 +02:00
Richard Kroegel
f2b1635969 Refactor fixture calling for BMW tests (#118708)
* Refactor BMW tests to use pytest.mark.usefixtures

* Fix freeze_time

---------

Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-06-04 12:01:40 +02:00
Joost Lekkerkerker
b3b8ae31fd Move Aladdin stale device removal to init module (#118784) 2024-06-04 11:58:35 +02:00
Joost Lekkerkerker
ba96fc272b Re-enable sensor platform for Aladdin Connect (#118782) 2024-06-04 11:58:32 +02:00
Joost Lekkerkerker
c702174fa0 Add coordinator to Aladdin Connect (#118781) 2024-06-04 11:58:29 +02:00
Joost Lekkerkerker
5d6fe7387e Use model from Aladdin Connect lib (#118778)
* Use model from Aladdin Connect lib

* Fix
2024-06-04 11:58:25 +02:00
Joost Lekkerkerker
c76b7a48d3 Initial cleanup for Aladdin connect (#118777) 2024-06-04 11:58:22 +02:00
Joost Lekkerkerker
954e8ff9b3 Bump airgradient to 0.4.3 (#118776) 2024-06-04 11:58:18 +02:00
Joakim Sørensen
8c332ddbdb Update hass-nabucasa to version 0.81.1 (#118768) 2024-06-04 11:58:15 +02:00
Jan Bouwhuis
01c4ca2749 Recover mqtt abbrevations optimizations (#118762)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-04 11:58:12 +02:00
Michael Hansen
4b4b5362d9 Clean up exposed domains (#118753)
* Remove lock and script

* Add media player

* Fix tests
2024-06-04 11:58:08 +02:00
Jan Bouwhuis
70d7cedf08 Do not log mqtt origin info if the log level does not allow it (#118752) 2024-06-04 11:58:05 +02:00
Michael Hansen
7bbfb1a22b Bump intents to 2024.6.3 (#118748) 2024-06-04 11:58:02 +02:00
Paulus Schoutsen
d68d871054 Update OpenAI prompt on each interaction (#118747) 2024-06-04 11:57:58 +02:00
Jan Bouwhuis
69bdefb02d Revert "Allow MQTT device based auto discovery" (#118746)
Revert "Allow MQTT device based auto discovery (#109030)"

This reverts commit 585892f067.
2024-06-04 11:57:55 +02:00
Paulus Schoutsen
ebaec6380f Google Gen AI: Copy messages to avoid changing the trace data (#118745) 2024-06-04 11:57:51 +02:00
starkillerOG
9cf6e9b21a Bump reolink-aio to 0.9.1 (#118655)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-04 11:55:34 +02:00
David Bonnes
eb1a9eda60 Harden evohome against failures to retrieve zone schedules (#118517) 2024-06-04 11:55:21 +02:00
epenet
3ac0fa53c8 Cleanup unused FixtureRequest in tests (#118780) 2024-06-04 11:49:21 +02:00
Joost Lekkerkerker
fce5f2a93f Move Aladdin stale device removal to init module (#118784) 2024-06-04 11:34:21 +02:00
Erik Montnemery
c0912a019c Deduplicate light services.yaml (#118738)
* Deduplicate light services.yaml

* Remove support for .-keys
2024-06-04 11:30:34 +02:00
Joost Lekkerkerker
7ed119b0b6 Re-enable sensor platform for Aladdin Connect (#118782) 2024-06-04 11:04:10 +02:00
dependabot[bot]
d905542f49 Bump dawidd6/action-download-artifact from 3.1.4 to 4 (#118772)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-04 11:00:00 +02:00
Alexandre CUER
a1e4d4ddd7 Remove duplicate code in emoncms (#118610)
* Remove duplicate & property extra_state_attributes

* Add methods _update_attributes and _update_value

* correction in _update_value

* Update homeassistant/components/emoncms/sensor.py

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

* Update homeassistant/components/emoncms/sensor.py

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

* Update homeassistant/components/emoncms/sensor.py

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

* Update homeassistant/components/emoncms/sensor.py

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

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-06-04 10:56:43 +02:00
Joost Lekkerkerker
43a9a4f9ed Bump airgradient to 0.4.3 (#118776) 2024-06-04 10:53:16 +02:00
Joost Lekkerkerker
e9f01be090 Add coordinator to Aladdin Connect (#118781) 2024-06-04 10:51:28 +02:00
Aidan Timson
42414d55e0 Azure DevOps build sensor attributes to new sensors (#114948)
* Setup for split

* Adjust to allow for None

* Create

* Add missing

* Fix datetime parsing in Azure DevOps sensor

* Remove definition id and name

These aren't needed and will never change

* Add tests for each sensor

* Add tests for edge cases

* Rename translations

* Update

* Use base sensor descriptions

* Remove

* Drop status

using this later for an event entity

* Switch to timestamp

* Switch to timestamp

* Merge

* Update snapshot

* Improvements from @joostlek

* Update homeassistant/components/azure_devops/sensor.py

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-04 10:50:43 +02:00
Mr. Bubbles
7815840194 Add ista EcoTrend integration (#118360)
* Add ista EcoTrend integration

* move code out of try

* Use account owners name as entry title

* update config flow tests

* add tests for init

* Add reauth flow

* Add tests for sensors

* add translations for reauth

* trigger statistics import on first refresh

* Move statistics and reauth flow to other PR

* Fix tests

* some changes

* draft_final_final

* remove unnecessary icons

* changed tests

* move device_registry test to init

* add text selectors
2024-06-04 10:45:53 +02:00
epenet
b54a68750b Add type hints for FixtureRequest in tests (#118779) 2024-06-04 10:37:54 +02:00
Joost Lekkerkerker
16fd19f01a Use model from Aladdin Connect lib (#118778)
* Use model from Aladdin Connect lib

* Fix
2024-06-04 10:29:51 +02:00
Joost Lekkerkerker
da408c6703 Initial cleanup for Aladdin connect (#118777) 2024-06-04 10:13:31 +02:00
Richard Kroegel
7fb2802910 Allow per-sensor unit conversion on BMW sensors (#110272)
* Update BMW sensors to use device_class

* Test adjustments

* Trigger CI

* Remove unneeded cast

* Set suggested_display_precision to 0

* Rebase for climate_status

* Change charging_status to ENUM device class

* Add test for Enum translations

* Pin Enum sensor values

* Use snapshot_platform helper

* Remove translation tests

* Formatting

* Remove comment

* Use const.STATE_UNKOWN

* Fix typo

* Update strings

* Loop through Enum sensors

* Revert enum sensor changes

---------

Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-06-04 09:06:23 +02:00
starkillerOG
cba07540e9 Bump reolink-aio to 0.9.1 (#118655)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-04 08:00:40 +02:00
Aaron Bach
d43d12905d Don't require code to arm SimpliSafe (#118759) 2024-06-04 07:20:37 +02:00
J. Nick Koston
553311cc7d Add os.walk to asyncio loop blocking detection (#118769) 2024-06-04 06:53:37 +02:00
Joakim Sørensen
53ab215dfc Update hass-nabucasa to version 0.81.1 (#118768) 2024-06-04 06:27:54 +02:00
Jan Bouwhuis
e799270578 Recover mqtt abbrevations optimizations (#118762)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-04 06:20:18 +02:00
Michael Hansen
289263087c Bump intents to 2024.6.3 (#118748) 2024-06-03 22:47:09 -04:00
Michael Hansen
0257aa4839 Clean up exposed domains (#118753)
* Remove lock and script

* Add media player

* Fix tests
2024-06-03 21:26:40 -05:00
J. Nick Koston
35a1ecea27 Speed up statistics_during_period websocket api (#118672) 2024-06-03 18:08:46 -05:00
Jan Bouwhuis
2c206c18d4 Do not log mqtt origin info if the log level does not allow it (#118752) 2024-06-03 23:38:31 +02:00
Jan Bouwhuis
39f5f30ca9 Revert "Allow MQTT device based auto discovery" (#118746)
Revert "Allow MQTT device based auto discovery (#109030)"

This reverts commit 585892f067.
2024-06-03 22:30:37 +02:00
Paulus Schoutsen
035e19be01 Google Gen AI: Copy messages to avoid changing the trace data (#118745) 2024-06-03 22:29:50 +02:00
Paulus Schoutsen
299c0de968 Update OpenAI prompt on each interaction (#118747) 2024-06-03 22:27:05 +02:00
David Bonnes
8ea3a6843a Harden evohome against failures to retrieve zone schedules (#118517) 2024-06-03 21:48:48 +02:00
Jan Bouwhuis
ff27f8ef10 Add device info to incomfort entities (#118741)
* Add device info to incomfort entities

* Add DOMAIN import
2024-06-03 21:30:13 +02:00
Franck Nijhof
26344ffd74 Bump version to 2024.6.0b6 2024-06-03 21:27:31 +02:00
Paulus Schoutsen
2940104008 Remove dispatcher from Tag entity (#118671)
* Remove dispatcher from Tag entity

* type

* Don't use  helper

* Del is faster than pop

* Use id in update

---------

Co-authored-by: G Johansson <goran.johansson@shiftit.se>
2024-06-03 21:27:08 +02:00
Joost Lekkerkerker
8072a268a1 Require firmware version 3.1.1 for airgradient (#118744) 2024-06-03 21:26:19 +02:00
Bram Kragten
b5f557ad73 Update frontend to 20240603.0 (#118736) 2024-06-03 21:26:16 +02:00
Michael Hansen
f977b54312 Resolve areas/floors to ids in intent_script (#118734) 2024-06-03 21:26:13 +02:00
Jan-Philipp Benecke
11b2f201f3 Rename Discovergy to inexogy (#118724) 2024-06-03 21:26:10 +02:00
Erik Montnemery
8cc3c147fe Tweak light service schema (#118720) 2024-06-03 21:26:07 +02:00
epenet
fd9ea2f224 Bump renault-api to 0.2.3 (#118718) 2024-06-03 21:26:04 +02:00
Diogo Gomes
f064f44a09 Address reviews comments in #117147 (#118714) 2024-06-03 21:26:01 +02:00
Erik Montnemery
f3d1157bc4 Remove tag_id from tag store (#118713) 2024-06-03 21:25:58 +02:00
mkmer
85982d2b87 Remove unintended translation key from blink (#118712) 2024-06-03 21:25:55 +02:00
Erik Montnemery
cc83443ad1 Don't store tag_id in tag storage (#118707) 2024-06-03 21:25:52 +02:00
tronikos
8a516207e9 Use ISO format when passing date to LLMs (#118705) 2024-06-03 21:25:49 +02:00
Mick Vleeshouwer
f805df8390 Bump pyoverkiz to 1.13.11 (#118703) 2024-06-03 21:25:46 +02:00
Joost Lekkerkerker
ea85ed6992 Disable both option in Airgradient select (#118702) 2024-06-03 21:25:43 +02:00
Joost Lekkerkerker
54425b756e Configure device in airgradient config flow (#118699) 2024-06-03 21:25:40 +02:00
Paul Bottein
7b43b587a7 Bump python-roborock to 2.2.2 (#118697) 2024-06-03 21:25:37 +02:00
Matrix
7e71975358 Fixing device model compatibility issues. (#118686) 2024-06-03 21:25:34 +02:00
J. Nick Koston
e0232510d7 Revert "Add websocket API to get list of recorded entities (#92640)" (#118644)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-06-03 21:21:45 +02:00
Paulus Schoutsen
84f9bb1d63 Automatically fill in slots based on LLM context (#118619)
* Automatically fill in slots from LLM context

* Add tests

* Apply suggestions from code review

Co-authored-by: Allen Porter <allen@thebends.org>

---------

Co-authored-by: Allen Porter <allen@thebends.org>
2024-06-03 21:21:41 +02:00
David Knowles
b436fe94ae Bump pydrawise to 2024.6.2 (#118608) 2024-06-03 21:21:38 +02:00
epenet
aff5da5762 Address late review comment in samsungtv (#118539)
Address late comment in samsungtv
2024-06-03 21:21:29 +02:00
Joost Lekkerkerker
2a92f78453 Require firmware version 3.1.1 for airgradient (#118744) 2024-06-03 21:08:28 +02:00
Jan Bouwhuis
dd1dd4c6a3 Migrate Intergas InComfort/Intouch Lan2RF gateway YAML to config flow (#118642)
* Add config flow

* Make sure the device is polled - refactor

* Fix

* Add tests config flow

* Update test requirements

* Ensure dispatcher has a unique signal per heater

* Followup on review

* Follow up comments

* One more docstr

* Make specific try blocks and refactoring

* Handle import exceptions

* Restore removed lines

* Move initial heater update in try block

* Raise issue failed import

* Update test codeowners

* Remove entity device info

* Remove entity device info

* Appy suggestions from code review

* Remove broad exception handling from entry setup

* Test coverage
2024-06-03 20:37:48 +02:00
Michael Hansen
aac31059b0 Resolve areas/floors to ids in intent_script (#118734) 2024-06-03 20:29:26 +02:00
J. Nick Koston
588380392d Small speed up to read-only database sessions (#118674) 2024-06-03 19:50:05 +02:00
tronikos
f9dff1632e Use ISO format when passing date to LLMs (#118705) 2024-06-03 19:48:50 +02:00
Richard Kroegel
60bcd27a47 Use snapshot_platform helper for BMW tests (#118735)
* Use snapshot_platform helper

* Remove comments

---------

Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-06-03 19:46:04 +02:00
Paulus Schoutsen
3cc13d454f Remove dispatcher from Tag entity (#118671)
* Remove dispatcher from Tag entity

* type

* Don't use  helper

* Del is faster than pop

* Use id in update

---------

Co-authored-by: G Johansson <goran.johansson@shiftit.se>
2024-06-03 20:39:40 +03:00
David Knowles
ebe4888c21 Bump pydrawise to 2024.6.2 (#118608) 2024-06-03 19:29:20 +02:00
Bram Kragten
049cac3443 Update frontend to 20240603.0 (#118736) 2024-06-03 19:25:01 +02:00
Joost Lekkerkerker
16485af7fc Configure device in airgradient config flow (#118699) 2024-06-03 19:23:07 +02:00
Diogo Gomes
91ca7db02f Address reviews comments in #117147 (#118714) 2024-06-03 19:22:00 +02:00
mkmer
ca1ed6f610 Remove unintended translation key from blink (#118712) 2024-06-03 19:13:18 +02:00
J. Nick Koston
9cb113e5d4 Convert mqtt to use a timer instead of task sleep loop (#118666) 2024-06-03 11:19:19 -05:00
J. Nick Koston
099ad77078 Migrate recorder instance to use HassKey (#118673) 2024-06-03 11:19:00 -05:00
epenet
5d594a509c Add type hints for MockAgent in conversation tests (#118701) 2024-06-03 17:44:13 +02:00
epenet
f178467b0e Add type hints for TTS test fixtures (#118704) 2024-06-03 17:43:18 +02:00
Jan-Philipp Benecke
32d4431f9b Rename Discovergy to inexogy (#118724) 2024-06-03 17:30:17 +02:00
Diogo Gomes
827dfec311 Bump pytrydan to 0.7.0 (#118726) 2024-06-03 17:27:06 +02:00
epenet
dd90fb15e1 Fix incorrect type hint in dremel_3d_printer tests (#118709) 2024-06-03 17:16:48 +02:00
Erik Montnemery
99e02fe2b2 Remove tag_id from tag store (#118713) 2024-06-03 17:15:57 +02:00
Erik Montnemery
01b4589ef6 Tweak light service schema (#118720) 2024-06-03 17:13:48 +02:00
Paulus Schoutsen
bdcfd93129 Automatically fill in slots based on LLM context (#118619)
* Automatically fill in slots from LLM context

* Add tests

* Apply suggestions from code review

Co-authored-by: Allen Porter <allen@thebends.org>

---------

Co-authored-by: Allen Porter <allen@thebends.org>
2024-06-03 10:36:41 -04:00
RJPoelstra
8a68529dd1 Bump python-MotionMount to 2.0.0 (#118719) 2024-06-03 16:27:42 +02:00
Matrix
595c9a2e01 Fixing device model compatibility issues. (#118686) 2024-06-03 15:56:42 +02:00
epenet
771ed33b14 Bump renault-api to 0.2.3 (#118718) 2024-06-03 15:53:23 +02:00
Joost Lekkerkerker
c32eb97ac0 Disable both option in Airgradient select (#118702) 2024-06-03 15:49:51 +02:00
Paul Bottein
6d02453c8a Bump python-roborock to 2.2.2 (#118697) 2024-06-03 15:39:50 +02:00
starkillerOG
26ab4ad918 Add HDR type attribute to Kodi (#109603)
Co-authored-by: Andriy Kushnir <me@orhideous.name>
Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-06-03 14:37:36 +02:00
Jake Martin
a3b60cb054 Add Monzo config reauth (#117726)
* Add reauth config flow

* Trigger reauth on Monzo AuthorisaionExpiredError

* Add missing abort strings

* Use FlowResultType enum

* One extra == swapped for is

* Use helper in reauth

* Patch correct function in reauth test

* Remove unecessary **

* Swap patch and calls check for access token checks

* Do reauth trigger test without patch

* Remove unnecessary str() on user_id - always str anyway

* Update tests/components/monzo/test_config_flow.py

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-06-03 13:18:15 +02:00
Richard Kroegel
ef7c7f1c05 Refactor fixture calling for BMW tests (#118708)
* Refactor BMW tests to use pytest.mark.usefixtures

* Fix freeze_time

---------

Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-06-03 13:16:12 +02:00
Erik Montnemery
765114bead Don't store tag_id in tag storage (#118707) 2024-06-03 13:11:00 +02:00
Mick Vleeshouwer
87a1b8e83c Bump pyoverkiz to 1.13.11 (#118703) 2024-06-03 11:43:40 +02:00
David Bonnes
185ce8221b Update the codeowners of the incomfort integration (#118706) 2024-06-03 11:29:54 +02:00
Åke Strandberg
855ba68b62 Allow removal of myuplink device from GUI (#117009)
* Allow removal of device from GUI

* Check that device is orphaned before removing
2024-06-03 10:59:42 +02:00
Jan Bouwhuis
1b87a2dd73 Update codeowners incomfort integration (#118700) 2024-06-03 10:38:24 +02:00
Erik Montnemery
35dcda29b9 Use ULID instead of UUID for config entry id and flow ID (#118677) 2024-06-03 10:34:09 +02:00
epenet
6cf7889c38 Add type hints for requests_mock.Mocker in test fixtures (#118678) 2024-06-03 10:30:08 +02:00
epenet
9be972b13e Add type hints for list[Device] in test fixtures (#118681) 2024-06-03 10:21:24 +02:00
epenet
f39dd40be1 Add type hints for hass_storage in test fixtures (#118682) 2024-06-03 10:20:57 +02:00
epenet
fdec1b0b16 Add type hints for ClientSessionGenerator in test fixtures (#118689) 2024-06-03 10:19:49 +02:00
epenet
77c627e6f3 Fix incorrect blueprint type hints in tests (#118694) 2024-06-03 10:19:13 +02:00
epenet
d5eebb202b Remove unused fixture from elmax tests (#118684) 2024-06-03 10:18:36 +02:00
epenet
8772a59f5c Add type hints for Recorder in test fixtures (#118685) 2024-06-03 10:17:51 +02:00
epenet
666fc2333a Add type hints for AiohttpClientMocker in test fixtures (#118691) 2024-06-03 10:13:22 +02:00
epenet
c93d42d59b Add type hints for FrozenDateTimeFactory in test fixtures (#118690) 2024-06-03 10:12:58 +02:00
J. Nick Koston
134088e1f6 Revert "Add websocket API to get list of recorded entities (#92640)" (#118644)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-06-03 10:11:24 +02:00
epenet
891f9c9578 Add error message to device registry helper (#118676) 2024-06-03 09:58:02 +02:00
dependabot[bot]
a87b422d3e Bump github/codeql-action from 3.25.6 to 3.25.7 (#118680)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-03 09:52:04 +02:00
epenet
1db7c7946e Add type hints for MqttMockHAClient in test fixtures (#118683) 2024-06-03 09:29:15 +02:00
epenet
9a5706fa30 Add type hints for pytest.LogCaptureFixture in test fixtures (#118687) 2024-06-03 09:28:54 +02:00
Jan Bouwhuis
bb259b607f Refactor incomfort platform attributes (#118667)
* Refector incomfort platform attributes

* Initialize static entity properties as class level
2024-06-03 08:32:05 +02:00
Richard Kroegel
7c5a6602b3 Set lock state to unkown on BMW API error (#118559)
* Revert to previous lock state on BMW API error

* Set lock state to unkown on error and force refresh from API

---------

Co-authored-by: Richard <rikroe@users.noreply.github.com>
2024-06-03 07:48:48 +02:00
Marlon
c23ec96174 Add BaseEntity for apsystems integration (#117514)
* Add BaseEntity for apsystems integration

* Exclude entity.py from apsystems from coverage

* Remove api from BaseEntity from apsystems as it is not yet used

* Split BaseEntity and BaseCoordinatorEntity in apsystems integration

* Clean up of asserting unique_id everywhere in apsystems integration

* Remove BaseCoordinatorEntity from apsystems

* Remove double type declaration originating from merge in apsystems
2024-06-03 07:28:13 +02:00
Thomas55555
78e5f9578c Clean up Husqvarna Automower number platform (#118641)
Address late review and remove unneeded loop in Husqvarna Automower
2024-06-03 05:13:02 +02:00
Paulus Schoutsen
b5783e6f5c Bump version to 2024.6.0b5 2024-06-03 01:10:10 +00:00
G Johansson
1708b60ecf Fix entity state dispatching for Tag entities (#118662) 2024-06-03 01:10:06 +00:00
puddly
3c012c497b Bump ZHA dependencies (#118658)
* Bump bellows to 0.39.0

* Do not create a backup if there is no active ZHA gateway object

* Bump universal-silabs-flasher as well
2024-06-03 01:10:05 +00:00
Joost Lekkerkerker
4d2dc9a40e Fix incorrect placeholder in SharkIQ (#118640)
Update strings.json
2024-06-03 01:10:05 +00:00
Jan Bouwhuis
3653a51288 Fix handling undecoded mqtt sensor payloads (#118633) 2024-06-03 01:10:04 +00:00
J. Nick Koston
9366a4e69b Include a traceback for non-strict event loop blocking detection (#118620) 2024-06-03 01:10:03 +00:00
Luca Angemi
1d1af7ec11 Fix telegram bot send_document (#118616) 2024-06-03 01:10:02 +00:00
tronikos
236b19c5b3 Use gemini-1.5-flash-latest in google_generative_ai_conversation.generate_content (#118594) 2024-06-03 01:10:02 +00:00
tronikos
1afbfd687f Strip Google AI text responses (#118593)
* Strip Google AI test responses

* strip each part
2024-06-03 01:10:01 +00:00
Paulus Schoutsen
20159d0277 Add base prompt for LLMs (#118592) 2024-06-03 01:10:00 +00:00
tronikos
4df3d43e45 Stop instructing LLM to not pass the domain as a list (#118590) 2024-06-03 01:10:00 +00:00
Michael
1a588760b9 Avoid future exception during setup of Synology DSM (#118583)
* avoid future exception during integration setup

* clear future flag during setup

* always clear the flag (with comment)
2024-06-03 01:09:58 +00:00
Jan-Philipp Benecke
6ba9e7d5fd Run ruff format for device registry (#118582) 2024-06-03 01:09:58 +00:00
epenet
4b06c5d2fb Update device connections in samsungtv (#118556) 2024-06-03 01:09:57 +00:00
Adam Pasztor
bfc1c62a49 Bump pyads to 3.4.0 (#116934)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-03 01:09:57 +00:00
Thomas Ytterdal
c52fabcf77 Ignore myuplink sensors without a description that provide non-numeric values (#115525)
Ignore sensors without a description that provide non-numeric values

Co-authored-by: Jan-Philipp Benecke <jan-philipp@bnck.me>
2024-06-03 01:09:56 +00:00
G Johansson
6a8a975fae Remove config flow import from fastdotcom (#118665) 2024-06-02 21:04:35 -04:00
G Johansson
dd1d21c77a Fix entity state dispatching for Tag entities (#118662) 2024-06-02 20:41:16 -04:00
puddly
746939c8cd Bump ZHA dependencies (#118658)
* Bump bellows to 0.39.0

* Do not create a backup if there is no active ZHA gateway object

* Bump universal-silabs-flasher as well
2024-06-02 16:55:48 -04:00
Jan Bouwhuis
375f48142c Fix handling undecoded mqtt sensor payloads (#118633) 2024-06-02 21:25:05 +02:00
Maciej Bieniek
afc29fdbe7 Add support for the DS18B20 temperature sensor to Nettigo Air Monitor integration (#118601)
Add support for DS18B20 temperature sensor

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-02 20:55:36 +02:00
Joost Lekkerkerker
51394cefba Fix incorrect placeholder in SharkIQ (#118640)
Update strings.json
2024-06-02 20:15:35 +02:00
J. Nick Koston
51ed4f89ec Use more efficient chunked_or_all for recorder table managers (#118646) 2024-06-02 13:04:53 -05:00
Adam Pasztor
54a1a4ab41 Bump pyads to 3.4.0 (#116934)
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-06-02 15:41:44 +02:00
epenet
37fc16d7b6 Fix incorrect patch type hint in main conftest (#118461) 2024-06-02 15:34:30 +02:00
Marc Mueller
dbb27755a4 Update mypy-dev to 1.11.0a5 (#118519) 2024-06-02 15:28:24 +02:00
J. Nick Koston
8f94205014 Include a traceback for non-strict event loop blocking detection (#118620) 2024-06-02 06:36:25 -04:00
epenet
e976db8443 Address late review comment in samsungtv (#118539)
Address late comment in samsungtv
2024-06-02 10:42:42 +02:00
Luca Angemi
d67ed42edc Fix telegram bot send_document (#118616) 2024-06-02 01:32:24 -05:00
Michael
46eb779c5c Avoid future exception during setup of Synology DSM (#118583)
* avoid future exception during integration setup

* clear future flag during setup

* always clear the flag (with comment)
2024-06-01 23:51:17 +02:00
Marc Mueller
e485a0c6f2 Update typing-extensions to 4.12.1 (#118615) 2024-06-01 22:26:23 +02:00
Alexandre CUER
1f922798d8 Add new codeowner for emoncms integration (#118609)
adding new codeowner
2024-06-01 21:14:18 +02:00
Sid
daadc4662a Bump ruff to 0.4.7 (#118612) 2024-06-01 20:04:04 +02:00
Maciej Bieniek
649d6ec11a Bump nettigo_air_monitor library to version 3.2.0 (#118600)
* Bump nam to version 3.2.0

* Update test snapshot

---------

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-06-01 18:10:45 +02:00
Dave T
b69789d056 Don't prompt user to verify still image if none was provided in generic camera (#118599)
Skip user prompt for preview image if only stream
2024-06-01 10:30:32 -04:00
Thomas Ytterdal
ca89d22a34 Ignore myuplink sensors without a description that provide non-numeric values (#115525)
Ignore sensors without a description that provide non-numeric values

Co-authored-by: Jan-Philipp Benecke <jan-philipp@bnck.me>
2024-06-01 11:27:03 +02:00
epenet
6115dffd80 Cleanup pylint ignore in melnor tests (#118564) 2024-06-01 08:03:32 +02:00
Joost Lekkerkerker
51933b0f47 Improve typing in Zabbix (#118545) 2024-06-01 07:40:26 +02:00
tronikos
a4612143e6 Use gemini-1.5-flash-latest in google_generative_ai_conversation.generate_content (#118594) 2024-05-31 21:57:14 -07:00
tronikos
7af469f81e Strip Google AI text responses (#118593)
* Strip Google AI test responses

* strip each part
2024-05-31 21:55:52 -07:00
Paulus Schoutsen
f3b20d30ae Add base prompt for LLMs (#118592) 2024-06-01 00:21:37 -04:00
tronikos
dfb407728f Stop instructing LLM to not pass the domain as a list (#118590) 2024-05-31 20:21:18 -04:00
Robert Svensson
3232fd0eaf Improve UniFi config flow tests (#118587)
* Use proper fixtures in config flow tests

* Improve rest of config flow tests

* Small improvement

* Rename fixtures
2024-06-01 00:27:53 +02:00
epenet
738935a73a Update device connections in samsungtv (#118556) 2024-05-31 16:07:51 -05:00
Jan-Philipp Benecke
32b51b8792 Run ruff format for device registry (#118582) 2024-05-31 22:22:48 +02:00
Joost Lekkerkerker
f6800e6968 Improve typing in Zengge (#118547) 2024-05-31 21:35:42 +02:00
Paulus Schoutsen
b39d7b39e1 Bump version to 2024.6.0b4 2024-05-31 19:34:58 +00:00
Paulus Schoutsen
c01c155037 Fix openAI tool calls (#118577) 2024-05-31 19:34:38 +00:00
epenet
b459559c8b Add ability to replace connections in DeviceRegistry (#118555)
* Add ability to replace connections in DeviceRegistry

* Add more tests

* Improve coverage

* Apply suggestion

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

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2024-05-31 19:34:38 +00:00
Maciej Bieniek
d823e56659 In Brother integration use SnmpEngine from SNMP integration (#118554)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-05-31 19:34:37 +00:00
Michael Chisholm
e401a0da7f Fix KeyError in dlna_dmr SSDP config flow when checking existing config entries (#118549)
Fix KeyError checking existing dlna_dmr config entries
2024-05-31 19:34:36 +00:00
Tsvi Mostovicz
3f6df28ef3 Fix YAML deprecation breaking version in jewish calendar and media extractor (#118546)
* Fix YAML deprecation breaking version

* Update

* fix media extractor deprecation as well

* Add issue_domain
2024-05-31 19:34:35 +00:00
Joost Lekkerkerker
9b63779063 Fix typo in OWM strings (#118538)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-05-31 19:34:35 +00:00
Josef Zweck
4998fe5e6d Migrate openai_conversation to entry.runtime_data (#118535)
* switch to entry.runtime_data

* check for missing config entry

* Update homeassistant/components/openai_conversation/__init__.py

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2024-05-31 19:34:34 +00:00
Brett Adams
a59c890779 Fix off_grid_vehicle_charging_reserve_percent in Teselemetry (#118532) 2024-05-31 19:34:34 +00:00
Luca Angemi
a2cdb349f4 Fix telegram doing blocking I/O in the event loop (#118531) 2024-05-31 19:34:33 +00:00
J. Nick Koston
267228cae0 Fix openweathermap config entry migration (#118526)
* Fix openweathermap config entry migration

The options keys were accidentally migrated to data so
they could no longer be changed in the options flow

* more fixes

* adjust

* reduce

* fix

* adjust
2024-05-31 19:34:32 +00:00
J. Nick Koston
ba769f4d9f Fix snmp doing blocking I/O in the event loop (#118521) 2024-05-31 19:34:31 +00:00
Denis Shulyaka
c09bc726d1 Add OpenAI Conversation system prompt user_name and llm_context variables (#118512)
* OpenAI Conversation: Add variables to the system prompt

* User name and llm_context

* test for user name

* test for user id

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-05-31 19:34:31 +00:00
Josef Zweck
c441f689bf Add typing for OpenAI client and fallout (#118514)
* typing for client and consequences

* Update homeassistant/components/openai_conversation/conversation.py

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2024-05-31 19:34:07 +00:00
Denis Shulyaka
395e1ae31e Add Google Generative AI Conversation system prompt user_name and llm_context variables (#118510)
* Google Generative AI Conversation: Add variables to the system prompt

* User name and llm_context

* test for template variables

* test for template variables

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-05-31 19:32:47 +00:00
Bas Brussee
2e45d678b8 Revert "Fix Tibber sensors state class" (#118409)
Revert "Fix Tibber sensors state class (#117085)"

This reverts commit 658c1f3d97.
2024-05-31 19:32:46 +00:00
Paulus Schoutsen
17cb25a5b6 Rename llm.ToolContext to llm.LLMContext (#118566) 2024-05-31 19:32:07 +00:00
epenet
41e852a01b Add ability to replace connections in DeviceRegistry (#118555)
* Add ability to replace connections in DeviceRegistry

* Add more tests

* Improve coverage

* Apply suggestion

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

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2024-05-31 15:31:44 -04:00
Denis Shulyaka
bae96e7d36 Add Google Generative AI Conversation system prompt user_name and llm_context variables (#118510)
* Google Generative AI Conversation: Add variables to the system prompt

* User name and llm_context

* test for template variables

* test for template variables

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-05-31 15:28:44 -04:00
Denis Shulyaka
46da43d09d Add OpenAI Conversation system prompt user_name and llm_context variables (#118512)
* OpenAI Conversation: Add variables to the system prompt

* User name and llm_context

* test for user name

* test for user id

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2024-05-31 15:28:23 -04:00
Paulus Schoutsen
80e9ff672a Fix openAI tool calls (#118577) 2024-05-31 19:28:52 +02:00
starkillerOG
51d8f83a54 Add state translation to Reolink AI detections (#118560) 2024-05-31 17:55:59 +02:00
Josef Zweck
d956db691a Migrate openai_conversation to entry.runtime_data (#118535)
* switch to entry.runtime_data

* check for missing config entry

* Update homeassistant/components/openai_conversation/__init__.py

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2024-05-31 11:16:39 -04:00
J. Nick Koston
ade0f94a20 Remove duplicate getattr call in entity wrap_attr (#118558) 2024-05-31 11:11:46 -04:00
Paulus Schoutsen
6dd01dbff7 Rename llm.ToolContext to llm.LLMContext (#118566) 2024-05-31 11:11:24 -04:00
J. Nick Koston
6656f7d6b9 Log directory blocking I/O functions that run in the event loop (#118529)
* Log directory I/O functions that run in the event loop

* tests
2024-05-31 11:09:19 -04:00
J. Nick Koston
1fef4fa1f6 Prevent time.sleep calls from blocking the event loop (#118561)
* Prevent time.sleep calls from blocking the event loop

We have been warning on these since Jan 2022. 2+ years seems more than enough
time to give to fix these. see https://github.com/home-assistant/core/pull/63766

* Prevent time.sleep calls from blocking the event loop

We have been warning on these since Jan 2022. 2+ years seems more than enough
time to give to fix these. see https://github.com/home-assistant/core/pull/63766
2024-05-31 11:08:22 -04:00
Michael Chisholm
15f726da50 Fix KeyError in dlna_dmr SSDP config flow when checking existing config entries (#118549)
Fix KeyError checking existing dlna_dmr config entries
2024-05-31 10:52:19 -04:00
J. Nick Koston
d67f14ac0b Fix openweathermap config entry migration (#118526)
* Fix openweathermap config entry migration

The options keys were accidentally migrated to data so
they could no longer be changed in the options flow

* more fixes

* adjust

* reduce

* fix

* adjust
2024-05-31 10:51:38 -04:00
Bas Brussee
bff2d3e2ee Revert "Fix Tibber sensors state class" (#118409)
Revert "Fix Tibber sensors state class (#117085)"

This reverts commit 658c1f3d97.
2024-05-31 10:50:22 -04:00
osohotwateriot
cf3e758aa1 Move OSO Energy base entity class to separate module (#118563)
Move base entity class to separate file
2024-05-31 16:13:20 +02:00
Maciej Bieniek
8f5ddd5bcc Bump brother backend library to version 4.2.0 (#118557)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-05-31 09:00:33 -05:00
Brett Adams
929568c3b5 Fix off_grid_vehicle_charging_reserve_percent in Teselemetry (#118532) 2024-05-31 07:54:40 -05:00
Maciej Bieniek
c85743822a In Brother integration use SnmpEngine from SNMP integration (#118554)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
2024-05-31 07:52:43 -05:00
Luca Angemi
5ed9d58a7b Fix telegram doing blocking I/O in the event loop (#118531) 2024-05-31 07:45:52 -05:00
J. Nick Koston
76391d71d6 Fix snmp doing blocking I/O in the event loop (#118521) 2024-05-31 07:44:28 -05:00
Joost Lekkerkerker
a23b5e97e6 Fix typo in OWM strings (#118538)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2024-05-31 07:11:59 -05:00
epenet
0974ea9a5a Adjust "hass" type hint for test fixtures in pylint plugin (#118548)
Adjust "hass" type hint in pylint plugin
2024-05-31 13:06:49 +02:00
epenet
7e1f4cd3fb Check fixtures for type hints in pylint plugin (#118313)
* Check fixtures for type hints in pylint plugin

* Apply suggestion
2024-05-31 12:42:42 +02:00
Tsvi Mostovicz
9fc51891ca Fix YAML deprecation breaking version in jewish calendar and media extractor (#118546)
* Fix YAML deprecation breaking version

* Update

* fix media extractor deprecation as well

* Add issue_domain
2024-05-31 12:35:40 +02:00
epenet
ec4545ce4a Small performance improvement to pylint plugin (#118475)
* Small improvement to pylint plugin

* Adjust

* Improve

* Rename variable and drop used argument
2024-05-31 12:03:29 +02:00
Alexandre CUER
8a3b49434e Code quality improvements in emoncms integration (#118468)
* type hints
remove unused var interval

* corrections as suggested by epenet

* reintroducing property extra_state_attributes
so that the extra parameters update correctly
2024-05-31 11:50:18 +02:00
epenet
7804076064 Drop single-use constant from pylint plugin (#118540)
* Drop single-use constant from pylint plugin

* Typo
2024-05-31 11:18:55 +02:00
David Bonnes
85d979847c Move evohome helper functions to separate module (#118497)
initial commit
2024-05-31 10:22:15 +02:00
Maciej Bieniek
cdcf091c9c Pass the message as an exception argument in Tractive integration (#118534)
Pass the message as an exception argument

Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-05-31 09:11:52 +02:00
Markus Jacobsen
cb502263fd Bang & Olufsen fix straggler from previous PR (#118488)
* Fix callback straggler from previous PR

* Update homeassistant/components/bang_olufsen/media_player.py

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2024-05-30 22:23:43 -04:00
Paulus Schoutsen
e5e26de06f Bump version to 2024.6.0b3 2024-05-31 02:20:10 +00:00
tronikos
7dab255c15 Fix unnecessary single quotes escaping in Google AI (#118522) 2024-05-31 02:19:58 +00:00
tronikos
cea7347ed9 Improve LLM prompt (#118520) 2024-05-31 02:19:56 +00:00
tronikos
f4a876c590 Fix LLMs asking which area when there is only one device (#118518)
* Ignore deprecated open and close cover intents for LLMs

* Fix LLMs asking which area when there is only one device

* remove unrelated changed

* remove unrelated changes
2024-05-31 02:19:55 +00:00
tronikos
117a02972d Ignore deprecated open and close cover intents for LLMs (#118515) 2024-05-31 02:19:54 +00:00
G Johansson
3fb40deacb Fix key issue in config entry options in Openweathermap (#118506) 2024-05-31 02:19:54 +00:00
G Johansson
38c88c576b Fix tado non-string unique id for device trackers (#118505)
* Fix tado none string unique id for device trackers

* Add comment

* Fix comment
2024-05-31 02:19:53 +00:00
Paulus Schoutsen
e95b63bc89 Intent script: allow setting description and platforms (#118500)
* Add description to intent_script

* Allow setting platforms
2024-05-31 02:19:51 +00:00
Jan Bouwhuis
ea44b534e6 Fix group platform dependencies (#118499) 2024-05-31 02:19:50 +00:00
G Johansson
7646d853f4 Remove not needed hass object from Tag (#118498) 2024-05-31 02:19:49 +00:00
G Johansson
248c7c33b2 Fix blocking call in holiday (#118496) 2024-05-31 02:19:48 +00:00
Paulus Schoutsen
eb887a707c Ignore the toggle intent (#118491) 2024-05-31 02:19:46 +00:00
David Bonnes
e3ddbb2768 Fix evohome so it doesn't retrieve schedules unnecessarily (#118478) 2024-05-31 02:19:45 +00:00
Jan-Philipp Benecke
008aec5670 Log aiohttp error in rest_command (#118453) 2024-05-31 02:19:45 +00:00
Tsvi Mostovicz
d93d7159db Fix Jewish calendar unique id's (#117985)
* Initial commit

* Fix updating of unique id

* Add testing to check the unique id is being updated correctly

* Reload the config entry and confirm the unique id has not been changed

* Move updating unique_id to __init__.py as suggested

* Change the config_entry variable's name back from config to config_entry

* Move the loop into the update_unique_ids method

* Move test from test_config_flow to test_init

* Try an early optimization to check if we need to update the unique ids

* Mention the correct version

* Implement suggestions

* Ensure all entities are migrated correctly

* Just to be sure keep the previous assertion as well
2024-05-31 02:19:44 +00:00
Diogo Gomes
e6e017dab7 Add support for V2C Trydan 2.1.7 (#117147)
* Support for firmware 2.1.7

* add device ID as unique_id

* add device ID as unique_id

* add test device id as unique_id

* backward compatibility

* move outside try

* Sensor return type

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

* not needed

* make slave error enum state

* fix enum

* Update homeassistant/components/v2c/sensor.py

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

* Update homeassistant/components/v2c/strings.json

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

* Update homeassistant/components/v2c/strings.json

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

* simplify tests

* fix misspellings from upstream library

* add sensor tests

* just enough coverage for enum sensor

* Refactor V2C tests (#117264)

* Refactor V2C tests

* fix rebase issues

* ruff

* review

* fix https://github.com/home-assistant/core/issues/117296

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-05-31 02:19:43 +00:00
dontinelli
486c72db73 Adjustment of unit of measurement for light (#116695) 2024-05-31 02:19:42 +00:00
Jan-Philipp Benecke
2b4e9212bc Log aiohttp error in rest_command (#118453) 2024-05-30 22:17:44 -04:00
epenet
83e77720e9 Improve type hints for mock_bluetooth/enable_bluetooth (#118484) 2024-05-30 22:16:45 -04:00
tronikos
2b7685b71d Add Google Assistant SDK diagnostics (#118513) 2024-05-30 22:13:54 -04:00
Josef Zweck
eae04bf2e9 Add typing for OpenAI client and fallout (#118514)
* typing for client and consequences

* Update homeassistant/components/openai_conversation/conversation.py

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2024-05-30 22:13:18 -04:00
tronikos
2bd142d3a6 Improve LLM prompt (#118520) 2024-05-30 22:03:57 -04:00
tronikos
272c51fb38 Fix unnecessary single quotes escaping in Google AI (#118522) 2024-05-30 19:56:06 -04:00
tronikos
0d6c7d0973 Fix LLMs asking which area when there is only one device (#118518)
* Ignore deprecated open and close cover intents for LLMs

* Fix LLMs asking which area when there is only one device

* remove unrelated changed

* remove unrelated changes
2024-05-30 17:14:11 -04:00
G Johansson
b5ec24ef63 Fix key issue in config entry options in Openweathermap (#118506) 2024-05-30 16:35:36 -04:00
G Johansson
5c6753f4c0 Fix tado non-string unique id for device trackers (#118505)
* Fix tado none string unique id for device trackers

* Add comment

* Fix comment
2024-05-30 16:31:02 -04:00
Mr. Bubbles
2b016d29c9 Fix typing and streamline code in One-Time Password integration (#118511)
* Fix some issues

* some changes
2024-05-30 22:29:28 +02:00
tronikos
6d82cfa91a Ignore deprecated open and close cover intents for LLMs (#118515) 2024-05-30 16:29:13 -04:00
epenet
a5dc4cb1c7 Fix incorrect zeroconf type hint in tests (#118465)
* Fix incorrect `mock_async_zeroconf` type hint

* Adjust thread

* One more

* Fix mock_zeroconf also

* Adjust

* Adjust
2024-05-30 21:57:09 +02:00
Matthias Alphart
1352c4e427 Increase test coverage for KNX Climate (#117903)
* Increase test coverage fro KNX Climate

* fix test type annotation
2024-05-30 21:42:11 +02:00
Diogo Gomes
822273a6a3 Add support for V2C Trydan 2.1.7 (#117147)
* Support for firmware 2.1.7

* add device ID as unique_id

* add device ID as unique_id

* add test device id as unique_id

* backward compatibility

* move outside try

* Sensor return type

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

* not needed

* make slave error enum state

* fix enum

* Update homeassistant/components/v2c/sensor.py

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

* Update homeassistant/components/v2c/strings.json

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

* Update homeassistant/components/v2c/strings.json

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

* simplify tests

* fix misspellings from upstream library

* add sensor tests

* just enough coverage for enum sensor

* Refactor V2C tests (#117264)

* Refactor V2C tests

* fix rebase issues

* ruff

* review

* fix https://github.com/home-assistant/core/issues/117296

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2024-05-30 20:42:48 +02:00
Ron Weikamp
43c69c71c2 Add time based integration trigger to Riemann sum integral helper sensor (#110685)
* Schedule max dt for Riemann Integral sensor

* Simplify validation. Dont integrate on change if either old or new state is not numeric.

* Add validation to integration methods. Rollback requirement for both states to be always numeric.

* Use 0 max_dt for disabling time based updates.

* Use docstring instead of pass keyword in abstract methods.

* Use time_period config validation for max_dt

* Use new_state for scheduling max_dt. Only schedule if new state is numeric.

* Use default 0 (None) for max_dt.

* Rename max_dt to max_age.

* Rollback accidental renaming of different file

* Remove unnecessary and nonsensical max value.

* Improve new config description

* Use DurationSelector in config flow

* Rename new config to max_sub_interval

* Simplify by checking once for the integration strategy

* Use positive time period validation of sub interval in platform schema

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

* Remove return keyword

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

* Simplify scheduling of interval exceeded callback

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

* Improve documentation

* Be more clear about when time based integration is disabled.

* Update homeassistant/components/integration/config_flow.py

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-05-30 20:40:23 +02:00
G Johansson
4d27dd0fb0 Remove not needed hass object from Tag (#118498) 2024-05-30 19:24:34 +02:00
David Bonnes
a3fcd6b32f Fix evohome so it doesn't retrieve schedules unnecessarily (#118478) 2024-05-30 19:23:58 +02:00
dontinelli
f1465baada Adjustment of unit of measurement for light (#116695) 2024-05-30 19:18:48 +02:00
Jan Bouwhuis
796d940f2f Fix group platform dependencies (#118499) 2024-05-30 19:14:54 +02:00
G Johansson
34df767762 Fix blocking call in holiday (#118496) 2024-05-30 19:11:19 +02:00
Paulus Schoutsen
80588d9c67 Ignore the toggle intent (#118491) 2024-05-30 12:53:50 -04:00
Paulus Schoutsen
ae3741c364 Intent script: allow setting description and platforms (#118500)
* Add description to intent_script

* Allow setting platforms
2024-05-30 12:53:42 -04:00
Tsvi Mostovicz
12215c51b3 Fix Jewish calendar unique id's (#117985)
* Initial commit

* Fix updating of unique id

* Add testing to check the unique id is being updated correctly

* Reload the config entry and confirm the unique id has not been changed

* Move updating unique_id to __init__.py as suggested

* Change the config_entry variable's name back from config to config_entry

* Move the loop into the update_unique_ids method

* Move test from test_config_flow to test_init

* Try an early optimization to check if we need to update the unique ids

* Mention the correct version

* Implement suggestions

* Ensure all entities are migrated correctly

* Just to be sure keep the previous assertion as well
2024-05-30 18:27:15 +02:00
Ron Weikamp
2814ed5003 Add allow_negative configuration option to DurationSelector (#116134)
* Add configuration option positive to DurationSelector

* Rename to allow_negative in conjunction with a deprecation notice

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

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-05-30 17:42:34 +02:00
Marcel van der Veldt
a95c074ab8 Extend Matter sensor discovery schemas for Air Purifier / Air Quality devices (#118483)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2024-05-30 16:59:45 +02:00
Bram Kragten
56e4fa86b0 Update frontend to 20240530.0 (#118489) 2024-05-30 16:55:49 +02:00
Marcel van der Veldt
2ca4077608 Mark Matter climate dry/fan mode support on Panasonic AC (#118485) 2024-05-30 16:39:04 +02:00
Oleg Kurapov
2cc38b426a Add XML support to RESTful binary sensor (#110062)
* Add XML support to RESTful binary sensor

* Add test for binary sensor with XML input data

* Address mypy validation results by handling None returns

* Use proper incorrect XML instead of blank

* Change failure condition to match the behavior of the library method

* Change error handling for bad XML to expect ExpatError

* Parametrize bad XML test to catch both empty and invalid XML

* Move exception handling out of the shared method

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-05-30 16:29:50 +02:00
Erik Montnemery
4b95ea864f Fix a typo in hassfest (#118482) 2024-05-30 15:46:08 +02:00
Markus Jacobsen
12f2bcc3a4 Bang & Olufsen sort supported media_player features alphabetically (#118476)
Sort supported media_player features alphabetically
2024-05-30 14:31:38 +02:00
Robert Resch
7f49077ec6 Set enity_category to config for airgradient select entities (#118477) 2024-05-30 14:20:02 +02:00
Tsvi Mostovicz
e3f6d4cfbf Use const instead of literal string in HVV integration (#118479)
Use const instead of literal string
2024-05-30 13:59:38 +02:00
lunmay
c387698c6f Typo fix in media_extractor (#118473) 2024-05-30 13:24:58 +02:00
Maciej Bieniek
cf51179009 Add tests for Tractive integration (#118470)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-05-30 12:45:11 +02:00
Alexey Guseynov
fc5d58effd Add Total Volatile Organic Compounds (tVOC) matter discovery schema (#116963) 2024-05-30 12:20:02 +02:00
David Bonnes
46aa3ca97c Move evohome constants to separate module (#118471)
* move constants to const.py

* make module docstring tweaks

* move schemas back to init
2024-05-30 11:13:45 +01:00
Robert Resch
ac979e9105 Bump deebot-client to 7.3.0 (#118462) 2024-05-30 11:40:05 +02:00
ashionky
c0ccc86954 Bump refoss to v1.2.1 (#118450) 2024-05-30 11:03:18 +02:00
Maciej Bieniek
9bd1c408bd Raise ConfigEntryNotReady when there is no _id in the Tractive data (#118467)
Co-authored-by: Maciej Bieniek <478555+bieniu@users.noreply.github.com>
2024-05-30 11:00:36 +02:00
epenet
06251d403a Fix special case in pylint type hint plugin (#118454)
* Fix special case in pylint type hint plugin

* Simplify

* Simplify

* Simplify

* Apply

Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>

---------

Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
2024-05-30 10:41:32 +02:00
epenet
c6e0e93680 Cleanup mock_get_source_ip from tests (#118459) 2024-05-30 09:37:01 +02:00
epenet
9221eeb2f7 Add check for usefixtures decorator in pylint plugin (#118456) 2024-05-30 08:54:56 +02:00
epenet
baaf16e9b3 Adjust type hint for request_mock.Mocker in pylint plugin (#118458) 2024-05-30 08:53:42 +02:00
epenet
1317837986 Improve type hints in tests (q-z) (#118381) 2024-05-30 08:48:02 +02:00
epenet
242ee04642 Improve type hints in tests (i-p) (#118380) 2024-05-30 08:47:08 +02:00
epenet
092cdcfe91 Improve type hints in tests (a-h) (#118379) 2024-05-30 08:46:18 +02:00
tronikos
4893faa671 Instruct LLM to not pass a list to the domain (#118451) 2024-05-30 08:37:45 +02:00
tronikos
639f6c640c Improve LLM prompt (#118443)
* Improve LLM prompt

* test

* improvements

* improvements
2024-05-29 21:44:33 -04:00
J. Nick Koston
ef79842c2f Fix google_mail doing blocking i/o in the event loop (take 2) (#118441) 2024-05-29 18:55:53 -04:00
tronikos
e50defa7f5 Bump opower to 0.4.6 (#118434) 2024-05-29 11:37:36 -10:00
J. Nick Koston
f957ba09de Fix blocking I/O in the event loop in meteo_france (#118429) 2024-05-29 23:37:24 +02:00
Evgeny
ab9581c617 Fix OpenWeatherMap migration (#118428) 2024-05-29 11:12:24 -10:00
swcloudgenie
a670169325 New official genie garage integration (#117020)
* new official genie garage integration

* move api constants into api module

* move scan interval constant to cover.py
2024-05-29 16:13:28 -04:00
J. Nick Koston
f93a3127f2 Fix workday doing blocking I/O in the event loop (#118422) 2024-05-29 22:07:56 +02:00
J. Nick Koston
1743d1700d Ensure paho.mqtt.client is imported in the executor (#118412)
fixes #118405
2024-05-29 15:55:34 -04:00
J. Nick Koston
5fae2bd7c5 Fix google_tasks doing blocking I/O in the event loop (#118418)
fixes #118407
2024-05-29 15:55:22 -04:00
J. Nick Koston
9e9e1f75f2 Fix google_mail doing blocking I/O in the event loop (#118421)
fixes #118411
2024-05-29 15:55:12 -04:00
Michael Hansen
43ceb1c6c8 Handle case where timer device id exists but is not registered (delayed command) (#118410)
Handle case where device id exists but is not registered
2024-05-29 15:18:46 -04:00
Marcel van der Veldt
a0443ac328 Add translation strings for Matter Fan presets (#118401) 2024-05-29 21:12:47 +02:00
Marcel van der Veldt
8cc15e82df Fix light discovery for Matter dimmable plugin unit (#118404) 2024-05-29 21:09:50 +02:00
Franck Nijhof
eca8dd93c5 Bump version to 2024.7.0dev0 (#118399) 2024-05-29 20:54:49 +02:00
4720 changed files with 180230 additions and 104038 deletions

View File

@@ -49,6 +49,7 @@ base_platforms: &base_platforms
- homeassistant/components/tts/**
- homeassistant/components/update/**
- homeassistant/components/vacuum/**
- homeassistant/components/valve/**
- homeassistant/components/water_heater/**
- homeassistant/components/weather/**
@@ -120,24 +121,20 @@ tests: &tests
- pylint/**
- requirements_test_pre_commit.txt
- requirements_test.txt
- tests/*.py
- tests/auth/**
- tests/backports/**
- tests/common.py
- tests/components/history/**
- tests/components/logbook/**
- tests/components/recorder/**
- tests/components/sensor/**
- tests/conftest.py
- tests/hassfest/**
- tests/helpers/**
- tests/ignore_uncaught_exceptions.py
- tests/mock/**
- tests/pylint/**
- tests/scripts/**
- tests/syrupy.py
- tests/test_util/**
- tests/testing_config/**
- tests/typing.py
- tests/util/**
other: &other

File diff suppressed because it is too large Load Diff

View File

@@ -32,6 +32,7 @@
"python.pythonPath": "/home/vscode/.local/ha-venv/bin/python",
"python.terminal.activateEnvInCurrentTerminal": true,
"python.testing.pytestArgs": ["--no-cov"],
"pylint.importStrategy": "fromEnvironment",
"editor.formatOnPaste": false,
"editor.formatOnSave": true,
"editor.formatOnType": true,

View File

@@ -74,7 +74,6 @@ If the code communicates with devices, web services, or third-party tools:
- [ ] New or updated dependencies have been added to `requirements_all.txt`.
Updated by running `python3 -m script.gen_requirements_all`.
- [ ] For the updated dependencies - a link to the changelog, or at minimum a diff between library versions is added to the PR description.
- [ ] Untested files have been added to `.coveragerc`.
<!--
This project is very active and we have a high turnover of pull requests.

View File

@@ -27,12 +27,12 @@ jobs:
publish: ${{ steps.version.outputs.publish }}
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
with:
fetch-depth: 0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}
@@ -69,7 +69,7 @@ jobs:
run: find ./homeassistant/components/*/translations -name "*.json" | tar zcvf translations.tar.gz -T -
- name: Upload translations
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: translations
path: translations.tar.gz
@@ -90,11 +90,11 @@ jobs:
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Download nightly wheels of frontend
if: needs.init.outputs.channel == 'dev'
uses: dawidd6/action-download-artifact@v3.1.4
uses: dawidd6/action-download-artifact@v6
with:
github_token: ${{secrets.GITHUB_TOKEN}}
repo: home-assistant/frontend
@@ -105,7 +105,7 @@ jobs:
- name: Download nightly wheels of intents
if: needs.init.outputs.channel == 'dev'
uses: dawidd6/action-download-artifact@v3.1.4
uses: dawidd6/action-download-artifact@v6
with:
github_token: ${{secrets.GITHUB_TOKEN}}
repo: home-assistant/intents-package
@@ -116,7 +116,7 @@ jobs:
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
if: needs.init.outputs.channel == 'dev'
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}
@@ -175,7 +175,7 @@ jobs:
sed -i "s|pykrakenapi|# pykrakenapi|g" requirements_all.txt
- name: Download translations
uses: actions/download-artifact@v4.1.7
uses: actions/download-artifact@v4.1.8
with:
name: translations
@@ -242,7 +242,7 @@ jobs:
- green
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set build additional args
run: |
@@ -279,7 +279,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Initialize git
uses: home-assistant/actions/helpers/git-init@master
@@ -320,7 +320,7 @@ jobs:
registry: ["ghcr.io/home-assistant", "docker.io/homeassistant"]
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Install Cosign
uses: sigstore/cosign-installer@v3.5.0
@@ -450,15 +450,15 @@ jobs:
if: github.repository_owner == 'home-assistant' && needs.init.outputs.publish == 'true'
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}
- name: Download translations
uses: actions/download-artifact@v4.1.7
uses: actions/download-artifact@v4.1.8
with:
name: translations

View File

@@ -33,10 +33,10 @@ on:
type: boolean
env:
CACHE_VERSION: 8
CACHE_VERSION: 9
UV_CACHE_VERSION: 1
MYPY_CACHE_VERSION: 8
HA_SHORT_VERSION: "2024.6"
HA_SHORT_VERSION: "2024.8"
DEFAULT_PYTHON: "3.12"
ALL_PYTHON_VERSIONS: "['3.12']"
# 10.3 is the oldest supported version
@@ -89,7 +89,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Generate partial Python venv restore key
id: generate_python_cache_key
run: |
@@ -226,10 +226,10 @@ jobs:
- info
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
@@ -272,9 +272,9 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
id: python
with:
python-version: ${{ env.DEFAULT_PYTHON }}
@@ -312,9 +312,9 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
id: python
with:
python-version: ${{ env.DEFAULT_PYTHON }}
@@ -351,9 +351,9 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
id: python
with:
python-version: ${{ env.DEFAULT_PYTHON }}
@@ -445,10 +445,10 @@ jobs:
python-version: ${{ fromJSON(needs.info.outputs.python_versions) }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ matrix.python-version }}
check-latest: true
@@ -488,6 +488,7 @@ jobs:
sudo apt-get -y install \
bluez \
ffmpeg \
libturbojpeg \
libavcodec-dev \
libavdevice-dev \
libavfilter-dev \
@@ -521,11 +522,17 @@ jobs:
- info
- base
steps:
- name: Install additional OS dependencies
run: |
sudo rm /etc/apt/sources.list.d/microsoft-prod.list
sudo apt-get update
sudo apt-get -y install \
libturbojpeg
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
@@ -554,10 +561,10 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
@@ -575,6 +582,46 @@ jobs:
. venv/bin/activate
python -m script.gen_requirements_all validate
audit-licenses:
name: Audit licenses
runs-on: ubuntu-22.04
needs:
- info
- base
if: |
needs.info.outputs.requirements == 'true'
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
with:
path: venv
fail-on-cache-miss: true
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.python_cache_key }}
- name: Run pip-licenses
run: |
. venv/bin/activate
pip-licenses --format=json --output-file=licenses.json
- name: Upload licenses
uses: actions/upload-artifact@v4.3.4
with:
name: licenses
path: licenses.json
- name: Process licenses
run: |
. venv/bin/activate
python -m script.licenses
pylint:
name: Check pylint
runs-on: ubuntu-22.04
@@ -587,10 +634,10 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
@@ -620,6 +667,51 @@ jobs:
python --version
pylint --ignore-missing-annotations=y homeassistant/components/${{ needs.info.outputs.integrations_glob }}
pylint-tests:
name: Check pylint on tests
runs-on: ubuntu-22.04
timeout-minutes: 20
if: |
(github.event.inputs.mypy-only != 'true' || github.event.inputs.pylint-only == 'true')
&& (needs.info.outputs.tests_glob || needs.info.outputs.test_full_suite == 'true')
needs:
- info
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.0.2
with:
path: venv
fail-on-cache-miss: true
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.python_cache_key }}
- name: Register pylint problem matcher
run: |
echo "::add-matcher::.github/workflows/matchers/pylint.json"
- name: Run pylint (fully)
if: needs.info.outputs.test_full_suite == 'true'
run: |
. venv/bin/activate
python --version
pylint --ignore-missing-annotations=y tests
- name: Run pylint (partially)
if: needs.info.outputs.test_full_suite == 'false'
shell: bash
run: |
. venv/bin/activate
python --version
pylint --ignore-missing-annotations=y tests/components/${{ needs.info.outputs.tests_glob }}
mypy:
name: Check mypy
runs-on: ubuntu-22.04
@@ -631,10 +723,10 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
@@ -702,12 +794,13 @@ jobs:
sudo apt-get -y install \
bluez \
ffmpeg \
libturbojpeg \
libgammu-dev
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
@@ -725,7 +818,7 @@ jobs:
. venv/bin/activate
python -m script.split_tests ${{ needs.info.outputs.test_group_count }} tests
- name: Upload pytest_buckets
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: pytest_buckets
path: pytest_buckets.txt
@@ -746,6 +839,7 @@ jobs:
- hassfest
- lint-other
- lint-ruff
- lint-ruff-format
- mypy
- prepare-pytest-full
strategy:
@@ -763,12 +857,13 @@ jobs:
sudo apt-get -y install \
bluez \
ffmpeg \
libturbojpeg \
libgammu-dev
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ matrix.python-version }}
check-latest: true
@@ -787,7 +882,7 @@ jobs:
run: |
echo "::add-matcher::.github/workflows/matchers/pytest-slow.json"
- name: Download pytest_buckets
uses: actions/download-artifact@v4.1.7
uses: actions/download-artifact@v4.1.8
with:
name: pytest_buckets
- name: Compile English translations
@@ -822,14 +917,14 @@ jobs:
2>&1 | tee pytest-${{ matrix.python-version }}-${{ matrix.group }}.txt
- name: Upload pytest output
if: success() || failure() && steps.pytest-full.conclusion == 'failure'
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: pytest-${{ github.run_number }}-${{ matrix.python-version }}-${{ matrix.group }}
path: pytest-*.txt
overwrite: true
- name: Upload coverage artifact
if: needs.info.outputs.skip_coverage != 'true'
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: coverage-${{ matrix.python-version }}-${{ matrix.group }}
path: coverage.xml
@@ -863,6 +958,7 @@ jobs:
- hassfest
- lint-other
- lint-ruff
- lint-ruff-format
- mypy
strategy:
fail-fast: false
@@ -879,12 +975,13 @@ jobs:
sudo apt-get -y install \
bluez \
ffmpeg \
libturbojpeg \
libmariadb-dev-compat
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ matrix.python-version }}
check-latest: true
@@ -945,7 +1042,7 @@ jobs:
2>&1 | tee pytest-${{ matrix.python-version }}-${mariadb}.txt
- name: Upload pytest output
if: success() || failure() && steps.pytest-partial.conclusion == 'failure'
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: pytest-${{ github.run_number }}-${{ matrix.python-version }}-${{
steps.pytest-partial.outputs.mariadb }}
@@ -953,7 +1050,7 @@ jobs:
overwrite: true
- name: Upload coverage artifact
if: needs.info.outputs.skip_coverage != 'true'
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: coverage-${{ matrix.python-version }}-${{
steps.pytest-partial.outputs.mariadb }}
@@ -986,6 +1083,7 @@ jobs:
- hassfest
- lint-other
- lint-ruff
- lint-ruff-format
- mypy
strategy:
fail-fast: false
@@ -1002,12 +1100,13 @@ jobs:
sudo apt-get -y install \
bluez \
ffmpeg \
libturbojpeg \
postgresql-server-dev-14
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ matrix.python-version }}
check-latest: true
@@ -1069,7 +1168,7 @@ jobs:
2>&1 | tee pytest-${{ matrix.python-version }}-${postgresql}.txt
- name: Upload pytest output
if: success() || failure() && steps.pytest-partial.conclusion == 'failure'
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: pytest-${{ github.run_number }}-${{ matrix.python-version }}-${{
steps.pytest-partial.outputs.postgresql }}
@@ -1077,7 +1176,7 @@ jobs:
overwrite: true
- name: Upload coverage artifact
if: needs.info.outputs.skip_coverage != 'true'
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: coverage-${{ matrix.python-version }}-${{
steps.pytest-partial.outputs.postgresql }}
@@ -1099,18 +1198,19 @@ jobs:
timeout-minutes: 10
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Download all coverage artifacts
uses: actions/download-artifact@v4.1.7
uses: actions/download-artifact@v4.1.8
with:
pattern: coverage-*
- name: Upload coverage to Codecov
if: needs.info.outputs.test_full_suite == 'true'
uses: codecov/codecov-action@v4.4.1
uses: codecov/codecov-action@v4.5.0
with:
fail_ci_if_error: true
flags: full-suite
token: ${{ secrets.CODECOV_TOKEN }}
version: v0.6.0
pytest-partial:
runs-on: ubuntu-22.04
@@ -1128,6 +1228,7 @@ jobs:
- hassfest
- lint-other
- lint-ruff
- lint-ruff-format
- mypy
strategy:
fail-fast: false
@@ -1144,12 +1245,13 @@ jobs:
sudo apt-get -y install \
bluez \
ffmpeg \
libturbojpeg \
libgammu-dev
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ matrix.python-version }}
check-latest: true
@@ -1207,14 +1309,14 @@ jobs:
2>&1 | tee pytest-${{ matrix.python-version }}-${{ matrix.group }}.txt
- name: Upload pytest output
if: success() || failure() && steps.pytest-partial.conclusion == 'failure'
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: pytest-${{ github.run_number }}-${{ matrix.python-version }}-${{ matrix.group }}
path: pytest-*.txt
overwrite: true
- name: Upload coverage artifact
if: needs.info.outputs.skip_coverage != 'true'
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: coverage-${{ matrix.python-version }}-${{ matrix.group }}
path: coverage.xml
@@ -1233,14 +1335,15 @@ jobs:
timeout-minutes: 10
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Download all coverage artifacts
uses: actions/download-artifact@v4.1.7
uses: actions/download-artifact@v4.1.8
with:
pattern: coverage-*
- name: Upload coverage to Codecov
if: needs.info.outputs.test_full_suite == 'false'
uses: codecov/codecov-action@v4.4.1
uses: codecov/codecov-action@v4.5.0
with:
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
version: v0.6.0

View File

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

View File

@@ -10,7 +10,7 @@ on:
- "**strings.json"
env:
DEFAULT_PYTHON: "3.11"
DEFAULT_PYTHON: "3.12"
jobs:
upload:
@@ -19,10 +19,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}

View File

@@ -32,11 +32,11 @@ jobs:
architectures: ${{ steps.info.outputs.architectures }}
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.1.0
uses: actions/setup-python@v5.1.1
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
@@ -82,14 +82,14 @@ jobs:
) > .env_file
- name: Upload env_file
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: env_file
path: ./.env_file
overwrite: true
- name: Upload requirements_diff
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: requirements_diff
path: ./requirements_diff.txt
@@ -101,7 +101,7 @@ jobs:
python -m script.gen_requirements_all ci
- name: Upload requirements_all_wheels
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4.3.4
with:
name: requirements_all_wheels
path: ./requirements_all_wheels_*.txt
@@ -118,20 +118,20 @@ jobs:
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Download env_file
uses: actions/download-artifact@v4.1.7
uses: actions/download-artifact@v4.1.8
with:
name: env_file
- name: Download requirements_diff
uses: actions/download-artifact@v4.1.7
uses: actions/download-artifact@v4.1.8
with:
name: requirements_diff
- name: Build wheels
uses: home-assistant/wheels@2024.01.0
uses: home-assistant/wheels@2024.07.1
with:
abi: ${{ matrix.abi }}
tag: musllinux_1_2
@@ -156,20 +156,20 @@ jobs:
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v4.1.6
uses: actions/checkout@v4.1.7
- name: Download env_file
uses: actions/download-artifact@v4.1.7
uses: actions/download-artifact@v4.1.8
with:
name: env_file
- name: Download requirements_diff
uses: actions/download-artifact@v4.1.7
uses: actions/download-artifact@v4.1.8
with:
name: requirements_diff
- name: Download requirements_all_wheels
uses: actions/download-artifact@v4.1.7
uses: actions/download-artifact@v4.1.8
with:
name: requirements_all_wheels
@@ -203,7 +203,7 @@ jobs:
sed -i "/numpy/d" homeassistant/package_constraints.txt
- name: Build wheels (old cython)
uses: home-assistant/wheels@2024.01.0
uses: home-assistant/wheels@2024.07.1
with:
abi: ${{ matrix.abi }}
tag: musllinux_1_2
@@ -218,7 +218,7 @@ jobs:
pip: "'cython<3'"
- name: Build wheels (part 1)
uses: home-assistant/wheels@2024.01.0
uses: home-assistant/wheels@2024.07.1
with:
abi: ${{ matrix.abi }}
tag: musllinux_1_2
@@ -232,7 +232,7 @@ jobs:
requirements: "requirements_all.txtaa"
- name: Build wheels (part 2)
uses: home-assistant/wheels@2024.01.0
uses: home-assistant/wheels@2024.07.1
with:
abi: ${{ matrix.abi }}
tag: musllinux_1_2
@@ -246,7 +246,7 @@ jobs:
requirements: "requirements_all.txtab"
- name: Build wheels (part 3)
uses: home-assistant/wheels@2024.01.0
uses: home-assistant/wheels@2024.07.1
with:
abi: ${{ matrix.abi }}
tag: musllinux_1_2

View File

@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.4.6
rev: v0.5.2
hooks:
- id: ruff
args:
@@ -69,7 +69,7 @@ repos:
entry: script/run-in-env.sh pylint -j 0 --ignore-missing-annotations=y
language: script
types_or: [python, pyi]
files: ^homeassistant/.+\.(py|pyi)$
files: ^(homeassistant|tests)/.+\.(py|pyi)$
- id: gen_requirements_all
name: gen_requirements_all
entry: script/run-in-env.sh python3 -m script.gen_requirements_all
@@ -83,7 +83,7 @@ repos:
pass_filenames: false
language: script
types: [text]
files: ^(homeassistant/.+/(icons|manifest|strings)\.json|homeassistant/brands/.*\.json|\.coveragerc|homeassistant/.+/services\.yaml|script/hassfest/(?!metadata|mypy_config).+\.py|requirements_test.txt)$
files: ^(homeassistant/.+/(icons|manifest|strings)\.json|homeassistant/brands/.*\.json|homeassistant/.+/services\.yaml|script/hassfest/(?!metadata|mypy_config).+\.py|requirements_test.txt)$
- id: hassfest-metadata
name: hassfest-metadata
entry: script/run-in-env.sh python3 -m script.hassfest -p metadata

View File

@@ -21,6 +21,7 @@ homeassistant.helpers.entity_platform
homeassistant.helpers.entity_values
homeassistant.helpers.event
homeassistant.helpers.reload
homeassistant.helpers.script
homeassistant.helpers.script_variables
homeassistant.helpers.singleton
homeassistant.helpers.sun
@@ -97,6 +98,7 @@ homeassistant.components.assist_pipeline.*
homeassistant.components.asterisk_cdr.*
homeassistant.components.asterisk_mbox.*
homeassistant.components.asuswrt.*
homeassistant.components.autarco.*
homeassistant.components.auth.*
homeassistant.components.automation.*
homeassistant.components.awair.*
@@ -261,6 +263,7 @@ homeassistant.components.jellyfin.*
homeassistant.components.jewish_calendar.*
homeassistant.components.jvc_projector.*
homeassistant.components.kaleidescape.*
homeassistant.components.knocki.*
homeassistant.components.knx.*
homeassistant.components.kraken.*
homeassistant.components.lacrosse.*
@@ -286,6 +289,7 @@ homeassistant.components.logger.*
homeassistant.components.london_underground.*
homeassistant.components.lookin.*
homeassistant.components.luftdaten.*
homeassistant.components.madvr.*
homeassistant.components.mailbox.*
homeassistant.components.map.*
homeassistant.components.mastodon.*
@@ -369,6 +373,7 @@ homeassistant.components.rhasspy.*
homeassistant.components.ridwell.*
homeassistant.components.ring.*
homeassistant.components.rituals_perfume_genie.*
homeassistant.components.roborock.*
homeassistant.components.roku.*
homeassistant.components.romy.*
homeassistant.components.rpi_power.*
@@ -380,6 +385,7 @@ homeassistant.components.samsungtv.*
homeassistant.components.scene.*
homeassistant.components.schedule.*
homeassistant.components.scrape.*
homeassistant.components.script.*
homeassistant.components.search.*
homeassistant.components.select.*
homeassistant.components.sensibo.*

42
.vscode/launch.json vendored
View File

@@ -6,38 +6,52 @@
"configurations": [
{
"name": "Home Assistant",
"type": "python",
"type": "debugpy",
"request": "launch",
"module": "homeassistant",
"justMyCode": false,
"args": ["--debug", "-c", "config"],
"args": [
"--debug",
"-c",
"config"
],
"preLaunchTask": "Compile English translations"
},
{
"name": "Home Assistant (skip pip)",
"type": "python",
"type": "debugpy",
"request": "launch",
"module": "homeassistant",
"justMyCode": false,
"args": ["--debug", "-c", "config", "--skip-pip"],
"args": [
"--debug",
"-c",
"config",
"--skip-pip"
],
"preLaunchTask": "Compile English translations"
},
{
"name": "Home Assistant: Changed tests",
"type": "python",
"type": "debugpy",
"request": "launch",
"module": "pytest",
"justMyCode": false,
"args": ["--timeout=10", "--picked"],
"args": [
"--timeout=10",
"--picked"
],
},
{
// Debug by attaching to local Home Assistant server using Remote Python Debugger.
// See https://www.home-assistant.io/integrations/debugpy/
"name": "Home Assistant: Attach Local",
"type": "python",
"type": "debugpy",
"request": "attach",
"port": 5678,
"host": "localhost",
"connect": {
"port": 5678,
"host": "localhost"
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
@@ -49,10 +63,12 @@
// Debug by attaching to remote Home Assistant server using Remote Python Debugger.
// See https://www.home-assistant.io/integrations/debugpy/
"name": "Home Assistant: Attach Remote",
"type": "python",
"type": "debugpy",
"request": "attach",
"port": 5678,
"host": "homeassistant.local",
"connect": {
"port": 5678,
"host": "homeassistant.local"
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
@@ -61,4 +77,4 @@
]
}
]
}
}

View File

@@ -4,5 +4,7 @@
// https://github.com/microsoft/vscode-python/issues/14067
"python.testing.pytestArgs": ["--no-cov"],
// https://code.visualstudio.com/docs/python/testing#_pytest-configuration-settings
"python.testing.pytestEnabled": false
"python.testing.pytestEnabled": false,
// https://code.visualstudio.com/docs/python/linting#_general-settings
"pylint.importStrategy": "fromEnvironment"
}

1
.vscode/tasks.json vendored
View File

@@ -76,6 +76,7 @@
"detail": "Generate code coverage report for a given integration.",
"type": "shell",
"command": "python3 -m pytest ./tests/components/${input:integrationName}/ --cov=homeassistant.components.${input:integrationName} --cov-report term-missing --durations-min=1 --durations=0 --numprocesses=auto",
"dependsOn": ["Compile English translations"],
"group": {
"kind": "test",
"isDefault": true

View File

@@ -80,14 +80,13 @@ build.json @home-assistant/supervisor
/tests/components/airzone/ @Noltari
/homeassistant/components/airzone_cloud/ @Noltari
/tests/components/airzone_cloud/ @Noltari
/homeassistant/components/aladdin_connect/ @swcloudgenie
/tests/components/aladdin_connect/ @swcloudgenie
/homeassistant/components/alarm_control_panel/ @home-assistant/core
/tests/components/alarm_control_panel/ @home-assistant/core
/homeassistant/components/alert/ @home-assistant/core @frenck
/tests/components/alert/ @home-assistant/core @frenck
/homeassistant/components/alexa/ @home-assistant/cloud @ochlocracy @jbouwh
/tests/components/alexa/ @home-assistant/cloud @ochlocracy @jbouwh
/homeassistant/components/amazon_polly/ @jschlyter
/homeassistant/components/amberelectric/ @madpilot
/tests/components/amberelectric/ @madpilot
/homeassistant/components/ambient_network/ @thomaskistler
@@ -129,6 +128,8 @@ build.json @home-assistant/supervisor
/tests/components/aprs/ @PhilRW
/homeassistant/components/apsystems/ @mawoka-myblock @SonnenladenGmbH
/tests/components/apsystems/ @mawoka-myblock @SonnenladenGmbH
/homeassistant/components/aquacell/ @Jordi1990
/tests/components/aquacell/ @Jordi1990
/homeassistant/components/aranet/ @aschmitz @thecode @anrijs
/tests/components/aranet/ @aschmitz @thecode @anrijs
/homeassistant/components/arcam_fmj/ @elupus
@@ -154,6 +155,8 @@ build.json @home-assistant/supervisor
/tests/components/aurora_abb_powerone/ @davet2001
/homeassistant/components/aussie_broadband/ @nickw444 @Bre77
/tests/components/aussie_broadband/ @nickw444 @Bre77
/homeassistant/components/autarco/ @klaasnicolaas
/tests/components/autarco/ @klaasnicolaas
/homeassistant/components/auth/ @home-assistant/core
/tests/components/auth/ @home-assistant/core
/homeassistant/components/automation/ @home-assistant/core
@@ -184,8 +187,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/binary_sensor/ @home-assistant/core
/tests/components/binary_sensor/ @home-assistant/core
/homeassistant/components/bizkaibus/ @UgaitzEtxebarria
/homeassistant/components/blebox/ @bbx-a @riokuu @swistakm
/tests/components/blebox/ @bbx-a @riokuu @swistakm
/homeassistant/components/blebox/ @bbx-a @swistakm
/tests/components/blebox/ @bbx-a @swistakm
/homeassistant/components/blink/ @fronzbot @mkmer
/tests/components/blink/ @fronzbot @mkmer
/homeassistant/components/blue_current/ @Floris272 @gleeuwen
@@ -236,7 +239,8 @@ build.json @home-assistant/supervisor
/tests/components/ccm15/ @ocalvo
/homeassistant/components/cert_expiry/ @jjlawren
/tests/components/cert_expiry/ @jjlawren
/homeassistant/components/circuit/ @braam
/homeassistant/components/chacon_dio/ @cnico
/tests/components/chacon_dio/ @cnico
/homeassistant/components/cisco_ios/ @fbradyirl
/homeassistant/components/cisco_mobility_express/ @fbradyirl
/homeassistant/components/cisco_webex_teams/ @fbradyirl
@@ -358,8 +362,8 @@ build.json @home-assistant/supervisor
/tests/components/ecoforest/ @pjanuario
/homeassistant/components/econet/ @w1ll1am23
/tests/components/econet/ @w1ll1am23
/homeassistant/components/ecovacs/ @OverloadUT @mib1185 @edenhaus @Augar
/tests/components/ecovacs/ @OverloadUT @mib1185 @edenhaus @Augar
/homeassistant/components/ecovacs/ @mib1185 @edenhaus @Augar
/tests/components/ecovacs/ @mib1185 @edenhaus @Augar
/homeassistant/components/ecowitt/ @pvizeli
/tests/components/ecowitt/ @pvizeli
/homeassistant/components/efergy/ @tkdrob
@@ -379,7 +383,7 @@ build.json @home-assistant/supervisor
/homeassistant/components/elvia/ @ludeeus
/tests/components/elvia/ @ludeeus
/homeassistant/components/emby/ @mezz64
/homeassistant/components/emoncms/ @borpin
/homeassistant/components/emoncms/ @borpin @alexandrecuer
/homeassistant/components/emonitor/ @bdraco
/tests/components/emonitor/ @bdraco
/homeassistant/components/emulated_hue/ @bdraco @Tho85
@@ -396,8 +400,8 @@ build.json @home-assistant/supervisor
/tests/components/enigma2/ @autinerd
/homeassistant/components/enocean/ @bdurrer
/tests/components/enocean/ @bdurrer
/homeassistant/components/enphase_envoy/ @bdraco @cgarwood @dgomes @joostlek @catsmanac
/tests/components/enphase_envoy/ @bdraco @cgarwood @dgomes @joostlek @catsmanac
/homeassistant/components/enphase_envoy/ @bdraco @cgarwood @joostlek @catsmanac
/tests/components/enphase_envoy/ @bdraco @cgarwood @joostlek @catsmanac
/homeassistant/components/entur_public_transport/ @hfurubotten
/homeassistant/components/environment_canada/ @gwww @michaeldavie
/tests/components/environment_canada/ @gwww @michaeldavie
@@ -429,6 +433,8 @@ build.json @home-assistant/supervisor
/tests/components/fan/ @home-assistant/core
/homeassistant/components/fastdotcom/ @rohankapoorcom @erwindouna
/tests/components/fastdotcom/ @rohankapoorcom @erwindouna
/homeassistant/components/feedreader/ @mib1185
/tests/components/feedreader/ @mib1185
/homeassistant/components/fibaro/ @rappenze
/tests/components/fibaro/ @rappenze
/homeassistant/components/file/ @fabaff
@@ -629,8 +635,8 @@ build.json @home-assistant/supervisor
/tests/components/huum/ @frwickst
/homeassistant/components/hvv_departures/ @vigonotion
/tests/components/hvv_departures/ @vigonotion
/homeassistant/components/hydrawise/ @dknowles2 @ptcryan
/tests/components/hydrawise/ @dknowles2 @ptcryan
/homeassistant/components/hydrawise/ @dknowles2 @thomaskistler @ptcryan
/tests/components/hydrawise/ @dknowles2 @thomaskistler @ptcryan
/homeassistant/components/hyperion/ @dermotduffy
/tests/components/hyperion/ @dermotduffy
/homeassistant/components/ialarm/ @RyuzakiKK
@@ -658,7 +664,8 @@ build.json @home-assistant/supervisor
/tests/components/imgw_pib/ @bieniu
/homeassistant/components/improv_ble/ @emontnemery
/tests/components/improv_ble/ @emontnemery
/homeassistant/components/incomfort/ @zxdavb
/homeassistant/components/incomfort/ @jbouwh
/tests/components/incomfort/ @jbouwh
/homeassistant/components/influxdb/ @mdegat01
/tests/components/influxdb/ @mdegat01
/homeassistant/components/inkbird/ @bdraco
@@ -700,8 +707,12 @@ build.json @home-assistant/supervisor
/tests/components/isal/ @bdraco
/homeassistant/components/islamic_prayer_times/ @engrbm87 @cpfair
/tests/components/islamic_prayer_times/ @engrbm87 @cpfair
/homeassistant/components/israel_rail/ @shaiu
/tests/components/israel_rail/ @shaiu
/homeassistant/components/iss/ @DurgNomis-drol
/tests/components/iss/ @DurgNomis-drol
/homeassistant/components/ista_ecotrend/ @tr4nt0r
/tests/components/ista_ecotrend/ @tr4nt0r
/homeassistant/components/isy994/ @bdraco @shbatm
/tests/components/isy994/ @bdraco @shbatm
/homeassistant/components/izone/ @Swamp-Ig
@@ -732,6 +743,8 @@ build.json @home-assistant/supervisor
/tests/components/kitchen_sink/ @home-assistant/core
/homeassistant/components/kmtronic/ @dgomes
/tests/components/kmtronic/ @dgomes
/homeassistant/components/knocki/ @joostlek @jgatto1 @JakeBosh
/tests/components/knocki/ @joostlek @jgatto1 @JakeBosh
/homeassistant/components/knx/ @Julius2342 @farmio @marvin-w
/tests/components/knx/ @Julius2342 @farmio @marvin-w
/homeassistant/components/kodi/ @OnFreund
@@ -772,6 +785,8 @@ build.json @home-assistant/supervisor
/tests/components/lg_netcast/ @Drafteed @splinter98
/homeassistant/components/lidarr/ @tkdrob
/tests/components/lidarr/ @tkdrob
/homeassistant/components/lifx/ @Djelibeybi
/tests/components/lifx/ @Djelibeybi
/homeassistant/components/light/ @home-assistant/core
/tests/components/light/ @home-assistant/core
/homeassistant/components/linear_garage_door/ @IceBotYT
@@ -816,11 +831,15 @@ build.json @home-assistant/supervisor
/tests/components/lutron_caseta/ @swails @bdraco @danaues @eclair4151
/homeassistant/components/lyric/ @timmo001
/tests/components/lyric/ @timmo001
/homeassistant/components/madvr/ @iloveicedgreentea
/tests/components/madvr/ @iloveicedgreentea
/homeassistant/components/mastodon/ @fabaff
/homeassistant/components/matrix/ @PaarthShah
/tests/components/matrix/ @PaarthShah
/homeassistant/components/matter/ @home-assistant/matter
/tests/components/matter/ @home-assistant/matter
/homeassistant/components/mealie/ @joostlek @andrew-codechimp
/tests/components/mealie/ @joostlek @andrew-codechimp
/homeassistant/components/meater/ @Sotolotl @emontnemery
/tests/components/meater/ @Sotolotl @emontnemery
/homeassistant/components/medcom_ble/ @elafargue
@@ -832,6 +851,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/media_source/ @hunterjm
/tests/components/media_source/ @hunterjm
/homeassistant/components/mediaroom/ @dgomes
/homeassistant/components/melcloud/ @erwindouna
/tests/components/melcloud/ @erwindouna
/homeassistant/components/melissa/ @kennedyshead
/tests/components/melissa/ @kennedyshead
/homeassistant/components/melnor/ @vanstinator
@@ -863,8 +884,6 @@ build.json @home-assistant/supervisor
/tests/components/moat/ @bdraco
/homeassistant/components/mobile_app/ @home-assistant/core
/tests/components/mobile_app/ @home-assistant/core
/homeassistant/components/modbus/ @janiversen
/tests/components/modbus/ @janiversen
/homeassistant/components/modem_callerid/ @tkdrob
/tests/components/modem_callerid/ @tkdrob
/homeassistant/components/modern_forms/ @wonderslug
@@ -904,8 +923,8 @@ build.json @home-assistant/supervisor
/tests/components/myuplink/ @pajzo @astrandb
/homeassistant/components/nam/ @bieniu
/tests/components/nam/ @bieniu
/homeassistant/components/nanoleaf/ @milanmeu
/tests/components/nanoleaf/ @milanmeu
/homeassistant/components/nanoleaf/ @milanmeu @joostlek
/tests/components/nanoleaf/ @milanmeu @joostlek
/homeassistant/components/neato/ @Santobert
/tests/components/neato/ @Santobert
/homeassistant/components/nederlandse_spoorwegen/ @YarmoM
@@ -976,8 +995,6 @@ build.json @home-assistant/supervisor
/homeassistant/components/ollama/ @synesthesiam
/tests/components/ollama/ @synesthesiam
/homeassistant/components/ombi/ @larssont
/homeassistant/components/omnilogic/ @oliver84 @djtimca @gentoosu
/tests/components/omnilogic/ @oliver84 @djtimca @gentoosu
/homeassistant/components/onboarding/ @home-assistant/core
/tests/components/onboarding/ @home-assistant/core
/homeassistant/components/oncue/ @bdraco @peterager
@@ -986,6 +1003,7 @@ build.json @home-assistant/supervisor
/tests/components/ondilo_ico/ @JeromeHXP
/homeassistant/components/onewire/ @garbled1 @epenet
/tests/components/onewire/ @garbled1 @epenet
/homeassistant/components/onkyo/ @arturpragacz
/homeassistant/components/onvif/ @hunterjm
/tests/components/onvif/ @hunterjm
/homeassistant/components/open_meteo/ @frenck
@@ -1094,6 +1112,8 @@ build.json @home-assistant/supervisor
/tests/components/pvoutput/ @frenck
/homeassistant/components/pvpc_hourly_pricing/ @azogue
/tests/components/pvpc_hourly_pricing/ @azogue
/homeassistant/components/pyload/ @tr4nt0r
/tests/components/pyload/ @tr4nt0r
/homeassistant/components/qbittorrent/ @geoffreylagaisse @finder39
/tests/components/qbittorrent/ @geoffreylagaisse @finder39
/homeassistant/components/qingping/ @bdraco
@@ -1172,8 +1192,8 @@ build.json @home-assistant/supervisor
/tests/components/rituals_perfume_genie/ @milanmeu @frenck
/homeassistant/components/rmvtransport/ @cgtobi
/tests/components/rmvtransport/ @cgtobi
/homeassistant/components/roborock/ @humbertogontijo @Lash-L
/tests/components/roborock/ @humbertogontijo @Lash-L
/homeassistant/components/roborock/ @Lash-L
/tests/components/roborock/ @Lash-L
/homeassistant/components/roku/ @ctalkington
/tests/components/roku/ @ctalkington
/homeassistant/components/romy/ @xeniter
@@ -1190,6 +1210,8 @@ build.json @home-assistant/supervisor
/tests/components/rtsp_to_webrtc/ @allenporter
/homeassistant/components/ruckus_unleashed/ @lanrat @ms264556 @gabe565
/tests/components/ruckus_unleashed/ @lanrat @ms264556 @gabe565
/homeassistant/components/russound_rio/ @noahhusby
/tests/components/russound_rio/ @noahhusby
/homeassistant/components/ruuvi_gateway/ @akx
/tests/components/ruuvi_gateway/ @akx
/homeassistant/components/ruuvitag_ble/ @akx
@@ -1257,6 +1279,8 @@ build.json @home-assistant/supervisor
/tests/components/sighthound/ @robmarkcole
/homeassistant/components/signal_messenger/ @bbernhard
/tests/components/signal_messenger/ @bbernhard
/homeassistant/components/simplefin/ @scottg489 @jeeftor
/tests/components/simplefin/ @scottg489 @jeeftor
/homeassistant/components/simplepush/ @engrbm87
/tests/components/simplepush/ @engrbm87
/homeassistant/components/simplisafe/ @bachya
@@ -1297,8 +1321,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/solaredge/ @frenck @bdraco
/tests/components/solaredge/ @frenck @bdraco
/homeassistant/components/solaredge_local/ @drobtravels @scheric
/homeassistant/components/solarlog/ @Ernst79
/tests/components/solarlog/ @Ernst79
/homeassistant/components/solarlog/ @Ernst79 @dontinelli
/tests/components/solarlog/ @Ernst79 @dontinelli
/homeassistant/components/solax/ @squishykid
/tests/components/solax/ @squishykid
/homeassistant/components/soma/ @ratsept @sebfortier2288
@@ -1446,8 +1470,8 @@ build.json @home-assistant/supervisor
/tests/components/tomorrowio/ @raman325 @lymanepp
/homeassistant/components/totalconnect/ @austinmroczek
/tests/components/totalconnect/ @austinmroczek
/homeassistant/components/tplink/ @rytilahti @thegardenmonkey @bdraco @sdb9696
/tests/components/tplink/ @rytilahti @thegardenmonkey @bdraco @sdb9696
/homeassistant/components/tplink/ @rytilahti @bdraco @sdb9696
/tests/components/tplink/ @rytilahti @bdraco @sdb9696
/homeassistant/components/tplink_omada/ @MarkGodwin
/tests/components/tplink_omada/ @MarkGodwin
/homeassistant/components/traccar/ @ludeeus
@@ -1486,8 +1510,6 @@ build.json @home-assistant/supervisor
/tests/components/unifi/ @Kane610
/homeassistant/components/unifi_direct/ @tofuSCHNITZEL
/homeassistant/components/unifiled/ @florisvdk
/homeassistant/components/unifiprotect/ @bdraco
/tests/components/unifiprotect/ @bdraco
/homeassistant/components/upb/ @gwww
/tests/components/upb/ @gwww
/homeassistant/components/upc_connect/ @pvizeli @fabaff

View File

@@ -12,7 +12,7 @@ ENV \
ARG QEMU_CPU
# Install uv
RUN pip3 install uv==0.1.43
RUN pip3 install uv==0.2.13
WORKDIR /usr/src

View File

@@ -1,10 +1,10 @@
image: ghcr.io/home-assistant/{arch}-homeassistant
build_from:
aarch64: ghcr.io/home-assistant/aarch64-homeassistant-base:2024.03.0
armhf: ghcr.io/home-assistant/armhf-homeassistant-base:2024.03.0
armv7: ghcr.io/home-assistant/armv7-homeassistant-base:2024.03.0
amd64: ghcr.io/home-assistant/amd64-homeassistant-base:2024.03.0
i386: ghcr.io/home-assistant/i386-homeassistant-base:2024.03.0
aarch64: ghcr.io/home-assistant/aarch64-homeassistant-base:2024.06.1
armhf: ghcr.io/home-assistant/armhf-homeassistant-base:2024.06.1
armv7: ghcr.io/home-assistant/armv7-homeassistant-base:2024.06.1
amd64: ghcr.io/home-assistant/amd64-homeassistant-base:2024.06.1
i386: ghcr.io/home-assistant/i386-homeassistant-base:2024.06.1
codenotary:
signer: notary@home-assistant.io
base_image: notary@home-assistant.io

View File

@@ -4,7 +4,7 @@ coverage:
status:
project:
default:
target: 90
target: auto
threshold: 0.09
required:
target: auto

View File

@@ -28,6 +28,7 @@ from .const import ACCESS_TOKEN_EXPIRATION, GROUP_ID_ADMIN, REFRESH_TOKEN_EXPIRA
from .mfa_modules import MultiFactorAuthModule, auth_mfa_module_from_config
from .models import AuthFlowResult
from .providers import AuthProvider, LoginFlow, auth_provider_from_config
from .providers.homeassistant import HassAuthProvider
EVENT_USER_ADDED = "user_added"
EVENT_USER_UPDATED = "user_updated"
@@ -53,7 +54,7 @@ async def auth_manager_from_config(
) -> AuthManager:
"""Initialize an auth manager from config.
CORE_CONFIG_SCHEMA will make sure do duplicated auth providers or
CORE_CONFIG_SCHEMA will make sure no duplicated auth providers or
mfa modules exist in configs.
"""
store = auth_store.AuthStore(hass)
@@ -73,6 +74,13 @@ async def auth_manager_from_config(
key = (provider.type, provider.id)
provider_hash[key] = provider
if isinstance(provider, HassAuthProvider):
# Can be removed in 2026.7 with the legacy mode of homeassistant auth provider
# We need to initialize the provider to create the repair if needed as otherwise
# the provider will be initialized on first use, which could be rare as users
# don't frequently change auth settings
await provider.async_initialize()
if module_configs:
modules = await asyncio.gather(
*(auth_mfa_module_from_config(hass, config) for config in module_configs)
@@ -355,15 +363,15 @@ class AuthManager:
local_only: bool | None = None,
) -> None:
"""Update a user."""
kwargs: dict[str, Any] = {}
for attr_name, value in (
("name", name),
("group_ids", group_ids),
("local_only", local_only),
):
if value is not None:
kwargs[attr_name] = value
kwargs: dict[str, Any] = {
attr_name: value
for attr_name, value in (
("name", name),
("group_ids", group_ids),
("local_only", local_only),
)
if value is not None
}
await self._store.async_update_user(user, **kwargs)
if is_active is not None:
@@ -374,6 +382,13 @@ class AuthManager:
self.hass.bus.async_fire(EVENT_USER_UPDATED, {"user_id": user.id})
@callback
def async_update_user_credentials_data(
self, credentials: models.Credentials, data: dict[str, Any]
) -> None:
"""Update credentials data."""
self._store.async_update_user_credentials_data(credentials, data=data)
async def async_activate_user(self, user: models.User) -> None:
"""Activate a user."""
await self._store.async_activate_user(user)

View File

@@ -105,14 +105,18 @@ class AuthStore:
"perm_lookup": self._perm_lookup,
}
for attr_name, value in (
("is_owner", is_owner),
("is_active", is_active),
("local_only", local_only),
("system_generated", system_generated),
):
if value is not None:
kwargs[attr_name] = value
kwargs.update(
{
attr_name: value
for attr_name, value in (
("is_owner", is_owner),
("is_active", is_active),
("local_only", local_only),
("system_generated", system_generated),
)
if value is not None
}
)
new_user = models.User(**kwargs)
@@ -296,6 +300,14 @@ class AuthStore:
refresh_token.expire_at = None
self._async_schedule_save()
@callback
def async_update_user_credentials_data(
self, credentials: models.Credentials, data: dict[str, Any]
) -> None:
"""Update credentials data."""
credentials.data = data
self._async_schedule_save()
async def async_load(self) -> None: # noqa: C901
"""Load the users."""
if self._loaded:

View File

@@ -14,6 +14,7 @@ import voluptuous as vol
from homeassistant.const import CONF_ID
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import issue_registry as ir
from homeassistant.helpers.storage import Store
from ..models import AuthFlowResult, Credentials, UserMeta
@@ -54,6 +55,27 @@ class InvalidUser(HomeAssistantError):
Will not be raised when validating authentication.
"""
def __init__(
self,
*args: object,
translation_key: str | None = None,
translation_placeholders: dict[str, str] | None = None,
) -> None:
"""Initialize exception."""
super().__init__(
*args,
translation_domain="auth",
translation_key=translation_key,
translation_placeholders=translation_placeholders,
)
class InvalidUsername(InvalidUser):
"""Raised when invalid username is specified.
Will not be raised when validating authentication.
"""
class Data:
"""Hold the user data."""
@@ -67,13 +89,15 @@ class Data:
self._data: dict[str, list[dict[str, str]]] | None = None
# Legacy mode will allow usernames to start/end with whitespace
# and will compare usernames case-insensitive.
# Remove in 2020 or when we launch 1.0.
# Deprecated in June 2019 and will be removed in 2026.7
self.is_legacy = False
@callback
def normalize_username(self, username: str) -> str:
def normalize_username(
self, username: str, *, force_normalize: bool = False
) -> str:
"""Normalize a username based on the mode."""
if self.is_legacy:
if self.is_legacy and not force_normalize:
return username
return username.strip().casefold()
@@ -83,44 +107,49 @@ class Data:
if (data := await self._store.async_load()) is None:
data = cast(dict[str, list[dict[str, str]]], {"users": []})
seen: set[str] = set()
self._async_check_for_not_normalized_usernames(data)
self._data = data
@callback
def _async_check_for_not_normalized_usernames(
self, data: dict[str, list[dict[str, str]]]
) -> None:
not_normalized_usernames: set[str] = set()
for user in data["users"]:
username = user["username"]
# check if we have duplicates
if (folded := username.casefold()) in seen:
self.is_legacy = True
if self.normalize_username(username, force_normalize=True) != username:
logging.getLogger(__name__).warning(
(
"Home Assistant auth provider is running in legacy mode "
"because we detected usernames that are case-insensitive"
"equivalent. Please change the username: '%s'."
"because we detected usernames that are normalized (lowercase and without spaces)."
" Please change the username: '%s'."
),
username,
)
not_normalized_usernames.add(username)
break
seen.add(folded)
# check if we have unstripped usernames
if username != username.strip():
self.is_legacy = True
logging.getLogger(__name__).warning(
(
"Home Assistant auth provider is running in legacy mode "
"because we detected usernames that start or end in a "
"space. Please change the username: '%s'."
),
username,
)
break
self._data = data
if not_normalized_usernames:
self.is_legacy = True
ir.async_create_issue(
self.hass,
"auth",
"homeassistant_provider_not_normalized_usernames",
breaks_in_ha_version="2026.7.0",
is_fixable=False,
severity=ir.IssueSeverity.WARNING,
translation_key="homeassistant_provider_not_normalized_usernames",
translation_placeholders={
"usernames": f'- "{'"\n- "'.join(sorted(not_normalized_usernames))}"'
},
learn_more_url="homeassistant://config/users",
)
else:
self.is_legacy = False
ir.async_delete_issue(
self.hass, "auth", "homeassistant_provider_not_normalized_usernames"
)
@property
def users(self) -> list[dict[str, str]]:
@@ -162,13 +191,11 @@ class Data:
return hashed
def add_auth(self, username: str, password: str) -> None:
"""Add a new authenticated user/pass."""
username = self.normalize_username(username)
"""Add a new authenticated user/pass.
if any(
self.normalize_username(user["username"]) == username for user in self.users
):
raise InvalidUser
Raises InvalidUsername if the new username is invalid.
"""
self._validate_new_username(username)
self.users.append(
{
@@ -189,7 +216,7 @@ class Data:
break
if index is None:
raise InvalidUser
raise InvalidUser(translation_key="user_not_found")
self.users.pop(index)
@@ -205,7 +232,50 @@ class Data:
user["password"] = self.hash_password(new_password, True).decode()
break
else:
raise InvalidUser
raise InvalidUser(translation_key="user_not_found")
@callback
def _validate_new_username(self, new_username: str) -> None:
"""Validate that username is normalized and unique.
Raises InvalidUsername if the new username is invalid.
"""
normalized_username = self.normalize_username(
new_username, force_normalize=True
)
if normalized_username != new_username:
raise InvalidUsername(
translation_key="username_not_normalized",
translation_placeholders={"new_username": new_username},
)
if any(
self.normalize_username(user["username"]) == normalized_username
for user in self.users
):
raise InvalidUsername(
translation_key="username_already_exists",
translation_placeholders={"username": new_username},
)
@callback
def change_username(self, username: str, new_username: str) -> None:
"""Update the username.
Raises InvalidUser if user cannot be found.
Raises InvalidUsername if the new username is invalid.
"""
username = self.normalize_username(username)
self._validate_new_username(new_username)
for user in self.users:
if self.normalize_username(user["username"]) == username:
user["username"] = new_username
assert self._data is not None
self._async_check_for_not_normalized_usernames(self._data)
break
else:
raise InvalidUser(translation_key="user_not_found")
async def async_save(self) -> None:
"""Save data."""
@@ -278,6 +348,20 @@ class HassAuthProvider(AuthProvider):
)
await self.data.async_save()
async def async_change_username(
self, credential: Credentials, new_username: str
) -> None:
"""Validate new username and change it including updating credentials object."""
if self.data is None:
await self.async_initialize()
assert self.data is not None
self.data.change_username(credential.data["username"], new_username)
self.hass.auth.async_update_user_credentials_data(
credential, {**credential.data, "username": new_username}
)
await self.data.async_save()
async def async_get_or_create_credentials(
self, flow_result: Mapping[str, str]
) -> Credentials:

View File

@@ -1,123 +0,0 @@
"""Support Legacy API password auth provider.
It will be removed when auth system production ready
"""
from __future__ import annotations
from collections.abc import Mapping
import hmac
from typing import Any, cast
import voluptuous as vol
from homeassistant.core import async_get_hass, callback
from homeassistant.exceptions import HomeAssistantError
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
from ..models import AuthFlowResult, Credentials, UserMeta
from . import AUTH_PROVIDER_SCHEMA, AUTH_PROVIDERS, AuthProvider, LoginFlow
AUTH_PROVIDER_TYPE = "legacy_api_password"
CONF_API_PASSWORD = "api_password"
_CONFIG_SCHEMA = AUTH_PROVIDER_SCHEMA.extend(
{vol.Required(CONF_API_PASSWORD): cv.string}, extra=vol.PREVENT_EXTRA
)
def _create_repair_and_validate(config: dict[str, Any]) -> dict[str, Any]:
async_create_issue(
async_get_hass(),
"auth",
"deprecated_legacy_api_password",
breaks_in_ha_version="2024.6.0",
is_fixable=False,
severity=IssueSeverity.WARNING,
translation_key="deprecated_legacy_api_password",
)
return _CONFIG_SCHEMA(config) # type: ignore[no-any-return]
CONFIG_SCHEMA = _create_repair_and_validate
LEGACY_USER_NAME = "Legacy API password user"
class InvalidAuthError(HomeAssistantError):
"""Raised when submitting invalid authentication."""
@AUTH_PROVIDERS.register(AUTH_PROVIDER_TYPE)
class LegacyApiPasswordAuthProvider(AuthProvider):
"""An auth provider support legacy api_password."""
DEFAULT_TITLE = "Legacy API Password"
@property
def api_password(self) -> str:
"""Return api_password."""
return str(self.config[CONF_API_PASSWORD])
async def async_login_flow(self, context: dict[str, Any] | None) -> LoginFlow:
"""Return a flow to login."""
return LegacyLoginFlow(self)
@callback
def async_validate_login(self, password: str) -> None:
"""Validate password."""
api_password = str(self.config[CONF_API_PASSWORD])
if not hmac.compare_digest(
api_password.encode("utf-8"), password.encode("utf-8")
):
raise InvalidAuthError
async def async_get_or_create_credentials(
self, flow_result: Mapping[str, str]
) -> Credentials:
"""Return credentials for this login."""
credentials = await self.async_credentials()
if credentials:
return credentials[0]
return self.async_create_credentials({})
async def async_user_meta_for_credentials(
self, credentials: Credentials
) -> UserMeta:
"""Return info for the user.
Will be used to populate info when creating a new user.
"""
return UserMeta(name=LEGACY_USER_NAME, is_active=True)
class LegacyLoginFlow(LoginFlow):
"""Handler for the login flow."""
async def async_step_init(
self, user_input: dict[str, str] | None = None
) -> AuthFlowResult:
"""Handle the step of the form."""
errors = {}
if user_input is not None:
try:
cast(
LegacyApiPasswordAuthProvider, self._auth_provider
).async_validate_login(user_input["password"])
except InvalidAuthError:
errors["base"] = "invalid_auth"
if not errors:
return await self.async_finish({})
return self.async_show_form(
step_id="init",
data_schema=vol.Schema({vol.Required("password"): str}),
errors=errors,
)

View File

@@ -1,9 +1,13 @@
"""Block blocking calls being done in asyncio."""
import builtins
from collections.abc import Callable
from contextlib import suppress
from dataclasses import dataclass
import glob
from http.client import HTTPConnection
import importlib
import os
import sys
import threading
import time
@@ -44,37 +48,131 @@ def _check_sleep_call_allowed(mapped_args: dict[str, Any]) -> bool:
return False
@dataclass(slots=True, frozen=True)
class BlockingCall:
"""Class to hold information about a blocking call."""
original_func: Callable
object: object
function: str
check_allowed: Callable[[dict[str, Any]], bool] | None
strict: bool
strict_core: bool
skip_for_tests: bool
_BLOCKING_CALLS: tuple[BlockingCall, ...] = (
BlockingCall(
original_func=HTTPConnection.putrequest,
object=HTTPConnection,
function="putrequest",
check_allowed=None,
strict=True,
strict_core=True,
skip_for_tests=False,
),
BlockingCall(
original_func=time.sleep,
object=time,
function="sleep",
check_allowed=_check_sleep_call_allowed,
strict=True,
strict_core=True,
skip_for_tests=False,
),
BlockingCall(
original_func=glob.glob,
object=glob,
function="glob",
check_allowed=None,
strict=False,
strict_core=False,
skip_for_tests=False,
),
BlockingCall(
original_func=glob.iglob,
object=glob,
function="iglob",
check_allowed=None,
strict=False,
strict_core=False,
skip_for_tests=False,
),
BlockingCall(
original_func=os.walk,
object=os,
function="walk",
check_allowed=None,
strict=False,
strict_core=False,
skip_for_tests=False,
),
BlockingCall(
original_func=os.listdir,
object=os,
function="listdir",
check_allowed=None,
strict=False,
strict_core=False,
skip_for_tests=True,
),
BlockingCall(
original_func=os.scandir,
object=os,
function="scandir",
check_allowed=None,
strict=False,
strict_core=False,
skip_for_tests=True,
),
BlockingCall(
original_func=builtins.open,
object=builtins,
function="open",
check_allowed=_check_file_allowed,
strict=False,
strict_core=False,
skip_for_tests=True,
),
BlockingCall(
original_func=importlib.import_module,
object=importlib,
function="import_module",
check_allowed=_check_import_call_allowed,
strict=False,
strict_core=False,
skip_for_tests=True,
),
)
@dataclass(slots=True)
class BlockedCalls:
"""Class to track which calls are blocked."""
calls: set[BlockingCall]
_BLOCKED_CALLS = BlockedCalls(set())
def enable() -> None:
"""Enable the detection of blocking calls in the event loop."""
calls = _BLOCKED_CALLS.calls
if calls:
raise RuntimeError("Blocking call detection is already enabled")
loop_thread_id = threading.get_ident()
# Prevent urllib3 and requests doing I/O in event loop
HTTPConnection.putrequest = protect_loop( # type: ignore[method-assign]
HTTPConnection.putrequest, loop_thread_id=loop_thread_id
)
for blocking_call in _BLOCKING_CALLS:
if _IN_TESTS and blocking_call.skip_for_tests:
continue
# Prevent sleeping in event loop. Non-strict since 2022.02
time.sleep = protect_loop(
time.sleep,
strict=False,
check_allowed=_check_sleep_call_allowed,
loop_thread_id=loop_thread_id,
)
if not _IN_TESTS:
# Prevent files being opened inside the event loop
builtins.open = protect_loop( # type: ignore[assignment]
builtins.open,
strict_core=False,
strict=False,
check_allowed=_check_file_allowed,
loop_thread_id=loop_thread_id,
)
# unittest uses `importlib.import_module` to do mocking
# so we cannot protect it if we are running tests
importlib.import_module = protect_loop(
importlib.import_module,
strict_core=False,
strict=False,
check_allowed=_check_import_call_allowed,
protected_function = protect_loop(
blocking_call.original_func,
strict=blocking_call.strict,
strict_core=blocking_call.strict_core,
check_allowed=blocking_call.check_allowed,
loop_thread_id=loop_thread_id,
)
setattr(blocking_call.object, blocking_call.function, protected_function)
calls.add(blocking_call)

View File

@@ -8,7 +8,7 @@ import contextlib
from functools import partial
from itertools import chain
import logging
import logging.handlers
from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler
import mimetypes
from operator import contains, itemgetter
import os
@@ -88,7 +88,7 @@ from .helpers import (
)
from .helpers.dispatcher import async_dispatcher_send_internal
from .helpers.storage import get_internal_store_manager
from .helpers.system_info import async_get_system_info
from .helpers.system_info import async_get_system_info, is_official_image
from .helpers.typing import ConfigType
from .setup import (
# _setup_started is marked as protected to make it clear
@@ -104,7 +104,7 @@ from .setup import (
from .util.async_ import create_eager_task
from .util.hass_dict import HassKey
from .util.logging import async_activate_log_queue_handler
from .util.package import async_get_user_site, is_virtual_env
from .util.package import async_get_user_site, is_docker_env, is_virtual_env
with contextlib.suppress(ImportError):
# Ensure anyio backend is imported to avoid it being imported in the event loop
@@ -134,8 +134,15 @@ COOLDOWN_TIME = 60
DEBUGGER_INTEGRATIONS = {"debugpy"}
# Core integrations are unconditionally loaded
CORE_INTEGRATIONS = {"homeassistant", "persistent_notification"}
LOGGING_INTEGRATIONS = {
# Integrations that are loaded right after the core is set up
LOGGING_AND_HTTP_DEPS_INTEGRATIONS = {
# isal is loaded right away before `http` to ensure if its
# enabled, that `isal` is up to date.
"isal",
# Set log levels
"logger",
# Error logging
@@ -214,8 +221,8 @@ CRITICAL_INTEGRATIONS = {
}
SETUP_ORDER = (
# Load logging as soon as possible
("logging", LOGGING_INTEGRATIONS),
# Load logging and http deps as soon as possible
("logging, http deps", LOGGING_AND_HTTP_DEPS_INTEGRATIONS),
# Setup frontend and recorder
("frontend, recorder", {*FRONTEND_INTEGRATIONS, *RECORDER_INTEGRATIONS}),
# Start up debuggers. Start these first in case they want to wait.
@@ -249,22 +256,39 @@ async def async_setup_hass(
runtime_config: RuntimeConfig,
) -> core.HomeAssistant | None:
"""Set up Home Assistant."""
hass = core.HomeAssistant(runtime_config.config_dir)
async_enable_logging(
hass,
runtime_config.verbose,
runtime_config.log_rotate_days,
runtime_config.log_file,
runtime_config.log_no_color,
)
async def create_hass() -> core.HomeAssistant:
"""Create the hass object and do basic setup."""
hass = core.HomeAssistant(runtime_config.config_dir)
loader.async_setup(hass)
if runtime_config.debug or hass.loop.get_debug():
hass.config.debug = True
await async_enable_logging(
hass,
runtime_config.verbose,
runtime_config.log_rotate_days,
runtime_config.log_file,
runtime_config.log_no_color,
)
if runtime_config.debug or hass.loop.get_debug():
hass.config.debug = True
hass.config.safe_mode = runtime_config.safe_mode
hass.config.skip_pip = runtime_config.skip_pip
hass.config.skip_pip_packages = runtime_config.skip_pip_packages
return hass
async def stop_hass(hass: core.HomeAssistant) -> None:
"""Stop hass."""
# Ask integrations to shut down. It's messy but we can't
# do a clean stop without knowing what is broken
with contextlib.suppress(TimeoutError):
async with hass.timeout.async_timeout(10):
await hass.async_stop()
hass = await create_hass()
hass.config.safe_mode = runtime_config.safe_mode
hass.config.skip_pip = runtime_config.skip_pip
hass.config.skip_pip_packages = runtime_config.skip_pip_packages
if runtime_config.skip_pip or runtime_config.skip_pip_packages:
_LOGGER.warning(
"Skipping pip installation of required modules. This may cause issues"
@@ -276,7 +300,6 @@ async def async_setup_hass(
_LOGGER.info("Config directory: %s", runtime_config.config_dir)
loader.async_setup(hass)
block_async_io.enable()
config_dict = None
@@ -302,27 +325,28 @@ async def async_setup_hass(
if config_dict is None:
recovery_mode = True
await stop_hass(hass)
hass = await create_hass()
elif not basic_setup_success:
_LOGGER.warning("Unable to set up core integrations. Activating recovery mode")
recovery_mode = True
await stop_hass(hass)
hass = await create_hass()
elif any(domain not in hass.config.components for domain in CRITICAL_INTEGRATIONS):
_LOGGER.warning(
"Detected that %s did not load. Activating recovery mode",
",".join(CRITICAL_INTEGRATIONS),
)
# Ask integrations to shut down. It's messy but we can't
# do a clean stop without knowing what is broken
with contextlib.suppress(TimeoutError):
async with hass.timeout.async_timeout(10):
await hass.async_stop()
recovery_mode = True
old_config = hass.config
old_logging = hass.data.get(DATA_LOGGING)
hass = core.HomeAssistant(old_config.config_dir)
recovery_mode = True
await stop_hass(hass)
hass = await create_hass()
if old_logging:
hass.data[DATA_LOGGING] = old_logging
hass.config.debug = old_config.debug
@@ -383,6 +407,10 @@ def _init_blocking_io_modules_in_executor() -> None:
# Initialize the mimetypes module to avoid blocking calls
# to the filesystem to load the mime.types file.
mimetypes.init()
# Initialize is_official_image and is_docker_env to avoid blocking calls
# to the filesystem.
is_official_image()
is_docker_env()
async def async_load_base_functionality(hass: core.HomeAssistant) -> None:
@@ -499,8 +527,7 @@ async def async_from_config_dict(
return hass
@core.callback
def async_enable_logging(
async def async_enable_logging(
hass: core.HomeAssistant,
verbose: bool = False,
log_rotate_days: int | None = None,
@@ -583,23 +610,9 @@ def async_enable_logging(
if (err_path_exists and os.access(err_log_path, os.W_OK)) or (
not err_path_exists and os.access(err_dir, os.W_OK)
):
err_handler: (
logging.handlers.RotatingFileHandler
| logging.handlers.TimedRotatingFileHandler
err_handler = await hass.async_add_executor_job(
_create_log_file, err_log_path, log_rotate_days
)
if log_rotate_days:
err_handler = logging.handlers.TimedRotatingFileHandler(
err_log_path, when="midnight", backupCount=log_rotate_days
)
else:
err_handler = _RotatingFileHandlerWithoutShouldRollOver(
err_log_path, backupCount=1
)
try:
err_handler.doRollover()
except OSError as err:
_LOGGER.error("Error rolling over log file: %s", err)
err_handler.setLevel(logging.INFO if verbose else logging.WARNING)
err_handler.setFormatter(logging.Formatter(fmt, datefmt=FORMAT_DATETIME))
@@ -616,7 +629,29 @@ def async_enable_logging(
async_activate_log_queue_handler(hass)
class _RotatingFileHandlerWithoutShouldRollOver(logging.handlers.RotatingFileHandler):
def _create_log_file(
err_log_path: str, log_rotate_days: int | None
) -> RotatingFileHandler | TimedRotatingFileHandler:
"""Create log file and do roll over."""
err_handler: RotatingFileHandler | TimedRotatingFileHandler
if log_rotate_days:
err_handler = TimedRotatingFileHandler(
err_log_path, when="midnight", backupCount=log_rotate_days
)
else:
err_handler = _RotatingFileHandlerWithoutShouldRollOver(
err_log_path, backupCount=1
)
try:
err_handler.doRollover()
except OSError as err:
_LOGGER.error("Error rolling over log file: %s", err)
return err_handler
class _RotatingFileHandlerWithoutShouldRollOver(RotatingFileHandler):
"""RotatingFileHandler that does not check if it should roll over on every log."""
def shouldRollover(self, record: logging.LogRecord) -> bool:

View File

@@ -0,0 +1,5 @@
{
"domain": "ambient_weather",
"name": "Ambient Weather",
"integrations": ["ambient_network", "ambient_station"]
}

View File

@@ -0,0 +1,5 @@
{
"domain": "ruuvi",
"name": "Ruuvi",
"integrations": ["ruuvi_gateway", "ruuvitag_ble"]
}

View File

@@ -0,0 +1,5 @@
{
"domain": "weatherflow",
"name": "WeatherFlow",
"integrations": ["weatherflow", "weatherflow_cloud"]
}

View File

@@ -5,13 +5,6 @@ from __future__ import annotations
from typing import cast
from jaraco.abode.devices.sensor import BinarySensor
from jaraco.abode.helpers.constants import (
TYPE_CONNECTIVITY,
TYPE_MOISTURE,
TYPE_MOTION,
TYPE_OCCUPANCY,
TYPE_OPENING,
)
from homeassistant.components.binary_sensor import (
BinarySensorDeviceClass,
@@ -34,11 +27,11 @@ async def async_setup_entry(
data: AbodeSystem = hass.data[DOMAIN]
device_types = [
TYPE_CONNECTIVITY,
TYPE_MOISTURE,
TYPE_MOTION,
TYPE_OCCUPANCY,
TYPE_OPENING,
"connectivity",
"moisture",
"motion",
"occupancy",
"door",
]
async_add_entities(

View File

@@ -8,7 +8,6 @@ from typing import Any, cast
from jaraco.abode.devices.base import Device
from jaraco.abode.devices.camera import Camera as AbodeCam
from jaraco.abode.helpers import timeline
from jaraco.abode.helpers.constants import TYPE_CAMERA
import requests
from requests.models import Response
@@ -34,7 +33,7 @@ async def async_setup_entry(
async_add_entities(
AbodeCamera(data, device, timeline.CAPTURE_IMAGE)
for device in data.abode.get_devices(generic_type=TYPE_CAMERA)
for device in data.abode.get_devices(generic_type="camera")
)

View File

@@ -3,7 +3,6 @@
from typing import Any
from jaraco.abode.devices.cover import Cover
from jaraco.abode.helpers.constants import TYPE_COVER
from homeassistant.components.cover import CoverEntity
from homeassistant.config_entries import ConfigEntry
@@ -23,7 +22,7 @@ async def async_setup_entry(
async_add_entities(
AbodeCover(data, device)
for device in data.abode.get_devices(generic_type=TYPE_COVER)
for device in data.abode.get_devices(generic_type="cover")
)

View File

@@ -105,7 +105,7 @@ class AbodeAutomation(AbodeEntity):
super().__init__(data)
self._automation = automation
self._attr_name = automation.name
self._attr_unique_id = automation.automation_id
self._attr_unique_id = automation.id
self._attr_extra_state_attributes = {
"type": "CUE automation",
}

View File

@@ -6,7 +6,6 @@ from math import ceil
from typing import Any
from jaraco.abode.devices.light import Light
from jaraco.abode.helpers.constants import TYPE_LIGHT
from homeassistant.components.light import (
ATTR_BRIGHTNESS,
@@ -36,7 +35,7 @@ async def async_setup_entry(
async_add_entities(
AbodeLight(data, device)
for device in data.abode.get_devices(generic_type=TYPE_LIGHT)
for device in data.abode.get_devices(generic_type="light")
)

View File

@@ -3,7 +3,6 @@
from typing import Any
from jaraco.abode.devices.lock import Lock
from jaraco.abode.helpers.constants import TYPE_LOCK
from homeassistant.components.lock import LockEntity
from homeassistant.config_entries import ConfigEntry
@@ -23,7 +22,7 @@ async def async_setup_entry(
async_add_entities(
AbodeLock(data, device)
for device in data.abode.get_devices(generic_type=TYPE_LOCK)
for device in data.abode.get_devices(generic_type="lock")
)

View File

@@ -9,5 +9,5 @@
},
"iot_class": "cloud_push",
"loggers": ["jaraco.abode", "lomond"],
"requirements": ["jaraco.abode==3.3.0", "jaraco.functools==3.9.0"]
"requirements": ["jaraco.abode==5.2.1"]
}

View File

@@ -7,15 +7,6 @@ from dataclasses import dataclass
from typing import cast
from jaraco.abode.devices.sensor import Sensor
from jaraco.abode.helpers.constants import (
HUMI_STATUS_KEY,
LUX_STATUS_KEY,
STATUSES_KEY,
TEMP_STATUS_KEY,
TYPE_SENSOR,
UNIT_CELSIUS,
UNIT_FAHRENHEIT,
)
from homeassistant.components.sensor import (
SensorDeviceClass,
@@ -32,8 +23,8 @@ from .const import DOMAIN
from .entity import AbodeDevice
ABODE_TEMPERATURE_UNIT_HA_UNIT = {
UNIT_FAHRENHEIT: UnitOfTemperature.FAHRENHEIT,
UNIT_CELSIUS: UnitOfTemperature.CELSIUS,
"°F": UnitOfTemperature.FAHRENHEIT,
"°C": UnitOfTemperature.CELSIUS,
}
@@ -47,7 +38,7 @@ class AbodeSensorDescription(SensorEntityDescription):
SENSOR_TYPES: tuple[AbodeSensorDescription, ...] = (
AbodeSensorDescription(
key=TEMP_STATUS_KEY,
key="temperature",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement_fn=lambda device: ABODE_TEMPERATURE_UNIT_HA_UNIT[
device.temp_unit
@@ -55,13 +46,13 @@ SENSOR_TYPES: tuple[AbodeSensorDescription, ...] = (
value_fn=lambda device: cast(float, device.temp),
),
AbodeSensorDescription(
key=HUMI_STATUS_KEY,
key="humidity",
device_class=SensorDeviceClass.HUMIDITY,
native_unit_of_measurement_fn=lambda _: PERCENTAGE,
value_fn=lambda device: cast(float, device.humidity),
),
AbodeSensorDescription(
key=LUX_STATUS_KEY,
key="lux",
device_class=SensorDeviceClass.ILLUMINANCE,
native_unit_of_measurement_fn=lambda _: LIGHT_LUX,
value_fn=lambda device: cast(float, device.lux),
@@ -78,8 +69,8 @@ async def async_setup_entry(
async_add_entities(
AbodeSensor(data, device, description)
for description in SENSOR_TYPES
for device in data.abode.get_devices(generic_type=TYPE_SENSOR)
if description.key in device.get_value(STATUSES_KEY)
for device in data.abode.get_devices(generic_type="sensor")
if description.key in device.get_value("statuses")
)

View File

@@ -5,7 +5,6 @@ from __future__ import annotations
from typing import Any, cast
from jaraco.abode.devices.switch import Switch
from jaraco.abode.helpers.constants import TYPE_SWITCH, TYPE_VALVE
from homeassistant.components.switch import SwitchEntity
from homeassistant.config_entries import ConfigEntry
@@ -17,7 +16,7 @@ from . import AbodeSystem
from .const import DOMAIN
from .entity import AbodeAutomation, AbodeDevice
DEVICE_TYPES = [TYPE_SWITCH, TYPE_VALVE]
DEVICE_TYPES = ["switch", "valve"]
async def async_setup_entry(
@@ -89,4 +88,4 @@ class AbodeAutomationSwitch(AbodeAutomation, SwitchEntity):
@property
def is_on(self) -> bool:
"""Return True if the automation is enabled."""
return bool(self._automation.is_enabled)
return bool(self._automation.enabled)

View File

@@ -0,0 +1,51 @@
{
"entity": {
"sensor": {
"cloud_ceiling": {
"default": "mdi:weather-fog"
},
"cloud_cover": {
"default": "mdi:weather-cloudy"
},
"cloud_cover_day": {
"default": "mdi:weather-cloudy"
},
"cloud_cover_night": {
"default": "mdi:weather-cloudy"
},
"grass_pollen": {
"default": "mdi:grass"
},
"hours_of_sun": {
"default": "mdi:weather-partly-cloudy"
},
"mold_pollen": {
"default": "mdi:blur"
},
"pressure_tendency": {
"default": "mdi:gauge"
},
"ragweed_pollen": {
"default": "mdi:sprout"
},
"thunderstorm_probability_day": {
"default": "mdi:weather-lightning"
},
"thunderstorm_probability_night": {
"default": "mdi:weather-lightning"
},
"translation_key": {
"default": "mdi:air-filter"
},
"tree_pollen": {
"default": "mdi:tree-outline"
},
"uv_index": {
"default": "mdi:weather-sunny"
},
"uv_index_forecast": {
"default": "mdi:weather-sunny"
}
}
}
}

View File

@@ -55,284 +55,174 @@ class AccuWeatherSensorDescription(SensorEntityDescription):
attr_fn: Callable[[dict[str, Any]], dict[str, Any]] = lambda _: {}
@dataclass(frozen=True, kw_only=True)
class AccuWeatherForecastSensorDescription(AccuWeatherSensorDescription):
"""Class describing AccuWeather sensor entities."""
day: int
FORECAST_SENSOR_TYPES: tuple[AccuWeatherForecastSensorDescription, ...] = (
*(
AccuWeatherForecastSensorDescription(
key="AirQuality",
icon="mdi:air-filter",
value_fn=lambda data: cast(str, data[ATTR_CATEGORY]),
device_class=SensorDeviceClass.ENUM,
options=["good", "hazardous", "high", "low", "moderate", "unhealthy"],
translation_key=f"air_quality_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
AccuWeatherSensorDescription(
key="AirQuality",
value_fn=lambda data: cast(str, data[ATTR_CATEGORY]),
device_class=SensorDeviceClass.ENUM,
options=["good", "hazardous", "high", "low", "moderate", "unhealthy"],
translation_key="air_quality",
),
*(
AccuWeatherForecastSensorDescription(
key="CloudCoverDay",
icon="mdi:weather-cloudy",
entity_registry_enabled_default=False,
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data: cast(int, data),
translation_key=f"cloud_cover_day_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="CloudCoverDay",
entity_registry_enabled_default=False,
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data: cast(int, data),
translation_key="cloud_cover_day",
),
*(
AccuWeatherForecastSensorDescription(
key="CloudCoverNight",
icon="mdi:weather-cloudy",
entity_registry_enabled_default=False,
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data: cast(int, data),
translation_key=f"cloud_cover_night_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="CloudCoverNight",
entity_registry_enabled_default=False,
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data: cast(int, data),
translation_key="cloud_cover_night",
),
*(
AccuWeatherForecastSensorDescription(
key="Grass",
icon="mdi:grass",
entity_registry_enabled_default=False,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key=f"grass_pollen_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="Grass",
entity_registry_enabled_default=False,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key="grass_pollen",
),
*(
AccuWeatherForecastSensorDescription(
key="HoursOfSun",
icon="mdi:weather-partly-cloudy",
native_unit_of_measurement=UnitOfTime.HOURS,
value_fn=lambda data: cast(float, data),
translation_key=f"hours_of_sun_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="HoursOfSun",
native_unit_of_measurement=UnitOfTime.HOURS,
value_fn=lambda data: cast(float, data),
translation_key="hours_of_sun",
),
*(
AccuWeatherForecastSensorDescription(
key="LongPhraseDay",
value_fn=lambda data: cast(str, data),
translation_key=f"condition_day_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="LongPhraseDay",
value_fn=lambda data: cast(str, data),
translation_key="condition_day",
),
*(
AccuWeatherForecastSensorDescription(
key="LongPhraseNight",
value_fn=lambda data: cast(str, data),
translation_key=f"condition_night_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="LongPhraseNight",
value_fn=lambda data: cast(str, data),
translation_key="condition_night",
),
*(
AccuWeatherForecastSensorDescription(
key="Mold",
icon="mdi:blur",
entity_registry_enabled_default=False,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key=f"mold_pollen_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="Mold",
entity_registry_enabled_default=False,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key="mold_pollen",
),
*(
AccuWeatherForecastSensorDescription(
key="Ragweed",
icon="mdi:sprout",
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
entity_registry_enabled_default=False,
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key=f"ragweed_pollen_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="Ragweed",
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
entity_registry_enabled_default=False,
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key="ragweed_pollen",
),
*(
AccuWeatherForecastSensorDescription(
key="RealFeelTemperatureMax",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
translation_key=f"realfeel_temperature_max_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="RealFeelTemperatureMax",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
translation_key="realfeel_temperature_max",
),
*(
AccuWeatherForecastSensorDescription(
key="RealFeelTemperatureMin",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
translation_key=f"realfeel_temperature_min_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="RealFeelTemperatureMin",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
translation_key="realfeel_temperature_min",
),
*(
AccuWeatherForecastSensorDescription(
key="RealFeelTemperatureShadeMax",
device_class=SensorDeviceClass.TEMPERATURE,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
translation_key=f"realfeel_temperature_shade_max_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="RealFeelTemperatureShadeMax",
device_class=SensorDeviceClass.TEMPERATURE,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
translation_key="realfeel_temperature_shade_max",
),
*(
AccuWeatherForecastSensorDescription(
key="RealFeelTemperatureShadeMin",
device_class=SensorDeviceClass.TEMPERATURE,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
translation_key=f"realfeel_temperature_shade_min_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="RealFeelTemperatureShadeMin",
device_class=SensorDeviceClass.TEMPERATURE,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
translation_key="realfeel_temperature_shade_min",
),
*(
AccuWeatherForecastSensorDescription(
key="SolarIrradianceDay",
icon="mdi:weather-sunny",
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfIrradiance.WATTS_PER_SQUARE_METER,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
translation_key=f"solar_irradiance_day_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="SolarIrradianceDay",
device_class=SensorDeviceClass.IRRADIANCE,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfIrradiance.WATTS_PER_SQUARE_METER,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
translation_key="solar_irradiance_day",
),
*(
AccuWeatherForecastSensorDescription(
key="SolarIrradianceNight",
icon="mdi:weather-sunny",
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfIrradiance.WATTS_PER_SQUARE_METER,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
translation_key=f"solar_irradiance_night_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="SolarIrradianceNight",
device_class=SensorDeviceClass.IRRADIANCE,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfIrradiance.WATTS_PER_SQUARE_METER,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
translation_key="solar_irradiance_night",
),
*(
AccuWeatherForecastSensorDescription(
key="ThunderstormProbabilityDay",
icon="mdi:weather-lightning",
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data: cast(int, data),
translation_key=f"thunderstorm_probability_day_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="ThunderstormProbabilityDay",
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data: cast(int, data),
translation_key="thunderstorm_probability_day",
),
*(
AccuWeatherForecastSensorDescription(
key="ThunderstormProbabilityNight",
icon="mdi:weather-lightning",
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data: cast(int, data),
translation_key=f"thunderstorm_probability_night_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="ThunderstormProbabilityNight",
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data: cast(int, data),
translation_key="thunderstorm_probability_night",
),
*(
AccuWeatherForecastSensorDescription(
key="Tree",
icon="mdi:tree-outline",
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
entity_registry_enabled_default=False,
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key=f"tree_pollen_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="Tree",
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
entity_registry_enabled_default=False,
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key="tree_pollen",
),
*(
AccuWeatherForecastSensorDescription(
key="UVIndex",
icon="mdi:weather-sunny",
native_unit_of_measurement=UV_INDEX,
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key=f"uv_index_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="UVIndex",
native_unit_of_measurement=UV_INDEX,
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key="uv_index_forecast",
),
*(
AccuWeatherForecastSensorDescription(
key="WindGustDay",
device_class=SensorDeviceClass.WIND_SPEED,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
translation_key=f"wind_gust_speed_day_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="WindGustDay",
device_class=SensorDeviceClass.WIND_SPEED,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
translation_key="wind_gust_speed_day",
),
*(
AccuWeatherForecastSensorDescription(
key="WindGustNight",
device_class=SensorDeviceClass.WIND_SPEED,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
translation_key=f"wind_gust_speed_night_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="WindGustNight",
device_class=SensorDeviceClass.WIND_SPEED,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
translation_key="wind_gust_speed_night",
),
*(
AccuWeatherForecastSensorDescription(
key="WindDay",
device_class=SensorDeviceClass.WIND_SPEED,
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
translation_key=f"wind_speed_day_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="WindDay",
device_class=SensorDeviceClass.WIND_SPEED,
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
translation_key="wind_speed_day",
),
*(
AccuWeatherForecastSensorDescription(
key="WindNight",
device_class=SensorDeviceClass.WIND_SPEED,
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
translation_key=f"wind_speed_night_{day}d",
day=day,
)
for day in range(MAX_FORECAST_DAYS + 1)
AccuWeatherSensorDescription(
key="WindNight",
device_class=SensorDeviceClass.WIND_SPEED,
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
translation_key="wind_speed_night",
),
)
@@ -349,7 +239,6 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
AccuWeatherSensorDescription(
key="Ceiling",
device_class=SensorDeviceClass.DISTANCE,
icon="mdi:weather-fog",
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=UnitOfLength.METERS,
value_fn=lambda data: cast(float, data[API_METRIC][ATTR_VALUE]),
@@ -358,7 +247,6 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
),
AccuWeatherSensorDescription(
key="CloudCover",
icon="mdi:weather-cloudy",
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=PERCENTAGE,
@@ -403,14 +291,12 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
AccuWeatherSensorDescription(
key="PressureTendency",
device_class=SensorDeviceClass.ENUM,
icon="mdi:gauge",
options=["falling", "rising", "steady"],
value_fn=lambda data: cast(str, data["LocalizedText"]).lower(),
translation_key="pressure_tendency",
),
AccuWeatherSensorDescription(
key="UVIndex",
icon="mdi:weather-sunny",
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=UV_INDEX,
value_fn=lambda data: cast(int, data),
@@ -475,9 +361,10 @@ async def async_setup_entry(
sensors.extend(
[
AccuWeatherForecastSensor(forecast_daily_coordinator, description)
AccuWeatherForecastSensor(forecast_daily_coordinator, description, day)
for day in range(MAX_FORECAST_DAYS + 1)
for description in FORECAST_SENSOR_TYPES
if description.key in forecast_daily_coordinator.data[description.day]
if description.key in forecast_daily_coordinator.data[day]
]
)
@@ -543,25 +430,27 @@ class AccuWeatherForecastSensor(
_attr_attribution = ATTRIBUTION
_attr_has_entity_name = True
entity_description: AccuWeatherForecastSensorDescription
entity_description: AccuWeatherSensorDescription
def __init__(
self,
coordinator: AccuWeatherDailyForecastDataUpdateCoordinator,
description: AccuWeatherForecastSensorDescription,
description: AccuWeatherSensorDescription,
forecast_day: int,
) -> None:
"""Initialize."""
super().__init__(coordinator)
self.forecast_day = description.day
self.entity_description = description
self._sensor_data = self._get_sensor_data(
coordinator.data, description.key, self.forecast_day
coordinator.data, description.key, forecast_day
)
self._attr_unique_id = (
f"{coordinator.location_key}-{description.key}-{self.forecast_day}".lower()
f"{coordinator.location_key}-{description.key}-{forecast_day}".lower()
)
self._attr_device_info = coordinator.device_info
self._attr_translation_placeholders = {"forecast_day": str(forecast_day)}
self.forecast_day = forecast_day
@property
def native_value(self) -> str | int | float | None:

View File

@@ -21,8 +21,8 @@
},
"entity": {
"sensor": {
"air_quality_0d": {
"name": "Air quality today",
"air_quality": {
"name": "Air quality day {forecast_day}",
"state": {
"good": "Good",
"hazardous": "Hazardous",
@@ -32,50 +32,6 @@
"unhealthy": "Unhealthy"
}
},
"air_quality_1d": {
"name": "Air quality day 1",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
},
"air_quality_2d": {
"name": "Air quality day 2",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
},
"air_quality_3d": {
"name": "Air quality day 3",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
},
"air_quality_4d": {
"name": "Air quality day 4",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
},
"apparent_temperature": {
"name": "Apparent temperature"
},
@@ -85,240 +41,52 @@
"cloud_cover": {
"name": "Cloud cover"
},
"cloud_cover_day_0d": {
"name": "Cloud cover today"
"cloud_cover_day": {
"name": "Cloud cover day {forecast_day}"
},
"cloud_cover_day_1d": {
"name": "Cloud cover day 1"
"cloud_cover_night": {
"name": "Cloud cover night {forecast_day}"
},
"cloud_cover_day_2d": {
"name": "Cloud cover day 2"
"condition_day": {
"name": "Condition day {forecast_day}"
},
"cloud_cover_day_3d": {
"name": "Cloud cover day 3"
},
"cloud_cover_day_4d": {
"name": "Cloud cover day 4"
},
"cloud_cover_night_0d": {
"name": "Cloud cover tonight"
},
"cloud_cover_night_1d": {
"name": "Cloud cover night 1"
},
"cloud_cover_night_2d": {
"name": "Cloud cover night 2"
},
"cloud_cover_night_3d": {
"name": "Cloud cover night 3"
},
"cloud_cover_night_4d": {
"name": "Cloud cover night 4"
},
"condition_day_0d": {
"name": "Condition today"
},
"condition_day_1d": {
"name": "Condition day 1"
},
"condition_day_2d": {
"name": "Condition day 2"
},
"condition_day_3d": {
"name": "Condition day 3"
},
"condition_day_4d": {
"name": "Condition day 4"
},
"condition_night_0d": {
"name": "Condition tonight"
},
"condition_night_1d": {
"name": "Condition night 1"
},
"condition_night_2d": {
"name": "Condition night 2"
},
"condition_night_3d": {
"name": "Condition night 3"
},
"condition_night_4d": {
"name": "Condition night 4"
"condition_night": {
"name": "Condition night {forecast_day}"
},
"dew_point": {
"name": "Dew point"
},
"grass_pollen_0d": {
"name": "Grass pollen today",
"grass_pollen": {
"name": "Grass pollen day {forecast_day}",
"state_attributes": {
"level": {
"name": "Level",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
"good": "[%key:component::accuweather::entity::sensor::air_quality::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality::state::unhealthy%]"
}
}
}
},
"grass_pollen_1d": {
"name": "Grass pollen day 1",
"hours_of_sun": {
"name": "Hours of sun day {forecast_day}"
},
"mold_pollen": {
"name": "Mold pollen day {forecast_day}",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"name": "[%key:component::accuweather::entity::sensor::grass_pollen::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"grass_pollen_2d": {
"name": "Grass pollen day 2",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"grass_pollen_3d": {
"name": "Grass pollen day 3",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"grass_pollen_4d": {
"name": "Grass pollen day 4",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"hours_of_sun_0d": {
"name": "Hours of sun today"
},
"hours_of_sun_1d": {
"name": "Hours of sun day 1"
},
"hours_of_sun_2d": {
"name": "Hours of sun day 2"
},
"hours_of_sun_3d": {
"name": "Hours of sun day 3"
},
"hours_of_sun_4d": {
"name": "Hours of sun day 4"
},
"mold_pollen_0d": {
"name": "Mold pollen today",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"mold_pollen_1d": {
"name": "Mold pollen day 1",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"mold_pollen_2d": {
"name": "Mold pollen day 2",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"mold_pollen_3d": {
"name": "Mold pollen day 3",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"mold_pollen_4d": {
"name": "Mold pollen day 4",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
"good": "[%key:component::accuweather::entity::sensor::air_quality::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality::state::unhealthy%]"
}
}
}
@@ -334,82 +102,18 @@
"falling": "Falling"
}
},
"ragweed_pollen_0d": {
"name": "Ragweed pollen today",
"ragweed_pollen": {
"name": "Ragweed pollen day {forecast_day}",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"name": "[%key:component::accuweather::entity::sensor::grass_pollen::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"ragweed_pollen_1d": {
"name": "Ragweed pollen day 1",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"ragweed_pollen_2d": {
"name": "Ragweed pollen day 2",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"ragweed_pollen_3d": {
"name": "Ragweed pollen day 3",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"ragweed_pollen_4d": {
"name": "Ragweed pollen day 4",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
"good": "[%key:component::accuweather::entity::sensor::air_quality::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality::state::unhealthy%]"
}
}
}
@@ -417,205 +121,45 @@
"realfeel_temperature": {
"name": "RealFeel temperature"
},
"realfeel_temperature_max_0d": {
"name": "RealFeel temperature max today"
"realfeel_temperature_max": {
"name": "RealFeel temperature max day {forecast_day}"
},
"realfeel_temperature_max_1d": {
"name": "RealFeel temperature max day 1"
},
"realfeel_temperature_max_2d": {
"name": "RealFeel temperature max day 2"
},
"realfeel_temperature_max_3d": {
"name": "RealFeel temperature max day 3"
},
"realfeel_temperature_max_4d": {
"name": "RealFeel temperature max day 4"
},
"realfeel_temperature_min_0d": {
"name": "RealFeel temperature min today"
},
"realfeel_temperature_min_1d": {
"name": "RealFeel temperature min day 1"
},
"realfeel_temperature_min_2d": {
"name": "RealFeel temperature min day 2"
},
"realfeel_temperature_min_3d": {
"name": "RealFeel temperature min day 3"
},
"realfeel_temperature_min_4d": {
"name": "RealFeel temperature min day 4"
"realfeel_temperature_min": {
"name": "RealFeel temperature min day {forecast_day}"
},
"realfeel_temperature_shade": {
"name": "RealFeel temperature shade"
},
"realfeel_temperature_shade_max_0d": {
"name": "RealFeel temperature shade max today"
"realfeel_temperature_shade_max": {
"name": "RealFeel temperature shade max day {forecast_day}"
},
"realfeel_temperature_shade_max_1d": {
"name": "RealFeel temperature shade max day 1"
"realfeel_temperature_shade_min": {
"name": "RealFeel temperature shade min day {forecast_day}"
},
"realfeel_temperature_shade_max_2d": {
"name": "RealFeel temperature shade max day 2"
"solar_irradiance_day": {
"name": "Solar irradiance day {forecast_day}"
},
"realfeel_temperature_shade_max_3d": {
"name": "RealFeel temperature shade max day 3"
"solar_irradiance_night": {
"name": "Solar irradiance night {forecast_day}"
},
"realfeel_temperature_shade_max_4d": {
"name": "RealFeel temperature shade max day 4"
"thunderstorm_probability_day": {
"name": "Thunderstorm probability day {forecast_day}"
},
"realfeel_temperature_shade_min_0d": {
"name": "RealFeel temperature shade min today"
"thunderstorm_probability_night": {
"name": "Thunderstorm probability night {forecast_day}"
},
"realfeel_temperature_shade_min_1d": {
"name": "RealFeel temperature shade min day 1"
},
"realfeel_temperature_shade_min_2d": {
"name": "RealFeel temperature shade min day 2"
},
"realfeel_temperature_shade_min_3d": {
"name": "RealFeel temperature shade min day 3"
},
"realfeel_temperature_shade_min_4d": {
"name": "RealFeel temperature shade min day 4"
},
"solar_irradiance_day_0d": {
"name": "Solar irradiance today"
},
"solar_irradiance_day_1d": {
"name": "Solar irradiance day 1"
},
"solar_irradiance_day_2d": {
"name": "Solar irradiance day 2"
},
"solar_irradiance_day_3d": {
"name": "Solar irradiance day 3"
},
"solar_irradiance_day_4d": {
"name": "Solar irradiance day 4"
},
"solar_irradiance_night_0d": {
"name": "Solar irradiance tonight"
},
"solar_irradiance_night_1d": {
"name": "Solar irradiance night 1"
},
"solar_irradiance_night_2d": {
"name": "Solar irradiance night 2"
},
"solar_irradiance_night_3d": {
"name": "Solar irradiance night 3"
},
"solar_irradiance_night_4d": {
"name": "Solar irradiance night 4"
},
"thunderstorm_probability_day_0d": {
"name": "Thunderstorm probability today"
},
"thunderstorm_probability_day_1d": {
"name": "Thunderstorm probability day 1"
},
"thunderstorm_probability_day_2d": {
"name": "Thunderstorm probability day 2"
},
"thunderstorm_probability_day_3d": {
"name": "Thunderstorm probability day 3"
},
"thunderstorm_probability_day_4d": {
"name": "Thunderstorm probability day 4"
},
"thunderstorm_probability_night_0d": {
"name": "Thunderstorm probability tonight"
},
"thunderstorm_probability_night_1d": {
"name": "Thunderstorm probability night 1"
},
"thunderstorm_probability_night_2d": {
"name": "Thunderstorm probability night 2"
},
"thunderstorm_probability_night_3d": {
"name": "Thunderstorm probability night 3"
},
"thunderstorm_probability_night_4d": {
"name": "Thunderstorm probability night 4"
},
"tree_pollen_0d": {
"name": "Tree pollen today",
"tree_pollen": {
"name": "Tree pollen day {forecast_day}",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"name": "[%key:component::accuweather::entity::sensor::grass_pollen::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"tree_pollen_1d": {
"name": "Tree pollen day 1",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"tree_pollen_2d": {
"name": "Tree pollen day 2",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"tree_pollen_3d": {
"name": "Tree pollen day 3",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"tree_pollen_4d": {
"name": "Tree pollen day 4",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
"good": "[%key:component::accuweather::entity::sensor::air_quality::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality::state::unhealthy%]"
}
}
}
@@ -624,94 +168,30 @@
"name": "UV index",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"name": "[%key:component::accuweather::entity::sensor::grass_pollen::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
"good": "[%key:component::accuweather::entity::sensor::air_quality::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality::state::unhealthy%]"
}
}
}
},
"uv_index_0d": {
"name": "UV index today",
"uv_index_forecast": {
"name": "UV index day {forecast_day}",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"name": "[%key:component::accuweather::entity::sensor::grass_pollen::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"uv_index_1d": {
"name": "UV index day 1",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"uv_index_2d": {
"name": "UV index day 2",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"uv_index_3d": {
"name": "UV index day 3",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
}
}
}
},
"uv_index_4d": {
"name": "UV index day 4",
"state_attributes": {
"level": {
"name": "[%key:component::accuweather::entity::sensor::grass_pollen_0d::state_attributes::level::name%]",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality_0d::state::unhealthy%]"
"good": "[%key:component::accuweather::entity::sensor::air_quality::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality::state::unhealthy%]"
}
}
}
@@ -728,65 +208,17 @@
"wind_gust_speed": {
"name": "[%key:component::weather::entity_component::_::state_attributes::wind_gust_speed::name%]"
},
"wind_gust_speed_day_0d": {
"name": "Wind gust speed today"
"wind_gust_speed_day": {
"name": "Wind gust speed day {forecast_day}"
},
"wind_gust_speed_day_1d": {
"name": "Wind gust speed day 1"
"wind_gust_speed_night": {
"name": "Wind gust speed night {forecast_day}"
},
"wind_gust_speed_day_2d": {
"name": "Wind gust speed day 2"
"wind_speed_day": {
"name": "Wind speed day {forecast_day}"
},
"wind_gust_speed_day_3d": {
"name": "Wind gust speed day 3"
},
"wind_gust_speed_day_4d": {
"name": "Wind gust speed day 4"
},
"wind_gust_speed_night_0d": {
"name": "Wind gust speed tonight"
},
"wind_gust_speed_night_1d": {
"name": "Wind gust speed night 1"
},
"wind_gust_speed_night_2d": {
"name": "Wind gust speed night 2"
},
"wind_gust_speed_night_3d": {
"name": "Wind gust speed night 3"
},
"wind_gust_speed_night_4d": {
"name": "Wind gust speed night 4"
},
"wind_speed_day_0d": {
"name": "Wind speed today"
},
"wind_speed_day_1d": {
"name": "Wind speed day 1"
},
"wind_speed_day_2d": {
"name": "Wind speed day 2"
},
"wind_speed_day_3d": {
"name": "Wind speed day 3"
},
"wind_speed_day_4d": {
"name": "Wind speed day 4"
},
"wind_speed_night_0d": {
"name": "Wind speed tonight"
},
"wind_speed_night_1d": {
"name": "Wind speed night 1"
},
"wind_speed_night_2d": {
"name": "Wind speed night 2"
},
"wind_speed_night_3d": {
"name": "Wind speed night 3"
},
"wind_speed_night_4d": {
"name": "Wind speed night 4"
"wind_speed_night": {
"name": "Wind speed night {forecast_day}"
}
}
},

View File

@@ -7,6 +7,7 @@ from typing import cast
from homeassistant.components.weather import (
ATTR_FORECAST_CLOUD_COVERAGE,
ATTR_FORECAST_CONDITION,
ATTR_FORECAST_HUMIDITY,
ATTR_FORECAST_NATIVE_APPARENT_TEMP,
ATTR_FORECAST_NATIVE_PRECIPITATION,
ATTR_FORECAST_NATIVE_TEMP,
@@ -183,6 +184,7 @@ class AccuWeatherEntity(
{
ATTR_FORECAST_TIME: utc_from_timestamp(item["EpochDate"]).isoformat(),
ATTR_FORECAST_CLOUD_COVERAGE: item["CloudCoverDay"],
ATTR_FORECAST_HUMIDITY: item["RelativeHumidityDay"]["Average"],
ATTR_FORECAST_NATIVE_TEMP: item["TemperatureMax"][ATTR_VALUE],
ATTR_FORECAST_NATIVE_TEMP_LOW: item["TemperatureMin"][ATTR_VALUE],
ATTR_FORECAST_NATIVE_APPARENT_TEMP: item["RealFeelTemperatureMax"][

View File

@@ -9,7 +9,10 @@ from typing import Any
import serial
import voluptuous as vol
from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchEntity
from homeassistant.components.switch import (
PLATFORM_SCHEMA as SWITCH_PLATFORM_SCHEMA,
SwitchEntity,
)
from homeassistant.const import (
CONF_FILENAME,
CONF_NAME,
@@ -38,7 +41,7 @@ from .const import (
_LOGGER = logging.getLogger(__name__)
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
PLATFORM_SCHEMA = SWITCH_PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_FILENAME): cv.isdevice,
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,

View File

@@ -10,7 +10,7 @@ import voluptuous as vol
from homeassistant.components.device_tracker import (
DOMAIN,
PLATFORM_SCHEMA as BASE_PLATFORM_SCHEMA,
PLATFORM_SCHEMA as DEVICE_TRACKER_PLATFORM_SCHEMA,
DeviceScanner,
)
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME
@@ -23,7 +23,7 @@ from .model import Device
_LOGGER: Final = logging.getLogger(__name__)
PLATFORM_SCHEMA: Final = BASE_PLATFORM_SCHEMA.extend(
PLATFORM_SCHEMA: Final = DEVICE_TRACKER_PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_HOST): cv.string,
vol.Required(CONF_PASSWORD): cv.string,

View File

@@ -7,5 +7,5 @@
"integration_type": "service",
"iot_class": "local_polling",
"loggers": ["adguardhome"],
"requirements": ["adguardhome==0.6.3"]
"requirements": ["adguardhome==0.7.0"]
}

View File

@@ -7,7 +7,7 @@ import voluptuous as vol
from homeassistant.components.binary_sensor import (
DEVICE_CLASSES_SCHEMA,
PLATFORM_SCHEMA,
PLATFORM_SCHEMA as BINARY_SENSOR_PLATFORM_SCHEMA,
BinarySensorDeviceClass,
BinarySensorEntity,
)
@@ -20,7 +20,7 @@ from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from . import CONF_ADS_VAR, DATA_ADS, STATE_KEY_STATE, AdsEntity
DEFAULT_NAME = "ADS binary sensor"
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
PLATFORM_SCHEMA = BINARY_SENSOR_PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_ADS_VAR): cv.string,
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,

View File

@@ -10,7 +10,7 @@ import voluptuous as vol
from homeassistant.components.cover import (
ATTR_POSITION,
DEVICE_CLASSES_SCHEMA,
PLATFORM_SCHEMA,
PLATFORM_SCHEMA as COVER_PLATFORM_SCHEMA,
CoverEntity,
CoverEntityFeature,
)
@@ -36,7 +36,7 @@ CONF_ADS_VAR_OPEN = "adsvar_open"
CONF_ADS_VAR_CLOSE = "adsvar_close"
CONF_ADS_VAR_STOP = "adsvar_stop"
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
PLATFORM_SCHEMA = COVER_PLATFORM_SCHEMA.extend(
{
vol.Optional(CONF_ADS_VAR): cv.string,
vol.Optional(CONF_ADS_VAR_POSITION): cv.string,

View File

@@ -9,7 +9,7 @@ import voluptuous as vol
from homeassistant.components.light import (
ATTR_BRIGHTNESS,
PLATFORM_SCHEMA,
PLATFORM_SCHEMA as LIGHT_PLATFORM_SCHEMA,
ColorMode,
LightEntity,
)
@@ -29,7 +29,7 @@ from . import (
)
DEFAULT_NAME = "ADS Light"
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
PLATFORM_SCHEMA = LIGHT_PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_ADS_VAR): cv.string,
vol.Optional(CONF_ADS_VAR_BRIGHTNESS): cv.string,

View File

@@ -5,5 +5,5 @@
"documentation": "https://www.home-assistant.io/integrations/ads",
"iot_class": "local_push",
"loggers": ["pyads"],
"requirements": ["pyads==3.2.2"]
"requirements": ["pyads==3.4.0"]
}

View File

@@ -4,7 +4,10 @@ from __future__ import annotations
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity
from homeassistant.components.sensor import (
PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA,
SensorEntity,
)
from homeassistant.const import CONF_NAME, CONF_UNIT_OF_MEASUREMENT
from homeassistant.core import HomeAssistant
import homeassistant.helpers.config_validation as cv
@@ -22,7 +25,7 @@ from . import (
)
DEFAULT_NAME = "ADS sensor"
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_ADS_VAR): cv.string,
vol.Optional(CONF_ADS_FACTOR): cv.positive_int,

View File

@@ -7,7 +7,10 @@ from typing import Any
import pyads
import voluptuous as vol
from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchEntity
from homeassistant.components.switch import (
PLATFORM_SCHEMA as SWITCH_PLATFORM_SCHEMA,
SwitchEntity,
)
from homeassistant.const import CONF_NAME
from homeassistant.core import HomeAssistant
import homeassistant.helpers.config_validation as cv
@@ -18,7 +21,7 @@ from . import CONF_ADS_VAR, DATA_ADS, STATE_KEY_STATE, AdsEntity
DEFAULT_NAME = "ADS Switch"
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
PLATFORM_SCHEMA = SWITCH_PLATFORM_SCHEMA.extend(
{
vol.Required(CONF_ADS_VAR): cv.string,
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,

View File

@@ -7,14 +7,35 @@ from typing import Any
from aemet_opendata.helpers import dict_nested_value
from homeassistant.components.weather import Forecast
from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import ATTRIBUTION, DOMAIN
from .coordinator import WeatherUpdateCoordinator
class AemetEntity(CoordinatorEntity[WeatherUpdateCoordinator]):
"""Define an AEMET entity."""
_attr_attribution = ATTRIBUTION
_attr_has_entity_name = True
def __init__(
self,
coordinator: WeatherUpdateCoordinator,
name: str,
unique_id: str,
) -> None:
"""Initialize the entity."""
super().__init__(coordinator)
self._attr_device_info = DeviceInfo(
name=name,
entry_type=DeviceEntryType.SERVICE,
identifiers={(DOMAIN, unique_id)},
manufacturer="AEMET",
model="Forecast",
)
def get_aemet_forecast(self, forecast_mode: str) -> list[Forecast]:
"""Return AEMET entity forecast by mode."""
return self.coordinator.data["forecast"][forecast_mode]

View File

@@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/aemet",
"iot_class": "cloud_polling",
"loggers": ["aemet_opendata"],
"requirements": ["AEMET-OpenData==0.5.1"]
"requirements": ["AEMET-OpenData==0.5.2"]
}

View File

@@ -43,7 +43,6 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
DEGREE,
PERCENTAGE,
@@ -86,7 +85,6 @@ from .const import (
ATTR_API_WIND_BEARING,
ATTR_API_WIND_MAX_SPEED,
ATTR_API_WIND_SPEED,
ATTRIBUTION,
CONDITIONS_MAP,
)
from .coordinator import WeatherUpdateCoordinator
@@ -366,12 +364,15 @@ async def async_setup_entry(
name = domain_data.name
coordinator = domain_data.coordinator
unique_id = config_entry.unique_id
assert unique_id is not None
async_add_entities(
AemetSensor(
name,
coordinator,
description,
config_entry,
unique_id,
)
for description in FORECAST_SENSORS + WEATHER_SENSORS
if dict_nested_value(coordinator.data["lib"], description.keys) is not None
@@ -381,7 +382,6 @@ async def async_setup_entry(
class AemetSensor(AemetEntity, SensorEntity):
"""Implementation of an AEMET OpenData sensor."""
_attr_attribution = ATTRIBUTION
entity_description: AemetSensorEntityDescription
def __init__(
@@ -389,13 +389,12 @@ class AemetSensor(AemetEntity, SensorEntity):
name: str,
coordinator: WeatherUpdateCoordinator,
description: AemetSensorEntityDescription,
config_entry: ConfigEntry,
unique_id: str,
) -> None:
"""Initialize the sensor."""
super().__init__(coordinator)
super().__init__(coordinator, name, unique_id)
self.entity_description = description
self._attr_name = f"{name} {description.name}"
self._attr_unique_id = f"{config_entry.unique_id}-{description.key}"
self._attr_unique_id = f"{unique_id}-{description.key}"
@property
def native_value(self):

View File

@@ -28,7 +28,7 @@ from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AemetConfigEntry
from .const import ATTRIBUTION, CONDITIONS_MAP
from .const import CONDITIONS_MAP
from .coordinator import WeatherUpdateCoordinator
from .entity import AemetEntity
@@ -43,10 +43,10 @@ async def async_setup_entry(
name = domain_data.name
weather_coordinator = domain_data.coordinator
async_add_entities(
[AemetWeather(name, config_entry.unique_id, weather_coordinator)],
False,
)
unique_id = config_entry.unique_id
assert unique_id is not None
async_add_entities([AemetWeather(name, unique_id, weather_coordinator)])
class AemetWeather(
@@ -55,7 +55,6 @@ class AemetWeather(
):
"""Implementation of an AEMET OpenData weather."""
_attr_attribution = ATTRIBUTION
_attr_native_precipitation_unit = UnitOfPrecipitationDepth.MILLIMETERS
_attr_native_pressure_unit = UnitOfPressure.HPA
_attr_native_temperature_unit = UnitOfTemperature.CELSIUS
@@ -63,16 +62,16 @@ class AemetWeather(
_attr_supported_features = (
WeatherEntityFeature.FORECAST_DAILY | WeatherEntityFeature.FORECAST_HOURLY
)
_attr_name = None
def __init__(
self,
name,
unique_id,
name: str,
unique_id: str,
coordinator: WeatherUpdateCoordinator,
) -> None:
"""Initialize the sensor."""
super().__init__(coordinator)
self._attr_name = name
super().__init__(coordinator, name, unique_id)
self._attr_unique_id = unique_id
@property

View File

@@ -43,6 +43,7 @@ class AgentBaseStation(AlarmControlPanelEntity):
| AlarmControlPanelEntityFeature.ARM_AWAY
| AlarmControlPanelEntityFeature.ARM_NIGHT
)
_attr_code_arm_required = False
_attr_has_entity_name = True
_attr_name = None

View File

@@ -9,19 +9,20 @@ from typing import Final, final
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
from homeassistant.core import HomeAssistant
from homeassistant.helpers.config_validation import ( # noqa: F401
PLATFORM_SCHEMA,
PLATFORM_SCHEMA_BASE,
)
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.entity import Entity
from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.typing import ConfigType, StateType
from . import group as group_pre_import # noqa: F401
from .const import DOMAIN
_LOGGER: Final = logging.getLogger(__name__)
ENTITY_ID_FORMAT: Final = DOMAIN + ".{}"
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA
PLATFORM_SCHEMA_BASE = cv.PLATFORM_SCHEMA_BASE
SCAN_INTERVAL: Final = timedelta(seconds=30)
ATTR_AQI: Final = "air_quality_index"
ATTR_CO2: Final = "carbon_dioxide"
ATTR_CO: Final = "carbon_monoxide"
@@ -34,10 +35,6 @@ ATTR_PM_10: Final = "particulate_matter_10"
ATTR_PM_2_5: Final = "particulate_matter_2_5"
ATTR_SO2: Final = "sulphur_dioxide"
ENTITY_ID_FORMAT: Final = DOMAIN + ".{}"
SCAN_INTERVAL: Final = timedelta(seconds=30)
PROP_TO_ATTR: Final[dict[str, str]] = {
"air_quality_index": ATTR_AQI,
"carbon_dioxide": ATTR_CO2,

View File

@@ -1,20 +0,0 @@
"""Describe group states."""
from __future__ import annotations
from typing import TYPE_CHECKING
from homeassistant.core import HomeAssistant, callback
if TYPE_CHECKING:
from homeassistant.components.group import GroupIntegrationRegistry
from .const import DOMAIN
@callback
def async_describe_on_off_states(
hass: HomeAssistant, registry: GroupIntegrationRegistry
) -> None:
"""Describe group on off states."""
registry.exclude_domain(DOMAIN)

View File

@@ -2,6 +2,8 @@
from __future__ import annotations
from dataclasses import dataclass
from airgradient import AirGradientClient
from homeassistant.config_entries import ConfigEntry
@@ -13,7 +15,24 @@ from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .const import DOMAIN
from .coordinator import AirGradientConfigCoordinator, AirGradientMeasurementCoordinator
PLATFORMS: list[Platform] = [Platform.SELECT, Platform.SENSOR]
PLATFORMS: list[Platform] = [
Platform.BUTTON,
Platform.NUMBER,
Platform.SELECT,
Platform.SENSOR,
Platform.SWITCH,
]
@dataclass
class AirGradientData:
"""AirGradient data class."""
measurement: AirGradientMeasurementCoordinator
config: AirGradientConfigCoordinator
type AirGradientConfigEntry = ConfigEntry[AirGradientData]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
@@ -39,10 +58,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
sw_version=measurement_coordinator.data.firmware_version,
)
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = {
"measurement": measurement_coordinator,
"config": config_coordinator,
}
entry.runtime_data = AirGradientData(
measurement=measurement_coordinator,
config=config_coordinator,
)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
@@ -51,7 +70,4 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)

View File

@@ -0,0 +1,104 @@
"""Support for AirGradient buttons."""
from collections.abc import Awaitable, Callable
from dataclasses import dataclass
from airgradient import AirGradientClient, ConfigurationControl
from homeassistant.components.button import (
DOMAIN as BUTTON_DOMAIN,
ButtonEntity,
ButtonEntityDescription,
)
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import DOMAIN, AirGradientConfigEntry
from .coordinator import AirGradientConfigCoordinator
from .entity import AirGradientEntity
@dataclass(frozen=True, kw_only=True)
class AirGradientButtonEntityDescription(ButtonEntityDescription):
"""Describes AirGradient button entity."""
press_fn: Callable[[AirGradientClient], Awaitable[None]]
CO2_CALIBRATION = AirGradientButtonEntityDescription(
key="co2_calibration",
translation_key="co2_calibration",
entity_category=EntityCategory.CONFIG,
press_fn=lambda client: client.request_co2_calibration(),
)
LED_BAR_TEST = AirGradientButtonEntityDescription(
key="led_bar_test",
translation_key="led_bar_test",
entity_category=EntityCategory.CONFIG,
press_fn=lambda client: client.request_led_bar_test(),
)
async def async_setup_entry(
hass: HomeAssistant,
entry: AirGradientConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up AirGradient button entities based on a config entry."""
model = entry.runtime_data.measurement.data.model
coordinator = entry.runtime_data.config
added_entities = False
@callback
def _check_entities() -> None:
nonlocal added_entities
if (
coordinator.data.configuration_control is ConfigurationControl.LOCAL
and not added_entities
):
entities = [AirGradientButton(coordinator, CO2_CALIBRATION)]
if "L" in model:
entities.append(AirGradientButton(coordinator, LED_BAR_TEST))
async_add_entities(entities)
added_entities = True
elif (
coordinator.data.configuration_control is not ConfigurationControl.LOCAL
and added_entities
):
entity_registry = er.async_get(hass)
for entity_description in (CO2_CALIBRATION, LED_BAR_TEST):
unique_id = f"{coordinator.serial_number}-{entity_description.key}"
if entity_id := entity_registry.async_get_entity_id(
BUTTON_DOMAIN, DOMAIN, unique_id
):
entity_registry.async_remove(entity_id)
added_entities = False
coordinator.async_add_listener(_check_entities)
_check_entities()
class AirGradientButton(AirGradientEntity, ButtonEntity):
"""Defines an AirGradient button."""
entity_description: AirGradientButtonEntityDescription
coordinator: AirGradientConfigCoordinator
def __init__(
self,
coordinator: AirGradientConfigCoordinator,
description: AirGradientButtonEntityDescription,
) -> None:
"""Initialize airgradient button."""
super().__init__(coordinator)
self.entity_description = description
self._attr_unique_id = f"{coordinator.serial_number}-{description.key}"
async def async_press(self) -> None:
"""Press the button."""
await self.entity_description.press_fn(self.coordinator.client)

View File

@@ -2,7 +2,9 @@
from typing import Any
from airgradient import AirGradientClient, AirGradientError
from airgradient import AirGradientClient, AirGradientError, ConfigurationControl
from awesomeversion import AwesomeVersion
from mashumaro import MissingField
import voluptuous as vol
from homeassistant.components import zeroconf
@@ -12,6 +14,8 @@ from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .const import DOMAIN
MIN_VERSION = AwesomeVersion("3.1.1")
class AirGradientConfigFlow(ConfigFlow, domain=DOMAIN):
"""AirGradient config flow."""
@@ -19,6 +23,14 @@ class AirGradientConfigFlow(ConfigFlow, domain=DOMAIN):
def __init__(self) -> None:
"""Initialize the config flow."""
self.data: dict[str, Any] = {}
self.client: AirGradientClient | None = None
async def set_configuration_source(self) -> None:
"""Set configuration source to local if it hasn't been set yet."""
assert self.client
config = await self.client.get_config()
if config.configuration_control is ConfigurationControl.NOT_INITIALIZED:
await self.client.set_configuration_control(ConfigurationControl.LOCAL)
async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo
@@ -30,9 +42,12 @@ class AirGradientConfigFlow(ConfigFlow, domain=DOMAIN):
await self.async_set_unique_id(discovery_info.properties["serialno"])
self._abort_if_unique_id_configured(updates={CONF_HOST: host})
if AwesomeVersion(discovery_info.properties["fw_ver"]) < MIN_VERSION:
return self.async_abort(reason="invalid_version")
session = async_get_clientsession(self.hass)
air_gradient = AirGradientClient(host, session=session)
await air_gradient.get_current_measures()
self.client = AirGradientClient(host, session=session)
await self.client.get_current_measures()
self.context["title_placeholders"] = {
"model": self.data[CONF_MODEL],
@@ -44,6 +59,7 @@ class AirGradientConfigFlow(ConfigFlow, domain=DOMAIN):
) -> ConfigFlowResult:
"""Confirm discovery."""
if user_input is not None:
await self.set_configuration_source()
return self.async_create_entry(
title=self.data[CONF_MODEL],
data={CONF_HOST: self.data[CONF_HOST]},
@@ -64,14 +80,17 @@ class AirGradientConfigFlow(ConfigFlow, domain=DOMAIN):
errors: dict[str, str] = {}
if user_input:
session = async_get_clientsession(self.hass)
air_gradient = AirGradientClient(user_input[CONF_HOST], session=session)
self.client = AirGradientClient(user_input[CONF_HOST], session=session)
try:
current_measures = await air_gradient.get_current_measures()
current_measures = await self.client.get_current_measures()
except AirGradientError:
errors["base"] = "cannot_connect"
except MissingField:
return self.async_abort(reason="invalid_version")
else:
await self.async_set_unique_id(current_measures.serial_number)
self._abort_if_unique_id_configured()
await self.set_configuration_source()
return self.async_create_entry(
title=current_measures.model,
data={CONF_HOST: user_input[CONF_HOST]},

View File

@@ -2,6 +2,14 @@
import logging
from airgradient import PmStandard
DOMAIN = "airgradient"
LOGGER = logging.getLogger(__package__)
PM_STANDARD = {
PmStandard.UGM3: "ugm3",
PmStandard.USAQI: "us_aqi",
}
PM_STANDARD_REVERSE = {v: k for k, v in PM_STANDARD.items()}

View File

@@ -1,21 +1,26 @@
"""Define an object to manage fetching AirGradient data."""
from __future__ import annotations
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.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import LOGGER
if TYPE_CHECKING:
from . import AirGradientConfigEntry
class AirGradientCoordinator[_DataT](DataUpdateCoordinator[_DataT]):
"""Class to manage fetching AirGradient data."""
_update_interval: timedelta
config_entry: ConfigEntry
config_entry: AirGradientConfigEntry
def __init__(self, hass: HomeAssistant, client: AirGradientClient) -> None:
"""Initialize coordinator."""

View File

@@ -1,5 +1,41 @@
{
"entity": {
"button": {
"co2_calibration": {
"default": "mdi:molecule-co2"
},
"led_bar_test": {
"default": "mdi:lightbulb-on-outline"
}
},
"number": {
"led_bar_brightness": {
"default": "mdi:brightness-percent"
},
"display_brightness": {
"default": "mdi:brightness-percent"
}
},
"select": {
"configuration_control": {
"default": "mdi:cloud-cog"
},
"display_temperature_unit": {
"default": "mdi:thermometer-lines"
},
"led_bar_mode": {
"default": "mdi:led-strip"
},
"nox_index_learning_time_offset": {
"default": "mdi:clock-outline"
},
"voc_index_learning_time_offset": {
"default": "mdi:clock-outline"
},
"co2_automatic_baseline_calibration": {
"default": "mdi:molecule-co2"
}
},
"sensor": {
"total_volatile_organic_component_index": {
"default": "mdi:molecule"
@@ -9,6 +45,32 @@
},
"pm003_count": {
"default": "mdi:blur"
},
"led_bar_brightness": {
"default": "mdi:brightness-percent"
},
"display_brightness": {
"default": "mdi:brightness-percent"
},
"display_temperature_unit": {
"default": "mdi:thermometer-lines"
},
"led_bar_mode": {
"default": "mdi:led-strip"
},
"nox_index_learning_time_offset": {
"default": "mdi:clock-outline"
},
"voc_index_learning_time_offset": {
"default": "mdi:clock-outline"
},
"co2_automatic_baseline_calibration": {
"default": "mdi:molecule-co2"
}
},
"switch": {
"post_data_to_airgradient": {
"default": "mdi:cogs"
}
}
}

View File

@@ -1,11 +1,11 @@
{
"domain": "airgradient",
"name": "Airgradient",
"name": "AirGradient",
"codeowners": ["@airgradienthq", "@joostlek"],
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/airgradient",
"integration_type": "device",
"iot_class": "local_polling",
"requirements": ["airgradient==0.4.2"],
"requirements": ["airgradient==0.6.1"],
"zeroconf": ["_airgradient._tcp.local."]
}

View File

@@ -0,0 +1,127 @@
"""Support for AirGradient number entities."""
from collections.abc import Awaitable, Callable
from dataclasses import dataclass
from airgradient import AirGradientClient, Config
from airgradient.models import ConfigurationControl
from homeassistant.components.number import (
DOMAIN as NUMBER_DOMAIN,
NumberEntity,
NumberEntityDescription,
)
from homeassistant.const import PERCENTAGE, EntityCategory
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirGradientConfigEntry
from .const import DOMAIN
from .coordinator import AirGradientConfigCoordinator
from .entity import AirGradientEntity
@dataclass(frozen=True, kw_only=True)
class AirGradientNumberEntityDescription(NumberEntityDescription):
"""Describes AirGradient number entity."""
value_fn: Callable[[Config], int]
set_value_fn: Callable[[AirGradientClient, int], Awaitable[None]]
DISPLAY_BRIGHTNESS = AirGradientNumberEntityDescription(
key="display_brightness",
translation_key="display_brightness",
entity_category=EntityCategory.CONFIG,
native_min_value=0,
native_max_value=100,
native_step=1,
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda config: config.display_brightness,
set_value_fn=lambda client, value: client.set_display_brightness(value),
)
LED_BAR_BRIGHTNESS = AirGradientNumberEntityDescription(
key="led_bar_brightness",
translation_key="led_bar_brightness",
entity_category=EntityCategory.CONFIG,
native_min_value=0,
native_max_value=100,
native_step=1,
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda config: config.led_bar_brightness,
set_value_fn=lambda client, value: client.set_led_bar_brightness(value),
)
async def async_setup_entry(
hass: HomeAssistant,
entry: AirGradientConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up AirGradient number entities based on a config entry."""
model = entry.runtime_data.measurement.data.model
coordinator = entry.runtime_data.config
added_entities = False
@callback
def _async_check_entities() -> None:
nonlocal added_entities
if (
coordinator.data.configuration_control is ConfigurationControl.LOCAL
and not added_entities
):
entities = []
if "I" in model:
entities.append(AirGradientNumber(coordinator, DISPLAY_BRIGHTNESS))
if "L" in model:
entities.append(AirGradientNumber(coordinator, LED_BAR_BRIGHTNESS))
async_add_entities(entities)
added_entities = True
elif (
coordinator.data.configuration_control is not ConfigurationControl.LOCAL
and added_entities
):
entity_registry = er.async_get(hass)
for entity_description in (DISPLAY_BRIGHTNESS, LED_BAR_BRIGHTNESS):
unique_id = f"{coordinator.serial_number}-{entity_description.key}"
if entity_id := entity_registry.async_get_entity_id(
NUMBER_DOMAIN, DOMAIN, unique_id
):
entity_registry.async_remove(entity_id)
added_entities = False
coordinator.async_add_listener(_async_check_entities)
_async_check_entities()
class AirGradientNumber(AirGradientEntity, NumberEntity):
"""Defines an AirGradient number entity."""
entity_description: AirGradientNumberEntityDescription
coordinator: AirGradientConfigCoordinator
def __init__(
self,
coordinator: AirGradientConfigCoordinator,
description: AirGradientNumberEntityDescription,
) -> None:
"""Initialize AirGradient number."""
super().__init__(coordinator)
self.entity_description = description
self._attr_unique_id = f"{coordinator.serial_number}-{description.key}"
@property
def native_value(self) -> int | None:
"""Return the state of the number."""
return self.entity_description.value_fn(self.coordinator.data)
async def async_set_native_value(self, value: float) -> None:
"""Set the selected value."""
await self.entity_description.set_value_fn(self.coordinator.client, int(value))
await self.coordinator.async_request_refresh()

View File

@@ -4,17 +4,21 @@ from collections.abc import Awaitable, Callable
from dataclasses import dataclass
from airgradient import AirGradientClient, Config
from airgradient.models import ConfigurationControl, TemperatureUnit
from airgradient.models import ConfigurationControl, LedBarMode, TemperatureUnit
from homeassistant.components.select import SelectEntity, SelectEntityDescription
from homeassistant.config_entries import ConfigEntry
from homeassistant.components.select import (
DOMAIN as SELECT_DOMAIN,
SelectEntity,
SelectEntityDescription,
)
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ServiceValidationError
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from .coordinator import AirGradientConfigCoordinator, AirGradientMeasurementCoordinator
from . import AirGradientConfigEntry
from .const import DOMAIN, PM_STANDARD, PM_STANDARD_REVERSE
from .coordinator import AirGradientConfigCoordinator
from .entity import AirGradientEntity
@@ -22,23 +26,26 @@ from .entity import AirGradientEntity
class AirGradientSelectEntityDescription(SelectEntityDescription):
"""Describes AirGradient select entity."""
value_fn: Callable[[Config], str]
value_fn: Callable[[Config], str | None]
set_value_fn: Callable[[AirGradientClient, str], Awaitable[None]]
requires_display: bool = False
CONFIG_CONTROL_ENTITY = AirGradientSelectEntityDescription(
key="configuration_control",
translation_key="configuration_control",
options=[x.value for x in ConfigurationControl],
options=[ConfigurationControl.CLOUD.value, ConfigurationControl.LOCAL.value],
entity_category=EntityCategory.CONFIG,
value_fn=lambda config: config.configuration_control,
value_fn=lambda config: (
config.configuration_control
if config.configuration_control is not ConfigurationControl.NOT_INITIALIZED
else None
),
set_value_fn=lambda client, value: client.set_configuration_control(
ConfigurationControl(value)
),
)
PROTECTED_SELECT_TYPES: tuple[AirGradientSelectEntityDescription, ...] = (
DISPLAY_SELECT_TYPES: tuple[AirGradientSelectEntityDescription, ...] = (
AirGradientSelectEntityDescription(
key="display_temperature_unit",
translation_key="display_temperature_unit",
@@ -48,35 +55,146 @@ PROTECTED_SELECT_TYPES: tuple[AirGradientSelectEntityDescription, ...] = (
set_value_fn=lambda client, value: client.set_temperature_unit(
TemperatureUnit(value)
),
requires_display=True,
),
AirGradientSelectEntityDescription(
key="display_pm_standard",
translation_key="display_pm_standard",
options=list(PM_STANDARD_REVERSE),
entity_category=EntityCategory.CONFIG,
value_fn=lambda config: PM_STANDARD.get(config.pm_standard),
set_value_fn=lambda client, value: client.set_pm_standard(
PM_STANDARD_REVERSE[value]
),
),
)
LED_BAR_ENTITIES: tuple[AirGradientSelectEntityDescription, ...] = (
AirGradientSelectEntityDescription(
key="led_bar_mode",
translation_key="led_bar_mode",
options=[x.value for x in LedBarMode],
entity_category=EntityCategory.CONFIG,
value_fn=lambda config: config.led_bar_mode,
set_value_fn=lambda client, value: client.set_led_bar_mode(LedBarMode(value)),
),
)
LEARNING_TIME_OFFSET_OPTIONS = [
"12",
"60",
"120",
"360",
"720",
]
ABC_DAYS = [
"1",
"8",
"30",
"90",
"180",
"0",
]
def _get_value(value: int, values: list[str]) -> str | None:
str_value = str(value)
return str_value if str_value in values else None
CONTROL_ENTITIES: tuple[AirGradientSelectEntityDescription, ...] = (
AirGradientSelectEntityDescription(
key="nox_index_learning_time_offset",
translation_key="nox_index_learning_time_offset",
options=LEARNING_TIME_OFFSET_OPTIONS,
entity_category=EntityCategory.CONFIG,
value_fn=lambda config: _get_value(
config.nox_learning_offset, LEARNING_TIME_OFFSET_OPTIONS
),
set_value_fn=lambda client, value: client.set_nox_learning_offset(int(value)),
),
AirGradientSelectEntityDescription(
key="voc_index_learning_time_offset",
translation_key="voc_index_learning_time_offset",
options=LEARNING_TIME_OFFSET_OPTIONS,
entity_category=EntityCategory.CONFIG,
value_fn=lambda config: _get_value(
config.tvoc_learning_offset, LEARNING_TIME_OFFSET_OPTIONS
),
set_value_fn=lambda client, value: client.set_tvoc_learning_offset(int(value)),
),
AirGradientSelectEntityDescription(
key="co2_automatic_baseline_calibration",
translation_key="co2_automatic_baseline_calibration",
options=ABC_DAYS,
entity_category=EntityCategory.CONFIG,
value_fn=lambda config: _get_value(
config.co2_automatic_baseline_calibration_days, ABC_DAYS
),
set_value_fn=lambda client,
value: client.set_co2_automatic_baseline_calibration(int(value)),
),
)
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AirGradientConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up AirGradient select entities based on a config entry."""
config_coordinator: AirGradientConfigCoordinator = hass.data[DOMAIN][
entry.entry_id
]["config"]
measurement_coordinator: AirGradientMeasurementCoordinator = hass.data[DOMAIN][
entry.entry_id
]["measurement"]
coordinator = entry.runtime_data.config
measurement_coordinator = entry.runtime_data.measurement
entities = [AirGradientSelect(config_coordinator, CONFIG_CONTROL_ENTITY)]
async_add_entities([AirGradientSelect(coordinator, CONFIG_CONTROL_ENTITY)])
model = measurement_coordinator.data.model
added_entities = False
@callback
def _async_check_entities() -> None:
nonlocal added_entities
entities.extend(
AirGradientProtectedSelect(config_coordinator, description)
for description in PROTECTED_SELECT_TYPES
if (
description.requires_display
and measurement_coordinator.data.model.startswith("I")
)
)
coordinator.data.configuration_control is ConfigurationControl.LOCAL
and not added_entities
):
entities: list[AirGradientSelect] = [
AirGradientSelect(coordinator, description)
for description in CONTROL_ENTITIES
]
if "I" in model:
entities.extend(
AirGradientSelect(coordinator, description)
for description in DISPLAY_SELECT_TYPES
)
if "L" in model:
entities.extend(
AirGradientSelect(coordinator, description)
for description in LED_BAR_ENTITIES
)
async_add_entities(entities)
async_add_entities(entities)
added_entities = True
elif (
coordinator.data.configuration_control is not ConfigurationControl.LOCAL
and added_entities
):
entity_registry = er.async_get(hass)
for entity_description in (
DISPLAY_SELECT_TYPES + LED_BAR_ENTITIES + CONTROL_ENTITIES
):
unique_id = f"{coordinator.serial_number}-{entity_description.key}"
if entity_id := entity_registry.async_get_entity_id(
SELECT_DOMAIN, DOMAIN, unique_id
):
entity_registry.async_remove(entity_id)
added_entities = False
coordinator.async_add_listener(_async_check_entities)
_async_check_entities()
class AirGradientSelect(AirGradientEntity, SelectEntity):
@@ -96,7 +214,7 @@ class AirGradientSelect(AirGradientEntity, SelectEntity):
self._attr_unique_id = f"{coordinator.serial_number}-{description.key}"
@property
def current_option(self) -> str:
def current_option(self) -> str | None:
"""Return the state of the select."""
return self.entity_description.value_fn(self.coordinator.data)
@@ -104,19 +222,3 @@ class AirGradientSelect(AirGradientEntity, SelectEntity):
"""Change the selected option."""
await self.entity_description.set_value_fn(self.coordinator.client, option)
await self.coordinator.async_request_refresh()
class AirGradientProtectedSelect(AirGradientSelect):
"""Defines a protected AirGradient select entity."""
async def async_select_option(self, option: str) -> None:
"""Change the selected option."""
if (
self.coordinator.data.configuration_control
is not ConfigurationControl.LOCAL
):
raise ServiceValidationError(
translation_domain=DOMAIN,
translation_key="no_local_configuration",
)
await super().async_select_option(option)

View File

@@ -3,7 +3,13 @@
from collections.abc import Callable
from dataclasses import dataclass
from airgradient.models import Measures
from airgradient import Config
from airgradient.models import (
ConfigurationControl,
LedBarMode,
Measures,
TemperatureUnit,
)
from homeassistant.components.sensor import (
SensorDeviceClass,
@@ -11,7 +17,6 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
CONCENTRATION_PARTS_PER_MILLION,
@@ -19,60 +24,69 @@ from homeassistant.const import (
SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
EntityCategory,
UnitOfTemperature,
UnitOfTime,
)
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from .const import DOMAIN
from .coordinator import AirGradientMeasurementCoordinator
from . import AirGradientConfigEntry
from .const import PM_STANDARD, PM_STANDARD_REVERSE
from .coordinator import AirGradientConfigCoordinator, AirGradientMeasurementCoordinator
from .entity import AirGradientEntity
@dataclass(frozen=True, kw_only=True)
class AirGradientSensorEntityDescription(SensorEntityDescription):
"""Describes AirGradient sensor entity."""
class AirGradientMeasurementSensorEntityDescription(SensorEntityDescription):
"""Describes AirGradient measurement sensor entity."""
value_fn: Callable[[Measures], StateType]
SENSOR_TYPES: tuple[AirGradientSensorEntityDescription, ...] = (
AirGradientSensorEntityDescription(
@dataclass(frozen=True, kw_only=True)
class AirGradientConfigSensorEntityDescription(SensorEntityDescription):
"""Describes AirGradient config sensor entity."""
value_fn: Callable[[Config], StateType]
MEASUREMENT_SENSOR_TYPES: tuple[AirGradientMeasurementSensorEntityDescription, ...] = (
AirGradientMeasurementSensorEntityDescription(
key="pm01",
device_class=SensorDeviceClass.PM1,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda status: status.pm01,
),
AirGradientSensorEntityDescription(
AirGradientMeasurementSensorEntityDescription(
key="pm02",
device_class=SensorDeviceClass.PM25,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda status: status.pm02,
),
AirGradientSensorEntityDescription(
AirGradientMeasurementSensorEntityDescription(
key="pm10",
device_class=SensorDeviceClass.PM10,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda status: status.pm10,
),
AirGradientSensorEntityDescription(
AirGradientMeasurementSensorEntityDescription(
key="temperature",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda status: status.ambient_temperature,
),
AirGradientSensorEntityDescription(
AirGradientMeasurementSensorEntityDescription(
key="humidity",
device_class=SensorDeviceClass.HUMIDITY,
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda status: status.relative_humidity,
),
AirGradientSensorEntityDescription(
AirGradientMeasurementSensorEntityDescription(
key="signal_strength",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
@@ -81,32 +95,33 @@ SENSOR_TYPES: tuple[AirGradientSensorEntityDescription, ...] = (
entity_registry_enabled_default=False,
value_fn=lambda status: status.signal_strength,
),
AirGradientSensorEntityDescription(
AirGradientMeasurementSensorEntityDescription(
key="tvoc",
translation_key="total_volatile_organic_component_index",
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda status: status.total_volatile_organic_component_index,
),
AirGradientSensorEntityDescription(
AirGradientMeasurementSensorEntityDescription(
key="nitrogen_index",
translation_key="nitrogen_index",
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda status: status.nitrogen_index,
),
AirGradientSensorEntityDescription(
AirGradientMeasurementSensorEntityDescription(
key="co2",
device_class=SensorDeviceClass.CO2,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda status: status.rco2,
),
AirGradientSensorEntityDescription(
AirGradientMeasurementSensorEntityDescription(
key="pm003",
translation_key="pm003_count",
native_unit_of_measurement="particles/dL",
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda status: status.pm003_count,
),
AirGradientSensorEntityDescription(
AirGradientMeasurementSensorEntityDescription(
key="nox_raw",
translation_key="raw_nitrogen",
native_unit_of_measurement="ticks",
@@ -114,7 +129,7 @@ SENSOR_TYPES: tuple[AirGradientSensorEntityDescription, ...] = (
entity_registry_enabled_default=False,
value_fn=lambda status: status.raw_nitrogen,
),
AirGradientSensorEntityDescription(
AirGradientMeasurementSensorEntityDescription(
key="tvoc_raw",
translation_key="raw_total_volatile_organic_component",
native_unit_of_measurement="ticks",
@@ -124,17 +139,90 @@ SENSOR_TYPES: tuple[AirGradientSensorEntityDescription, ...] = (
),
)
CONFIG_SENSOR_TYPES: tuple[AirGradientConfigSensorEntityDescription, ...] = (
AirGradientConfigSensorEntityDescription(
key="co2_automatic_baseline_calibration_days",
translation_key="co2_automatic_baseline_calibration_days",
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.DAYS,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda config: config.co2_automatic_baseline_calibration_days,
),
AirGradientConfigSensorEntityDescription(
key="nox_learning_offset",
translation_key="nox_learning_offset",
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.DAYS,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda config: config.nox_learning_offset,
),
AirGradientConfigSensorEntityDescription(
key="tvoc_learning_offset",
translation_key="tvoc_learning_offset",
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.DAYS,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda config: config.tvoc_learning_offset,
),
)
CONFIG_LED_BAR_SENSOR_TYPES: tuple[AirGradientConfigSensorEntityDescription, ...] = (
AirGradientConfigSensorEntityDescription(
key="led_bar_mode",
translation_key="led_bar_mode",
device_class=SensorDeviceClass.ENUM,
options=[x.value for x in LedBarMode],
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda config: config.led_bar_mode,
),
AirGradientConfigSensorEntityDescription(
key="led_bar_brightness",
translation_key="led_bar_brightness",
native_unit_of_measurement=PERCENTAGE,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda config: config.led_bar_brightness,
),
)
CONFIG_DISPLAY_SENSOR_TYPES: tuple[AirGradientConfigSensorEntityDescription, ...] = (
AirGradientConfigSensorEntityDescription(
key="display_temperature_unit",
translation_key="display_temperature_unit",
device_class=SensorDeviceClass.ENUM,
options=[x.value for x in TemperatureUnit],
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda config: config.temperature_unit,
),
AirGradientConfigSensorEntityDescription(
key="display_pm_standard",
translation_key="display_pm_standard",
device_class=SensorDeviceClass.ENUM,
options=list(PM_STANDARD_REVERSE),
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda config: PM_STANDARD.get(config.pm_standard),
),
AirGradientConfigSensorEntityDescription(
key="display_brightness",
translation_key="display_brightness",
native_unit_of_measurement=PERCENTAGE,
entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda config: config.display_brightness,
),
)
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AirGradientConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up AirGradient sensor entities based on a config entry."""
coordinator: AirGradientMeasurementCoordinator = hass.data[DOMAIN][entry.entry_id][
"measurement"
]
coordinator = entry.runtime_data.measurement
listener: Callable[[], None] | None = None
not_setup: set[AirGradientSensorEntityDescription] = set(SENSOR_TYPES)
not_setup: set[AirGradientMeasurementSensorEntityDescription] = set(
MEASUREMENT_SENSOR_TYPES
)
@callback
def add_entities() -> None:
@@ -147,7 +235,7 @@ async def async_setup_entry(
if description.value_fn(coordinator.data) is None:
not_setup.add(description)
else:
sensors.append(AirGradientSensor(coordinator, description))
sensors.append(AirGradientMeasurementSensor(coordinator, description))
if sensors:
async_add_entities(sensors)
@@ -159,17 +247,33 @@ async def async_setup_entry(
add_entities()
entities = [
AirGradientConfigSensor(entry.runtime_data.config, description)
for description in CONFIG_SENSOR_TYPES
]
if "L" in coordinator.data.model:
entities.extend(
AirGradientConfigSensor(entry.runtime_data.config, description)
for description in CONFIG_LED_BAR_SENSOR_TYPES
)
if "I" in coordinator.data.model:
entities.extend(
AirGradientConfigSensor(entry.runtime_data.config, description)
for description in CONFIG_DISPLAY_SENSOR_TYPES
)
async_add_entities(entities)
class AirGradientSensor(AirGradientEntity, SensorEntity):
class AirGradientMeasurementSensor(AirGradientEntity, SensorEntity):
"""Defines an AirGradient sensor."""
entity_description: AirGradientSensorEntityDescription
entity_description: AirGradientMeasurementSensorEntityDescription
coordinator: AirGradientMeasurementCoordinator
def __init__(
self,
coordinator: AirGradientMeasurementCoordinator,
description: AirGradientSensorEntityDescription,
description: AirGradientMeasurementSensorEntityDescription,
) -> None:
"""Initialize airgradient sensor."""
super().__init__(coordinator)
@@ -180,3 +284,28 @@ class AirGradientSensor(AirGradientEntity, SensorEntity):
def native_value(self) -> StateType:
"""Return the state of the sensor."""
return self.entity_description.value_fn(self.coordinator.data)
class AirGradientConfigSensor(AirGradientEntity, SensorEntity):
"""Defines an AirGradient sensor."""
entity_description: AirGradientConfigSensorEntityDescription
coordinator: AirGradientConfigCoordinator
def __init__(
self,
coordinator: AirGradientConfigCoordinator,
description: AirGradientConfigSensorEntityDescription,
) -> None:
"""Initialize airgradient sensor."""
super().__init__(coordinator)
self.entity_description = description
self._attr_unique_id = f"{coordinator.serial_number}-{description.key}"
self._attr_entity_registry_enabled_default = (
coordinator.data.configuration_control is not ConfigurationControl.LOCAL
)
@property
def native_value(self) -> StateType:
"""Return the state of the sensor."""
return self.entity_description.value_fn(self.coordinator.data)

View File

@@ -15,7 +15,9 @@
}
},
"abort": {
"already_configured": "[%key:common::config_flow::abort::already_configured_device%]"
"already_configured": "[%key:common::config_flow::abort::already_configured_device%]",
"already_in_progress": "[%key:common::config_flow::abort::already_in_progress%]",
"invalid_version": "This firmware version is unsupported. Please upgrade the firmware of the device to at least version 3.1.1."
},
"error": {
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
@@ -23,13 +25,28 @@
}
},
"entity": {
"button": {
"co2_calibration": {
"name": "Calibrate CO2 sensor"
},
"led_bar_test": {
"name": "Test LED bar"
}
},
"number": {
"led_bar_brightness": {
"name": "LED bar brightness"
},
"display_brightness": {
"name": "Display brightness"
}
},
"select": {
"configuration_control": {
"name": "Configuration source",
"state": {
"cloud": "Cloud",
"local": "Local",
"both": "Both"
"local": "Local"
}
},
"display_temperature_unit": {
@@ -38,29 +55,112 @@
"c": "Celsius",
"f": "Fahrenheit"
}
},
"display_pm_standard": {
"name": "Display PM standard",
"state": {
"ugm3": "µg/m³",
"us_aqi": "US AQI"
}
},
"led_bar_mode": {
"name": "LED bar mode",
"state": {
"off": "Off",
"co2": "Carbon dioxide",
"pm": "Particulate matter"
}
},
"nox_index_learning_time_offset": {
"name": "NOx index learning offset",
"state": {
"12": "12 hours",
"60": "60 hours",
"120": "120 hours",
"360": "360 hours",
"720": "720 hours"
}
},
"voc_index_learning_time_offset": {
"name": "VOC index learning offset",
"state": {
"12": "[%key:component::airgradient::entity::select::nox_index_learning_time_offset::state::12%]",
"60": "[%key:component::airgradient::entity::select::nox_index_learning_time_offset::state::60%]",
"120": "[%key:component::airgradient::entity::select::nox_index_learning_time_offset::state::120%]",
"360": "[%key:component::airgradient::entity::select::nox_index_learning_time_offset::state::360%]",
"720": "[%key:component::airgradient::entity::select::nox_index_learning_time_offset::state::720%]"
}
},
"co2_automatic_baseline_calibration": {
"name": "CO2 automatic baseline duration",
"state": {
"1": "1 day",
"8": "8 days",
"30": "30 days",
"90": "90 days",
"180": "180 days",
"0": "[%key:common::state::off%]"
}
}
},
"sensor": {
"total_volatile_organic_component_index": {
"name": "Total VOC index"
"name": "VOC index"
},
"nitrogen_index": {
"name": "Nitrogen index"
"name": "NOx index"
},
"pm003_count": {
"name": "PM0.3 count"
"name": "PM0.3"
},
"raw_total_volatile_organic_component": {
"name": "Raw total VOC"
"name": "Raw VOC"
},
"raw_nitrogen": {
"name": "Raw nitrogen"
"name": "Raw NOx"
},
"display_pm_standard": {
"name": "[%key:component::airgradient::entity::select::display_pm_standard::name%]",
"state": {
"ugm3": "[%key:component::airgradient::entity::select::display_pm_standard::state::ugm3%]",
"us_aqi": "[%key:component::airgradient::entity::select::display_pm_standard::state::us_aqi%]"
}
},
"co2_automatic_baseline_calibration_days": {
"name": "Carbon dioxide automatic baseline calibration"
},
"nox_learning_offset": {
"name": "[%key:component::airgradient::entity::select::nox_index_learning_time_offset::name%]"
},
"tvoc_learning_offset": {
"name": "[%key:component::airgradient::entity::select::voc_index_learning_time_offset::name%]"
},
"led_bar_mode": {
"name": "[%key:component::airgradient::entity::select::led_bar_mode::name%]",
"state": {
"off": "[%key:component::airgradient::entity::select::led_bar_mode::state::off%]",
"co2": "[%key:component::airgradient::entity::select::led_bar_mode::state::co2%]",
"pm": "[%key:component::airgradient::entity::select::led_bar_mode::state::pm%]"
}
},
"led_bar_brightness": {
"name": "[%key:component::airgradient::entity::number::led_bar_brightness::name%]"
},
"display_temperature_unit": {
"name": "[%key:component::airgradient::entity::select::display_temperature_unit::name%]",
"state": {
"c": "[%key:component::airgradient::entity::select::display_temperature_unit::state::c%]",
"f": "[%key:component::airgradient::entity::select::display_temperature_unit::state::f%]"
}
},
"display_brightness": {
"name": "[%key:component::airgradient::entity::number::display_brightness::name%]"
}
},
"switch": {
"post_data_to_airgradient": {
"name": "Post data to Airgradient"
}
}
},
"exceptions": {
"no_local_configuration": {
"message": "Device should be configured with local configuration to be able to change settings."
}
}
}

View File

@@ -0,0 +1,110 @@
"""Support for AirGradient switch entities."""
from collections.abc import Awaitable, Callable
from dataclasses import dataclass
from typing import Any
from airgradient import AirGradientClient, Config
from airgradient.models import ConfigurationControl
from homeassistant.components.switch import (
DOMAIN as SWITCH_DOMAIN,
SwitchEntity,
SwitchEntityDescription,
)
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirGradientConfigEntry
from .const import DOMAIN
from .coordinator import AirGradientConfigCoordinator
from .entity import AirGradientEntity
@dataclass(frozen=True, kw_only=True)
class AirGradientSwitchEntityDescription(SwitchEntityDescription):
"""Describes AirGradient switch entity."""
value_fn: Callable[[Config], bool]
set_value_fn: Callable[[AirGradientClient, bool], Awaitable[None]]
POST_DATA_TO_AIRGRADIENT = AirGradientSwitchEntityDescription(
key="post_data_to_airgradient",
translation_key="post_data_to_airgradient",
entity_category=EntityCategory.CONFIG,
value_fn=lambda config: config.post_data_to_airgradient,
set_value_fn=lambda client, value: client.enable_sharing_data(enable=value),
)
async def async_setup_entry(
hass: HomeAssistant,
entry: AirGradientConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up AirGradient switch entities based on a config entry."""
coordinator = entry.runtime_data.config
added_entities = False
@callback
def _async_check_entities() -> None:
nonlocal added_entities
if (
coordinator.data.configuration_control is ConfigurationControl.LOCAL
and not added_entities
):
async_add_entities(
[AirGradientSwitch(coordinator, POST_DATA_TO_AIRGRADIENT)]
)
added_entities = True
elif (
coordinator.data.configuration_control is not ConfigurationControl.LOCAL
and added_entities
):
entity_registry = er.async_get(hass)
unique_id = f"{coordinator.serial_number}-{POST_DATA_TO_AIRGRADIENT.key}"
if entity_id := entity_registry.async_get_entity_id(
SWITCH_DOMAIN, DOMAIN, unique_id
):
entity_registry.async_remove(entity_id)
added_entities = False
coordinator.async_add_listener(_async_check_entities)
_async_check_entities()
class AirGradientSwitch(AirGradientEntity, SwitchEntity):
"""Defines an AirGradient switch entity."""
entity_description: AirGradientSwitchEntityDescription
coordinator: AirGradientConfigCoordinator
def __init__(
self,
coordinator: AirGradientConfigCoordinator,
description: AirGradientSwitchEntityDescription,
) -> None:
"""Initialize AirGradient switch."""
super().__init__(coordinator)
self.entity_description = description
self._attr_unique_id = f"{coordinator.serial_number}-{description.key}"
@property
def is_on(self) -> bool:
"""Return the state of the switch."""
return self.entity_description.value_fn(self.coordinator.data)
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the switch on."""
await self.entity_description.set_value_fn(self.coordinator.client, True)
await self.coordinator.async_request_refresh()
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn the switch off."""
await self.entity_description.set_value_fn(self.coordinator.client, False)
await self.coordinator.async_request_refresh()

View File

@@ -14,6 +14,7 @@ ATTR_API_POLLUTANT = "Pollutant"
ATTR_API_REPORT_DATE = "DateObserved"
ATTR_API_REPORT_HOUR = "HourObserved"
ATTR_API_REPORT_TZ = "LocalTimeZone"
ATTR_API_REPORT_TZINFO = "LocalTimeZoneInfo"
ATTR_API_STATE = "StateCode"
ATTR_API_STATION = "ReportingArea"
ATTR_API_STATION_LATITUDE = "Latitude"

View File

@@ -12,6 +12,7 @@ from pyairnow.errors import AirNowError
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from homeassistant.util import dt as dt_util
from .const import (
ATTR_API_AQI,
@@ -26,6 +27,7 @@ from .const import (
ATTR_API_REPORT_DATE,
ATTR_API_REPORT_HOUR,
ATTR_API_REPORT_TZ,
ATTR_API_REPORT_TZINFO,
ATTR_API_STATE,
ATTR_API_STATION,
ATTR_API_STATION_LATITUDE,
@@ -96,7 +98,9 @@ class AirNowDataUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]):
# Copy Report Details
data[ATTR_API_REPORT_DATE] = obv[ATTR_API_REPORT_DATE]
data[ATTR_API_REPORT_HOUR] = obv[ATTR_API_REPORT_HOUR]
data[ATTR_API_REPORT_TZ] = obv[ATTR_API_REPORT_TZ]
data[ATTR_API_REPORT_TZINFO] = await dt_util.async_get_time_zone(
obv[ATTR_API_REPORT_TZ]
)
# Copy Station Details
data[ATTR_API_STATE] = obv[ATTR_API_STATE]

View File

@@ -23,7 +23,6 @@ from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from homeassistant.util.dt import get_time_zone
from . import AirNowConfigEntry, AirNowDataUpdateCoordinator
from .const import (
@@ -35,7 +34,7 @@ from .const import (
ATTR_API_PM25,
ATTR_API_REPORT_DATE,
ATTR_API_REPORT_HOUR,
ATTR_API_REPORT_TZ,
ATTR_API_REPORT_TZINFO,
ATTR_API_STATION,
ATTR_API_STATION_LATITUDE,
ATTR_API_STATION_LONGITUDE,
@@ -84,7 +83,7 @@ SENSOR_TYPES: tuple[AirNowEntityDescription, ...] = (
f"{data[ATTR_API_REPORT_DATE]} {data[ATTR_API_REPORT_HOUR]}",
"%Y-%m-%d %H",
)
.replace(tzinfo=get_time_zone(data[ATTR_API_REPORT_TZ]))
.replace(tzinfo=data[ATTR_API_REPORT_TZINFO])
.isoformat(),
},
),

View File

@@ -7,15 +7,15 @@ from homeassistant.const import CONF_HOST, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady
from .const import DOMAIN
from .coordinator import AirtouchDataUpdateCoordinator
PLATFORMS = [Platform.CLIMATE]
type AirTouch4ConfigEntry = ConfigEntry[AirtouchDataUpdateCoordinator]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: AirTouch4ConfigEntry) -> bool:
"""Set up AirTouch4 from a config entry."""
hass.data.setdefault(DOMAIN, {})
host = entry.data[CONF_HOST]
airtouch = AirTouch(host)
await airtouch.UpdateInfo()
@@ -24,18 +24,13 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
raise ConfigEntryNotReady
coordinator = AirtouchDataUpdateCoordinator(hass, airtouch)
await coordinator.async_config_entry_first_refresh()
hass.data[DOMAIN][entry.entry_id] = coordinator
entry.runtime_data = coordinator
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: AirTouch4ConfigEntry) -> bool:
"""Unload a config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)

View File

@@ -16,13 +16,13 @@ from homeassistant.components.climate import (
ClimateEntityFeature,
HVACMode,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, UnitOfTemperature
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from . import AirTouch4ConfigEntry
from .const import DOMAIN
AT_TO_HA_STATE = {
@@ -63,11 +63,11 @@ _LOGGER = logging.getLogger(__name__)
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: AirTouch4ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Airtouch 4."""
coordinator = hass.data[DOMAIN][config_entry.entry_id]
coordinator = config_entry.runtime_data
info = coordinator.data
entities: list[ClimateEntity] = [
AirtouchGroup(coordinator, group["group_number"], info)

View File

@@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/airtouch5",
"iot_class": "local_push",
"loggers": ["airtouch5py"],
"requirements": ["airtouch5py==0.2.8"]
"requirements": ["airtouch5py==0.2.10"]
}

View File

@@ -17,7 +17,6 @@ from homeassistant.helpers import (
entity_registry as er,
)
from .const import DOMAIN
from .coordinator import AirzoneUpdateCoordinator
PLATFORMS: list[Platform] = [
@@ -30,10 +29,12 @@ PLATFORMS: list[Platform] = [
_LOGGER = logging.getLogger(__name__)
type AirzoneConfigEntry = ConfigEntry[AirzoneUpdateCoordinator]
async def _async_migrate_unique_ids(
hass: HomeAssistant,
entry: ConfigEntry,
entry: AirzoneConfigEntry,
coordinator: AirzoneUpdateCoordinator,
) -> None:
"""Migrate entities when the mac address gets discovered."""
@@ -71,7 +72,7 @@ async def _async_migrate_unique_ids(
await er.async_migrate_entries(hass, entry.entry_id, _async_migrator)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: AirzoneConfigEntry) -> bool:
"""Set up Airzone from a config entry."""
options = ConnectionOptions(
entry.data[CONF_HOST],
@@ -84,16 +85,13 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
await coordinator.async_config_entry_first_refresh()
await _async_migrate_unique_ids(hass, entry, coordinator)
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
entry.runtime_data = coordinator
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: AirzoneConfigEntry) -> bool:
"""Unload a config entry."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)

View File

@@ -25,7 +25,7 @@ from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from . import AirzoneConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .entity import AirzoneEntity, AirzoneSystemEntity, AirzoneZoneEntity
@@ -75,38 +75,61 @@ ZONE_BINARY_SENSOR_TYPES: Final[tuple[AirzoneBinarySensorEntityDescription, ...]
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AirzoneConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add Airzone binary sensors from a config_entry."""
coordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
binary_sensors: list[AirzoneBinarySensor] = [
AirzoneSystemBinarySensor(
coordinator,
description,
entry,
system_id,
system_data,
)
for system_id, system_data in coordinator.data[AZD_SYSTEMS].items()
for description in SYSTEM_BINARY_SENSOR_TYPES
if description.key in system_data
]
added_systems: set[str] = set()
added_zones: set[str] = set()
binary_sensors.extend(
AirzoneZoneBinarySensor(
coordinator,
description,
entry,
system_zone_id,
zone_data,
)
for system_zone_id, zone_data in coordinator.data[AZD_ZONES].items()
for description in ZONE_BINARY_SENSOR_TYPES
if description.key in zone_data
)
def _async_entity_listener() -> None:
"""Handle additions of binary sensors."""
async_add_entities(binary_sensors)
entities: list[AirzoneBinarySensor] = []
systems_data = coordinator.data.get(AZD_SYSTEMS, {})
received_systems = set(systems_data)
new_systems = received_systems - added_systems
if new_systems:
entities.extend(
AirzoneSystemBinarySensor(
coordinator,
description,
entry,
system_id,
systems_data.get(system_id),
)
for system_id in new_systems
for description in SYSTEM_BINARY_SENSOR_TYPES
if description.key in systems_data.get(system_id)
)
added_systems.update(new_systems)
zones_data = coordinator.data.get(AZD_ZONES, {})
received_zones = set(zones_data)
new_zones = received_zones - added_zones
if new_zones:
entities.extend(
AirzoneZoneBinarySensor(
coordinator,
description,
entry,
system_zone_id,
zones_data.get(system_zone_id),
)
for system_zone_id in new_zones
for description in ZONE_BINARY_SENSOR_TYPES
if description.key in zones_data.get(system_zone_id)
)
added_zones.update(new_zones)
async_add_entities(entities)
entry.async_on_unload(coordinator.async_add_listener(_async_entity_listener))
_async_entity_listener()
class AirzoneBinarySensor(AirzoneEntity, BinarySensorEntity):

View File

@@ -50,7 +50,8 @@ from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import API_TEMPERATURE_STEP, DOMAIN, TEMP_UNIT_LIB_TO_HASS
from . import AirzoneConfigEntry
from .const import API_TEMPERATURE_STEP, TEMP_UNIT_LIB_TO_HASS
from .coordinator import AirzoneUpdateCoordinator
from .entity import AirzoneZoneEntity
@@ -97,19 +98,35 @@ HVAC_MODE_HASS_TO_LIB: Final[dict[HVACMode, OperationMode]] = {
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AirzoneConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add Airzone sensors from a config_entry."""
coordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
AirzoneClimate(
coordinator,
entry,
system_zone_id,
zone_data,
)
for system_zone_id, zone_data in coordinator.data[AZD_ZONES].items()
)
"""Add Airzone climate from a config_entry."""
coordinator = entry.runtime_data
added_zones: set[str] = set()
def _async_entity_listener() -> None:
"""Handle additions of climate."""
zones_data = coordinator.data.get(AZD_ZONES, {})
received_zones = set(zones_data)
new_zones = received_zones - added_zones
if new_zones:
async_add_entities(
AirzoneClimate(
coordinator,
entry,
system_zone_id,
zones_data.get(system_zone_id),
)
for system_zone_id in new_zones
)
added_zones.update(new_zones)
entry.async_on_unload(coordinator.async_add_listener(_async_entity_listener))
_async_entity_listener()
class AirzoneClimate(AirzoneZoneEntity, ClimateEntity):

View File

@@ -7,12 +7,10 @@ from typing import Any
from aioairzone.const import API_MAC, AZD_MAC
from homeassistant.components.diagnostics.util import async_redact_data
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_UNIQUE_ID
from homeassistant.core import HomeAssistant
from .const import DOMAIN
from .coordinator import AirzoneUpdateCoordinator
from . import AirzoneConfigEntry
TO_REDACT_API = [
API_MAC,
@@ -28,10 +26,10 @@ TO_REDACT_COORD = [
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, config_entry: ConfigEntry
hass: HomeAssistant, config_entry: AirzoneConfigEntry
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
coordinator: AirzoneUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
coordinator = config_entry.runtime_data
return {
"api_data": async_redact_data(coordinator.airzone.raw_data(), TO_REDACT_API),

View File

@@ -31,6 +31,7 @@ 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
@@ -53,7 +54,7 @@ class AirzoneSystemEntity(AirzoneEntity):
def __init__(
self,
coordinator: AirzoneUpdateCoordinator,
entry: ConfigEntry,
entry: AirzoneConfigEntry,
system_data: dict[str, Any],
) -> None:
"""Initialize."""

View File

@@ -11,5 +11,5 @@
"documentation": "https://www.home-assistant.io/integrations/airzone",
"iot_class": "local_polling",
"loggers": ["aioairzone"],
"requirements": ["aioairzone==0.7.6"]
"requirements": ["aioairzone==0.8.0"]
}

View File

@@ -22,7 +22,7 @@ from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from . import AirzoneConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .entity import AirzoneEntity, AirzoneZoneEntity
@@ -79,23 +79,38 @@ ZONE_SELECT_TYPES: Final[tuple[AirzoneSelectDescription, ...]] = (
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AirzoneConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add Airzone sensors from a config_entry."""
coordinator = hass.data[DOMAIN][entry.entry_id]
"""Add Airzone select from a config_entry."""
coordinator = entry.runtime_data
async_add_entities(
AirzoneZoneSelect(
coordinator,
description,
entry,
system_zone_id,
zone_data,
)
for description in ZONE_SELECT_TYPES
for system_zone_id, zone_data in coordinator.data[AZD_ZONES].items()
if description.key in zone_data
)
added_zones: set[str] = set()
def _async_entity_listener() -> None:
"""Handle additions of select."""
zones_data = coordinator.data.get(AZD_ZONES, {})
received_zones = set(zones_data)
new_zones = received_zones - added_zones
if new_zones:
async_add_entities(
AirzoneZoneSelect(
coordinator,
description,
entry,
system_zone_id,
zones_data.get(system_zone_id),
)
for system_zone_id in new_zones
for description in ZONE_SELECT_TYPES
if description.key in zones_data.get(system_zone_id)
)
added_zones.update(new_zones)
entry.async_on_unload(coordinator.async_add_listener(_async_entity_listener))
_async_entity_listener()
class AirzoneBaseSelect(AirzoneEntity, SelectEntity):

View File

@@ -30,7 +30,8 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN, TEMP_UNIT_LIB_TO_HASS
from . import AirzoneConfigEntry
from .const import TEMP_UNIT_LIB_TO_HASS
from .coordinator import AirzoneUpdateCoordinator
from .entity import (
AirzoneEntity,
@@ -77,26 +78,44 @@ ZONE_SENSOR_TYPES: Final[tuple[SensorEntityDescription, ...]] = (
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AirzoneConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add Airzone sensors from a config_entry."""
coordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
sensors: list[AirzoneSensor] = [
AirzoneZoneSensor(
coordinator,
description,
entry,
system_zone_id,
zone_data,
)
for system_zone_id, zone_data in coordinator.data[AZD_ZONES].items()
for description in ZONE_SENSOR_TYPES
if description.key in zone_data
]
added_zones: set[str] = set()
def _async_entity_listener() -> None:
"""Handle additions of sensors."""
entities: list[AirzoneSensor] = []
zones_data = coordinator.data.get(AZD_ZONES, {})
received_zones = set(zones_data)
new_zones = received_zones - added_zones
if new_zones:
entities.extend(
AirzoneZoneSensor(
coordinator,
description,
entry,
system_zone_id,
zones_data.get(system_zone_id),
)
for system_zone_id in new_zones
for description in ZONE_SENSOR_TYPES
if description.key in zones_data.get(system_zone_id)
)
added_zones.update(new_zones)
async_add_entities(entities)
entities: list[AirzoneSensor] = []
if AZD_HOT_WATER in coordinator.data:
sensors.extend(
entities.extend(
AirzoneHotWaterSensor(
coordinator,
description,
@@ -107,7 +126,7 @@ async def async_setup_entry(
)
if AZD_WEBSERVER in coordinator.data:
sensors.extend(
entities.extend(
AirzoneWebServerSensor(
coordinator,
description,
@@ -117,7 +136,10 @@ async def async_setup_entry(
if description.key in coordinator.data[AZD_WEBSERVER]
)
async_add_entities(sensors)
async_add_entities(entities)
entry.async_on_unload(coordinator.async_add_listener(_async_entity_listener))
_async_entity_listener()
class AirzoneSensor(AirzoneEntity, SensorEntity):

View File

@@ -30,7 +30,8 @@ from homeassistant.const import ATTR_TEMPERATURE, STATE_OFF
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN, TEMP_UNIT_LIB_TO_HASS
from . import AirzoneConfigEntry
from .const import TEMP_UNIT_LIB_TO_HASS
from .coordinator import AirzoneUpdateCoordinator
from .entity import AirzoneHotWaterEntity
@@ -56,10 +57,12 @@ OPERATION_MODE_TO_DHW_PARAMS: Final[dict[str, dict[str, Any]]] = {
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AirzoneConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add Airzone sensors from a config_entry."""
coordinator = hass.data[DOMAIN][entry.entry_id]
"""Add Airzone Water Heater from a config_entry."""
coordinator = entry.runtime_data
if AZD_HOT_WATER in coordinator.data:
async_add_entities([AirzoneWaterHeater(coordinator, entry)])

View File

@@ -10,7 +10,6 @@ from homeassistant.const import CONF_ID, CONF_PASSWORD, CONF_USERNAME, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import aiohttp_client
from .const import DOMAIN
from .coordinator import AirzoneUpdateCoordinator
PLATFORMS: list[Platform] = [
@@ -21,8 +20,12 @@ PLATFORMS: list[Platform] = [
Platform.WATER_HEATER,
]
type AirzoneCloudConfigEntry = ConfigEntry[AirzoneUpdateCoordinator]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_setup_entry(
hass: HomeAssistant, entry: AirzoneCloudConfigEntry
) -> bool:
"""Set up Airzone Cloud from a config entry."""
options = ConnectionOptions(
entry.data[CONF_USERNAME],
@@ -41,18 +44,20 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
coordinator = AirzoneUpdateCoordinator(hass, airzone)
await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
entry.runtime_data = coordinator
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(
hass: HomeAssistant, entry: AirzoneCloudConfigEntry
) -> bool:
"""Unload a config entry."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
coordinator: AirzoneUpdateCoordinator = hass.data[DOMAIN].pop(entry.entry_id)
coordinator = entry.runtime_data
await coordinator.airzone.logout()
return unload_ok

View File

@@ -8,8 +8,10 @@ from typing import Any, Final
from aioairzone_cloud.const import (
AZD_ACTIVE,
AZD_AIDOOS,
AZD_AIR_DEMAND,
AZD_AQ_ACTIVE,
AZD_ERRORS,
AZD_FLOOR_DEMAND,
AZD_PROBLEMS,
AZD_SYSTEMS,
AZD_WARNINGS,
@@ -21,12 +23,11 @@ from homeassistant.components.binary_sensor import (
BinarySensorEntity,
BinarySensorEntityDescription,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from . import AirzoneCloudConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .entity import (
AirzoneAidooEntity,
@@ -78,10 +79,20 @@ ZONE_BINARY_SENSOR_TYPES: Final[tuple[AirzoneBinarySensorEntityDescription, ...]
device_class=BinarySensorDeviceClass.RUNNING,
key=AZD_ACTIVE,
),
AirzoneBinarySensorEntityDescription(
device_class=BinarySensorDeviceClass.RUNNING,
key=AZD_AIR_DEMAND,
translation_key="air_demand",
),
AirzoneBinarySensorEntityDescription(
key=AZD_AQ_ACTIVE,
translation_key="air_quality_active",
),
AirzoneBinarySensorEntityDescription(
device_class=BinarySensorDeviceClass.RUNNING,
key=AZD_FLOOR_DEMAND,
translation_key="floor_demand",
),
AirzoneBinarySensorEntityDescription(
attributes={
"warnings": AZD_WARNINGS,
@@ -94,10 +105,12 @@ ZONE_BINARY_SENSOR_TYPES: Final[tuple[AirzoneBinarySensorEntityDescription, ...]
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AirzoneCloudConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add Airzone Cloud binary sensors from a config_entry."""
coordinator: AirzoneUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
binary_sensors: list[AirzoneBinarySensor] = [
AirzoneAidooBinarySensor(

View File

@@ -53,13 +53,12 @@ from homeassistant.components.climate import (
HVACAction,
HVACMode,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, UnitOfTemperature
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from . import AirzoneCloudConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .entity import (
AirzoneAidooEntity,
@@ -119,10 +118,12 @@ HVAC_MODE_HASS_TO_LIB: Final[dict[HVACMode, OperationMode]] = {
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AirzoneCloudConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add Airzone climate from a config_entry."""
coordinator: AirzoneUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
entities: list[AirzoneClimate] = []
@@ -193,6 +194,12 @@ class AirzoneClimate(AirzoneEntity, ClimateEntity):
ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
)
if (
self.get_airzone_value(AZD_SPEED) is not None
and self.get_airzone_value(AZD_SPEEDS) is not None
):
self._initialize_fan_speeds()
@callback
def _handle_coordinator_update(self) -> None:
"""Update attributes when the coordinator updates."""
@@ -207,6 +214,8 @@ class AirzoneClimate(AirzoneEntity, ClimateEntity):
self._attr_hvac_action = HVAC_ACTION_LIB_TO_HASS[
self.get_airzone_value(AZD_ACTION)
]
if self.supported_features & ClimateEntityFeature.FAN_MODE:
self._attr_fan_mode = self._speeds.get(self.get_airzone_value(AZD_SPEED))
if self.get_airzone_value(AZD_POWER):
self._attr_hvac_mode = HVAC_MODE_LIB_TO_HASS[
self.get_airzone_value(AZD_MODE)
@@ -234,6 +243,37 @@ class AirzoneDeviceClimate(AirzoneClimate):
| ClimateEntityFeature.TURN_OFF
| ClimateEntityFeature.TURN_ON
)
_speeds: dict[int, str]
_speeds_reverse: dict[str, int]
def _initialize_fan_speeds(self) -> None:
"""Initialize fan speeds."""
azd_speeds: dict[int, int] = self.get_airzone_value(AZD_SPEEDS)
max_speed = max(azd_speeds)
fan_speeds: dict[int, str]
if speeds_map := FAN_SPEED_MAPS.get(max_speed):
fan_speeds = speeds_map
else:
fan_speeds = {}
for speed in azd_speeds:
if speed != 0:
fan_speeds[speed] = f"{int(round((speed * 100) / max_speed, 0))}%"
if 0 in azd_speeds:
fan_speeds = FAN_SPEED_AUTO | fan_speeds
self._speeds = {}
for key, value in fan_speeds.items():
_key = azd_speeds.get(key)
if _key is not None:
self._speeds[_key] = value
self._speeds_reverse = {v: k for k, v in self._speeds.items()}
self._attr_fan_modes = list(self._speeds_reverse)
self._attr_supported_features |= ClimateEntityFeature.FAN_MODE
async def async_turn_on(self) -> None:
"""Turn the entity on."""
@@ -253,6 +293,15 @@ class AirzoneDeviceClimate(AirzoneClimate):
}
await self._async_update_params(params)
async def async_set_fan_mode(self, fan_mode: str) -> None:
"""Set new fan mode."""
params: dict[str, Any] = {
API_SPEED_CONF: {
API_VALUE: self._speeds_reverse.get(fan_mode),
}
}
await self._async_update_params(params)
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set new target temperature."""
params: dict[str, Any] = {}
@@ -341,9 +390,6 @@ class AirzoneDeviceGroupClimate(AirzoneClimate):
class AirzoneAidooClimate(AirzoneAidooEntity, AirzoneDeviceClimate):
"""Define an Airzone Cloud Aidoo climate."""
_speeds: dict[int, str]
_speeds_reverse: dict[str, int]
def __init__(
self,
coordinator: AirzoneUpdateCoordinator,
@@ -355,52 +401,9 @@ class AirzoneAidooClimate(AirzoneAidooEntity, AirzoneDeviceClimate):
self._attr_unique_id = aidoo_id
self._init_attributes()
if (
self.get_airzone_value(AZD_SPEED) is not None
and self.get_airzone_value(AZD_SPEEDS) is not None
):
self._initialize_fan_speeds()
self._async_update_attrs()
def _initialize_fan_speeds(self) -> None:
"""Initialize Aidoo fan speeds."""
azd_speeds: dict[int, int] = self.get_airzone_value(AZD_SPEEDS)
max_speed = max(azd_speeds)
fan_speeds: dict[int, str]
if speeds_map := FAN_SPEED_MAPS.get(max_speed):
fan_speeds = speeds_map
else:
fan_speeds = {}
for speed in azd_speeds:
if speed != 0:
fan_speeds[speed] = f"{int(round((speed * 100) / max_speed, 0))}%"
if 0 in azd_speeds:
fan_speeds = FAN_SPEED_AUTO | fan_speeds
self._speeds = {}
for key, value in fan_speeds.items():
_key = azd_speeds.get(key)
if _key is not None:
self._speeds[_key] = value
self._speeds_reverse = {v: k for k, v in self._speeds.items()}
self._attr_fan_modes = list(self._speeds_reverse)
self._attr_supported_features |= ClimateEntityFeature.FAN_MODE
async def async_set_fan_mode(self, fan_mode: str) -> None:
"""Set Aidoo fan mode."""
params: dict[str, Any] = {
API_SPEED_CONF: {
API_VALUE: self._speeds_reverse.get(fan_mode),
}
}
await self._async_update_params(params)
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set hvac mode."""
params: dict[str, Any] = {}
@@ -418,14 +421,6 @@ class AirzoneAidooClimate(AirzoneAidooEntity, AirzoneDeviceClimate):
}
await self._async_update_params(params)
@callback
def _async_update_attrs(self) -> None:
"""Update Aidoo climate attributes."""
super()._async_update_attrs()
if self.supported_features & ClimateEntityFeature.FAN_MODE:
self._attr_fan_mode = self._speeds.get(self.get_airzone_value(AZD_SPEED))
class AirzoneGroupClimate(AirzoneGroupEntity, AirzoneDeviceGroupClimate):
"""Define an Airzone Cloud Group climate."""

View File

@@ -22,12 +22,10 @@ from aioairzone_cloud.const import (
)
from homeassistant.components.diagnostics.util import async_redact_data
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant
from .const import DOMAIN
from .coordinator import AirzoneUpdateCoordinator
from . import AirzoneCloudConfigEntry
TO_REDACT_API = [
API_CITY,
@@ -137,10 +135,10 @@ def redact_all(
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, config_entry: ConfigEntry
hass: HomeAssistant, config_entry: AirzoneCloudConfigEntry
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
coordinator: AirzoneUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
coordinator = config_entry.runtime_data
raw_data = coordinator.airzone.raw_data()
ids = gather_ids(raw_data)

View File

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

View File

@@ -14,12 +14,11 @@ from aioairzone_cloud.const import (
)
from homeassistant.components.select import SelectEntity, SelectEntityDescription
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from . import AirzoneCloudConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .entity import AirzoneEntity, AirzoneZoneEntity
@@ -52,10 +51,12 @@ ZONE_SELECT_TYPES: Final[tuple[AirzoneSelectDescription, ...]] = (
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AirzoneCloudConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add Airzone Cloud select from a config_entry."""
coordinator: AirzoneUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
# Zones
async_add_entities(

View File

@@ -23,7 +23,6 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
PERCENTAGE,
@@ -34,7 +33,7 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from . import AirzoneCloudConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .entity import (
AirzoneAidooEntity,
@@ -103,10 +102,12 @@ ZONE_SENSOR_TYPES: Final[tuple[SensorEntityDescription, ...]] = (
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AirzoneCloudConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add Airzone Cloud sensors from a config_entry."""
coordinator: AirzoneUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
# Aidoos
sensors: list[AirzoneSensor] = [

View File

@@ -18,8 +18,14 @@
},
"entity": {
"binary_sensor": {
"air_demand": {
"name": "Air demand"
},
"air_quality_active": {
"name": "Air Quality active"
},
"floor_demand": {
"name": "Floor demand"
}
},
"select": {

View File

@@ -27,12 +27,11 @@ from homeassistant.components.water_heater import (
WaterHeaterEntity,
WaterHeaterEntityFeature,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, STATE_OFF, UnitOfTemperature
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from . import AirzoneCloudConfigEntry
from .coordinator import AirzoneUpdateCoordinator
from .entity import AirzoneHotWaterEntity
@@ -68,10 +67,12 @@ OPERATION_MODE_TO_DHW_PARAMS: Final[dict[str, dict[str, Any]]] = {
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
hass: HomeAssistant,
entry: AirzoneCloudConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Add Airzone Cloud Water Heater from a config_entry."""
coordinator: AirzoneUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
coordinator = entry.runtime_data
async_add_entities(
AirzoneWaterHeater(

View File

@@ -2,52 +2,37 @@
from __future__ import annotations
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform
from homeassistant.config_entries import ConfigEntry, ConfigEntryState
from homeassistant.core import HomeAssistant
from homeassistant.helpers import aiohttp_client, config_entry_oauth2_flow
from homeassistant.helpers import issue_registry as ir
from . import api
from .const import CONFIG_FLOW_MINOR_VERSION, CONFIG_FLOW_VERSION
PLATFORMS: list[Platform] = [Platform.COVER]
DOMAIN = "aladdin_connect"
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up Aladdin Connect Genie from a config entry."""
implementation = (
await config_entry_oauth2_flow.async_get_config_entry_implementation(
hass, entry
)
async def async_setup_entry(hass: HomeAssistant, _: ConfigEntry) -> bool:
"""Set up Aladdin Connect from a config entry."""
ir.async_create_issue(
hass,
DOMAIN,
DOMAIN,
is_fixable=False,
severity=ir.IssueSeverity.ERROR,
translation_key="integration_removed",
translation_placeholders={
"entries": "/config/integrations/integration/aladdin_connect",
},
)
session = config_entry_oauth2_flow.OAuth2Session(hass, entry, implementation)
# If using an aiohttp-based API lib
entry.runtime_data = api.AsyncConfigEntryAuth(
aiohttp_client.async_get_clientsession(hass), session
)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry."""
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
"""Migrate old config."""
if config_entry.version < CONFIG_FLOW_VERSION:
config_entry.async_start_reauth(hass)
new_data = {**config_entry.data}
hass.config_entries.async_update_entry(
config_entry,
data=new_data,
version=CONFIG_FLOW_VERSION,
minor_version=CONFIG_FLOW_MINOR_VERSION,
)
if all(
config_entry.state is ConfigEntryState.NOT_LOADED
for config_entry in hass.config_entries.async_entries(DOMAIN)
if config_entry.entry_id != entry.entry_id
):
ir.async_delete_issue(hass, DOMAIN, DOMAIN)
return True

View File

@@ -1,31 +0,0 @@
"""API for Aladdin Connect Genie bound to Home Assistant OAuth."""
from aiohttp import ClientSession
from genie_partner_sdk.auth import Auth
from homeassistant.helpers import config_entry_oauth2_flow
API_URL = "https://twdvzuefzh.execute-api.us-east-2.amazonaws.com/v1"
API_KEY = "k6QaiQmcTm2zfaNns5L1Z8duBtJmhDOW8JawlCC3"
class AsyncConfigEntryAuth(Auth): # type: ignore[misc]
"""Provide Aladdin Connect Genie authentication tied to an OAuth2 based config entry."""
def __init__(
self,
websession: ClientSession,
oauth_session: config_entry_oauth2_flow.OAuth2Session,
) -> None:
"""Initialize Aladdin Connect Genie auth."""
super().__init__(
websession, API_URL, oauth_session.token["access_token"], API_KEY
)
self._oauth_session = oauth_session
async def async_get_access_token(self) -> str:
"""Return a valid access token."""
if not self._oauth_session.valid_token:
await self._oauth_session.async_ensure_token_valid()
return str(self._oauth_session.token["access_token"])

View File

@@ -1,14 +0,0 @@
"""application_credentials platform the Aladdin Connect Genie integration."""
from homeassistant.components.application_credentials import AuthorizationServer
from homeassistant.core import HomeAssistant
from .const import OAUTH2_AUTHORIZE, OAUTH2_TOKEN
async def async_get_authorization_server(hass: HomeAssistant) -> AuthorizationServer:
"""Return authorization server."""
return AuthorizationServer(
authorize_url=OAUTH2_AUTHORIZE,
token_url=OAUTH2_TOKEN,
)

View File

@@ -1,58 +1,11 @@
"""Config flow for Aladdin Connect Genie."""
"""Config flow for Aladdin Connect integration."""
from collections.abc import Mapping
import logging
from typing import Any
from homeassistant.config_entries import ConfigFlow
import voluptuous as vol
from homeassistant.config_entries import ConfigEntry, ConfigFlowResult
from homeassistant.helpers import config_entry_oauth2_flow
from .const import CONFIG_FLOW_MINOR_VERSION, CONFIG_FLOW_VERSION, DOMAIN
from . import DOMAIN
class OAuth2FlowHandler(
config_entry_oauth2_flow.AbstractOAuth2FlowHandler, domain=DOMAIN
):
"""Config flow to handle Aladdin Connect Genie OAuth2 authentication."""
class AladdinConnectConfigFlow(ConfigFlow, domain=DOMAIN):
"""Handle a config flow for Aladdin Connect."""
DOMAIN = DOMAIN
VERSION = CONFIG_FLOW_VERSION
MINOR_VERSION = CONFIG_FLOW_MINOR_VERSION
reauth_entry: ConfigEntry | None = None
async def async_step_reauth(
self, user_input: Mapping[str, Any]
) -> ConfigFlowResult:
"""Perform reauth upon API auth error or upgrade from v1 to v2."""
self.reauth_entry = self.hass.config_entries.async_get_entry(
self.context["entry_id"]
)
return await self.async_step_reauth_confirm()
async def async_step_reauth_confirm(
self, user_input: Mapping[str, Any] | None = None
) -> ConfigFlowResult:
"""Dialog that informs the user that reauth is required."""
if user_input is None:
return self.async_show_form(
step_id="reauth_confirm",
data_schema=vol.Schema({}),
)
return await self.async_step_user()
async def async_oauth_create_entry(self, data: dict) -> ConfigFlowResult:
"""Create an oauth config entry or update existing entry for reauth."""
if self.reauth_entry:
return self.async_update_reload_and_abort(
self.reauth_entry,
data=data,
)
return await super().async_oauth_create_entry(data)
@property
def logger(self) -> logging.Logger:
"""Return logger."""
return logging.getLogger(__name__)
VERSION = 1

View File

@@ -1,14 +0,0 @@
"""Constants for the Aladdin Connect Genie integration."""
from typing import Final
from homeassistant.components.cover import CoverEntityFeature
DOMAIN = "aladdin_connect"
CONFIG_FLOW_VERSION = 2
CONFIG_FLOW_MINOR_VERSION = 1
OAUTH2_AUTHORIZE = "https://app.aladdinconnect.com/login.html"
OAUTH2_TOKEN = "https://twdvzuefzh.execute-api.us-east-2.amazonaws.com/v1/oauth2/token"
SUPPORTED_FEATURES: Final = CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE

View File

@@ -1,131 +0,0 @@
"""Cover Entity for Genie Garage Door."""
from datetime import timedelta
from typing import Any
from genie_partner_sdk.client import AladdinConnectClient
from homeassistant.components.cover import CoverDeviceClass, CoverEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import PlatformNotReady
import homeassistant.helpers.device_registry as dr
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import api
from .const import DOMAIN, SUPPORTED_FEATURES
from .model import GarageDoor
SCAN_INTERVAL = timedelta(seconds=15)
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Aladdin Connect platform."""
session: api.AsyncConfigEntryAuth = config_entry.runtime_data
acc = AladdinConnectClient(session)
doors = await acc.get_doors()
if doors is None:
raise PlatformNotReady("Error from Aladdin Connect getting doors")
device_registry = dr.async_get(hass)
doors_to_add = []
for door in doors:
existing = device_registry.async_get(door.unique_id)
if existing is None:
doors_to_add.append(door)
async_add_entities(
(AladdinDevice(acc, door, config_entry) for door in doors_to_add),
)
remove_stale_devices(hass, config_entry, doors)
def remove_stale_devices(
hass: HomeAssistant, config_entry: ConfigEntry, devices: list[GarageDoor]
) -> None:
"""Remove stale devices from device registry."""
device_registry = dr.async_get(hass)
device_entries = dr.async_entries_for_config_entry(
device_registry, config_entry.entry_id
)
all_device_ids = {door.unique_id for door in devices}
for device_entry in device_entries:
device_id: str | None = None
for identifier in device_entry.identifiers:
if identifier[0] == DOMAIN:
device_id = identifier[1]
break
if device_id is None or device_id not in all_device_ids:
# If device_id is None an invalid device entry was found for this config entry.
# If the device_id is not in existing device ids it's a stale device entry.
# Remove config entry from this device entry in either case.
device_registry.async_update_device(
device_entry.id, remove_config_entry_id=config_entry.entry_id
)
class AladdinDevice(CoverEntity):
"""Representation of Aladdin Connect cover."""
_attr_device_class = CoverDeviceClass.GARAGE
_attr_supported_features = SUPPORTED_FEATURES
_attr_has_entity_name = True
_attr_name = None
def __init__(
self, acc: AladdinConnectClient, device: GarageDoor, entry: ConfigEntry
) -> None:
"""Initialize the Aladdin Connect cover."""
self._acc = acc
self._device_id = device.device_id
self._number = device.door_number
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, device.unique_id)},
name=device.name,
manufacturer="Overhead Door",
)
self._attr_unique_id = device.unique_id
async def async_open_cover(self, **kwargs: Any) -> None:
"""Issue open command to cover."""
await self._acc.open_door(self._device_id, self._number)
async def async_close_cover(self, **kwargs: Any) -> None:
"""Issue close command to cover."""
await self._acc.close_door(self._device_id, self._number)
async def async_update(self) -> None:
"""Update status of cover."""
await self._acc.update_door(self._device_id, self._number)
@property
def is_closed(self) -> bool | None:
"""Update is closed attribute."""
value = self._acc.get_door_status(self._device_id, self._number)
if value is None:
return None
return bool(value == "closed")
@property
def is_closing(self) -> bool | None:
"""Update is closing attribute."""
value = self._acc.get_door_status(self._device_id, self._number)
if value is None:
return None
return bool(value == "closing")
@property
def is_opening(self) -> bool | None:
"""Update is opening attribute."""
value = self._acc.get_door_status(self._device_id, self._number)
if value is None:
return None
return bool(value == "opening")

View File

@@ -1,10 +1,9 @@
{
"domain": "aladdin_connect",
"name": "Aladdin Connect",
"codeowners": ["@swcloudgenie"],
"config_flow": true,
"dependencies": ["application_credentials"],
"codeowners": [],
"documentation": "https://www.home-assistant.io/integrations/aladdin_connect",
"integration_type": "system",
"iot_class": "cloud_polling",
"requirements": ["genie-partner-sdk==1.0.2"]
"requirements": []
}

View File

@@ -1,30 +0,0 @@
"""Models for Aladdin connect cover platform."""
from __future__ import annotations
from typing import TypedDict
class GarageDoorData(TypedDict):
"""Aladdin door data."""
device_id: str
door_number: int
name: str
status: str
link_status: str
battery_level: int
class GarageDoor:
"""Aladdin Garage Door Entity."""
def __init__(self, data: GarageDoorData) -> None:
"""Create `GarageDoor` from dictionary of data."""
self.device_id = data["device_id"]
self.door_number = data["door_number"]
self.unique_id = f"{self.device_id}-{self.door_number}"
self.name = data["name"]
self.status = data["status"]
self.link_status = data["link_status"]
self.battery_level = data["battery_level"]

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