Compare commits

..

1124 Commits

Author SHA1 Message Date
Paulus Schoutsen 6069899179 Merge pull request #59753 from home-assistant/rc 2021-11-15 16:02:30 -08:00
Paulus Schoutsen 0e12bce174 Bumped version to 2021.11.4 2021-11-15 14:37:30 -08:00
Philip Allgaier ca3c0057d3 Fix invalid string syntax in French OwnTracks config flow (#59752) 2021-11-15 14:37:25 -08:00
J. Nick Koston 6596ebfe43 Bump flux_led to 0.24.24 (#59740) 2021-11-15 14:37:24 -08:00
J. Nick Koston 702c57f389 Bump flux_led to 0.24.21 (#59662) 2021-11-15 14:37:07 -08:00
Clifford Roche 5c0e34db6c Bump greeclimate to 0.12.5 (#59730) 2021-11-15 14:32:53 -08:00
Aaron Bach 6a4274b280 Fix bug in AirVisual re-auth (#59685) 2021-11-15 14:32:52 -08:00
Anton Malko c2aeeec129 Update aiolookin to 0.0.4 version (#59684) 2021-11-15 14:32:51 -08:00
J. Nick Koston cb889281a6 Ensure flux_led bulbs turn on even if brightness is 0 (#59661) 2021-11-15 14:32:50 -08:00
Clifford Roche f0fdd4388c Bump greecliamate to 0.12.4 (#59645) 2021-11-15 14:32:50 -08:00
J. Nick Koston 84358fa770 Bump zeroconf to 0.36.13 (#59644)
- Closes #59415
- Fixes #58453
- Fixes #57678

- Changelog: https://github.com/jstasiak/python-zeroconf/compare/0.36.12...0.36.13
2021-11-15 14:32:49 -08:00
J. Nick Koston b122774b12 Bump zeroconf to 0.36.12 (#59133)
- Changelog: https://github.com/jstasiak/python-zeroconf/compare/0.36.11...0.36.12

Bugfix: Prevent service lookups from deadlocking if time abruptly moves backwards
2021-11-15 14:32:48 -08:00
Maciej Bieniek 0153580def Fix favorite RPM max value in Xiaomi Miio (#59631) 2021-11-15 14:31:23 -08:00
Michael Kowalchuk 7042fdb145 Always use a step size of 1 for z-wave js fans (#59622) 2021-11-15 14:31:22 -08:00
Simone Chemelli e7aa90a5b1 Fix firmware status check for Fritz (#59578) 2021-11-15 14:31:21 -08:00
Joakim Sørensen 3c4d5e6c91 Override api url in norway_air (#59573) 2021-11-15 14:31:20 -08:00
jugla 89877a0685 Air visual : robustness at startup when evaluate time interval (#59544) 2021-11-15 14:31:19 -08:00
Paulus Schoutsen 6f3f16dbc9 Merge pull request #59555 from home-assistant/rc 2021-11-11 13:48:35 -08:00
Paulus Schoutsen 4cae92a533 Bumped version to 2021.11.3 2021-11-11 10:33:14 -08:00
uvjustin 0f0ca36aa8 Remove incomplete segment on stream restart (#59532) 2021-11-11 10:33:10 -08:00
Sergiy Maysak 04e1dc3a10 Fix wirelesstag switch arm/disarm (#59515) 2021-11-11 10:32:55 -08:00
Diogo Gomes 9cb4a5ca39 Ignore None state in state_change_event (#59485) 2021-11-11 10:31:39 -08:00
J. Nick Koston c2f227bf16 Fix zeroconf with sonos v1 firmware (#59460) 2021-11-11 10:31:39 -08:00
Bram Kragten 66c5d75fbb Update frontend to 20211109.0 (#59451) 2021-11-11 10:31:38 -08:00
Keilin Bickar aacc0edde7 Fix state of sense net_production sensor (#59391) 2021-11-11 10:31:37 -08:00
enegaard 5336845452 Fix rpi_camera setup hanging on initialization (#59316) 2021-11-11 10:31:36 -08:00
Paulus Schoutsen 435f278053 Merge pull request #59397 from home-assistant/rc 2021-11-08 21:44:29 -08:00
Paulus Schoutsen 4d62d41cc1 Bumped version to 2021.11.2 2021-11-08 20:48:00 -08:00
Bram Kragten a6d795fce1 Update frontend to 20211108.0 (#59364) 2021-11-08 20:47:52 -08:00
Maikel Punie 0f4a35dd28 Bump velbusaio to 2021.11.6 (#59353) 2021-11-08 20:47:51 -08:00
Erik Montnemery 6d3e380f64 Bump paho-mqtt to 1.6.1 (#59339) 2021-11-08 20:47:51 -08:00
Kevin Hellemun 0873c3e92b Support generic xiaomi_miio vacuums (#59317)
* Support generic xiaomi_miio vacuums

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Fix lint

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Remove warning log

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>
2021-11-08 20:47:50 -08:00
Shay Levy 250160f007 Revert "Use DeviceInfo in shelly (#58520)" (#59315)
This reverts commit df6351f86b.
2021-11-08 20:47:49 -08:00
Maciej Bieniek e1b8e2ded3 Remove illuminance sensor (#59305) 2021-11-08 20:47:48 -08:00
Simone Chemelli 8b7686f4f2 Fix condition for fritz integration (#59281) 2021-11-08 20:47:48 -08:00
Alexei Chetroi f9fc92c36b Add Battery sensor regardless if the battery_percent_remaining attribute is supported or not (#59264) 2021-11-08 20:47:47 -08:00
Michael a4253ff54e Increase timeout for fetching camera data on Synology DSM (#59237) 2021-11-08 20:47:46 -08:00
jan iversen dcada92cef Fix tradfri group reachable access (#59217) 2021-11-08 20:47:45 -08:00
J. Nick Koston a6ff89c3e6 Bump flux_led to 0.24.17 (#59211)
* Bump flux_led to 0.24.16

- Changes: https://github.com/Danielhiversen/flux_led/compare/0.24.15...0.24.16

- Fixes turning on/off when device is out of sync internally (seen on 0x33 firmware 8)

- Fixes #59190

* Bump to .17 to fix typing
2021-11-08 20:47:45 -08:00
Michael f5d04de523 bump aioshelly to 1.0.4 (#59209) 2021-11-08 20:47:44 -08:00
Aaron Bach 1cc8e688c3 Change ReCollect Waste device class to date (#59180) 2021-11-08 20:47:43 -08:00
Aaron Bach f47e64e218 Guard against missing data in ReCollect Waste (#59177) 2021-11-08 20:47:42 -08:00
Aaron Bach 3d8ca26c00 Guard against flaky SimpliSafe API calls (#59175) 2021-11-08 20:47:42 -08:00
Aaron Bach e233730494 Bump aioguardian to 2021.11.0 (#59161) 2021-11-08 20:47:41 -08:00
J. Nick Koston 2309dd48c9 Bump flux_led to 0.24.15 (#59159)
- Changes: https://github.com/Danielhiversen/flux_led/compare/0.24.14...0.24.15

- Fixes color reporting for addressable devices
2021-11-08 20:47:40 -08:00
uvjustin 96c08df883 Adjust frag_duration setting in stream (#59135) 2021-11-08 20:47:39 -08:00
Austin Mroczek c150a296d2 Bump total_connect_client to 2021.11.2 (#58818)
* update total_connect_client to 2021.10

* update for total_connect_client changes

* remove unused return value

* bump total_connect_client to 2021.11.1

* bump total_connect_client to 2021.11.2

* Move to public ResultCode

* load locations to prevent 'unknown error occurred'

* add test for zero locations

* Revert "load locations to prevent 'unknown error occurred'"

This reverts commit 28b8984be5.

* Revert "add test for zero locations"

This reverts commit 77bf7908d5.
2021-11-08 20:47:39 -08:00
Paulus Schoutsen 2c21f0ad18 Merge pull request #59129 from home-assistant/rc 2021-11-04 21:57:54 -07:00
Paulus Schoutsen 189677c713 Bumped version to 2021.11.1 2021-11-04 20:14:07 -07:00
J. Nick Koston 039e361bff Bump flux_led to 0.24.14 (#59121) 2021-11-04 20:13:54 -07:00
Erik Montnemery 61918e0e44 Correct rescheduling of ExternalStatisticsTask (#59076) 2021-11-04 20:13:53 -07:00
Erik Montnemery d9d8b538b0 Change minimum supported SQLite version to 3.31.0 (#59073) 2021-11-04 20:13:52 -07:00
Teemu R c3882d0782 Remove use_time sensor from mjjsq humidifers (#59066) 2021-11-04 20:13:51 -07:00
Franck Nijhof c6d651e283 Increase time to authorize OctoPrint (#59051) 2021-11-04 20:13:51 -07:00
Erik Montnemery 543381b6f2 Correct migration to recorder schema 22 (#59048) 2021-11-04 20:13:50 -07:00
Franck Nijhof 433743b0d1 Constrain urllib3 to >=1.26.5 (#59043) 2021-11-04 20:13:49 -07:00
Maikel Punie 58d88c8371 Bump velbus-aio to 2021.11.0 (#59040) 2021-11-04 20:13:49 -07:00
Glenn Waters 6e08cb815b Environment Canada config_flow fix (#59029) 2021-11-04 20:13:48 -07:00
ollo69 b125e2c425 Fix Nut resources option migration (#59020)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-11-04 20:13:47 -07:00
Teemu R c4aa6af953 Accept all roborock vacuum models for xiaomi_miio (#59018) 2021-11-04 20:13:46 -07:00
Eugenio Panadero dcf6004166 Bump aiopvpc to 2.2.1 (#59008)
happening because some config change in the ESIOS API server,
solved with a version patch in aiopvpc
(details in https://github.com/azogue/aiopvpc/pull/28)
2021-11-04 20:13:45 -07:00
Teemu R af28d927b4 Fix timedelta-based sensors for xiaomi_miio (#58995) 2021-11-04 20:13:44 -07:00
Kevin Hellemun 5e6cac3834 Fix mop attribute for unified mop and water box in Xiaomi Miio (#58990)
Co-authored-by: Teemu R. <tpr@iki.fi>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-11-04 20:13:43 -07:00
Thomas G 397f303d6d Swap sharkiq vacuum is_docked with is_charging (#58975) 2021-11-04 20:13:43 -07:00
Franck Nijhof 85a4ee68e3 Merge pull request #58994 from home-assistant/rc 2021-11-03 16:31:23 +01:00
Franck Nijhof e3c021a910 Bumped version to 2021.11.0 2021-11-03 15:03:43 +01:00
Bram Kragten 5568121251 Update frontend to 20211103.0 (#58988) 2021-11-03 15:02:39 +01:00
Sergio Gutierrez Alvarez 7afb38ff96 Fix battery_is_charging sensor on system bridge (#58980) 2021-11-03 15:02:35 +01:00
Daniel Hjelseth Høyer 1a08da7856 Bump pyMill to 0.7.4 (#58977) 2021-11-03 12:31:22 +01:00
Hans Oischinger ded0785700 Fix broken ViCare burner & compressor sensors (#58962) 2021-11-03 10:50:09 +01:00
Robert Hillis 4163ba5dbf Add missing ZMW currency (#58959) 2021-11-03 10:50:06 +01:00
Dave T dff98b024c Aurora abb defer unique_id assignment during yaml import (#58887)
* Defer unique_id assignment during yaml import if dark

* Back out variable name change to simplify.

* Allow config flow yaml setup deferral.

* Fix deferred yaml import

* Code review: only wrap necessary lines in try blk

* Code review: catch possible duplicate unique_id

* Simplify assignment.

* Code review: use timedelta to retry yaml import

* Code review: if a different error occurs, raise it

* Remove current config entry if duplicate unique_id

* Code review: remove unnecessary line.

* Code review: revert change, leave to other PR.

* Code review: remove unnecessary patch & min->sec

* Remove unnecessary else after raise.

* Increase test coverage.

* Check the number of config entries at each stage

* Raise ConfigEntryNotReady when connection fails.

* Log & return false for error on yaml import
2021-11-03 10:50:01 +01:00
Dave T 0a27b0f353 Aurora abb energy metering (#58454)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-11-03 10:49:58 +01:00
kodsnutten ae99b678dd Fix unique_id of derived sent-sensors (#58298) 2021-11-03 10:49:54 +01:00
Franck Nijhof e43cb82f29 Merge branch 'master' into rc 2021-11-03 10:22:39 +01:00
Paulus Schoutsen 608b89a6ad Bumped version to 2021.11.0b5 2021-11-02 11:28:43 -07:00
Ernst Klamer a897dfa5b7 Add device configuration URL to Solar-Log (#58954) 2021-11-02 11:28:39 -07:00
Franck Nijhof f8290ed026 Add support for IoT Switches (tdq) in Tuya (#58952) 2021-11-02 11:28:39 -07:00
Franck Nijhof 44334ea4da Extend Tuya Dimmer (tgq) support (#58951) 2021-11-02 11:28:38 -07:00
Erik Montnemery e4143142bf Revert "Add offset support to time trigger" (#58947) 2021-11-02 11:28:37 -07:00
uvjustin d4ba9a137c Add libav.mpegts to logging filter (#58937) 2021-11-02 11:28:36 -07:00
J. Nick Koston 6cd256f26b Fix recursive limit in find_next_time_expression_time (#58914)
* Fix recursive limit in find_next_time_expression_time

* Add test case

* Update test_event.py

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2021-11-02 11:28:35 -07:00
Maciej Bieniek 53cc9f35b9 Add configuration_url to Airly integration (#58911) 2021-11-02 11:28:34 -07:00
Tom Harris 26e925d885 Bump pyinsteon to 1.0.13 (#58908) 2021-11-02 11:28:34 -07:00
Kevin Hellemun 5e09685700 Add ROCKROBO_S6_PURE to supported vacuums for xiaomi_miio (#58901) 2021-11-02 11:28:33 -07:00
Franck Nijhof c97160bf97 Fix incorrect entity category in Advantage Air (#58754) 2021-11-02 11:28:32 -07:00
Peter A. Bigot 34953c4c08 Fix color temp selection when brightness changed in Tuya light (#58341)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
Co-authored-by: Franck Nijhof <git@frenck.dev>
2021-11-02 11:28:31 -07:00
Paulus Schoutsen 632164f283 Bumped version to 2021.11.0b4 2021-11-01 10:56:45 -07:00
Otto Winter b4021de2b0 Fix find_next_time_expression_time (#58894)
* Better tests

* Fix find_next_time_expression_time

* Add tests for Nov 7th 2021, Chicago transtion

* Update event tests

* Update test_event.py

* small performance improvement

Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: Erik Montnemery <erik@montnemery.com>
2021-11-01 10:56:35 -07:00
Maciej Bieniek cfa4f24395 Handle None values in Xiaomi Miio integration (#58880)
* Initial commit

* Improve _handle_coordinator_update()

* Fix entity_description define

* Improve sensor & binary_sensor platforms

* Log None value

* Use coordinator variable

* Improve log strings

* Filter attributes with None values

* Add hasattr condition

* Update homeassistant/components/xiaomi_miio/sensor.py

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

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-11-01 10:56:35 -07:00
purcell-lab 77c25aa141 Fix renamed solaredge sensor keys (#58875) 2021-11-01 10:56:34 -07:00
Kevin Hellemun 7a0443e2a6 Add ROCKROBO_S4_MAX to supported xiaomi vacuums (#58826) 2021-11-01 10:56:33 -07:00
Marc Hörsken 6e9d759798 Fix OpenWeatherMap options not being initialized the first time (#58736) 2021-11-01 10:56:33 -07:00
Paulus Schoutsen 82b6bbda76 Merge pull request #58905 from home-assistant/2021.10.7 2021-11-01 10:51:04 -07:00
Paulus Schoutsen ad55af4f67 Bumped version to 2021.10.7 2021-11-01 10:01:08 -07:00
Otto Winter 5295ffd6f1 Fix find_next_time_expression_time (#58894)
* Better tests

* Fix find_next_time_expression_time

* Add tests for Nov 7th 2021, Chicago transtion

* Update event tests

* Update test_event.py

* small performance improvement

Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: Erik Montnemery <erik@montnemery.com>
2021-11-01 10:01:01 -07:00
Simone Chemelli 96d1810019 Abort Fritz config flow for configured hostnames (#58140)
* Abort Fritz config flow for configured hostnames

* Fix tests + consider all combinations

* Fix async context
2021-11-01 09:59:18 -07:00
Brandon Rothweiler fe5b9c75b3 Bump pymazda to 0.2.2 (#58113) 2021-11-01 09:59:17 -07:00
Erik Montnemery 97ba368950 Fix template sensor when name template doesn't render (#58088) 2021-11-01 09:59:17 -07:00
Michael Chisholm 698ceda7c5 Sleep between device requests to detect socket closes (#58087) 2021-11-01 09:59:16 -07:00
micha91 a3c0f7b167 Fix Yamaha MusicCast media_stop (#58024) 2021-11-01 09:59:15 -07:00
Andrey Kupreychik ae463cb210 Abort keenetic SSDP discovery if the unique id is already setup or ignored (#58009) 2021-11-01 09:59:14 -07:00
starkillerOG 387413b5f5 Fix netgear NoneType and discovery (#57904) 2021-11-01 09:59:13 -07:00
Joakim Sørensen 2de74c86e3 Fix Tuya documentation URL (#57889) 2021-11-01 09:59:13 -07:00
Paulus Schoutsen 5ad1ec611d Bumped version to 2021.11.0b3 2021-10-31 20:24:09 -07:00
Maciej Bieniek 375e9fffd1 Add configuration_url to GIOS integration (#58840) 2021-10-31 20:24:03 -07:00
uvjustin 868fbc063d Improve part metadata in stream (#58822) 2021-10-31 20:24:02 -07:00
Robert Hillis 68b0413c98 Bump pyefergy to 0.1.3 (#58821) 2021-10-31 20:24:01 -07:00
Franck Nijhof 6908fa6127 Fix Plugwise not updating config entry with discovery information (#58819) 2021-10-31 20:24:00 -07:00
Kevin Hellemun a0fba15267 Add ROCKROBO_E2 to supported vacuums for xiaomi_miio (#58817)
https://github.com/rytilahti/python-miio/blob/e1adea55f3be237f6e6904210b6f7b52162bf154/miio/vacuum.py#L129
2021-10-31 20:24:00 -07:00
Michael Chisholm 7fae711e0c dlna_dmr: less eager discovery (#58780) 2021-10-31 20:23:59 -07:00
J. Nick Koston e031917a30 Workaround brightness transition delay from off in older yeelight models (#58774) 2021-10-31 20:23:58 -07:00
purcell-lab 184342804e Fix solaredge energy sensor names (#58773) 2021-10-31 20:23:58 -07:00
Michael 2cc3290794 Fix channel.send in Discord (#58756) 2021-10-31 20:23:57 -07:00
J. Nick Koston 0f367722ed Bump zeroconf 0.36.11 (#58755) 2021-10-31 20:23:56 -07:00
Franck Nijhof 9b715383c3 Add configuration_url to OctoPrint (#58753)
* Add configuration_url to Octoprint

* fix device_info() return

Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com>
2021-10-31 20:23:56 -07:00
Kapernicus 8800ceba4d Bump nad_receiver to version 0.3.0 (#58751) 2021-10-31 20:23:55 -07:00
J. Nick Koston 2c509bfc06 Add additional test coverage for RYSE smartbridges with HK (#58746) 2021-10-31 20:23:55 -07:00
Anders Liljekvist aae8c2f5dd Fix bluesound player internally used id (#58732) 2021-10-31 20:23:54 -07:00
Tobias Sauerwein 73dfa2d205 Set Netatmo max default temperature (#58718) 2021-10-31 20:23:53 -07:00
Kevin Hellemun b6d2a7a562 Add ROCKROBO_S4 to xiaomi_miio vaccum models (#58682) 2021-10-31 20:23:53 -07:00
Erik Montnemery 8c2af76a51 Coerce to tuple before asserting the sequence (#58672) 2021-10-31 20:23:52 -07:00
Paulus Schoutsen 4086a40c05 Mobile app to update entity registry on re-register sensors (#58378)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-31 20:23:51 -07:00
Michael 2ea90b803c Add configuration url to AVM Fritz!Smarthome (#57711)
* add configuration url

* extend data update coordinator

* improve exception handling during data update

* store coordinator after first refresh

* fix light init
2021-10-31 20:23:51 -07:00
Paulus Schoutsen 94fb8adbdc Bumped version to 2021.11.0b2 2021-10-29 22:18:17 -07:00
J. Nick Koston 030f19c1ed Improve handling of invalid serial numbers in HomeKit Controller (#58723)
Fixes #58719
2021-10-29 22:18:05 -07:00
Aaron Bach f930a1fb06 Fix bug with volumes in SimpliSafe set_system_properties service (#58721)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2021-10-29 22:18:04 -07:00
Matthias Alphart d7531096ef reload service: remove entities before disconnection (#58712) 2021-10-29 22:18:04 -07:00
Aaron Bach 8cfdd49f36 Bump aioambient to 2021.10.1 (#58708) 2021-10-29 22:18:03 -07:00
jjlawren 9dda5c5f8a Disable polling Sonos switches by default (#58705) 2021-10-29 22:18:02 -07:00
J. Nick Koston 23c407969f Avoid doorbird device probe during discovery for known devices (#58701) 2021-10-29 22:18:01 -07:00
Franck Nijhof 9af8c60838 Fix OctoPrint SSDP URL parsing and discovered values (#58698) 2021-10-29 22:18:00 -07:00
Marc Mueller 45dc01b8f4 Fix round - wallbox (#58689)
* Fix wallbox round

* Add test case
2021-10-29 22:18:00 -07:00
Franck Nijhof 9821169cea Fix OctoPrint config flow schema (#58688) 2021-10-29 22:17:59 -07:00
Franck Nijhof 76593d6473 Fix spelling of OctoPrint (#58686) 2021-10-29 22:17:58 -07:00
Erik Montnemery 6d000c7d1a Fix regression in MQTT discovery (#58684)
* Fix regression in MQTT discovery

* Update test
2021-10-29 22:17:58 -07:00
Erik Montnemery ec3f730b5e Convert RGBW and RGBWW colors in light turn_on calls (#58680) 2021-10-29 22:17:57 -07:00
Erik Montnemery e9b67b3590 Update light turn_on schema to coerce colors to tuple before asserting sequence type (#58670)
* Make color_name_to_rgb return a tuple

* Tweak

* Tweak

* Update test

* Tweak test
2021-10-29 22:17:56 -07:00
mezz64 78082afa94 Bump pyhik to 0.3.0 (#58659) 2021-10-29 22:17:56 -07:00
Paulus Schoutsen 96d145f2f0 Bumped version to 2021.11.0b1 2021-10-28 21:18:17 -07:00
Franck Nijhof 6ca92812ae Fix missing temperature level on Tuya Heater (qn) devices (#58643) 2021-10-28 21:16:47 -07:00
Clifford Roche 26f3c1adea Bump greeclimate to 0.12.3 (#58635) 2021-10-28 21:16:47 -07:00
Aaron Bach da2addf15a Fix incorrect RainMachine service helper (#58633) 2021-10-28 21:16:46 -07:00
Franck Nijhof ffe008cbef Migrate Tuya unique IDs for switches & lights (#58631) 2021-10-28 21:16:45 -07:00
Hans Oischinger 6858191ca3 Improve ViCare energy units (#58630) 2021-10-28 21:16:45 -07:00
Bram Kragten 2546efe026 Update frontend to 20211028.0 (#58629) 2021-10-28 21:16:44 -07:00
Aaron Bach 92af39cf89 Fix missing triggered state in SimpliSafe alarm control panel (#58628) 2021-10-28 21:16:44 -07:00
J. Nick Koston 22773d0503 Add package constraint to websockets (#58626) 2021-10-28 21:16:43 -07:00
Chen-IL 23841c4b74 Add entity category for load sensors to AsusWRT (#58625) 2021-10-28 21:16:42 -07:00
J. Nick Koston cc9b9a8f95 Fix uncaught exception in sense and retry later (#58623) 2021-10-28 21:16:42 -07:00
Robert Hillis f942131d6a Fix missing config string in sense (#58597) 2021-10-28 21:16:41 -07:00
Guido Schmitz c513516237 Add configuration_url to devolo Home Control (#58594) 2021-10-28 21:16:40 -07:00
Kevin Hellemun e729ee24f8 Add ROCKROBO_S5_MAX to xiaomi_miio vacuum models (#58591)
* Add ROCKROBO_S5_MAX to xiaomi_miio vacuum models.

https://github.com/home-assistant/core/issues/58550

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* disable pylint for todo

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Minor refactor

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>
2021-10-28 21:16:40 -07:00
Robert Chmielowiec 15c2d5c278 Add configuration_url to Huawei LTE integration (#58584) 2021-10-28 21:16:39 -07:00
Paulus Schoutsen a23c1624fb Fix default value for host in octoprint config flow (#58568) 2021-10-28 21:16:39 -07:00
Jesse Hills d36df72701 Add configuration_url to ESPHome (#58565) 2021-10-28 21:16:03 -07:00
Jesse Hills 07c9d77414 Allow configuration_url to be removed/nullified from device registry (#58564)
* Allow configuration_url to be removed from device registry

* Add test

* Check for None before stringifying and url parsing

* Add type to dict to remove mypy error on assigning None
2021-10-28 21:12:47 -07:00
Quentame 928b8bcdbd Add configuration_url to iCloud integration (#58557) 2021-10-28 21:12:46 -07:00
Quentame 211041eb3a Add configuration_url to Freebox integration (#58555) 2021-10-28 21:12:46 -07:00
Paulus Schoutsen e1f9ae4b96 Add entity category to ZHA battery (#58553) 2021-10-28 21:12:45 -07:00
Tom Matheussen c9f4972b59 Add service configuration URL to Doorbird (#58549) 2021-10-28 21:12:44 -07:00
J. Nick Koston 49e0bbe3df Add tplink KP303 to discovery (#58548) 2021-10-28 21:12:44 -07:00
Avi Miller 2cae44c98a Return the real MAC address for LIFX bulbs with newer firmware (#58511) 2021-10-28 21:12:43 -07:00
J. Nick Koston 41007c2864 Reduce rainmachine intervals to avoid device overload (#58319) 2021-10-28 21:12:42 -07:00
Allen Porter 695bc3f23c Add an image placeholder for Nest WebRTC cameras (#58250) 2021-10-28 21:12:42 -07:00
Pieter Mulder 59bee8e830 Allow initialized callback to have arguments (#58129) 2021-10-28 21:12:41 -07:00
Dave Lowper 3650a5e2a4 Fix ZeroDivisionError on freebox/sensor (#57077)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-28 21:12:41 -07:00
Franck Nijhof 4fffeb1155 Bumped version to 2021.11.0b0 2021-10-27 22:01:47 +02:00
Bram Kragten f56802f8e9 Update frontend to 20211027.0 (#58545) 2021-10-27 21:55:58 +02:00
Hans Oischinger 066610923e Support ViCare energy units (#58433) 2021-10-27 21:15:54 +02:00
yeahme49 15c4f3906b Blink arm camera (#56474) 2021-10-27 13:24:55 -05:00
hesselonline 6d6cb03848 Add Number platform to Wallbox (#52786)
Co-authored-by: jan iversen <jancasacondor@gmail.com>
2021-10-27 12:53:14 -05:00
Erik Montnemery abb84d9756 Serialize dates and times to isoformat (#58157) 2021-10-27 10:51:38 -07:00
Marc Mueller ced89d8f29 Enable strict typing - bmw_connected_drive (#58506) 2021-10-27 12:32:10 -05:00
epenet b85217c62e Adjust onewire device model (#58516)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-27 12:19:55 -05:00
Austin Mroczek baaaf3d2bc Add multi-partition support for TotalConnect (#55429) 2021-10-27 12:15:13 -05:00
Paulus Schoutsen 6cd83d1f66 Allow storing picture in area registry (#58539) 2021-10-27 10:11:05 -07:00
Erik Montnemery f228537458 Fix energy cost sensor for MWh + improve tests (#58540) 2021-10-27 19:07:05 +02:00
jan iversen 55534cfedd When tradfri device goes offline set attr_available false (#58487) 2021-10-27 18:27:16 +02:00
Colin Robbins 39998f5387 Add kWh as cost option for gas (#58426)
* Add kWh as cost option for GAS

* Add kWh as cost option for GAS (pylint)

* Add kWh as cost option for GAS (make CONST)

* Change GAS_UNITS to VALID_ENERGY_UNITS

* Add test for Gas cost in kWh (2)

* Back off ENERGY_WATT_HOUR - unlikely for gas

* Add MEGA_WATT_HOUR support (2)

* Normalise pricing for MEGA_WATT_HOUR

* Normalise pricing for MEGA_WATT_HOUR
2021-10-27 18:06:32 +02:00
terminet85 0111b28a67 Add Solar Edge entity device and state class (#55902) 2021-10-27 16:42:56 +02:00
Erik Montnemery 41e14c4871 Correct changes in Allow extra keys in MQTT discovery messages (#58534) 2021-10-27 16:33:02 +02:00
Franck Nijhof e70606eee9 Merge branch 'master' into dev 2021-10-27 16:11:28 +02:00
Erik Montnemery bed4096430 Allow specifying a super template for async_track_template_result (#58477) 2021-10-27 16:07:17 +02:00
Erik Montnemery dfa50a842a Simplify recorder PgSQL version checks (#58533) 2021-10-27 16:05:40 +02:00
drizzle1 a835917311 Add new orange pi boards to orangepi integration (#58392)
Co-authored-by: Pascal Roeleven <pascal.roeleven@hotmail.com>
Co-authored-by: Pascal Roeleven <dev@pascalroeleven.nl>
2021-10-27 16:00:01 +02:00
epenet 8c1935ce0e Use DeviceInfo in smappee (#58522)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-27 15:13:18 +02:00
Hans Oischinger e656974e8d Increase setMode flexibility (#58491) 2021-10-27 14:22:16 +02:00
Hans Oischinger 8e8ccb7ce4 Fix Vicare unique_ids (#58531) 2021-10-27 14:19:26 +02:00
epenet 4be8d5ebde Use DeviceInfo in solarlog (#58526)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-27 13:57:45 +02:00
Franck Nijhof bf693e85b1 Revert "Add warning when entity used in template doesn't exist" (#58527) 2021-10-27 13:53:26 +02:00
Diogo Gomes ad48d78315 Simplify utility_meter code base with croniter (#55625) 2021-10-27 06:41:44 -05:00
J. Nick Koston 5581f58aad Handle accessories without a serial number in homekit_controller (#58498) 2021-10-27 06:24:57 -05:00
epenet 3b7f620aad Use DeviceInfo in sma (#58521)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-27 13:19:07 +02:00
epenet 6db7f73032 Use DeviceInfo in smartthings (#58523)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-27 13:17:47 +02:00
epenet 80bbfde07e Use DeviceInfo in smarttub (#58524)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-27 13:17:20 +02:00
epenet 8e62fc254a Use DeviceInfo in sms (#58525)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-27 13:16:59 +02:00
Franck Nijhof 6f14f954f9 Move WLED palette to config entity category (#58517) 2021-10-27 13:16:07 +02:00
epenet df6351f86b Use DeviceInfo in shelly (#58520)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-27 13:44:47 +03:00
epenet c1dc2bbf28 Use DeviceInfo in sharkiq (#58519)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-27 12:35:53 +02:00
epenet 9d3c75510f Use DeviceInfo in screenlogic (#58518)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-27 12:20:19 +02:00
Tom Schneider a3dbe8e1e7 Fix media_player grouping while media_player is off (#58070)
Co-authored-by: Erik Montnemery <erik@montnemery.com>
2021-10-27 12:08:19 +02:00
epenet 8017a1e141 Adjust onewire device manufacturer (#58515)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-27 12:02:07 +02:00
Simone Chemelli f8af44cac2 Fritz clean device_tracker service (#56535) 2021-10-27 05:01:06 -05:00
epenet 19eba5a3a0 Use constants for device registry checks (#58514)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-27 11:34:58 +02:00
Daniel Hjelseth Høyer 91b07cce20 Fix available for Mill (#58510) 2021-10-27 11:10:54 +02:00
muppet3000 ac08d05b76 Refactor Growatt sensor types (#56544) 2021-10-27 11:09:57 +02:00
uvjustin 35acca1063 Use PyAV fork and set hvc1 codec tag for H.265 (#58309) 2021-10-27 11:04:46 +02:00
Robert Svensson f6e38fc4e2 Fix issue where UniFi DPI groups state wasn't being updated (#58502) 2021-10-27 10:35:44 +02:00
Andreas Sansano d827b2ff56 Add myStrom LED Strip support extending rgblamp bulb_type (#57322) 2021-10-27 10:11:26 +02:00
J. Nick Koston 4653d0b079 Retry yeelight setup later if first update fails (#58446) 2021-10-27 10:09:45 +02:00
Colby Rome 58b6b5854d Bump quantum_gateway to v0.0.6 (#58452) 2021-10-27 10:04:14 +02:00
yeahme49 7d459c03c4 Fix min_humidity and max_humidity in homekit_controller (#58507)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-27 10:02:07 +02:00
Tyler Gibson fab93491cc Fix Microsoft tts defaults to resolve broken settings (#58499) 2021-10-27 09:54:12 +02:00
Oliver Ou 433541862f Fix endpoints issues for Tuya Integration (#58411) 2021-10-26 20:19:26 -07:00
L-I-Am 3727fb5288 Broadlink Integration add support for LB1 (#50953)
Co-authored-by: Felipe Martins Diel <41558831+felipediel@users.noreply.github.com>
2021-10-26 21:20:11 -05:00
Brett Adams b57b2e0243 Add Select platform to Advantage Air (#54747)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-26 20:58:14 -05:00
GitHub Action e75e40f26e [ci skip] Translation update 2021-10-27 00:11:52 +00:00
Jesse Hills c656bf1646 Add entity categories to esphome (#58495) 2021-10-27 12:53:39 +13:00
Aaron Bach e2e19cf4b4 Bump aioambient to 2021.10.0 (#58494) 2021-10-26 17:44:40 -06:00
Glenn Waters de4a4c3ba9 Add async lib and DataUpdateCoordinator for environment_canada (#57746) 2021-10-26 14:23:43 -07:00
Paulus Schoutsen 3715286969 Bump frontend to 20211026.0 (#58500) 2021-10-26 14:08:35 -07:00
Petro31 11034a93c3 Add average template function and filter (#57727) 2021-10-26 22:43:45 +02:00
Erik Montnemery 953ad71d22 Fix flaky UPNP test (#58493) 2021-10-26 13:35:09 -07:00
uvjustin 7024a5d7d9 Minor cleanup on stream (#58486)
* Allow for rounding errors in playlist validation

* Allow EXT-X-TARGETDURATION to change

* Reuse original source in test_record_stream_audio
2021-10-26 13:11:33 -07:00
epenet 577d8b1469 Fix device_info for xiaomi_aqara (#58465)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-26 13:11:05 -07:00
Robert Svensson 26c5f89207 Allow data sources to affect client tracker state after reconnecting to UniFi controller (#58269) 2021-10-26 22:04:16 +02:00
Daniel Hjelseth Høyer 6860acd28f Add Mill Sense Air sensors (#57776)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-26 21:15:33 +02:00
J. Nick Koston c3c0a52929 Fix overriding the yeelight model if it is not known (#56967) 2021-10-26 21:04:19 +02:00
Philip Allgaier 5e88760fa7 Add translations for binary_sensor device classes (#58471)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-26 20:41:44 +02:00
Christian Bilevits 370c7a7ccf Bump pyotp to 2.6.0 (#58413) 2021-10-26 20:41:12 +02:00
Yuval Aboulafia 4db743d01f Remove Huawei Router (ADR-0004) (#57136) 2021-10-26 20:32:22 +02:00
Marc Mueller b60934b10d Enable type checking - bmw_connected_drive (#58310) 2021-10-26 13:27:26 -05:00
Robert Svensson 47f6313e5b Add entity category to UniFi sensors and switches (#58484) 2021-10-26 20:23:20 +02:00
David F. Mulcahey dd1154ad08 Bump ZHA quirks version to 0.0.63 (#58478) 2021-10-26 20:22:18 +02:00
Michael Chisholm 2ea537e1a6 dlna_dmr will gracefully handle device's rejection of subscription attempt (#58451) 2021-10-26 20:19:18 +02:00
FlavorFx c5cf69dd9b Support Energy Sensor and Statistics in Homematic IP Cloud Integration (#57734)
* Update sensor.py

* Update test_device.py
2021-10-26 20:01:42 +02:00
Joakim Sørensen f15840e7ff Limit add-on stats to add-ons that are running (#58479) 2021-10-26 19:58:17 +02:00
Martin Hjelmare 8b021ea06b Fix mysensors metric/non-metric gateway (#58476) 2021-10-26 18:47:10 +02:00
Martin Hjelmare 777589cdcc Add vlc telnet error handler decorator (#58468)
* Add vlc telnet error handler decorator

* Delint

* Update stale docstring
2021-10-26 18:43:33 +02:00
Joakim Plate 6b1b8c9880 Fjaraskupan number entity for periodic venting (#58179) 2021-10-26 10:53:13 -05:00
Paulus Schoutsen 5deeeed672 Add some more required/optional tags to condition schemas (#58424) 2021-10-26 17:25:15 +02:00
Allen Porter f1b082a369 Publish nest event ids in camera related events (#58299) 2021-10-26 10:14:12 -05:00
Tom Brien 11d8bcf0e2 Register Coinbase service in Device Registry and provide configuration URL (#58472) 2021-10-26 16:39:46 +02:00
Tobias Sauerwein 3970a50553 Add reauth for Netatmo when token or token scope is invalid (#57487) 2021-10-26 16:09:10 +02:00
Robert Meijers c9966a3b04 Add offset support to time trigger (#56838) 2021-10-26 15:52:43 +02:00
Allen Porter d49c5d511b Add entity_category to SmartThings sensors (#58375) 2021-10-26 14:55:03 +02:00
Paulus Schoutsen 77d02d08bc Validate device automation capablities WS calls (#58444) 2021-10-26 14:47:07 +02:00
Erik Montnemery ac5e32d648 Corrections for external statistics (#58469) 2021-10-26 14:05:45 +02:00
Tobias Sauerwein ac4496b985 Use async_on_unload in Netatmo (#58461) 2021-10-26 13:43:54 +02:00
Erik Montnemery e9ba5f3b4b Warn when recorder connects to an unsupported database (#58161) 2021-10-26 13:41:59 +02:00
Lukas abf6edea6a Add device_class and state_class as optional attributes to the scrape sensor, to support statistics (#58164) 2021-10-26 13:39:34 +02:00
Brent Petit 6b9fb4bda3 Clean up rounding in Ecobee integration (#56319) 2021-10-26 07:37:43 -04:00
Ville Skyttä b0e1bab58b Use http.HTTPStatus in util.aiohttp (#58456) 2021-10-26 13:13:27 +02:00
Maikel Punie 339d041925 Address late review of velbus (#58463) 2021-10-26 12:45:42 +02:00
Peter Nijssen fd45a07677 Automatic spider supported fan speed and hvac (#58308)
* Automatic fill of supported fan speed and hvac

Automatic fill of supported fan speed and hvac

* Update manifest of spiderpy to 1.5.0

Update manifest of spiderpy to 1.5.0

* Update spiderpy version to 1.5.0 in requirements files

* Code formatted using Black

* Move support fan and hvac values into a class variable

* Move convert to HA value to hvac_modes method

* Log a warning for any invalid operation mode

* Update homeassistant/components/spider/climate.py

Update as suggested by @mivn23

Co-authored-by: mvn23 <schopdiedwaas@gmail.com>

* PR feedback update + dependency update

* Remove logging

Co-authored-by: Bennert <info@bennert.nl>
Co-authored-by: mvn23 <schopdiedwaas@gmail.com>
2021-10-26 11:05:03 +02:00
Andre Richter 486866b576 Use NamedTuple in Vallox service_to_method mapping (#58361) 2021-10-26 10:55:29 +02:00
Maikel Punie 00377a926e Fix velbus climate (#58408)
* Initial work on velbus climate fixes home-assistant/core#58382

* Clean up the code, fixed the preset_mode

* Fix climate havc mode return value
2021-10-26 10:53:13 +02:00
Matthias Alphart d0cc2a530a Remove redundant value test in KNX Number entity (#58455)
* remove redundant test for out of bound value

* increase test coverage for number
2021-10-26 10:42:42 +02:00
Joakim Sørensen d16304a201 Allow homeassistant prefix for device info configuration url (#58414)
* Allow panel prefix for device info configuration url

* Add to add-ons

* Use homeassistant as the prefix

* Update homeassistant/components/hassio/__init__.py

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

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-10-26 10:34:02 +02:00
J. Nick Koston def7c80e71 Add support for fan groups (#57941)
* Add support for fan groups

* dry

* dry

* fix refactor error

* tweaks

* wip

* tweaks

* tweaks

* fix

* fixes

* coverage

* tweaks
2021-10-26 10:32:49 +02:00
Erik Montnemery f594bc353b Add support for external statistics (#56607)
* Support external statistics

* Update tests

* Lint

* Adjust code after rebase

* Separate external statistic_id with :, add name to metadata

* Adjust tests

* Simplify get_metadata_with_session

* Address review comments

* Allow updating external statistics

* Validate input

* Adjust tests after rebase

* Pylint

* Adjust tests

* Improve test coverage
2021-10-26 10:26:50 +02:00
Teemu R 2f346a8048 Add speed & intensity controls to wled (#56862)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2021-10-26 00:04:19 -07:00
Kevin Stillhammer bd5c131675 Add all kraken entities on startup (#58027)
* Add all kraken entities on startup

* Add _async_add_kraken_sensors

* Add test sensors available after restart

* Add test for config update

* Update tests/components/kraken/test_sensor.py

Co-authored-by: Allen Porter <allen.porter@gmail.com>

Co-authored-by: Allen Porter <allen.porter@gmail.com>
2021-10-26 00:02:49 -07:00
Raman Gupta cee51ead91 Add typehints to eight_sleep (#58442) 2021-10-25 21:33:44 -07:00
Robert Hillis 2517ba59b5 Fix Aurora abb incorrect attr (#58450) 2021-10-25 23:12:21 -05:00
Franck Nijhof 65b19da3ff Refactor input_select (#53334) 2021-10-25 20:38:06 -07:00
J. Nick Koston 3732ae738e Fix flux_led with RGB/W bulbs (model 0x44) (#58438) 2021-10-25 21:53:13 -05:00
Raman Gupta 207a5029e8 Use class attribute instead of property decorator (#58448) 2021-10-25 21:51:11 -04:00
Dave T e22aaea5b2 Aurora abb (solar) configflow (#36300)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-25 20:04:42 -05:00
Michael Chisholm 44aa1fdc66 dlna_dmr won't support devices that don't provide all DMR services (#58374) 2021-10-25 19:54:58 -05:00
GitHub Action a9a74e0415 [ci skip] Translation update 2021-10-26 00:12:23 +00:00
Paulus Schoutsen cd3e51b3e7 Ensure domain is correct format (#58429) 2021-10-25 15:56:07 -07:00
Aaron Bach a813608185 Re-add support for realtime SimpliSafe websocket (#58061)
* Migrate SimpliSafe to new web-based authentication

* Ensure we're storing data correctly

* Re-add support for realtime websocket in SimpliSafe

* Updates

* Better lock state from websocket

* Unknown states

* Streamline

* Unnecessary assertion

* Remove conditions we can't reach

* Require multiple error states from REST API before reacting

* Only disconnect when needed

* Typing

* Code review
2021-10-25 16:45:13 -06:00
Joakim Sørensen 8b223be073 Add binary sensor to add-ons to show if they are running (#58120) 2021-10-26 00:21:44 +02:00
Raman Gupta b71773fd1d Set entity_category for node status sensor (#58434) 2021-10-25 17:54:13 -04:00
Aaron Bach fbdd445999 Add WattTime config option for showing the monitored location on the map (#57129)
* Add WattTime configuration option for showing the monitored location on the map

* Update tests

* Explicitly pass entry

* Tests
2021-10-25 15:52:14 -06:00
Tim Rightnour dad5d19a35 Add config flow to venstar (#58152) 2021-10-25 23:40:36 +02:00
jjlawren 2d6fa5c453 Fix updating sensor on unlinked Plex server (#58418) 2021-10-25 23:36:26 +02:00
Robert Hillis f2a5c4602e Use DeviceInfo Class L-M (#58312) 2021-10-25 23:26:40 +02:00
Joakim Sørensen 6341dd4883 Add running device class to binary sensor (#58423) 2021-10-25 23:05:27 +02:00
Franck Nijhof ba901bbbbf Complete Air Conditioner (kt) device support for Tuya (#58417) 2021-10-25 22:55:21 +02:00
Simone Chemelli 9d231ac2f8 Abort Fritz config flow for configured hostnames (#58140)
* Abort Fritz config flow for configured hostnames

* Fix tests + consider all combinations

* Fix async context
2021-10-25 22:44:23 +02:00
Raman Gupta 6bc5961f8a Switch to UpdateCoordinator for eight sleep (#52614)
* Switch to UpdateCoordinator for eight sleep

* use super call

* add self as codeowner

* Call API update method directly when creating coordinator

* Update homeassistant/components/eight_sleep/__init__.py

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

* Update homeassistant/components/eight_sleep/__init__.py

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

Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-25 16:18:33 -04:00
Artem Draft 787de8ba66 bump pylgnetcast to 0.3.5 (#58419) 2021-10-25 21:58:17 +02:00
Hans Oischinger d5142bcf51 Update PyVicare to 2.13.1 (#58422)
See changelog: https://github.com/somm15/PyViCare/releases/tag/2.13.1
2021-10-25 21:54:21 +02:00
Robert Hillis 7ccfaed736 Use DeviceInfo Class P-R (#58324) 2021-10-25 18:26:03 +02:00
Martin Hjelmare 5642350070 Add zwave_js sensor entity categories (#58416) 2021-10-25 18:14:44 +02:00
Franck Nijhof 585dcf84f1 Add state_class/entity_category to Verisure (#58403) 2021-10-25 16:32:29 +02:00
Alexei Chetroi fe15736418 Log correct ZHA channel initialization step (#58410) 2021-10-25 16:30:00 +02:00
Alexei Chetroi 0c684cee51 Bump up ZHA dependencies (#58409) 2021-10-25 10:29:47 -04:00
David Le Brun ffd7c998d0 Meteofrance - Add state_class to appropriate sensors (#58401)
Co-authored-by: Erik Montnemery <erik@montnemery.com>
2021-10-25 15:55:49 +02:00
epenet 42793927f7 Use ATTR_VIA_DEVICE constant in onewire tests (#58405)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-25 09:42:40 -04:00
epenet 29c95a0b34 Use constants in renault tests (#58406)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-25 09:42:01 -04:00
Brett Adams 71230f1f1c Advantage Air fix logic for motion sensors (#58376)
* Check correct value for motion

* Update fixture for motion

* Small cleanup in fixture
2021-10-25 14:14:41 +02:00
epenet d7c41c0b05 Use DeviceInfo in asuswrt (#58399)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-25 14:12:49 +02:00
epenet 3c83f31dea Drop unused ATTR_ENTRY_TYPE constant (#58400)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-25 14:10:56 +02:00
Franck Nijhof 367c4d3676 Add Smart Kettle (bh) device support to Tuya (#58347) 2021-10-25 13:48:43 +02:00
Erik Montnemery 640a7fee9d Allow extra keys in MQTT discovery messages (#58390)
* Allow extra keys in MQTT discovery messages

* Remove extra keys
2021-10-25 13:47:06 +02:00
epenet a8a8b532d0 Use DeviceInfo in mqtt (#58389)
* Use DeviceInfo in mqtt

* Updates for mypy

Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-25 13:46:09 +02:00
Hans Oischinger 66ae116023 Update PyVicare to 2.13.0 (#57700)
* Update PyVicare to 2.x

With PyViCare 2.8.1 a breaking change was introduced which required changes on sensor and binary_sensor platforms:
- Circuit, Burner and Compressor have been separated out from the "main" device
- Multiple circuits and burners allow "duplicate sensors". We add the circuit or burner number as suffix now

At the same time the sensors are now created only when available:
During entity creation we can check if the value is provided for the user's device.

Sensors are not created by heating type anymore but instead the new API structure is reflected, providing device, burner or circuit sensors.

For details of breaking changes from PyViCare 1.x to 2.x please see https://github.com/somm15/PyViCare#breaking-changes-in-version-2x

* Integrate review comments

* variables cleanup

* Update unique ids

The unique ids shall not depend on the name but on the entity
description key (which should not change) and the id of the circuit,
burner or device.
2021-10-25 13:43:43 +02:00
Steven Looman be4b1d15ec Add configuration_url to upnp device (#58385) 2021-10-25 13:19:04 +02:00
epenet cfe1bbcda0 Use DeviceInfo in huawei-lte (#58398)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-25 13:17:55 +02:00
epenet 48c85fb839 Use DeviceInfo on esphome (#58396)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-25 13:16:53 +02:00
epenet 4d7c55ff0e Use DeviceInfo on hassio (#58397)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-25 13:15:00 +02:00
epenet f3ca61ffe0 Use DeviceInfo on awair (#58395)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-25 13:09:21 +02:00
Brett Adams e529a56430 Add entity category to Advantage Air (#58371) 2021-10-25 12:45:09 +02:00
Simone Chemelli 6d5dd3ee77 Add entity category to MotionEye (#58370) 2021-10-25 12:44:03 +02:00
J. Nick Koston a36ac11d57 Add entity category to hunterdouglas_powerview (#58368) 2021-10-25 12:43:00 +02:00
J. Nick Koston b09f6620eb Add entity category to nut battery (#58363) 2021-10-25 12:42:15 +02:00
Sagi Bernstein 07f268de1f Run nuki bidge.info() on executor (#58345)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2021-10-25 12:41:32 +02:00
Tobias Sauerwein ab66efba0e Add entity categories to Netatmo (#58383) 2021-10-25 12:38:59 +02:00
epenet c47ac1d9d6 Use DeviceInfo on accuweather (#58394)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-25 12:38:38 +02:00
epenet 9d952d0242 Use DeviceInfo in control4 (#58388)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-25 12:23:11 +02:00
Steven Looman e5e38ace6c Bump async-upnp-client to 0.22.10 (#58387) 2021-10-25 12:22:19 +02:00
Franck Nijhof 21709e7170 Upgrade Tuya IoT Python SDK to 0.6.3 (#58240) 2021-10-25 12:09:54 +02:00
epenet ef48238ac3 Adjust DeviceInfo registration on zwave_js (#58391)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-25 12:05:45 +02:00
Andre Richter b3f6be0cec Minor cleanups for Vallox (#58384) 2021-10-25 10:15:18 +02:00
gjong f30963e15b Upgrade youless library to fix LS110 power total is not a number (#58333) 2021-10-25 09:46:08 +02:00
Franck Nijhof 027e167d95 Add support for unit of measurement in MQTT number platform (#58343) 2021-10-25 09:44:43 +02:00
Simone Chemelli 34b936da98 Add entity category to Neato (#58367) 2021-10-25 09:44:15 +02:00
J. Nick Koston 3abb4bd3e5 Add configuration_url to isy994 (#58372) 2021-10-25 09:37:37 +02:00
Franck Nijhof 35872a212b Add Temperature and Humidity Sensor (wsdcg) device support to Tuya (#58335) 2021-10-25 09:19:00 +02:00
J. Nick Koston 80b12346d8 Add entity category to elkm1 (#58364) 2021-10-25 09:00:06 +02:00
J. Nick Koston 837e343c56 Add entity category to gogogate2 (#58366) 2021-10-25 08:59:06 +02:00
J. Nick Koston 1a261f7802 Add entity category to roomba (#58362) 2021-10-25 08:56:51 +02:00
J. Nick Koston d05127cb71 Add entity category to august (#58359) 2021-10-25 08:56:15 +02:00
jan iversen 79f68b050a Bump pytradfri to 7.1.1 (#58379) 2021-10-25 08:55:50 +02:00
J. Nick Koston 9885b3de47 Fix configuration url in gogogate2 (#58365)
- I missed that https:// needed to be prepended because the existing
  device already had the url from previous testing
2021-10-25 08:16:15 +02:00
Patrik Lindgren c950f1ccfa Initial support for Tradfri STARKVIND Air purifier (#58295)
* Initial commit

* Update homeassistant/components/tradfri/const.py

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

* Feedback

* Updates

* Remove logger

* Fix codestring

* Update homeassistant/components/tradfri/fan.py

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

* Update homeassistant/components/tradfri/fan.py

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

* Update homeassistant/components/tradfri/fan.py

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

* Percent value

* Add tests

* Typo

* Update tests

* Fix util function

* Update homeassistant/components/tradfri/fan.py

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

* Update after review

* Review

* Coverage

* Fix test

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-25 08:15:46 +02:00
Paulus Schoutsen a69416521e Add entity category to MyQ (#58377)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-24 22:21:20 -07:00
uvjustin 06008bc343 Fix EXT-X-PROGRAM-DATE-TIME in stream (#58036)
* Fix EXT-X-PROGRAM-DATE-TIME in stream

* Update fragment duration comments in worker

* Update duration test in worker

* Augment test on low latency playlists

* Reset start_time on discontinuity
2021-10-25 11:33:41 +08:00
Marvin Wichmann e9ca511327 Add support for entity category for necessary KNX platforms (#58357) 2021-10-24 20:12:26 -07:00
GitHub Action f3a1c81e22 [ci skip] Translation update 2021-10-25 00:12:33 +00:00
Andre Richter 2fe758edd4 Add Cell State sensor to Vallox (#58358) 2021-10-24 13:30:09 -10:00
jjlawren 5a20d9fce3 Set Sonos alarm and battery entity categories (#58340) 2021-10-24 12:52:15 -10:00
jjlawren 3672889609 Add warning if Sonos not linked to Plex (#58150) 2021-10-24 12:51:45 -10:00
J. Nick Koston 2a6247cf20 Fix lookin push updates when sensor entities disabled (#58346) 2021-10-24 11:53:11 -10:00
jjlawren 0600a21e02 Allow advanced Plex play_media search options (#56226) 2021-10-24 11:22:16 -10:00
Andre Richter 6c01ed8d97 Use DataUpdateCoordinator in Vallox (#56966) 2021-10-24 11:21:35 -10:00
J. Nick Koston 02372cd65a Fix lookin device validation in config flow (#58349)
These need to be prefixed with http:// or validation will fail
2021-10-24 14:13:49 -07:00
Marvin Wichmann 85ecb7ce3a feat: Add unit of measurement to KNX number platform (#58353) 2021-10-24 13:16:19 -07:00
javicalle 137a346d15 add BitronVideo AV2021 ZHA stick (#58337) 2021-10-24 15:57:29 -04:00
Franck Nijhof c6a278a544 Pin pytest-github-actions-annotate-failures to fix broken CI (#58351) 2021-10-24 09:22:17 -10:00
alexanv1 f4c2c54e84 Extend Tuya Humidifier (#58260) 2021-10-24 20:34:05 +02:00
Ivan Belokobylskiy 8c3b711c5e Support suburban railways stations in yandex transport (#58281)
* Add unique ids to yandex_transport entities

* Add support for railway routes to yandex_transport component

* Test suburban timetable parsed correctly

* Remove redundant default value

* Make unique_id unique and stable

* Remove unique_id from yandex_transport component
2021-10-24 17:36:35 +02:00
Ville Skyttä 0de95610e3 Use http.HTTPStatus in components/[wxyz]* (#58330) 2021-10-24 17:25:01 +02:00
Ville Skyttä 1a9bb47f78 Add more Huawei LTE sensor state classes (#57983) 2021-10-24 17:01:50 +03:00
Franck Nijhof f2923d8a91 Add PM2.5 Sensor (pm25) device support to Tuya (#58329) 2021-10-24 07:01:17 -07:00
Franck Nijhof a225d28089 Add Methane Detector (jwbj) device support to Tuya (#58328) 2021-10-24 07:01:03 -07:00
Franck Nijhof 539fdaad69 Add VOC Sensor (voc) device support to Tuya (#58332) 2021-10-24 06:58:11 -07:00
TheNogl 0f965c6b31 Add long-term statistics for Ondilo ICO (#58290) 2021-10-24 11:52:25 +02:00
Franck Nijhof 6f0c1d2345 Complete Solar Light (tyndj) device support to Tuya (#58302) 2021-10-24 11:46:46 +02:00
J. Nick Koston 438ca73aba Complete removal of auto_start, zeroconf_default_interface, and safe_mode from HomeKit (#58320) 2021-10-24 11:46:35 +02:00
Allen Porter 31aa168bbb Fix bug in MediaSource definintion and enable strict type checking (#58321) 2021-10-24 11:39:39 +02:00
Maciej Bieniek 0aa06d22f1 Move configuration_url abbreviation to MQTT DEVICE_ABBREVIATIONS const (#58313) 2021-10-24 11:35:46 +02:00
Robert Hillis 2df13d0118 Use DeviceInfo Class N-O (#58314) 2021-10-24 11:34:45 +02:00
J. Nick Koston 0c94fcecf6 Pull configuration_url from library in gogogate2 (#58318) 2021-10-24 11:32:45 +02:00
Ville Skyttä cc0c79ac9a Use http.HTTPStatus in components/[tuv]* (#58325) 2021-10-24 11:27:17 +02:00
Matthias Alphart 45a98aee10 Configurable mode for KNX number entity (#58268) 2021-10-24 11:24:05 +02:00
Simone Chemelli da7e26c287 Filter by connections instead of identifiers for Shelly (#58305)
* Fix connections

* Switch to helper
2021-10-24 09:51:02 +02:00
GitHub Action 30fb619095 [ci skip] Translation update 2021-10-24 00:12:57 +00:00
jjlawren 084fd2d19f Expose Sonos features as switch entities (#54502)
Co-authored-by: Tobias Sauerwein <cgtobi@users.noreply.github.com>
2021-10-23 23:11:27 +02:00
Nathan Spencer 21daffe905 Bump pylitterbot to 2021.10.1 (#58307) 2021-10-23 11:07:28 -10:00
Daniel Hjelseth Høyer 26f0ea4a24 OpenGarage binary sensor (#58030)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-23 10:53:49 -10:00
fOmey 8bfd5e4d06 Add switch platform to Tuya Light (dj) devices (#58196)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2021-10-23 22:44:22 +02:00
Franck Nijhof 75e561f1fa Complete Smart Camera (sp) device support to Tuya (#58301) 2021-10-23 12:24:40 -07:00
Chris Browet e961d92b5e Allow service data template to return a dict (#57105) 2021-10-23 21:10:30 +02:00
epenet 9ae7f0ecd7 Add new attribute constants for DeviceInfo registration (#58289)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-23 21:01:34 +02:00
Ville Skyttä 380cff167e Use HTTPStatus in components/[nop]* (#58279) 2021-10-23 20:56:30 +02:00
Ville Skyttä 5626cc4524 Use http.HTTPStatus in components/r* (#58288) 2021-10-23 20:53:39 +02:00
J. Nick Koston 5958e6a3f9 Ensure zeroconf uses the newest non-link local address in discovery (#58257) 2021-10-23 08:50:19 -10:00
Ville Skyttä 50e0c58310 Use http.HTTPStatus in components/s* (#58291) 2021-10-23 20:49:04 +02:00
Robert Hillis 05671557f0 Use DeviceInfo Class I-K (#58300) 2021-10-23 20:42:50 +02:00
Ville Skyttä b52c5c82b1 Use http.HTTPStatus in components/[gh]* (#58246) 2021-10-23 20:34:53 +02:00
Aaron Bach 583ae3c953 Make sure Flu Near You data storage conforms to standards (#57808) 2021-10-23 20:18:34 +02:00
Franck Nijhof 43abf38d92 Complete Heater (qn) device support to Tuya (#58296) 2021-10-23 20:06:46 +02:00
Franck Nijhof 7d0fc8ca98 Add Pressure Sensor (ylcg) device support to Tuya (#58294) 2021-10-23 09:16:28 -07:00
Franck Nijhof 3cdfb84b79 Add Gas Detector (rqbj) device support to Tuya (#58293) 2021-10-23 09:15:52 -07:00
Franck Nijhof 0a272669ed Add CO Detector (cobj) device support to Tuya (#58292) 2021-10-23 09:15:12 -07:00
ANMalko 581d9ec281 Update aiolookin to 0.0.3 version (#58249) 2021-10-23 16:17:25 +02:00
Robert Hillis 4a8e9df026 Use DeviceInfo Class H (#58276) 2021-10-23 15:35:33 +02:00
jrester f176dc512c Update tesla_powerwall to 0.3.12 (#58284) 2021-10-23 15:35:23 +02:00
Robert Hillis cbf236b2f6 Fix modem callerid callback (#58275)
* fix async_on_hass_stop

* fix
2021-10-23 15:15:43 +02:00
Franck Nijhof a4641a91ff Ensure all devices show up in Tuya (#58280) 2021-10-23 15:00:53 +02:00
Joakim Sørensen 23e362faf3 Bump awesomeversion from 21.8.1 to 21.10.1 (#58258) 2021-10-23 14:00:18 +02:00
Joakim Sørensen 2a7192167d Use regex instead of partition to section package definition (#58278) 2021-10-23 13:19:56 +02:00
Franck Nijhof e38754a836 Address Watson TTS review comment (#58277) 2021-10-23 12:14:15 +02:00
epenet 513c90123e Use DeviceInfo on components with suggested_area (#58225)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-23 12:03:14 +02:00
Robert Hillis 63646a19cc Use DeviceInfo Class F-G (#58255) 2021-10-23 12:01:21 +02:00
Robert Hillis 12c067970a Use DeviceInfo Class E (#58230) 2021-10-23 11:44:51 +02:00
Robert Hillis 137d41d8b4 Use DeviceInfo Class B-C (#58217) 2021-10-23 11:41:32 +02:00
Ivan Belokobylskiy 059880ebdc Fix yandex captcha detecting (#56132)
Yandex recently switched to the new captcha page and the new version of aiomaps supports it.
The check for captcha is moved to platform setup.

Fixes #56035
2021-10-23 11:14:32 +02:00
Clifford Roche a0c96f2a9a Bump greeclimate to 0.12.2 (#58256) 2021-10-23 10:19:19 +02:00
Allen Porter 400e85a299 Rename tests filenames to conform to Home Assistant standards (#58266) 2021-10-22 22:25:55 -07:00
Allen Porter fc7be8aa00 Fix a bug in a nest test that causes side effects for other tests (#58264)
Fix a bug where a constant configuration variable in the common test library
is modified during the test, causing side effects for other tests.

This was found by renaming the tests, which caused other tests to fail.
2021-10-22 21:33:40 -07:00
Allen Porter 7627b959f8 Fix format bug in nest log statement (#58263)
* Fix format bug in nest log statement

* Resolve lint error logging-fstring-interpolation
2021-10-22 21:33:19 -07:00
Michael Davie e481c862a6 Change precision of Nest sensors (#56993)
* Change precision of Nest sensors

* Add comment to temp rounding

Co-authored-by: Allen Porter <allen.porter@gmail.com>

* Update rounding and tests

* Add test for rounding

Co-authored-by: Allen Porter <allen.porter@gmail.com>
2021-10-22 20:31:25 -07:00
Nicolas Mowen 93b061e9d9 Update ismartgate dependency (#58259) 2021-10-22 16:33:30 -10:00
Maikel Punie 37b7eda37a Bump velbusaio to 2021.10.6 (#58168)
* Bump velbusaio to 2021.10.3

* Bump velbusaio to 2021.10.5

* Bump velbusaio to 2021.10.6
2021-10-23 03:42:33 +02:00
some-guy-in-oz b2d67f8d19 Add grid services active sensor to telsa powerwall integration (#56317)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2021-10-22 14:25:25 -10:00
GitHub Action 1b42caa34a [ci skip] Translation update 2021-10-23 00:11:40 +00:00
Ville Skyttä 77120a5137 Use http.HTTPStatus in components/m* (#58251) 2021-10-22 23:54:36 +02:00
drinfernoo b49b975999 Allow different voices in Watson TTS calls (#56811) 2021-10-22 23:50:32 +02:00
Allen Porter 7d6ad6e5e3 Add additional nest stream test coverage (#58013) 2021-10-22 23:30:15 +02:00
John James Jacoby 750a8f2d37 Spelling & grammar improvements to bug_report.yml (#56800)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2021-10-22 23:22:19 +02:00
itairaz1 8d46802558 Apple TV power management (#51520) 2021-10-22 23:13:14 +02:00
Yuval Aboulafia a9ccd70e71 Fully type Jewish Calendar (#56232) 2021-10-22 23:11:41 +02:00
Nihaal Sangha fe0151491e Improve Discord notifier (#52523) 2021-10-22 23:09:30 +02:00
Ville Skyttä ce1eda9809 Use http.HTTPStatus in components/[ikl]* (#58248) 2021-10-22 23:06:18 +02:00
Chris Browet 1867d24b18 Add state_class support to Rest (#58026) 2021-10-22 13:48:13 -07:00
Michael Chisholm ee087c7a05 Discovery ignores DLNA DMR devices when they are better supported by another integration (#57363) 2021-10-22 10:26:33 -10:00
Yuval Aboulafia a195418dd3 ISS cleanup (#55801) 2021-10-22 22:17:05 +02:00
Joakim Plate 8da3b4c79f Bump arcam library to 0.12 with new series support (#53843) 2021-10-22 22:13:17 +02:00
Ville Skyttä b1360ffafb Use http.HTTPStatus in components/f* (#58244) 2021-10-22 22:10:47 +02:00
rik-v 4369b0b8be Fix Fibaro light features (#56385) 2021-10-22 22:09:19 +02:00
Robert Hillis 23710d1496 Add strict typing to modem_callerid (#57683) 2021-10-22 22:04:06 +02:00
Dennis Schroer f1091b80a7 Add statistics support to Huisbaasje (#54651) 2021-10-22 22:00:44 +02:00
Marc Mueller 823ca7ee40 Use attributes octoprint (#58241) 2021-10-22 21:41:06 +02:00
Sören b0b49c611e Nello removal (#57926) 2021-10-22 21:40:39 +02:00
Marvin Wichmann 5193e3115d Restore the previous state of a KNX binary sensor (#57891) 2021-10-22 20:52:41 +02:00
Franck Nijhof b413f7434f Add support for min/max dimmer brightness in Tuya (#58165) 2021-10-22 20:28:16 +02:00
J. Nick Koston c7b4542624 Enable strict typing in lookin (#58238) 2021-10-22 20:14:33 +02:00
avee87 d9b87ee5c5 Add warning when entity used in template doesn't exist (#57316) 2021-10-22 20:09:54 +02:00
Robert Svensson 9c1bee9c16 Add support for device configuration URL to UniFi Controller (#58237) 2021-10-22 20:04:25 +02:00
Raman Gupta e5255cf21f Add area_entities and area_devices template functions/filters (#55228) 2021-10-22 19:59:01 +02:00
Petro31 806dc51125 Add datetime_today template method (#57435) 2021-10-22 19:51:22 +02:00
epenet 001a452bb7 Update naming scheme for Renault entities (#57922)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-22 19:46:02 +02:00
Ville Skyttä 73d192b3f3 Use HTTPStatus instead of HTTP_ consts and magic values in comp.../[bc]* (#57989) 2021-10-22 19:43:40 +02:00
Robert Svensson ab7a34fc71 Add support for device configuration URL to deCONZ gateway (#58184) 2021-10-22 19:41:49 +02:00
Franck Nijhof 843296c1a3 Add product ID to model for Tuya (#58235) 2021-10-22 19:39:31 +02:00
J. Nick Koston 3b7dce8b95 Index in-progress flows to avoid linear search (#58146)
Co-authored-by: Steven Looman <steven.looman@gmail.com>
2021-10-22 07:19:49 -10:00
Marc Mueller fa56be7cc0 Use value_fn for bmw_connected_drive binary_sensor (#57540) 2021-10-22 18:55:13 +02:00
Bouwe Westerdijk 1aa7a8170c Fix plugwise longterm statistics (#58127)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2021-10-22 09:46:21 -07:00
Artem Draft 5a102d793e Bump pylgnetcast to 0.3.4 (#58233) 2021-10-22 18:25:01 +02:00
Klaas Schoute efbe8a8689 Fix unit of measurement for P1 Montior (#57495) 2021-10-22 18:24:12 +02:00
Paul Monigatti a3b3c4ebad Consolidate ESPHome icon-handling code into EsphomeEntity (#57744) 2021-10-22 18:21:41 +02:00
Robert Hillis da7b67cc29 Add strict typing to efergy (#57682) 2021-10-22 18:20:39 +02:00
epenet f6ffae9e10 Use DeviceInfo on components with configuration_url (#58223)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-22 17:40:13 +02:00
Lars 416d87c01c Fix fritzbox tests (#58227) 2021-10-22 17:29:36 +02:00
epenet 51a10f88de Use DeviceInfo on components with via_device (#58222)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-22 17:04:25 +02:00
Robert Hillis fc3e7f5b7e Use DeviceInfo Class D (#58218) 2021-10-22 17:00:00 +02:00
Robert Hillis 59fe30e589 Use DeviceInfo class - A (#57859) 2021-10-22 16:35:39 +02:00
Ville Skyttä 8bc1509afa Use HTTPStatus instead of HTTP_ consts and magic values in comp.../[de]* (#57990) 2021-10-22 16:28:56 +02:00
Ryan Fleming c84fee7c6e Rework octoprint (#58040)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-22 15:25:12 +02:00
Simone Chemelli 1a9ac6b657 Switch Fritz to device selector for services (#58005) 2021-10-22 14:34:02 +02:00
Lars 2148c84386 Support for Fritz!DECT 500 lightbulbs (#52830) 2021-10-22 14:30:03 +02:00
Erik Montnemery ab2ff45726 Warn if state_changed events are excluded from recorder (#58021) 2021-10-22 14:25:36 +02:00
thomas-svrts f25d3cf9b3 Gogogate2 add statistics (#58178)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-22 14:24:43 +02:00
Michael Chisholm 164f09c1f0 Sleep between device requests to detect socket closes (#58087) 2021-10-22 14:22:10 +02:00
Ville Skyttä a598d9f353 Use HTTPStatus instead of HTTP_ consts and magic values in components/a* (#57988) 2021-10-22 14:21:34 +02:00
David K Turner 55ffc85a0a Enable long-term statistics for OpenWeatherMap sensors (#57781) 2021-10-22 14:19:19 +02:00
Regev Brody 3c52bc214d Add Smoke Detector (ywbj) device support to Tuya (#58170) 2021-10-22 14:18:01 +02:00
Marc Mueller ea2e94a4e5 Use assignment expressions 24 (#58181) 2021-10-22 14:07:19 +02:00
Marc Mueller eab235173b Use assignment expressions 28 (#58189) 2021-10-22 14:06:04 +02:00
epenet a3d1159a13 Use DeviceInfo on components with via_device (R-X) (#58213)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-22 12:52:33 +02:00
epenet 176ed4f7ba Use DeviceInfo on components with via_device (I-T) (#58212)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-22 12:31:12 +02:00
Aaron Bach 6dd72869a6 Make sure Guardian data storage conforms to standards (#57809) 2021-10-22 12:25:05 +02:00
avee87 a0bb2c8b33 Add memory/cpu percentage to Supervisor addons entities (#57468)
* Add memory/cpu percentage to Supervisor addons entities

* fixed lint

* Use a single update function. Fixed tests

* use constant

* review comments

* oops
2021-10-22 12:23:21 +02:00
Aaron Bach 61e093cecd Make sure Ambient PWS data storage conforms to standards (#57807) 2021-10-22 12:17:25 +02:00
Aaron Bach 8bc10db0bb Make sure RainMachine data storage conforms to standards (#57816) 2021-10-22 12:14:58 +02:00
epenet 8dfa628af0 Use DeviceInfo on components with via_device (A-G) (#58210)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-22 12:12:19 +02:00
Aaron Bach 5c3d2a5071 Make sure IQVIA data storage conforms to standards (#57811) 2021-10-22 12:11:10 +02:00
Tom Brien 024c892b2a Remove black color name for light dropdowns (#58207) 2021-10-22 12:04:12 +02:00
epenet 58c5b5058c Use DeviceInfo on components with via_device (H) (#58211)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-22 11:52:48 +02:00
epenet c00a5fad8f Cleanup device registration in Onewire (#58101)
* Add checks for device registry

* Move registry checks to init.py

* Run device registry check on disabled devices

* Empty commit for testing

* Register devices during initialisation

* Adjust tests accordingly

* Add via_device to device info

* Adjust access to device registry

Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-22 11:45:40 +02:00
Tomer 766a693514 Fix registration UI to work for Israel devices (#58192) 2021-10-22 11:45:16 +02:00
Allen Porter 4242711301 Bump google-nest-sdm to 0.3.8 (#58186) 2021-10-22 11:37:30 +02:00
epenet 0b302ab141 Use DeviceInfo on zwave (#58183)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-22 11:36:40 +02:00
Marc Mueller 9990385926 Use assignment expressions 25 (#58182) 2021-10-22 11:34:45 +02:00
epenet 2e5c9b69d4 Use DeviceInfo on zha (#58202)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-22 11:32:15 +02:00
Marc Mueller 184e0d7fdf Use assignment expressions 26 (#58187) 2021-10-22 11:31:17 +02:00
Marc Mueller be201e3ebe Use assignment expressions 27 (#58188) 2021-10-22 11:29:21 +02:00
Tobias Sauerwein 83e45300c2 Add configuration_url to Netatmo devices (#58160) 2021-10-22 11:14:28 +02:00
Marc Mueller 70469e0979 Use assignment expressions 23 (#58180) 2021-10-22 11:13:05 +02:00
Robert Svensson 281adfe3c9 Add support for device configuration URL to Axis devices (#58176) 2021-10-22 11:09:50 +02:00
Maciej Bieniek 038158508c Add configuration_url to AsusWrt integration (#58172) 2021-10-22 11:08:46 +02:00
Álvaro Fernández Rojas f740302287 Add long-term statistics for Tado sensors (#58111) 2021-10-22 11:07:33 +02:00
Joakim Plate c0934ce03c Fjaraskupan entity categories (#57846) 2021-10-22 10:50:21 +02:00
Erik Montnemery 547e36ae94 Tweak energy validator (#58018)
* Tweak energy validator

* Update code and tests

* Tweak implementation

* Update tests

* Update after rebase
2021-10-22 10:38:04 +02:00
J. Nick Koston d67c1118dc Cleanup lookin entity MRO and inheritance (#58194) 2021-10-21 20:22:51 -10:00
J. Nick Koston d27ee4c1a4 Allow setting the nexia run mode with the hvac mode (#57940) 2021-10-21 18:25:25 -10:00
GitHub Action f9d985553c [ci skip] Translation update 2021-10-22 00:14:10 +00:00
J. Nick Koston 7cc924e83c Remove unreachable code in data_entry_flow.py (#58193)
- bc1daf1802 removed the need for this
  guard
2021-10-22 01:45:16 +02:00
Martin Hjelmare cc4241836e Move notify setup to legacy (#58033) 2021-10-21 16:09:08 -07:00
ANMalko 749258a05d Add climate platform to lookin (#58175)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-21 12:00:48 -10:00
J. Nick Koston 4a9209ebc8 Bump async-upnp-client to 0.22.9 (#58185)
Co-authored-by: Steven Looman <steven.looman@gmail.com>
2021-10-21 10:58:34 -10:00
Steven Looman dcf60b54ce Improve SSDP discovery compatibility when device was discovery through an SSDP advertisement (#58133) 2021-10-21 10:57:34 -10:00
ANMalko 626bd25129 Add LOOKin integration (#58125)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-21 07:10:23 -10:00
Álvaro Fernández Rojas 946df49ca8 Add long-term statistics for AEMET sensors (#57844) 2021-10-21 09:03:37 -07:00
Erik Montnemery df1154395e Revert "Swap order of int template helper kwargs (#57729)" (#58015)
This reverts commit f8dbcb953c.
2021-10-21 15:03:33 +02:00
Aaron Bach 2ff356393c Clean up SimpliSafe entity inheritance structure (#58063)
* Migrate SimpliSafe to new web-based authentication

* Ensure we're storing data correctly

* Re-organize SimpliSafe device structure

* Constants

* More work

* Code review
2021-10-21 12:54:50 +02:00
Simone Chemelli c7ff6eb5ee Address late review for Fritz entity_category (#58141) 2021-10-21 08:36:52 +02:00
Brig Lamoreaux 50686bd06d Add Device Type Energy to Srp Energy Sensor (#58147) 2021-10-21 08:35:59 +02:00
Marc Mueller 62c20860ac Use assignment expressions 22 (#57971) 2021-10-21 08:33:10 +02:00
Robert Hillis ea2bc3fde1 Add entity categories to goalzero (#57906) 2021-10-21 08:31:32 +02:00
Marc Mueller 1bcf39517a Use assignment expressions 13 (#57938) 2021-10-21 08:27:42 +02:00
Marc Mueller c979e89b70 Use assignment expressions 14 (#57939) 2021-10-21 08:26:01 +02:00
Paulus Schoutsen 4eea618cc4 input_datetime: Move has_date, has_time to capability_attributes (#58138) 2021-10-21 08:22:34 +02:00
Daniel Perna acb24788d0 Update pyhomematic to 0.1.76 (#58136) 2021-10-21 08:21:48 +02:00
Philip Allgaier 8f1ba96d0b Remove accidental blanks from Shelly trigger type translations (#58151) 2021-10-21 08:21:04 +02:00
Philip Allgaier 548b872229 Add missing names for notify service fields (#58154) 2021-10-21 08:20:37 +02:00
jjlawren 3ffe0b3625 Add configuration_url to Plex integration (#58149) 2021-10-21 08:01:00 +02:00
jjlawren 379a0e2b53 Add configuration_url to Sonos devices (#58148) 2021-10-21 08:00:34 +02:00
Franck Nijhof dcaa689023 Add auto slider/box mode to number entity (#57737) 2021-10-21 07:20:39 +02:00
Paulus Schoutsen 3bdc637d1b Bump frontend to 20211020.0 (#58139) 2021-10-20 20:26:25 -07:00
GitHub Action 4634b65924 [ci skip] Translation update 2021-10-21 00:12:43 +00:00
Brandon Rothweiler a496465235 Bump pymazda to 0.2.2 (#58113) 2021-10-21 00:58:40 +02:00
Ville Skyttä 840dc2b931 Run tests with -X dev and -bb (#58079) 2021-10-20 15:43:04 -07:00
J. Nick Koston 20c35e6032 Move Screenlogic lights to the light platform (#55467)
Co-authored-by: Kevin Worrel <37058192+dieselrabbit@users.noreply.github.com>
2021-10-20 12:38:21 -10:00
Maciej Bieniek 18ce799f74 Add configuration_url to Denon AVR integration (#58116) 2021-10-20 15:34:42 -07:00
Aaron Bach 47678c5995 Add entity categories for appropriate AirVisual entities (#58102) 2021-10-20 15:22:48 -07:00
jan iversen f2a5d92e61 Fix connect_fail test and modbus.py 100% coverage (#57894)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
2021-10-20 15:22:24 -07:00
jan iversen cca7da77ad Report modbus buffer too small or too big to unpack (#57838) 2021-10-20 15:22:01 -07:00
Aaron Bach 38586d2cf1 Add entity categories for appropriate Ambient PWS entities (#58100) 2021-10-20 15:17:28 -07:00
Aaron Bach 388761922b Add entity categories for appropriate Guardian entities (#58104) 2021-10-20 14:58:09 -07:00
Aaron Bach 03b1150115 Add entity categories for appropriate Notion entities (#58105) 2021-10-20 14:57:45 -07:00
Aaron Bach 745e42621b Add entity categories for appropriate RainMachine entities (#58107) 2021-10-20 14:57:28 -07:00
Andrey Kupreychik a824fa9a7b Abort keenetic SSDP discovery if the unique id is already setup or ignored (#58009) 2021-10-20 14:53:23 -07:00
Erik Montnemery c1d671b817 Fix template sensor when name template doesn't render (#58088) 2021-10-20 14:53:06 -07:00
Marc Mueller 4513ee4ea5 Use assignment expressions 12 (#57937) 2021-10-20 14:34:08 -07:00
Franck Nijhof 7353ea5416 Add Dimmer Switch (tgkg) device support to Tuya (#58134) 2021-10-20 23:19:42 +02:00
Franck Nijhof c204196a7a Add Formaldehyde Detector (jqbj) device support to Tuya (#58118) 2021-10-20 11:49:10 -07:00
Marc Mueller 487fa0a905 Use assignment expressions 20 (#57969) 2021-10-20 20:31:00 +02:00
Erik Montnemery 398061706c Correct unit_of_measurement for statistics sensor (#58023) 2021-10-20 20:28:48 +02:00
Jesse Hills 35e9cf68a2 Add configuration url to Sonarr (#58085) 2021-10-20 20:25:29 +02:00
Aaron Bach 70fc3f84fc Add entity categories for appropriate SimpliSafe entities (#58108) 2021-10-20 20:24:38 +02:00
Robert Svensson 333c80a694 Assign entity category diagnostics to deCONZ tampering sensors (#58112) 2021-10-20 20:24:11 +02:00
Yuval Aboulafia 2fcce7fd12 Bump hdate to 0.10.4 (#58121) 2021-10-20 20:17:46 +02:00
J. Nick Koston ad463b7994 Ensure lutron_caseta triggers can still be attached in setup retry state (#57873) 2021-10-20 07:34:38 -10:00
Franck Nijhof 3e57d0d3d3 Complete Switch/Socket/Power Strip device support for Tuya (#58106) 2021-10-20 19:08:43 +02:00
Franck Nijhof 5fc2897c08 Complete Ceiling Light (xdd) device support for Tuya (#58095) 2021-10-20 09:24:34 -07:00
Marc Mueller ea7252e377 Use assignment expressions 21 (#57970) 2021-10-20 17:47:46 +02:00
Robert Hillis d20936d175 Fix referenced before assignment error in sonos speaker (#57924) 2021-10-20 17:44:08 +02:00
Marc Mueller 9a58bfdf41 Use assignment expressions 17 (#57963)
Co-authored-by: Tobias Sauerwein <cgtobi@users.noreply.github.com>
2021-10-20 17:42:26 +02:00
Robert Svensson 326a302c22 Fix issue where Number still would send force_update to super method (#58110) 2021-10-20 17:06:27 +02:00
Erik Montnemery b301ab25a3 Purge short term statistics (#58028)
* Purge short term statistics

* Less meep

* Add tests
2021-10-20 16:00:59 +02:00
Erik Montnemery 558c2556f1 Report all unrecorded sensors in statistics tool (#58092) 2021-10-20 15:58:28 +02:00
Erik Montnemery e3534eec87 Report orphaned statistics in statistic validation (#57324) 2021-10-20 15:57:22 +02:00
Jan Bouwhuis e2303dc713 bitwise and for test supported_features (#58097) 2021-10-20 15:31:23 +02:00
J. Nick Koston b507b9ebfb Bump ismartgate to 4.0.3 (#58073)
* Bump ismartgate to 4.0.3

Fixes #56245

Changelog: https://github.com/bdraco/ismartgate/compare/v4.0.0...v4.0.3

* restart ci
2021-10-20 15:02:08 +02:00
Robert Svensson 3ad3f4e2ba Simplify signalling for updating available property of deCONZ entities (#58078) 2021-10-20 14:59:36 +02:00
David Le Brun 2bd64cec11 Add state_class to current bandwith sensors for bbox integration (#58086)
* Add state_class to current bandwith sensors

* Fix isort test
2021-10-20 14:53:14 +02:00
Franck Nijhof c75346addc Add CO2 Detector (co2bj) device support to Tuya (#58093) 2021-10-20 14:20:24 +02:00
jan iversen b3117ced75 Please pylint for modbus test (#58089) 2021-10-20 13:38:55 +02:00
jan iversen 45983b5edf Activate tradfri in coverage and clean conftest for tradfri (#58058) 2021-10-20 13:36:02 +02:00
Jan Bouwhuis 62b7453719 Fix supported_features behaviour for fan platform (#58065) 2021-10-20 13:06:06 +02:00
Jan Bouwhuis a679ebcee7 Patch for Alexa percentage_step to precision (#58062)
* speed_step must be an integer and a divider of 100

* use percentage_step in tests to test patch

* test with not supported percentage_step

* undo change in test_capabilities

* Use a default precision of one not percentage_step

* typo 2

* Update tests/components/alexa/test_smart_home.py

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

* Update homeassistant/components/alexa/capabilities.py

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

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2021-10-20 13:05:11 +02:00
Robert Svensson 4736bf3c32 Don't use deprecated ways of retrieving registries in Axis (#58083) 2021-10-20 13:03:52 +02:00
epenet dfd2501c2c Cleanup duplicate code in Onewire tests (#58082)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-20 11:43:59 +02:00
Robert Svensson 008b784fc5 Add deCONZ number config entity for Hue motion sensor delay (#58076)
* First working draft of number platform

* Replace duration with delay for Hue motion sensors
Improve tests

* Bump dependency to v85

* Use constant for entity category

* Use type rather than using __class__

* Fix unique ID
2021-10-20 11:23:24 +02:00
Robert Svensson 25f4f2d86e Don't use deprecated methods of retrieving registries in deCONZ (#58081) 2021-10-20 11:16:28 +02:00
Robert Svensson b8cf6513d9 Address late review of unifi (#58080)
* Fix late comment from 57570

* Remove other references to legacy ways
2021-10-20 10:59:07 +02:00
Erik Montnemery 5f37fffcd1 Bump pychromecast to 9.3.1 (#58035) 2021-10-20 09:44:20 +02:00
Robert Svensson edefa9f4f4 Assign entity category diagnostics to deCONZ battery sensors (#58077) 2021-10-20 09:11:17 +02:00
epenet 704929ddd0 Remove legacy tests in onewire (#58075)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-20 09:10:32 +02:00
J. Nick Koston cafb3067ce Bump flux_led to 0.24.12 (#58071) 2021-10-20 09:02:02 +02:00
GitHub Action 7a7f5ccc31 [ci skip] Translation update 2021-10-20 00:12:17 +00:00
micha91 518151fbe6 Fix Yamaha MusicCast media_stop (#58024) 2021-10-20 00:18:08 +02:00
Tom Schneider c6aa767be6 Add volume_up and volume_down to musiccast (#57919) 2021-10-20 00:14:55 +02:00
J. Nick Koston 4f0886fd7d Bump flux_led to 0.24.11 (#58020) 2021-10-19 11:40:35 -10:00
Franck Nijhof e65345900f Add Human Presence Sensor (hps) device support to Tuya (#58054) 2021-10-19 23:17:00 +02:00
Aaron Bach 0fe5baa425 Rework RainMachine entity ID generation (#58055) 2021-10-19 10:10:51 -10:00
Aaron Bach bf7c99c1f8 Migrate SimpliSafe to new web-based authentication (#57212) 2021-10-19 10:09:48 -10:00
Ville Skyttä 8e0cb5fcec Fix clickatell send_error error check (#57985) 2021-10-19 22:04:13 +02:00
Erik Montnemery dde8ac4eb5 Add support for kPa to sensor statistics (#58032) 2021-10-19 21:43:08 +02:00
epenet 1b0118a81b Use constants in Onewire tests (#58017)
* Use ATTR_ENTITY_ID constant

* Add ATTR_UNIQUE_ID constant

* Add new attribute constants

* Fix missing ATTR_DEFAULT_DISABLED

Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-19 21:41:01 +02:00
Paulus Schoutsen ab0247d112 Add entity category and state class to mobile app (#58012) 2021-10-19 12:29:22 -07:00
Franck Nijhof bc9b134c5d Clean up self references from Tuya climate platform constructor (#58051) 2021-10-19 21:04:46 +02:00
Daniel Hjelseth Høyer d2f7f418c3 Add more sensors to Opengarage (#58042) 2021-10-19 11:15:40 -07:00
Franck Nijhof 6d898a631c Add Water Detector (sj) device support to Tuya (#58049) 2021-10-19 20:09:06 +02:00
Erik Montnemery bb9053e93d Add MWh as an energy unit (#58034) 2021-10-19 11:08:44 -07:00
Daniel Hjelseth Høyer 8eef2113c7 Add more info to OpenGarage device info (#58037) 2021-10-19 11:08:03 -07:00
Daniel Hjelseth Høyer b7db8dd62a Add configuration url to Surepetcare (#58039)
Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>
2021-10-19 20:00:08 +02:00
Daniel Hjelseth Høyer 24d3bf0930 Add configuration url to Tractive (#58038)
Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>
2021-10-19 19:57:01 +02:00
Franck Nijhof fbe3ce1bf7 Add cover platform to Tuya (#58045) 2021-10-19 19:36:15 +02:00
Daniel Hjelseth Høyer eb2f2d3905 Add configuration url to Airthings (#58041)
Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>
2021-10-19 18:47:14 +02:00
Brig Lamoreaux d1e30fdd54 Rewrite test for feedreader (#57292)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-19 17:15:56 +02:00
Paulus Schoutsen 4fe4e65e3e Add entity category to Hue (#58011) 2021-10-19 12:29:43 +02:00
Franck Nijhof d8a354fa8f Add humidifier platform to Tuya (#58025) 2021-10-19 12:10:05 +02:00
Martin Hjelmare 9a5f16d85c Deprecate OpenZWave in manifest (#57987) 2021-10-19 12:07:57 +02:00
Jan Bouwhuis 58569a58a9 MQTT Alarm control panel - Enable remote code validation (#57764)
* Enable remote code validation

* Update homeassistant/components/mqtt/alarm_control_panel.py

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

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2021-10-19 12:07:38 +02:00
Franck Nijhof 4f2d313a4a Remove device category filtering from Tuya init (#58019) 2021-10-19 10:56:37 +02:00
Erik Montnemery 961ee717ef Store automation and script traces (#56894)
* Store automation and script traces

* Pylint

* Deduplicate code

* Fix issues when no stored traces are available

* Store serialized data for restored traces

* Update WS API

* Update test

* Restore context

* Improve tests

* Add new test files

* Rename restore_traces to async_restore_traces

* Refactor trace.websocket_api

* Defer loading stored traces

* Lint

* Revert refactoring which is no longer needed

* Correct order when restoring traces

* Apply suggestion from code review

* Improve test coverage

* Apply suggestions from code review
2021-10-19 10:23:23 +02:00
epenet 29c062fcc4 Rework Onewire tests to enable disabled entities (#58014)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-19 09:10:26 +02:00
Daniel Hjelseth Høyer a3cae17d88 Open garage sensor (#57976) 2021-10-19 09:05:55 +02:00
Steven Looman db474707a0 Preventing working with incomplete discoveries from user config flow in upnp (#57994) 2021-10-18 20:57:48 -10:00
Robert Hillis 4625a05706 Add init tests for agent dvr (#57022)
* Add init tests for agent dvr

* ci
2021-10-19 08:53:30 +02:00
rikroe 8debb7c784 Add service to stop air conditioning to bmw_connected_drive (#57772)
Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2021-10-19 08:46:04 +02:00
Brian Egge 708f2ae089 Fix issue parsing color effect None in flux_led (#57979)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-18 20:36:25 -10:00
Erik Montnemery 9a26a8cfd8 Add support for daily and monthly statistics (#57576)
* Add support for daily and monthly statistics

* Remove debug code

* Format code

* Don't use dateutil package

* Remove 2 TODOs

* Remove TODO

* Add comments
2021-10-19 08:29:23 +02:00
J. Nick Koston 6576225c48 Log unhandled loop exception traces when asyncio debug is on (#57602) 2021-10-18 20:07:51 -07:00
jan iversen f92fe38bbd Change warning to info when modbus is ready (#57953)
* Change warning to info.

* Make level info implicit.
2021-10-18 19:38:33 -07:00
Marc Mueller 9561c51276 Use assignment expressions 16 (#57962) 2021-10-18 19:36:35 -07:00
Erik Montnemery 2bae113748 Mark Tasmota status sensors as diagnostic sensors (#57958)
* Mark Tasmota status sensors as diagnostic sensors

* Disable IP and firmware version sensors by default
2021-10-18 19:33:26 -07:00
Simone Chemelli 1a978662ec Add configuration_url and entity_category to Fritz (#58004) 2021-10-18 19:30:45 -07:00
Zac West 1904019b5f Include webhook_id in mobile_app's notify registration_info (#58007) 2021-10-18 19:29:13 -07:00
rikroe 58417f509b BMW: Fix check_control_message short description (#57998)
Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2021-10-18 19:28:19 -07:00
J. Nick Koston 5138efcd92 Bump flux_led to 0.24.9 (#58006)
- Adds missing description for 0x04 models
2021-10-18 19:27:26 -07:00
GitHub Action 3855bb43ec [ci skip] Translation update 2021-10-19 00:12:08 +00:00
Jesse Hills 334e3062a6 Add configuration url to Juicenet (#57999) 2021-10-19 11:51:29 +13:00
Felipe Martins Diel 6f0a7d2921 Add to the Broadlink integration support for voltage, current, overload and total consumption sensors (#53628) 2021-10-18 11:38:51 -10:00
starkillerOG 9bd2115a20 Motion blinds add interface and wait_for_push options (#50067)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-18 23:34:51 +02:00
Franck Nijhof 174eaefe61 Add vacuum platform to Tuya (#57996) 2021-10-18 23:30:26 +02:00
J. Nick Koston ae660d9366 Pickup codeowner for bond (#57995) 2021-10-18 22:27:33 +02:00
Joakim Plate bc5422d737 Bump fjaraskupan to 1.0.2 (#57992) 2021-10-18 22:23:06 +02:00
Erik Montnemery fe8b9caf99 Bump pychromecast to 9.3.0 (#57991) 2021-10-18 21:48:50 +02:00
René Klomp 8b21a36e37 Bump pysma to 0.6.7 (#57978) 2021-10-18 20:59:37 +02:00
Franck Nijhof be73b21f81 Refactor Tuya light platform (#57980) 2021-10-18 20:35:01 +02:00
ollo69 b01170d917 Add Nut missing tests for config flow (#57964) 2021-10-18 07:17:10 -10:00
epenet 24737d4d1d Use pytest fixtures on Onewire tests (#57973)
* Add pytest fixtures

* Add sysbus fixtures

* Adjust parameter name

Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-18 19:16:53 +02:00
Peter Nijssen 3d8e802141 Mark spider YAML configuration as deprecated (#57974) 2021-10-18 18:56:10 +02:00
J. Nick Koston 698f3ca96c Bump flux_led to 0.24.8 (#57934) 2021-10-18 06:52:17 -10:00
David Le Brun 4f25b2ca08 Support device and state classes for WAQI sensor (#57762) 2021-10-18 18:45:26 +02:00
Erik Montnemery 47fdf078e4 Bump hatasmota to 0.2.21 (#57966) 2021-10-18 18:41:18 +02:00
Marc Mueller f149bef9f3 Use assignment expressions 18 (#57967) 2021-10-18 18:36:35 +02:00
Marc Mueller ff853b2d53 Use assignment expressions 19 (#57968) 2021-10-18 15:54:38 +02:00
Erik Montnemery 786e1f9b6a Add configuration url to Tasmota (#57957) 2021-10-18 14:53:47 +02:00
Marc Mueller 1e98761f30 Use assignment expressions 15 (#57961) 2021-10-18 14:01:23 +02:00
epenet a421c524c1 Use pytest fixtures on Renault tests (#57955)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2021-10-18 13:27:44 +02:00
starkillerOG 04f51e599a Fix netgear NoneType and discovery (#57904) 2021-10-18 12:01:58 +02:00
Franck Nijhof 55c80b4093 Tuya tweaks to entity category, registry enabled, icons & device classes (#57949) 2021-10-18 09:24:59 +02:00
dependabot[bot] 81efdb2df2 Bump actions/checkout from 2.3.4 to 2.3.5 (#57947)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-10-18 08:50:33 +02:00
Paulus Schoutsen 388339fee2 Merge pull request #57944 from home-assistant/rc 2021-10-17 23:32:02 -07:00
Robert Svensson ed37d2a794 New service reconnect_client for UniFi integration (#57570)
* Initial proposal of a client reconnect service

* Slim setup and teardown of services

* Minor improvements

* Add tests
2021-10-18 08:06:06 +02:00
Paulus Schoutsen c3766a8136 Bumped version to 2021.10.6 2021-10-17 22:31:40 -07:00
Aaron Bach b5f2bffc96 Fix bug that prevents multiple instances of Tile (#57942) 2021-10-17 22:31:36 -07:00
Marc Mueller 589db0615f Revert "Fix bmw_conntected_drive check_control_message short description" (#57928)
This reverts commit acda3afe63.
2021-10-17 22:31:35 -07:00
J. Nick Koston bb6a9a7e2e Bump bond-api to 0.1.14 (#57874) 2021-10-17 22:31:34 -07:00
J. Nick Koston be3f32ef71 Prevent yeelight discovery from overloading the bulb (#57820) 2021-10-17 22:31:33 -07:00
Johannes la Poutre 60eb47e1ae Fix device class for energy plugwise sensors (#57803)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2021-10-17 22:31:32 -07:00
J. Nick Koston 010daaf990 Avoid setting up harmony websocket from discovery (#57589) 2021-10-17 22:30:59 -07:00
Aaron Bach 6a8ff9ffe7 Fix bug that prevents multiple instances of Tile (#57942) 2021-10-17 20:32:18 -07:00
J. Nick Koston cac0c04a91 Avoid setting up harmony websocket from discovery (#57589) 2021-10-17 20:32:02 -07:00
J. Nick Koston 147febb18a Prevent yeelight discovery from overloading the bulb (#57820) 2021-10-17 20:30:43 -07:00
Allen Porter dafea00f41 Rename stream_type to frontend_stream_type (#57923)
Camera devices may support multiple stream sources so we want to clarify that
this is meant to decide which stream source is used in the frontend only.

Will set stream_type temporarily to allow rollout without breaking nightly,
and this will be removed after frontend is updated.
2021-10-17 20:16:29 -07:00
GitHub Action a1176cc79a [ci skip] Translation update 2021-10-18 00:11:59 +00:00
Marc Mueller 3c4b715524 Revert "Fix bmw_conntected_drive check_control_message short description" (#57928)
This reverts commit acda3afe63.
2021-10-18 01:21:56 +02:00
Felipe Martins Diel 32d6c27ba0 Bump broadlink to 0.18.0 (#57929) 2021-10-17 12:47:53 -10:00
Allen Porter 4501906da3 Fix additional nest camera_sdm_tests to use STATE_STREAMING (#57920) 2021-10-17 22:04:12 +02:00
Marc Mueller 6ca23c67ff Use EntityDescription - bmw_connected_drive sensor (#57796) 2021-10-17 21:05:06 +02:00
Franck Nijhof 4fd8b27ce6 Add Vibration Sensor (zd) device support to Tuya (#57795) 2021-10-17 20:56:15 +02:00
Daniel Hjelseth Høyer f390812183 Adax attr (#57867) 2021-10-17 20:56:03 +02:00
J. Nick Koston 284861c8bb Add support for push updates to flux_led (#57890) 2021-10-17 08:47:35 -10:00
Marc Mueller 4f8148f9ea Use assignment expressions 07 (#57787) 2021-10-17 20:24:34 +02:00
Marc Mueller 2b72b7b7b9 Use assignment expressions 09 (#57790) 2021-10-17 20:19:56 +02:00
Marc Mueller aa7dc78a1e Use assignment expressions 11 (#57792) 2021-10-17 20:15:48 +02:00
Marc Mueller 238b488642 Use assignment expressions 03 (#57710) 2021-10-17 20:08:11 +02:00
Marc Mueller 2a8eaf0e0f Use assignment expressions 06 (#57786) 2021-10-17 20:05:11 +02:00
Marc Mueller d5116810d4 Use assignment expressions 08 (#57788) 2021-10-17 20:02:42 +02:00
Marc Mueller 5048bad050 Use assignment expressions 05 (#57785) 2021-10-17 19:56:00 +02:00
J. Nick Koston d09ee11c54 Fix bond reloading on zeroconf discovery when host has not changed (#57799) 2021-10-17 19:50:13 +02:00
Daniel Hjelseth Høyer e9d601a688 Opengarage dataupdater (#56931) 2021-10-17 07:48:45 -10:00
Daniel Hjelseth Høyer 8f6ed2d27e Add category diagnostic to Surepetcare binary sensor (#57908) 2021-10-17 19:47:07 +02:00
Allen Porter 3d33cad655 Improve nest error handling for websocket streams (#57885) 2021-10-17 19:46:18 +02:00
Allen Porter 95b07c138c Set nest camera always on STATE_STREAMING (#57882) 2021-10-17 19:45:31 +02:00
ollo69 fe0291012c Use attr_device_info and add init tests for nut (#57725) 2021-10-17 07:43:15 -10:00
Daniel Hjelseth Høyer bcd431e848 Add device info to Adax (#57907) 2021-10-17 19:40:47 +02:00
Daniel Hjelseth Høyer 9b693f7f2b Airthings entity category diagnostic (#57850) 2021-10-17 07:30:13 -10:00
Daniel Hjelseth Høyer 64145d6ccf Add category diagnostic to Switchbot battery and signal sensor (#57854) 2021-10-17 07:27:03 -10:00
Daniel Hjelseth Høyer 9c3aa8156d Add category diagnostic to Surepetcare battery sensor (#57852) 2021-10-17 07:26:29 -10:00
Daniel Hjelseth Høyer dd2d708cb9 Add category diagnostic to Tibber signal sensor (#57840) 2021-10-17 07:25:49 -10:00
Franck Nijhof 4aadb848e1 Add unit/device_class validation and normalization to Tuya (#57913)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-17 19:24:49 +02:00
Johannes la Poutre 0fc2946f88 Fix device class for energy plugwise sensors (#57803)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2021-10-17 18:49:18 +02:00
Robert Svensson 93ba966808 Add the correct device class to deCONZ Tamper entity (#57834) 2021-10-17 17:45:32 +02:00
J. Nick Koston 2edad82078 Fix order of arguments in rainmachine sensors (#57895) 2021-10-17 17:44:48 +02:00
starkillerOG 58f13e4e34 push motionblinds to 0.5.7 (#57902) 2021-10-17 16:53:49 +03:00
Robert Hillis f5e2960a92 Fix mode_callerid attributes (#57774)
* Allow mode_callerid to display number only

* alphabetize

* tweak

* only include attr if there is data
2021-10-17 14:53:18 +02:00
Maciej Bieniek 85c6942f55 Bump brother library to version 1.1.0 (#57892) 2021-10-17 00:12:35 -10:00
Maciej Bieniek 0b932b53c9 Do not probe nam device if the host is already configured (#57843) 2021-10-17 00:12:01 -10:00
J. Nick Koston 378c48da15 Improve lutron caseta error reporting when bridge is offline (#57832) 2021-10-16 23:11:35 -10:00
Joakim Sørensen f4918b2d9a Fix Tuya documentation URL (#57889) 2021-10-17 10:50:48 +02:00
Fredrik Erlandsson 4b55893781 Bump pypoint (#57888) 2021-10-17 10:50:23 +02:00
jan iversen c9f55c01af Bump pymodbus to 2.5.3. (#57887) 2021-10-17 10:11:28 +02:00
Joakim Plate a1e9a06675 Add sensor category for rssi and battery (#57848) 2021-10-17 09:45:11 +02:00
Marvin Wichmann 48d4cdf882 Update xknx to 0.18.11 and fix flaky test (#57877)
* Update xknx to 0.18.11

* review: join the queue before actually asserting
2021-10-17 09:43:18 +02:00
Aaron Bach b6ed8ca206 Make sure Notion data storage conforms to standards (#57812) 2021-10-16 23:59:36 -06:00
Aaron Bach fd49da37b8 Make sure OpenUV data storage conforms to standards (#57813) 2021-10-16 23:59:19 -06:00
Aaron Bach 3da3d26573 Make sure AirVisual data storage conforms to standards (#57806) 2021-10-16 23:58:39 -06:00
Maciej Bieniek 6fb0609f0c Add use time sensor for air purifiers (#57775) 2021-10-17 07:39:25 +02:00
J. Nick Koston d46ae04ec7 Add additional models to flux_led DHCP discovery (#57881) 2021-10-16 18:43:41 -10:00
J. Nick Koston 5461fa9a2d Bump bond-api to 0.1.14 (#57874) 2021-10-16 15:57:11 -10:00
Maciej Bieniek 276345e20a Decrease timeout and update_interval in Xiaomi Miio integration (#57339)
* Decrease timeout and update_interval

* Improve UPDATE_INTERVAL const

* Update values after testing
2021-10-17 03:13:12 +02:00
GitHub Action c76e15149c [ci skip] Translation update 2021-10-17 00:12:27 +00:00
avee87 6a80559fa8 Use separate weather condition for clear night in MetOffice forecasts (#55135) 2021-10-17 00:57:47 +02:00
Franck Nijhof d64f210b67 Add camera platform to Tuya (#57865) 2021-10-16 14:57:30 -07:00
Michael 2fa08ae6ab Add hassio discovery to VLC telnet (#57815) 2021-10-16 14:53:57 -07:00
b-pass c09c8f424f Set state class in JuiceNet component (#57870) 2021-10-16 14:52:30 -07:00
J. Nick Koston 0dcb8ca270 Avoid probing brother devices that have an existing config entry (#57829) 2021-10-16 14:52:10 -07:00
J. Nick Koston bdf96943ae Restore dhcp discovery support to tuya (#57826)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2021-10-16 14:51:37 -07:00
Daniel Hjelseth Høyer 4300f1de46 Use DeviceInfo class (#57868) 2021-10-16 14:51:10 -07:00
Franck Nijhof 441b0b2fb7 Add tamper device class for binary sensor (#57632) 2021-10-16 14:30:52 -07:00
Robert Hillis aa3e17cae9 Add new mac vendor to sense DHCP (#57858) 2021-10-16 23:17:25 +02:00
Franck Nijhof 74d72957b2 Add support for 'freeze' mode in Tuya thermostats (wk) (#57851) 2021-10-16 22:26:00 +02:00
jan iversen 623d0ae932 Bump pytradfri to v.7.1.0 (#57861) 2021-10-16 22:19:14 +02:00
Maciej Bieniek a9f940d8a2 Add support for device configuration URL to Nettigo Air Monitor integration (#57695) 2021-10-16 21:34:04 +02:00
Robert Hillis 4b474f47f2 Add configuration URL to Efergy (#57839)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2021-10-16 20:33:17 +02:00
Aaron Bach 845652da15 Make sure ReCollect Waste data storage conforms to standards (#57817) 2021-10-16 09:37:47 -06:00
Aaron Bach a71c5b760f Make sure Tile data storage conforms to standards (#57818) 2021-10-16 09:37:36 -06:00
Martin Hjelmare 5e2a9aa781 Fix vlc_telnet disconnect on unload (#57836) 2021-10-16 14:39:13 +02:00
Franck Nijhof 71e2fb62af Add myself as codeowner for Tuya (#57837) 2021-10-16 12:20:02 +02:00
J. Nick Koston 76b6fce19c Avoid exposing effects to flux_led lights that do not support them (#57810) 2021-10-15 18:54:00 -10:00
J. Nick Koston 8405331204 Add configuration_url to Sense (#57814) 2021-10-15 18:53:27 -10:00
J. Nick Koston 1cf7634942 Discover plex via zeroconf (#57825) 2021-10-15 18:53:05 -10:00
Aaron Bach f13eeee969 Add configuration URL to RainMachine (#57732) 2021-10-15 17:33:26 -10:00
GitHub Action 34fee4ba60 [ci skip] Translation update 2021-10-16 00:12:06 +00:00
jan iversen 34984d78a1 Add float32 test to modbus (#57805) 2021-10-15 16:06:36 -07:00
Robert Hillis 0ad5ad5ca7 Don't use cast when possible for goalzero (#57742)
* Don't use cast when possible for goalzero

* tweak

* tweak

* tweak

* Call first refresh on coordinator

* don't use dict.get if not needed

* tweak
2021-10-15 23:34:13 +02:00
Franck Nijhof a7c7e58a5b Add Luminance Sensor (ldcg) device support to Tuya (#57797) 2021-10-15 23:08:21 +02:00
Franck Nijhof 6e5d49144a Add siren platform to Tuya (#57780) 2021-10-15 22:28:14 +02:00
Steven Looman b75f1b8951 Fix broken upnp derived sensors reporting b/s instead of kb/s (#57681) 2021-10-15 13:03:03 -07:00
Marc Mueller 12d1dfdaf9 Use assignment expressions 10 (#57791) 2021-10-15 21:36:03 +02:00
Franck Nijhof 9be3278ffa Add Emergency Button (sos) device support to Tuya (#57794) 2021-10-15 21:32:12 +02:00
Martin Hjelmare 31ccaac865 Add vlc telnet config flow (#57513) 2021-10-15 11:46:58 -07:00
Michael Chisholm aeb00823aa Log reason for DLNA-DMR device becoming unavailable (#57516) 2021-10-15 19:24:04 +02:00
Paulus Schoutsen fcd0a877d6 Identify onetime listeners (#57751) 2021-10-15 10:23:36 -07:00
Franck Nijhof 892bf62dd5 Add PIR Detector (pir) device support to Tuya (#57784) 2021-10-15 19:11:06 +02:00
Marc Mueller 19443b474c Merge bmw_connected_drive metric and imperial sensor types (#56910) 2021-10-15 10:02:12 -07:00
Chris f8d0f76721 Add device class to temperature sensors for octoprint (#56997) 2021-10-15 09:45:04 -07:00
jan iversen 42803e6ac0 Clean startup of modbus by moving service schemas (#57763) 2021-10-15 09:40:27 -07:00
J. Nick Koston fb5d117df4 Always send color/temp when switching from an effect in yeelight (#57745) 2021-10-15 09:37:23 -07:00
J. Nick Koston 427f2a085b Reconnect and retry yeelight commands after previous wifi drop out (#57741) 2021-10-15 09:37:13 -07:00
Martin Hjelmare 5aba8a7c81 Fix modem_callerid test warning (#57760) 2021-10-15 09:36:26 -07:00
Erik Montnemery 0f2b5ea28e Don't expose config or diagnostic entities to cloud (#57771) 2021-10-15 09:35:32 -07:00
Erik Montnemery 8b33aa3702 Don't expose config or diagnostic entities to Google Assistant (#57669) 2021-10-15 09:12:34 -07:00
Erik Montnemery 7c1ba8be3d Don't expose config or diagnostic entities to Amazon Alexa by default (#57770) 2021-10-15 09:09:24 -07:00
Erik Montnemery 2b37943355 Don't add indirectly referenced config entities to service calls (#57671) 2021-10-15 08:46:43 -07:00
epenet 6881ab58d1 Add renault last activity sensors (#57750)
* Add battery and location last_activity sensors

* Drop state attributes

* Drop ATTR_LAST_UPDATE

* Adjust tests

* Mark new sensors as disabled_default

* Add default_disabled attribute

* Add context managers

* Adjust tests for disabled entities
2021-10-15 16:27:12 +02:00
Erik Montnemery 1eebe45154 Add support for entity categories to MQTT entities (#57656)
* Add support for entity categories to MQTT entities

* Improve test

* Apply suggestions from code review

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

* Update homeassistant/components/mqtt/mixins.py

Co-authored-by: Paul Monigatti <paulmonigatti@users.noreply.github.com>

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
Co-authored-by: Paul Monigatti <paulmonigatti@users.noreply.github.com>
2021-10-15 14:28:30 +02:00
Petro31 f8dbcb953c Swap order of int template helper kwargs (#57729)
* swap order of int kwargs

* Add binary and kwargless base tests
2021-10-15 13:04:26 +02:00
Joakim Sørensen 0e0430ba36 Remove YAML import from UptimeRobot (#57761) 2021-10-15 12:33:10 +02:00
gjong cb625d1c7a Fix Youless state class for power total sensor (#57758) 2021-10-15 12:24:51 +02:00
Maciej Bieniek f02522783a Add entity category to Nettigo Air Monitor entities (#57698) 2021-10-15 11:42:21 +02:00
Franck Nijhof b97d5a703c Renamed variables in Tuya (#57759) 2021-10-15 11:33:30 +02:00
J. Nick Koston b7c52d0485 Add configuration url to rachio (#57738) 2021-10-14 23:23:32 -10:00
Franck Nijhof 6e6313272d Move Tuya value scaling into IntegerTypeData (#57757) 2021-10-15 10:33:20 +02:00
Robert Hillis 19d812602e Activate strict typing for nfandroidtv (#57743)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-15 10:27:26 +02:00
Erik Montnemery aed6eee1ff Minor tweak of entityfilter typing (#57756) 2021-10-15 10:19:27 +02:00
Maciej Bieniek 38688e5263 Add configuration URL to Brother (#57726) 2021-10-15 10:08:00 +02:00
Franck Nijhof f6c6ec3578 Centralize entity naming for Tuya entities (#57755) 2021-10-15 10:07:25 +02:00
avee87 8b422a7bd5 Add documentation link for Supervisor integration (#57733) 2021-10-15 09:26:54 +02:00
avee87 727d8c7a37 Fix signature for hassio.restore_partial service (#57735) 2021-10-15 09:04:55 +02:00
Paulus Schoutsen 8dbff0b4b3 Fix WLED exception on close (#57752) 2021-10-15 09:04:43 +02:00
Steffen Ronalter 49b07224bf Add onewire support for DS2413 (#55921) 2021-10-15 08:23:26 +02:00
Paulus Schoutsen 12b6922875 Add entity category to cloud (#57747) 2021-10-15 08:17:40 +02:00
jan iversen 4417ffb407 COnvert DATA_TYPE to enum. (#57699) 2021-10-15 07:09:59 +02:00
J. Nick Koston faf5c2eb40 Add discovery support for single channel magichome controllers (#57736) 2021-10-14 20:53:35 -07:00
J. Nick Koston bcff2b7858 Add configuration url to nexia (#57740) 2021-10-14 20:52:26 -07:00
J. Nick Koston e7ac734d01 Add configuration_url to gogogate2 (#57739) 2021-10-14 20:51:12 -07:00
Michael 148d2480ac Add configuration url to Pi hole (#57718) 2021-10-14 19:32:24 -07:00
Shay Levy e232bdc082 Add Shelly "installed version" extra state attribute to Gen2 firmware update sensor (#57722) 2021-10-14 19:02:37 -07:00
Franck Nijhof eed9f67402 Add service configuration URL to MQTT (#57731) 2021-10-14 18:27:40 -07:00
Maciej Bieniek e34fb4cfb9 Add entity category to Brother (#57728) 2021-10-14 18:10:24 -07:00
Shay Levy 9000e5b2d9 Fix Shelly humidity sensor available condition (#57721) 2021-10-14 17:48:28 -07:00
Maciej Bieniek e7e88d6a19 Add entity category to Tractive (#57720) 2021-10-14 17:46:25 -07:00
Maciej Bieniek b0ff28ceb4 Add entity category to Xiaomi Miio (#57719) 2021-10-14 17:31:25 -07:00
starkillerOG e34aed743c Xiaomi Miio appropriatly raise ConfigEntryAuthFailed/ConfigEntryNotReady (#54696)
* Add reties to cloud login

* push to version 0.4 of micloud

* distinguish between authentication error and socket errors

* raise from error

* Update homeassistant/components/xiaomi_miio/gateway.py

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

* move ConfigEntryNotReady to connect function

* remove unused import

* also add ConfigEntryNotReady for device

* catch exceptions in config flow

* fixes

* bring tests back to 100%

* add missing catch exception

* add test

* fix black

* Update homeassistant/components/xiaomi_miio/device.py

Co-authored-by: Teemu R. <tpr@iki.fi>

* Update homeassistant/components/xiaomi_miio/gateway.py

Co-authored-by: Teemu R. <tpr@iki.fi>

* Update tests/components/xiaomi_miio/test_config_flow.py

Co-authored-by: Teemu R. <tpr@iki.fi>

* fix tests

* define specific exceptions

* fix styling

* fix tests

* use proper DeviceException

* Revert "use proper DeviceException"

This reverts commit 0bd16135387cd6d9e563cd62ac147d0a25c577f3.

* use appropriate side-effect

* remove unused returns

* Update homeassistant/components/xiaomi_miio/const.py

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

* remove unused returns

Co-authored-by: Franck Nijhof <git@frenck.dev>
Co-authored-by: Teemu R. <tpr@iki.fi>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-15 01:25:44 +02:00
Joakim Sørensen c243dca58e Change name from Uptime Robot to UptimeRobot (#57714) 2021-10-15 00:50:09 +02:00
Franck Nijhof e077fb13ce Add device configuration URL to WLED (#57692) 2021-10-14 15:46:26 -07:00
Joakim Sørensen a9737865ae Fix platform typo in Tuya const (#57716) 2021-10-14 15:46:06 -07:00
Franck Nijhof 4a20d28ec6 Add service configuration URL to Speedtest.net (#57715) 2021-10-14 15:37:31 -07:00
Franck Nijhof efb6300359 Add service configuration URL to Verisure (#57713) 2021-10-14 15:35:09 -07:00
starkillerOG 9280215d69 push motionblinds to 0.5.6 (#57707) 2021-10-14 15:32:17 -07:00
Joakim Sørensen cc6030cff2 Add configuration_url to Uptime Robot (#57709) 2021-10-14 15:31:46 -07:00
Robert Hillis abf6720cd3 Add strict typing to goalzero (#57680) 2021-10-15 00:20:08 +02:00
Maciej Bieniek 3127074f76 Add entity category to Shelly (#57705) 2021-10-14 15:17:00 -07:00
Aaron Bach 4745e58a92 Remove long-term statistics from IQVIA forecast sensor (#57687) 2021-10-15 00:13:12 +02:00
David Le Brun 2601d71f5d Add state_class to EnOcean sensors (#57666) 2021-10-14 23:15:16 +02:00
Michael 2e5af5d8e2 Add configuration url to Synology DSM (#57704) 2021-10-14 23:13:01 +02:00
Paulus Schoutsen 9c7dc5865c Add url to CO2signal (#57703) 2021-10-14 14:11:57 -07:00
Peter Nijssen f8ea2f9b08 Bump spiderpy to 1.4.3 (#57675) 2021-10-14 23:11:07 +02:00
Michael 445c7301f8 Skip auto-update when fqdn and ssl-verfiy is used for Synology DSM (#57568) 2021-10-14 13:55:31 -07:00
Michael a6aff613d7 Optimize update calls for AVM Fritz!Smarthome devices (#57579) 2021-10-14 13:53:05 -07:00
Michael e395e33663 Add support for entity categories to Synology DSM entities (#57690) 2021-10-14 13:52:17 -07:00
Michael 997d014111 Add support for entity categories to NUT entities (#57689) 2021-10-14 13:51:31 -07:00
Paulus Schoutsen 7104750008 Bump frontend to 20211014.0 (#57706) 2021-10-14 13:44:04 -07:00
Franck Nijhof 93e15ef88c Add service configuration URL to Spotify (#57701) 2021-10-14 22:42:34 +02:00
Franck Nijhof 5382ab8562 Add device configuration URL to Plugwise (#57696) 2021-10-14 22:31:23 +02:00
Franck Nijhof a584d7b5c9 Add service configuration URL to Stookalert (#57697) 2021-10-14 22:31:12 +02:00
Paulus Schoutsen 3c11e2a097 Add entity category to WLED (#57693) 2021-10-14 13:31:01 -07:00
Franck Nijhof 0407a56fdf Add number platform to Tuya (#57672) 2021-10-14 13:15:41 -07:00
Peter A. Bigot d6d6929e2b Port unmerged fixes from tuya_v2 (#57624) 2021-10-14 13:14:48 -07:00
Franck Nijhof cef34356e2 Add sensor platform to Tuya (#57668) 2021-10-14 12:04:02 -07:00
Paulus Schoutsen 7546c766dd Fix lint issue (#57694) 2021-10-14 12:03:39 -07:00
Aaron Bach 681b5c48e2 Ensure Notion device name is stored as a string (#57670) 2021-10-14 11:21:44 -07:00
Erik Montnemery 8ef8838801 Correct detection of row_number support for MariaDB (#57663) 2021-10-14 11:19:39 -07:00
Erik Montnemery e27e4c3561 Add support for device configuration URL (#57539)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-10-14 11:16:56 -07:00
Marvin Wichmann addb91d49e Update xknx to version 0.18.10 (#57635)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2021-10-14 10:54:48 -07:00
Robert Hillis 488a636aec Clean up unused loggers (#57662) 2021-10-14 10:03:38 -07:00
Franck Nijhof fdc6d9e004 Add select platform to Tuya (#57674) 2021-10-14 09:50:51 -07:00
uvjustin ce186c5935 Only pass libav logger messages when stream logger is set to debug (#57616) 2021-10-14 23:43:00 +08:00
Franck Nijhof b28062789f Remove deprecated Lyft integration (#57638) 2021-10-14 11:27:09 +02:00
Franck Nijhof 2ec352ce96 Migrate attribution attribute for Aftership (#57649) 2021-10-14 10:25:19 +02:00
Franck Nijhof f43bba8cfd Migrate attribution attribute for bitcoin (#57651) 2021-10-14 10:24:30 +02:00
Franck Nijhof 1dcba44199 Migrate attribution attribute for bbox (#57650) 2021-10-14 10:23:54 +02:00
jan iversen debcdc382f Late review comments. (#57654) 2021-10-14 10:22:21 +02:00
J. Nick Koston d3e24cc1d6 Bump flux_led to 0.24.5 (#57653)
- Fixes fallback to old protocol with asyncio

- Changelog: https://github.com/Danielhiversen/flux_led/compare/0.24.4...0.24.5
2021-10-14 11:15:29 +03:00
Erik Montnemery 4b3d423767 Add config and diagnostic entities (#57528)
* Add config entity concept

* Rename is_config_entity to entity_category

* Add test

* Add 'diagnostic' entity category
2021-10-14 10:04:26 +02:00
Joakim Sørensen 24509503bb Remove snapshot from hassio integration (#57652) 2021-10-14 10:00:44 +02:00
Franck Nijhof 5cd2167924 Upgrade pyyaml to 6.0 (#57648) 2021-10-14 09:29:31 +02:00
Jason Madigan f62cadf32c Use reference strings in soma (#57564) 2021-10-14 08:54:16 +02:00
Ville Skyttä 8e18ca3b6e Use HTTPStatus instead of HTTP_* int constants in mobile_app responses (#56418) 2021-10-14 08:47:13 +02:00
Franck Nijhof 26faac0567 Remove YAML configuration from Rainforest Eagle (#57636) 2021-10-14 08:46:39 +02:00
Michael 0da1f9544e Correct state classes for systemmonitor sensors (#57615) 2021-10-14 08:45:58 +02:00
ollo69 827501659c Nut: Use coordinator data, code cleanup and add test coverage (#57643) 2021-10-13 16:05:06 -10:00
GitHub Action 8c326198cf [ci skip] Translation update 2021-10-14 00:11:41 +00:00
Franck Nijhof 45f3eb6991 Remove deprecated Wink integration (#57634) 2021-10-14 00:20:13 +02:00
ollo69 b54fc0229d Use entity_registry_enabled_default for Nut sensors (#56854) 2021-10-13 11:33:03 -10:00
Franck Nijhof b220ab6e91 Prettify Tuya entity class names (#57629) 2021-10-13 23:30:25 +02:00
Franck Nijhof b854a2537f Use classmethod in Tuya TypeData classes (#57627) 2021-10-13 22:58:10 +02:00
Franck Nijhof 158dd1556c Remove myself as code owner from Toon (#57625) 2021-10-13 22:36:49 +02:00
Erik Montnemery 838f79be3d Update tests searching for areas referenced in automations (#57558) 2021-10-13 13:27:56 -07:00
Franck Nijhof b2cef78d90 Add binary sensor platform to Tuya (#57623) 2021-10-13 22:12:07 +02:00
Paulus Schoutsen 835e07f63e Remove debug log (#57619) 2021-10-13 13:03:52 -07:00
Franck Nijhof 14c380fb57 Use EntityDescription in Tuya Switch platform (#57581) 2021-10-13 21:15:34 +02:00
jan iversen 2734ae17f3 Modbus baseplatform.py and Validators.py 100% coverage (activate coverage) (#57546) 2021-10-13 11:51:51 -07:00
Franck Nijhof 6a72af63c2 Refactor Tuya climate platform (#57609) 2021-10-13 20:29:11 +02:00
Christian Manivong 16b7375e60 Provide device_id in hue_event (#56982)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2021-10-13 20:20:38 +02:00
Otto Winter df4e8721e9 ESPHome move ReconnectLogic to aioesphomeapi (#57601) 2021-10-13 10:04:23 -07:00
Jason Nader 628e59ff11 Clarify that only HTTPS can be used in fitbit (#57116) 2021-10-13 08:45:59 -07:00
J. Nick Koston b86e19143d Prevent event loop delay / instability from discovery (#57463) 2021-10-13 08:37:14 -07:00
Paulus Schoutsen ffbe4cffae Guard linking credential that is already linked (#57595)
* Guard linking credential that is already linked

* Update test descriptions
2021-10-13 17:36:31 +02:00
Paulus Schoutsen 0ae1186554 Use gather ipv wait to remove credentials to catch exceptions (#57596) 2021-10-13 17:34:57 +02:00
Maikel Punie e130c8671b Bump version (#57607) 2021-10-13 17:21:32 +02:00
Erik Montnemery a5603c0076 Improve warning prints for sensor statistics (#57605) 2021-10-13 08:15:04 -07:00
Abílio Costa c97acf8713 Add support for multiple Whirlpool airconditioners (#57588) 2021-10-13 15:45:02 +02:00
Lukas Kempf 3b1938d5ec Add unique_id support for eq3btsmart (#57603) 2021-10-13 15:33:37 +02:00
Jan Bouwhuis c470a03a4e Add a use_time sensor for Xiaomi_miio humidifiers (#57560)
Co-authored-by: Maciej Bieniek <bieniu@users.noreply.github.com>
2021-10-13 13:36:02 +02:00
Allen Porter 1fa6329c2e Add Nest WebRTC and support Nest Battery Camera and Nest Battery Doorbell (#57299)
* Add WebSocket API for intiting a WebRTC stream

See https://github.com/home-assistant/architecture/discussions/640

* Add nest support for initiating webrtc streams

Add an implementation of async_handle_web_rtc_offer in nest, with test coverage.
Issue #55302

* Rename offer variable to match overriden variable name

* Remove unnecessary checks covered by websocket function

* Update homeassistant/components/camera/__init__.py

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

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-13 03:28:52 -07:00
jan iversen 8d7744a74f Warn user if Gateway is already paired (#57530)
* Warn user if Gateway is already paired.

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-13 07:16:55 +02:00
J. Nick Koston abcacd2a00 Use a human readable model name in flux_led (#57519) 2021-10-12 21:40:49 -07:00
J. Nick Koston f41aedc0f9 Fix single channel controllers with flux_led (#57458) 2021-10-12 21:40:18 -07:00
J. Nick Koston 2adb9a8bec Refresh the bond token if it has changed and available (#57583) 2021-10-12 21:39:46 -07:00
GitHub Action 282300f3e4 [ci skip] Translation update 2021-10-13 00:11:33 +00:00
Aaron Bach deec3dfae4 Bump simplisafe-python to 11.0.7 (#57573) 2021-10-12 12:35:10 -06:00
Erik Montnemery ee98849360 Always include start point for statistics (#57182) 2021-10-12 10:39:36 -07:00
Franck Nijhof a4357fdb95 Replace all Tuya device property constants with an Enum (#57559) 2021-10-12 10:36:14 -07:00
Mark Mäkinen c55e9136ee Fix Fast.com autoupdate (#57552) 2021-10-12 09:35:35 -07:00
Erik Montnemery ffeb73a4f6 Add statistics tests for sensor with changing device class (#57317) 2021-10-12 09:09:32 -07:00
Erik Montnemery 007af4a7aa Search for areas, devices and entities in script choose actions (#57554) 2021-10-12 08:49:07 -07:00
Franck Nijhof 8ec38ef034 Refactor Tuya device handling (#57545)
* Refactor Tuya device handling

* Tweak
2021-10-12 16:49:46 +02:00
shbatm fb18c108d1 Add service to Rainmachine to push weather data from Home Assistant (#57354) 2021-10-12 07:40:46 -06:00
Marc Mueller bf24090463 Update flake8 related packages (#57538) 2021-10-12 15:33:08 +02:00
jan iversen 4afb4d9076 Bump pytradfri to 7.0.7 (#57543) 2021-10-12 15:07:20 +02:00
Franck Nijhof f82af47f6a Use Tuya endpoints values from upstream library (#57537) 2021-10-12 14:33:19 +02:00
Franck Nijhof c943677675 Tweaks to Tuya base entity (#57526) 2021-10-12 12:25:03 +02:00
Daniel Hjelseth Høyer d90d804260 Bump Mill library to 0.6.2 (#57533) 2021-10-12 12:09:12 +02:00
Erik Montnemery bdbedd0f06 Alphabetize parts of device registry code (#57532) 2021-10-12 12:08:59 +02:00
Marc Mueller c4f8c52df9 Use EntityDescription - bmw_connected_drive (#56861) 2021-10-12 11:46:23 +02:00
Franck Nijhof d44e323e95 Move Tuya remap method from base to light entity class (#57527) 2021-10-12 11:34:18 +02:00
Franck Nijhof e23d35c6f0 Move all Tuya device handling into device listener class (#57523) 2021-10-12 11:32:57 +02:00
Jan Bouwhuis 879144b48d MQTT rework constants (#57529)
* reference CONF_TOPIC to .const

* Organize common mqtt constants
2021-10-12 11:26:38 +02:00
Maciej Bieniek 931032667c Bump accuweather library to version 0.3.0 (#57497) 2021-10-12 11:23:49 +02:00
Allen Porter d0cc890d2b Add statistics support to nest sensors (#57393)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2021-10-12 10:56:57 +02:00
Franck Nijhof 1b71eafeba Upgrade coverage to 6.0.2 (#57518) 2021-10-12 10:47:34 +02:00
Franck Nijhof 70aa8b6f00 Upgrade flake8-comprehensions to 3.7.0 (#57520) 2021-10-12 10:15:45 +02:00
Erik Montnemery 0139bfa749 Detect if mysql and sqlite support row_number (#57475) 2021-10-11 21:17:18 -07:00
Franck Nijhof 3ff30f53a7 Migrate attribution attribute for Stookalert (#57503) 2021-10-11 21:08:36 -07:00
Franck Nijhof f561543e92 Migrate attribution attribute for Arlo (#57504) 2021-10-11 20:40:40 -07:00
Franck Nijhof 1a68784852 Migrate attribution attribute for UptimeRobot (#57508) 2021-10-11 20:40:21 -07:00
Franck Nijhof 813e27a46a Migrate attribution attribute for AmberElectric (#57505) 2021-10-11 20:40:08 -07:00
Franck Nijhof e94bebdf7b Migrate attribution attribute for Picnic (#57507) 2021-10-11 20:39:51 -07:00
Franck Nijhof 580b5fb812 Entity attributes cleanup in Tuya base entity (#57510) 2021-10-11 20:37:18 -07:00
Franck Nijhof 71a3daa8ce Pass device manager directly in Tuya registry cleanup (#57511) 2021-10-11 20:36:46 -07:00
Franck Nijhof f0abd5b815 Fix Tuya error when removing device (#57512) 2021-10-11 20:32:15 -07:00
J. Nick Koston 58362404ea Simplify yeelight setup to improve reliability (#57500) 2021-10-11 20:30:23 -07:00
GitHub Action 10b62370ff [ci skip] Translation update 2021-10-12 00:12:28 +00:00
Erik Montnemery 7acb1b6eb9 Override the jinja2 int filter (#57470) 2021-10-12 00:12:42 +02:00
Jan Bouwhuis a36a765352 Allow MQTT discovery availability shortcut (#57479)
* replace base in availability topic

* add tests for availability shortcuts - fix import

* group constants

* simplified loop

* Moving constants to .const

* rename value to topic

* move CONF_TOPIC to .const

* move CONF_AVAILABILITY to .const

* remove check for string

* Silently ignore if no config topic is found.

* CONF_TOPIC should be required
2021-10-11 23:37:31 +02:00
Franck Nijhof 13db867c1d Move attribution attribute to Entity base class (#57492) 2021-10-11 23:15:32 +02:00
Martin Hjelmare d10b1d9fe0 Fix watttime config flow and tests (#57498) 2021-10-11 22:08:57 +02:00
Aaron Bach 0c04ca20c6 Add ability to re-auth WattTime (#56582)
* Tests cleanup

* Still store the abbreviation

* Code review

* Remove unused attribute

* Add ability to re-auth WattTime

* Consolidate logic for entry unique ID

* Fix tests

* Fix docstring
2021-10-11 13:41:39 -05:00
jan iversen 6a39119ccc Streamline modbus before 100% coverage. (#57478) 2021-10-11 13:26:36 -05:00
RenierM26 48c2cfa6f8 Use entity description for Ezviz sensors (#56634) 2021-10-11 20:09:19 +02:00
chpego b155d2bbe5 Bump youtube-dl to 2021.06.06 (#57490) 2021-10-11 20:07:23 +02:00
J. Nick Koston 02c30aed5e Add DHCP discovery for additional Zengge devices, generic magichome strips (#57408) 2021-10-11 07:20:24 -10:00
J. Nick Koston 381301d978 Add the switch platform to flux_led (#57444) 2021-10-11 07:20:11 -10:00
Glenn Waters d0b37229dd Switch to config_flow for Environment Canada (#57127)
* Add config_flow to Environment Canada

* Add unique_id

* Remove erroneous directory.

* Tests working!!

* Add back setup.

* First cut of import.

* Temp

* Tweak names.

* Import config.yaml.

* Clean up imports.

* Import working! Some refactor to clean it up.

* Add import test.

* Small optimization.

* Fix comments from code review.

* Remove CONF_NAME and config_flow for it.

* Fixup strings to match new config_flow.

* Fixes for comments from last review.

* Update tests to match new import code.

* Clean up use of CONF_TITLE; fix lint error on push.

* Phew. More cleanup on import. Really streamlined now!

* Update tests.

* Fix lint error.

* Fix lint error, try 2.

* Revert unique_id to use location as part of ID.

* Fix code review comments.

* Fix review comments.
2021-10-11 17:33:29 +02:00
Maciej Bieniek 8ee6662cff Bump nettigo_air_monitor library to version 1.1.1 (#57483) 2021-10-11 17:27:04 +02:00
Aaron Bach b72f1553ea Use current config entry standards for AirVisual (#57132) 2021-10-11 09:17:43 -06:00
J. Nick Koston 6c470ac28b Add dhcp support for tplink KP401 (#57456) 2021-10-11 17:15:31 +02:00
Marc Mueller 858739949b Use EntityDescription - openweathermap (#56888) 2021-10-11 16:18:18 +02:00
Marc Mueller 748d915909 Don't override methods marked as final (#57477) 2021-10-11 15:24:06 +02:00
Robert Hillis a827521138 Add energy management for efergy (#57472) 2021-10-11 13:16:55 +02:00
Kevin Hellemun 30154763f8 Add xiaomi vacuum -9999 fix back (#57473) 2021-10-11 13:11:45 +02:00
Fredrik Erlandsson cadbf7f6a9 Bump Daikin version, catch new exception during config_flow (#57080) 2021-10-11 13:11:02 +02:00
starkillerOG 1fbc94f56d Add Netgear ssid and conn_ap_mac sensors (#57226)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-11 13:08:56 +02:00
RDFurman 9040b6a59e Update somecomfort library to 0.7.0 (#57214) 2021-10-11 12:49:02 +02:00
jan iversen 199cf649be Add test of lazy_error in modbus (#57170) 2021-10-11 12:43:05 +02:00
Yuval Aboulafia 3a2d6a6343 Use _attr for Suez water (#57278) 2021-10-11 12:20:19 +02:00
Robert Hillis 8275110c44 Fix referenced before assignment in modem_callerid (#57460) 2021-10-11 11:36:53 +02:00
starkillerOG d84722c3c2 Fix Netgear orbi port in ssdp discovery (#57432) 2021-10-11 11:35:29 +02:00
micha91 20d08fa470 Upgrade aiomusiccast to tolererate not decodable characters (#57461) 2021-10-11 11:34:37 +02:00
gjong 3dc1a268ae Upgrade youless library to fix missing sensor LS110 (#57366) 2021-10-11 11:30:23 +02:00
Robert Hillis c4eeebd7a7 Add config flow for efergy (#56890) 2021-10-11 10:07:31 +02:00
Steven Looman 3825f80a2d Fix upnp creating derived sensors (#57436) 2021-10-11 09:35:26 +02:00
Robert Hillis ba0196137e Bump pytautulli to 21.10.0 (#57449) 2021-10-11 08:32:00 +02:00
spahlimi 14050966cc Upgrade rvx to 0.7.0 (#57430) 2021-10-11 06:47:38 +02:00
Shay Levy 4129119b69 Fix netgear renamed mdi icons (#57431) 2021-10-10 20:30:16 -07:00
J. Nick Koston 6e95ce70bc Bump aiodiscover to 2.4.5 (#57439)
- Disable scanning if the network size exceeds the maximum number of
  allowed hosts (8192)

- Changelog: https://github.com/bdraco/aiodiscover/compare/v1.4.4...v1.4.5

- Closes #57378
2021-10-11 05:14:42 +02:00
J. Nick Koston 77c7709323 Bump zeroconf to 0.36.8 (#57451)
- Changelog: https://github.com/jstasiak/python-zeroconf/releases/tag/0.36.8
2021-10-11 04:40:17 +02:00
Matthias Alphart c0a3c7a4b7 Update pyfronius to 0.7.0 (#57279)
* update to pyfronius 0.7.0

* exception handling

* exception handling
2021-10-11 04:37:44 +02:00
J. Nick Koston e148939b78 Convert flux_led to use asyncio (#57440) 2021-10-10 15:12:54 -10:00
GitHub Action 5c91d8d379 [ci skip] Translation update 2021-10-11 00:12:43 +00:00
Shay Levy 6820faf5a0 Fix Shelly button type in roller mode (#57429) 2021-10-10 22:39:57 +03:00
Shay Levy ee80ccf7a6 Fix Shelly button filter empty event (#57427) 2021-10-10 22:39:34 +03:00
icemanch 3efbd6a1c9 Flux led color support (#57353)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-10 09:18:15 -10:00
J. Nick Koston 5b3711ed19 Use switch format unique ids for tplink dimmers (#57346) 2021-10-10 00:02:33 -07:00
J. Nick Koston a58085639e Restore yeelight workaround for failing to update state after on/off (#57400) 2021-10-10 00:01:45 -07:00
J. Nick Koston 45b60b8346 Remove executor calls in isy994 as its fully async (#57394) 2021-10-10 00:01:18 -07:00
J. Nick Koston be8724a6f8 Do all of dhcp scapy startup in the executor (#57392) 2021-10-10 00:00:28 -07:00
Abílio Costa 49d97e13de Improve Whirlpool component code quality (#57357)
* Improve Whirlpool component code

This implements a few suggestions given in
https://github.com/home-assistant/core/pull/48346#pullrequestreview-773552670

* Add return typing

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

* Add reason assertion to config_flow test

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-10 08:49:02 +02:00
GitHub Action 80ee583418 [ci skip] Translation update 2021-10-10 00:12:54 +00:00
Aidan Timson 9f34d010e6 Add System Bridge display sensors (#57019)
* System Bridge - Add Display Sensors

* Omit default
2021-10-09 16:57:55 -07:00
mvn23 8b013b823b Fix default parameter values for service opentherm_gw.set_clock (#57397) 2021-10-10 00:15:21 +02:00
mvn23 97187069a7 Fix opentherm_gw.set_clock time parameter name (#57398) 2021-10-10 00:09:01 +02:00
Joakim Sørensen d0101f67da Bump pyhaversion to 21.10.0 (#57377) 2021-10-09 23:46:25 +02:00
Maciej Bieniek 6ef70c85ee Add -9999 error fix back in Xiaomi Miio (#57399) 2021-10-09 23:42:20 +02:00
MatthewFlamm 5829f93b53 Bump pynws to 1.3.2 (#57361) 2021-10-09 23:38:45 +02:00
Bram Kragten b2cfbb7d1e Update frontend to 20211007.1 (#57385) 2021-10-09 22:57:13 +02:00
indykoning 325d5e1c22 Create devices for Growatt (#57068) 2021-10-09 11:36:38 -07:00
Shay Levy 8de7966104 Add Shelly config entry reload on device config change (#57356) 2021-10-09 19:10:43 +03:00
Robert Hillis 6a5895222e Catch errors for efergy (#57326)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-09 11:23:40 +02:00
RenierM26 b27bcf1b00 Bump Switchbot library (#57367)
* Bump dependency to fix SB password problem.

* Bump API version.
2021-10-09 10:02:35 +02:00
Ben fe065b2de8 Add Sure Petcare Felaqua device (#56823)
* add a SurePetcareSensor

* add the felaqua sensor

* add felaqua battery test

* fix felaqua product_id

* actually add a felaqua sensor 😅

* remove superclass
2021-10-09 01:33:41 -05:00
Paulus Schoutsen 6d0da631bf Handle prepare timeout in websocket API (#55989) 2021-10-08 22:12:06 -07:00
GitHub Action d55a7e5cc7 [ci skip] Translation update 2021-10-09 00:11:46 +00:00
Clifford Roche 204b901464 Bump greeclimate to 0.11.9 (#57358) 2021-10-08 18:08:52 -06:00
Shay Levy 722d3862db Fix Shelly RGB/W supported color mode detection (#57359) 2021-10-09 02:22:14 +03:00
Aaron Bach fe3b5e8804 Use current config entry standards for SimpliSafe (#57141)
* Use current config entry standards for SimpliSafe

* Include tests
2021-10-08 14:22:29 -05:00
Aaron Bach 4104a3dee6 Use built-in logic for options handler in AirVisual (#57131) 2021-10-08 14:20:57 -05:00
MatthewFlamm fb063928ce Add device info to nws (#57153)
* Add base entity

* Use function for device_info

Multiple inheritance makes this tricky with a base class

* Device info in sensor

* Device info weather

* parantheses

* isort
2021-10-08 14:15:45 -05:00
Aaron Bach 0364405595 Reorganize RainMachine services (#57145)
* Reorganize RainMachine services

* Code review

* Ensure integration services aren't tied to a particular config entry

* Cleanup

* linting

* Code review

* Code review

* Code review

* Code review
2021-10-08 20:03:47 +02:00
Paulus Schoutsen eba1d7d16a Guard for bad last reset (#57344) 2021-10-08 10:48:52 -07:00
Erik Montnemery 7e34860615 Improve state of cover groups (#57313)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-10-08 09:52:58 -07:00
David Boslee 7f966613bd Disconnect websockets after token is revoked (#57091)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2021-10-08 09:38:22 -07:00
starkillerOG 830e2bc47a Netgear fix port and device model beeing overwritten (#57277)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-08 09:03:21 -07:00
Milan Meulemans 4dafd42154 Fix Nanoleaf light turn_off transition (#57305) 2021-10-08 09:02:01 -07:00
Milan Meulemans c04be4f5d0 Upgrade aionanoleaf to 0.0.3 to fix deadlock (#57312) 2021-10-08 08:59:19 -07:00
J. Nick Koston e77fae56d9 Migrate tplink hosts that were previously imported from yaml (#57308) 2021-10-08 08:58:18 -07:00
Steven Looman ba83433c64 Fix multiple upnp/ssdp issues (#57314) 2021-10-08 08:57:49 -07:00
Paulus Schoutsen b0f24b65d6 Drop more persistent notification patches (#57295) 2021-10-08 16:45:05 +02:00
Franck Nijhof 82160fa350 Add config flow to Stookalert (#57119) 2021-10-08 11:34:22 +02:00
Yuval Aboulafia db7d2de8bc Use _attr in 17track (#57187)
* use _attr

* fix name

* attributes

* set fixed attr before init

* access parameters directly
2021-10-08 10:03:09 +03:00
Allen Porter 7d4dd94da8 Add WebSocket API for intiting a WebRTC stream (#57034)
* Add WebSocket API for intiting a WebRTC stream

See https://github.com/home-assistant/architecture/discussions/640

* Increase test coverage for webrtc camera stream

* Apply suggestions from code review

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

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2021-10-07 22:13:14 -07:00
J. Nick Koston 56d6173d70 Recreate the powerwall session/object when attempting relogin (#56935) 2021-10-07 20:15:29 -07:00
Teemu R 8fb0da7720 Stopgap fix for inconsistent upstream API of tplink dimmers (#57285) 2021-10-07 20:15:13 -07:00
J. Nick Koston ddab7f3024 Bump HAP-python to 4.30 (#57284) 2021-10-07 20:06:27 -07:00
J. Nick Koston 49e6f84b1c Bump yeelight to 0.7.7 (#57290) 2021-10-07 14:48:08 -10:00
GitHub Action 01d883d7c9 [ci skip] Translation update 2021-10-08 00:13:12 +00:00
Teemu R 36a22400e5 Fix transition handling for tplink lights (#57272)
* Fix transition handling for tplink light

* Apply suggestions from code review

* Test that all transitions are passed correctly

* Fix linting

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2021-10-08 00:20:26 +02:00
starkillerOG cd1a71b070 Motion_blinds fix up button not available for unidirection blinds (#57266) 2021-10-07 13:27:48 -07:00
Erik Montnemery be61009030 Correct SQL query generated by get_metadata_with_session (#57225)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2021-10-07 13:23:23 -07:00
Raman Gupta 3476b430db Convert val to str when needed while calling zwave_js.set_value (#57216) 2021-10-07 13:22:33 -07:00
Bram Kragten 33b8130002 Update frontend to 20211007.0 (#57268) 2021-10-07 13:18:12 -07:00
J. Nick Koston ac3741df41 Fix RGB only (no color temp) devices with tplink (#57267) 2021-10-07 10:14:14 -10:00
Michael Chisholm 667e730946 Improve dlna_dmr code quality (#56886)
* Listen for config updates from DlnaDmrEntity.async_added_to_hass

Use `Entity.async_on_remove` for dealing with callback cancellation,
instead of re-inventing the wheel with `_remove_ssdp_callbacks`.

* Use async_write_ha_state within async methods

* Import YAML config from async_setup_platform

* Import flow prompts user when device is uncontactable during migration

When config flow is able to contact a device, or when it has information
from SSDP, it will create config entries without error. If the device is
uncontactable at this point then it will appear as unavailable in HA
until it is turned on again.

When import flow cannot migrate an entry because it needs to contact the
device and can't, it will notify the user with a config flow form.

* Don't del unused parameters, HA pylint doesn't care

* Remove unused imports from tests

* Abort config flow at earliest opportunity

* Return async_abort instead of raising AbortFlow

* Consolidate config entry test cleanup into a single function

* fixup! Consolidate config entry test cleanup into a single function

Revert "Consolidate config entry test cleanup into a single function"

This reverts commit 8220da7263.

* Check resource acquisition/release in specific tests

* fixup! Check resource acquisition/release in specific tests

* Remove unused network dependency from manifest

* _on_event runs in async context

* Call async_write_ha_state directly (not via shedule_update)

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

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-07 22:14:00 +02:00
Aaron Bach b980dc7e33 Use current config entry standards for Ambient PWS (#57133) 2021-10-07 22:19:03 +03:00
Franck Nijhof f142d0a945 Upgrade ambee to 0.4.0 (#57264) 2021-10-07 21:11:38 +02:00
Kevin Hellemun dc5e4392ae Refactor Xiaomi vacuum to sensors (#54990)
* Refactor Xiaomi vacuum with sensors.

This is the first step into refactoring xiaomi vacuum attributes into sensors.
What is missing are some switches and binary sensors etc.

https://github.com/home-assistant/core/issues/51361

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Use generic sensor for Xiaomi vacuum sensors.

By using HA coordinator, the generic Xiaomi sensor class can be used with these
coordinators to get the status sensors from vacuum. This also means now that
sensors are available as soon as HA starts, which is a nice plus.

Now the only reason to create a subclass of the generic sensors is when custom
value parsing needs to be done.

https://github.com/home-assistant/core/issues/51361

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Working vacuum sensors via 1 coordinator.

Vacuum needs a custom coordinator to ensure that it fetches all the needed data
and puts it in a dict. From this dict the sensors will then get their data
accordingly.

https://github.com/home-assistant/core/issues/51361

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Remove vacuum setup method in sensor

Sensor is generic enough that vacuum does not require its own setup method.

https://github.com/home-assistant/core/issues/51361

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Don't auto register generic sensors.

Let the user decide which sensor is useful for them and enable them.

https://github.com/home-assistant/core/issues/51361

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Remove converted attributes from xiaomi vacuum.

The attributes that have been converted so far should be removed from the vacuum
attributes list.

https://github.com/home-assistant/core/issues/51361

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Fetch data from vacuum sequentially.

It seems some vacuums do not like parallel requests. The requests that came
before are ignored.

https://github.com/home-assistant/core/issues/51361

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Refactor vacuum sensors to its own container.

By moving vacuum sensors to its own container, there is no more key collisions.
This in turns means that there is need for the split hack to ensure key names
are correct.

https://github.com/home-assistant/core/issues/51361

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* fixup! fix bad rebase.

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Fix sensor naming and default registration.

Use proper names for sensors, no need to include from which device status it
came.

Registration of the sensor by default has been parameterised. If the param is
not set, the sensor is not registered.

https://github.com/home-assistant/core/issues/51361

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Make vacuum platform also use coordinator for its data.

By using the coordinator for data in vacuum platfrom, removes the cases where
request gets ignored during the case where the requests are done concurrently by
separate platforms.

https://github.com/home-assistant/core/issues/51361

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Add binary sensor for vacuum

Add binary sensor for waterbox, mop, and water shortage.

https://github.com/home-assistant/core/issues/51361

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Added proper icons to sensors.

https://github.com/home-assistant/core/issues/51361

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Refactor sensors to use dataclass.

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Make vacuum use coordinator for its data.

This commit also insures that the binary sensors are only registered for devices
that include a mop.

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Apply suggestions from code review

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

* Minor refactoring

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Update data from coordinator after running command.

This is is to have a faster status change when executing a command like changing
fan speeds. If a manual refresh is not triggered. Worst case scenario it will
take 10s for the new fan speed to be reported in HA.

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Refresh within coroutine is ok.

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Move logging to _handle_coordinator_update

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Use internal state attribute.

Signed-off-by: Kevin Hellemun <17928966+OGKevin@users.noreply.github.com>

* Fix vacuum typing

* Fix tests constants

* Fix vacuum inconsistent return values

* Fix vacuum state update

* Fix vacuum tests

* Remove impossible cases

* Parametrize custom services test

* Move goto test

* Move clean segment test

* Move clean single segment test

* Test service pause

* Include vacuum in coverage

* Delint

* Fix vacuum sensor dict collision.

This also prevents collision for unique id. As the key is used to construct
unique ids.

* Use f strings as dict keys

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-07 18:30:17 +02:00
Daniel Hjelseth Høyer c651cff6a0 Bump Mill library to 0.6.1 (#57261) 2021-10-07 18:23:03 +02:00
J. Nick Koston a2dcc0308b Discover tplink devices periodically (#57221)
- These devices sometimes do not respond on the first try
  or may be subject to transient broadcast failures, or
  overloads. We now try discovery periodically once the
  integration has been loaded.

- We used to try this 4x at startup, but that solution
  seemed to aggressive as we want to be sure we pickup
  the devices after startup as well since the network
  will likely be more calm after startup.
2021-10-07 17:52:24 +02:00
Maciej Bieniek a238cce37c Update led brightness select state only if valid data is available, Xiaomi Miio integration (#57197)
* Update state if there is valid data

* Add comment
2021-10-07 17:44:25 +02:00
Erik Montnemery 0e48985fc5 Validate initial value for input_datetime (#57256) 2021-10-07 17:13:07 +02:00
Jeff Irion 9dfb684002 Enable template icons for template selects (#57092)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2021-10-07 15:38:02 +02:00
Martin Hjelmare 82828b5a1b Fix netgear config flow import (#57253) 2021-10-07 15:08:53 +02:00
Marc Mueller e5b93cdcaf Use EntityDescription - darksky (#57083)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2021-10-07 14:07:17 +02:00
Erik Montnemery 7223c59e79 Allow resetting an MQTT number (#57161)
* Allow resetting an MQTT number

* Add abbreviation
2021-10-07 13:54:34 +02:00
Paulus Schoutsen a4d9019ffc Refactor persistent notification to no longer route all data via a service (#57157)
* Convert persistent notification tests to async

* Create/dismiss persistent notifications in exposed functions, not service calls

* Fix notify persistent_notification

* Remove setting up persistent_notification

* Drop more setups

* Empty methods

* Undeprecate sync methods because too big task

* Fix setup clearing notifications

* Fix a bunch of tests

* Fix more tests

* Uno mas

* Test persistent notification events

* Clean up stale comment

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-07 12:58:00 +02:00
Robert Svensson 750dd9186e Improve deCONZ signal strings (#57140) 2021-10-07 12:48:27 +02:00
Aaron Bach 2ba8e1030c Ensure that WattTime is strictly typed (#57130) 2021-10-07 12:40:10 +02:00
Franck Nijhof 24fa2a714a Toon, support Energy dashboard by default (#57233) 2021-10-07 11:59:04 +02:00
Franck Nijhof 19b0212ff0 Upgrade coverage to 6.0.1 (#57235) 2021-10-07 10:46:43 +02:00
Erik Montnemery 947ae23749 Add home-assistant/core as codeowner for recorder (#57224) 2021-10-07 08:56:43 +02:00
GitHub Action 8fea54fff7 [ci skip] Translation update 2021-10-07 00:10:57 +00:00
starkillerOG 3e89ebb1cb Remove Netgear tracker link_rate check on Orbi (#57032)
* Netgear tracker: remove link_rate check on Orbi

* fix debug message

* Add orbi models

* check start of model in V2 check

* fix black
2021-10-06 13:30:13 +02:00
Erik Montnemery 8337baa354 Correct migration to recorder schema 18 (#57165) 2021-10-06 13:29:42 +02:00
Jean-Yves Avenard 9d84d41f81 Change energy state class to STATE_CLASS_TOTAL (#56974) 2021-10-06 13:24:17 +02:00
Bram Kragten e69a1c3546 Update frontend to 20211006.0 (#57164) 2021-10-06 11:33:55 +02:00
Tomasz e9f6bc7364 Add missing return type to async_unload_entry and async_setup_entry (#57115) 2021-10-06 10:48:11 +02:00
Thomas Schamm aa03b63884 Skip link local addresses in bosch_shc discovery step (#57074) 2021-10-06 10:09:02 +02:00
Fredrik Erlandsson a809f5fcf7 Update Daikin config_flow with better error handling (#57069) 2021-10-06 10:07:30 +02:00
Paulus Schoutsen 222a0c26e0 Guard upnp create device (#57156) 2021-10-05 21:31:11 -07:00
Lawrence 205b40cf16 Updated amberelectic attributes to reflect unit change to $/kWh (#57109) 2021-10-05 20:34:23 -07:00
Simone Chemelli d51d70d3be Fix Fritz shutdown race condition (#57148) 2021-10-05 20:26:18 -07:00
Simone Chemelli 9de3bd77d8 Fix SamsungTV shutdown race condition (#57149) 2021-10-05 20:25:57 -07:00
J. Nick Koston 7e5dfadc27 Add sw_version and model to flux_led device info (#56958) 2021-10-05 14:53:39 -10:00
J. Nick Koston 286ffb2d71 Write flux_led state after turning on/off (#57152) 2021-10-05 14:49:42 -10:00
Erik Montnemery f6682ba99d Block tests from opening sockets (#55516) 2021-10-05 14:46:09 -10:00
GitHub Action a8b7c521f6 [ci skip] Translation update 2021-10-06 00:12:58 +00:00
J. Nick Koston d60f6a9943 Add additional devices to flux_led discovery (#57086) 2021-10-05 13:06:17 -10:00
Tom Brien 659229e255 Add support for POLY and RLY in Coinbase (#57144)
* Support POLY currency

* Support RLY currency
2021-10-05 15:18:17 -06:00
Aaron Bach 25253f2b7a Use current config entry standards for OpenUV (#57137) 2021-10-05 15:03:39 -06:00
J. Nick Koston eba7cad33f Fix yeelight connection when bulb stops responding to SSDP (#57138) 2021-10-05 13:41:56 -07:00
Raman Gupta e22407ba16 Bump zwave-js-server-python to 0.31.3 (#57143) 2021-10-05 22:33:23 +02:00
Paulus Schoutsen 34544da449 Reinstate asking for country in Tuya flow (#57142) 2021-10-05 22:32:48 +02:00
indykoning f76cb12945 Fix Growatt login invalid auth response (#57071) 2021-10-05 12:31:23 -07:00
Paulus Schoutsen 1a7a4c52f1 Bump aiohue to 2.6.3 (#57125) 2021-10-05 19:42:45 +02:00
jrester e66064fb3e Update tesla_powerwall to 0.3.11 (#57112) 2021-10-05 19:40:37 +02:00
Franck Nijhof 86852df2fc Bump tuya-iot-py-sdk to 0.5.0 (#57110)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-10-05 10:21:55 -07:00
Raman Gupta 3c074ab865 Add additional properties to node_status WS cmd (#56927)
* Add node.zwave_plus_version to node_status WS command

* Add highest security class to node_status
2021-10-05 11:23:44 -04:00
Franck Nijhof 80a04124a2 Small code styling tweaks for Tuya (#57102) 2021-10-05 12:59:51 +02:00
Otto Winter 5b218d7e1c Bump aioesphomeapi from 9.1.4 to 9.1.5 (#57106) 2021-10-05 11:49:39 +02:00
Boris K 8b02703585 Fix color util links to Philips Hue documentation (#57099) 2021-10-05 11:19:09 +02:00
Erik Montnemery f548d1dba7 Prevent opening of sockets in mqtt tests (#57101) 2021-10-05 11:14:53 +02:00
Franck Nijhof 2059cbacbd Remove Python shebang line from Tuya integration files (#57103) 2021-10-05 11:12:55 +02:00
Franck Nijhof 653eb3e29d Upgrade debugpy to 1.5.0 (#57098) 2021-10-05 11:12:35 +02:00
Franck Nijhof b5916c8310 Upgrade sentry-sdk to 1.4.3 (#57096) 2021-10-05 11:11:33 +02:00
Franck Nijhof 3645568dcc Upgrade jinja2 to 3.0.2 (#57095) 2021-10-05 11:03:51 +02:00
Franck Nijhof f364d53c7b Prevent Tuya from accidentally logging credentials in debug mode (#57100) 2021-10-05 10:22:28 +02:00
Robert Svensson 59b1433e5c Additional place to use isinstance rather than do a string compare (#57094) 2021-10-05 09:17:45 +02:00
Paulus Schoutsen b024d88b36 Deprecate Python 3.8 (#57079) 2021-10-05 08:58:20 +02:00
Allen Porter 8026a14bc8 Bump nest 0.3.7 to prepare for WebRTC support (#57089) 2021-10-04 20:59:23 -07:00
Paulus Schoutsen 11ed70b774 Fix energy gas price validation (#57075) 2021-10-04 20:52:40 -07:00
Bram Kragten 91d3d39f6c Update frontend to 20211004.0 (#57073) 2021-10-04 20:52:17 -07:00
GitHub Action 1e5d408426 [ci skip] Translation update 2021-10-05 00:12:33 +00:00
Paulus Schoutsen d743891842 Update Tuya code owners (#57078) 2021-10-04 15:44:17 -07:00
Shay Levy c8dc5d15ee Fix: Shelly Gen2 - filter unsupported sensors (#57065) 2021-10-04 13:46:46 -07:00
Tomasz 08cebb247f Activate mypy for rpi_power (#57047) 2021-10-04 22:13:11 +02:00
J. Nick Koston 2f960e558f Prevent dlna_dmr from opening sockets in tests (#57059)
Supports #55516
2021-10-04 20:25:46 +02:00
J. Nick Koston 77af741099 Prevent tplink from opening sockets in tests (#57058)
Supports #55516
2021-10-04 20:25:09 +02:00
J. Nick Koston d08b65db7d Update esphome reconnect logic to use newer RecordUpdateListener logic (#57057) 2021-10-04 19:52:08 +02:00
Alexei Chetroi 723596076d Add ZHA HVAC Action sensor (#57021)
* WIP

* Refactor multi-entity matching

Eliminate the notion on primary channel.

* Cleanup climate tests

* Refactor multi-entity match

Remove the "primary channel" in multiple entity matches

* Cleanup

* Add HVAC Action sensor

* Add a "stop_on_match" option for multi entities matches

Nominally working HVAC state sensors

* Add id_suffix for HVAC action sensor

* Fix Zen HVAC action sensor

* Pylint
2021-10-04 12:57:58 -04:00
Erik Montnemery 69875cbd11 Improve sensor statistics validation (#56892) 2021-10-04 09:47:44 -07:00
Marc Mueller 2f9943fe7a Use NamedTuple for repetier API methods (#56941) 2021-10-04 17:41:51 +02:00
Paulus Schoutsen eb9b9c57a4 [ci skip] Translation update 2021-10-04 08:38:24 -07:00
Joakim Sørensen 745298408a Rewrite tuya config flow (#57043)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Franck Nijhof <git@frenck.dev>
2021-10-04 08:27:24 -07:00
Erik Montnemery 8567aa9e13 Evict purged states from recorder's old_state cache (#56877)
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-04 08:21:40 -07:00
Chris Browet 12c32ac806 Universal media player: consider unknown as inactive child state (#57029) 2021-10-04 17:10:41 +02:00
Marc Mueller 771740c5f9 Fix multiline lambda formatting - homekit_controller (#57046) 2021-10-04 16:12:22 +02:00
Erik Montnemery 582788026a Mock out network.util.async_get_source_ip in tests (#57039) 2021-10-04 15:33:13 +02:00
Erik Montnemery 70f4bdf63e Prevent opening of sockets in watttime tests (#57040) 2021-10-04 07:09:42 -06:00
Franck Nijhof bdf6c79062 Upgrade coverage to 6.0 (#57041) 2021-10-04 14:17:43 +02:00
Marc Mueller 96681ab3a9 Use NamedTuple for darksky condition picture (#56942) 2021-10-04 13:38:32 +02:00
Erik Montnemery 099428fa73 Use hass_client_no_auth test fixture in additional tests (#57037) 2021-10-04 13:37:05 +02:00
Marc Mueller e0ab4ee842 Use NamedTuple for homekit valve type + service info (#56944) 2021-10-04 13:35:31 +02:00
Erik Montnemery 80a225ca98 Prevent opening of sockets in kira tests (#57038) 2021-10-04 13:33:29 +02:00
Sylvia van Os dc6f6b7f68 Remove Essent integration (#56991) 2021-10-04 13:31:40 +02:00
Otto Winter bf9f55c376 Bump aioesphomeapi from 9.1.2 to 9.1.4 (#57036) 2021-10-04 13:23:11 +02:00
Otto Winter da63a96273 ESPHome fix zeroconf add_listener issue (#57031) 2021-10-04 13:17:42 +02:00
Oliver Ou 7446e388ed Fix Tuya v2 login issue (#56973)
* fix login issue

* fix:login error

* update COUNTRY_CODE_CHINA line location

* added one blank line

* feat:added line #L88 was not covered by tests

* ci build errors

Co-authored-by: erchuan <jie.zheng@tuya.com>
2021-10-04 10:45:37 +02:00
Paulus Schoutsen 2d374d65b6 Mark auth voluptuous schema fields as required (#57003) 2021-10-03 22:02:30 -07:00
Diogo Gomes 79b10c43d8 Ignore utility_meter restore state if state is invalid (#57010)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-10-03 21:59:36 -07:00
Paulus Schoutsen 255ffe801b Fix tractive flaky test (#57026) 2021-10-04 06:46:06 +02:00
Oncleben31 378cfab501 Meteofrance fix #56975 (#57016) 2021-10-03 21:15:41 -07:00
Phil Cole c72a34dbec Use pycarwings2.12 for Nissan Leaf integration (#56996) 2021-10-03 21:14:45 -07:00
jjlawren 33541ab287 Shorten album titles when browsing artist (#57027) 2021-10-03 21:13:08 -07:00
J. Nick Koston 19d54399c2 Add DHCP support for TPLink KP400 (#57023) 2021-10-04 02:40:27 +02:00
GitHub Action a4530d2bfc [ci skip] Translation update 2021-10-04 00:11:57 +00:00
Tobias Sauerwein 1747578be5 Fix camera tests (#57020) 2021-10-03 16:55:07 -07:00
Marc Mueller 3976443292 Use EntityDescription - homekit_controller (#56945) 2021-10-03 13:42:25 -10:00
J. Nick Koston 9d671eff27 Bump yeelight to 0.7.6 (#57009)
- Fixes compat with Lamp15 model

- May improvment Monob model drops seen in #56646

Changes: https://gitlab.com/stavros/python-yeelight/-/commit/0b94e5214e3375f20defa386067ef6cb058c872c
2021-10-04 01:07:25 +02:00
Raman Gupta 2b464b00dd Bump zwave-js-server-python to 0.31.2 (#57007) 2021-10-03 18:24:23 -04:00
Tobias Sauerwein c46e8cfbc1 Bump pyatmo to v6.1.0 (#57014) 2021-10-03 15:09:58 -07:00
Robert Svensson 1d643d6da7 Minor improvements to deCONZ light platform (#56953)
Use library constnats for flash and effect
Use attr_effect_list to specify supported effects
Use isinstance to identify if it is light or group
2021-10-03 22:14:28 +02:00
Maciej Bieniek 946a265c9e Use Final type only when needed in Tractive (#57000) 2021-10-03 22:12:59 +02:00
Maciej Bieniek 1488019cd9 Bump nettigo_air_monitor library to version 1.1.0 (#56952) 2021-10-03 22:56:50 +03:00
J. Nick Koston 4c51d0d2cf Round tplink energy sensors to prevent insignificant updates (#56999)
- These sensors wobble quite a bit and the precision did
  not have sensible limits which generated a massive amount
  of data in the database which was not very useful
2021-10-03 21:28:39 +02:00
Glenn Waters 57851e9623 Support connecting to ElkM1 over TLS 1.2 (#56887) 2021-10-03 08:06:29 -10:00
Daniel Perna 0d91167cdd Update pyhomematic to 0.1.75 (#56995) 2021-10-03 19:37:38 +02:00
Steven Looman 641f0babce Fix upnp invalid key in ssdp discovery_info (#56986) 2021-10-03 07:29:01 -10:00
Steven Looman 41d2f03b2f Bump async-upnp-client to 0.22.5 (#56989) 2021-10-03 07:28:41 -10:00
Michael Chisholm 64d4e8537f Disable discovery for dlna_dmr until it is more selective (#56950) 2021-10-03 09:09:30 -06:00
Daniel Hjelseth Høyer 2fdef0e144 Update surepetcare test (#56871)
Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>
2021-10-03 14:28:52 +03:00
Maciej Bieniek f8b6fba3eb Bump gios library to 2.1.0 (#56984) 2021-10-03 12:41:22 +02:00
Shay Levy ddc99afba9 Bump aioshelly to 1.0.2 (#56980) 2021-10-03 13:07:17 +03:00
Maciej Bieniek f3c76fb859 Add strict typing to Tractive integration (#56948)
* Strict typing

* Add few missing types

* Run hassfest

* Fix mypy errors

* Use List instead of list
2021-10-03 09:13:12 +02:00
J. Nick Koston 1aeab65f56 Fix yeelight state when controlled outside of Home Assistant (#56964) 2021-10-03 00:08:31 -07:00
Alexei Chetroi d0827a9129 ZHA support for additional entities on ElectricalMeasurement ZCL cluster (#56909)
* Add electrical measurement type state attribute.

* Add active_power_max attribute

* Skip unsupported attributes on entity update

* Fix tests

* Create sensor only if the main attribute is supported

* Refactor ElectricalMeasurement sensor to use attr specific divisor and multiplier

* Multiple entities for electrical measurement cluster

* Update discovery tests

* Sensor clean up

* update tests

* Pylint
2021-10-02 21:57:49 -04:00
Eduard van Valkenburg 7e5a991de5 Sia package update to 3.0.2 (#56896)
* update SIA package

* update SIA package to 3.0.2
2021-10-02 19:05:41 -06:00
Marc Mueller 6a1d7c7ad9 Remove icon if device_class is defined - homekit_controller (#56946) 2021-10-02 18:59:38 -06:00
Aaron Bach 0e1630e46d Fix incorrect handling of hass.data in WattTime setup (#56971) 2021-10-02 18:58:10 -06:00
Oliver Ou 6c2a18c3e5 Fix Tuya v2 fan percentage (#56954)
* fix:Some fans do not have a fan_speed_percent key

* fix comment format issue

Co-authored-by: erchuan <jie.zheng@tuya.com>
2021-10-03 02:41:31 +02:00
GitHub Action 06602e6cc5 [ci skip] Translation update 2021-10-03 00:13:50 +00:00
Bram Kragten ad6129c505 Update frontend to 20211002.0 (#56963) 2021-10-02 23:16:29 +02:00
J. Nick Koston 2f35cadba7 Add dhcp discovery for TPLink EP10 (#56955) 2021-10-02 13:53:37 -07:00
Fredrik Erlandsson b563a41482 Update pypoint to use v5 of backend API (#56934) 2021-10-02 13:53:19 -07:00
Michael 2d174d0cbb Set unique id while SSDP discovery of Synology DSM (#56914) 2021-10-02 13:52:28 -07:00
RenierM26 7d6b4a985d Fix Switchbot unsupported SB types (#56928) 2021-10-02 13:51:53 -07:00
icemanch a95c6b10f7 Flux led config flow (#56354)
Co-authored-by: Milan Meulemans <milan.meulemans@live.be>
Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
2021-10-02 07:19:36 -10:00
Aaron Bach 80c97a2416 Remove injected logger in Ambient PWS and OpenUV (#56920)
* Remove injected log in OpenUV

* Add Ambient
2021-10-02 10:45:33 -06:00
Milan Meulemans 2874ca2e08 Log when Nanoleaf is unavailable (#56921) 2021-10-02 04:55:16 -10:00
Marc Mueller 1d00bc8a62 Use NamedTuple - iqvia Rating (#56943) 2021-10-02 08:46:57 -06:00
Simone Chemelli 62f1a16918 Add sleep_period to log for easier debugging (#56949) 2021-10-02 16:31:23 +02:00
GitHub Action f42c2f5170 [ci skip] Translation update 2021-10-02 12:59:05 +00:00
Oliver a99d92cdb4 Update denonavr codeowner (#56940) 2021-10-02 13:10:54 +02:00
J. Nick Koston deea9ee22e Bump PyFlume to 0.6.5 to fix compat with new JWT (#56936)
Changelog: https://github.com/ChrisMandich/PyFlume/compare/5476fd67cfc8be768c0ea810d248f39399e038d1...v0.6.5
2021-10-02 12:47:28 +02:00
Aaron Bach 7c805f048c Address beta review comments for WattTime (#56919) 2021-10-02 12:20:17 +02:00
Franck Nijhof 39d73ecc19 Upgrade watchdog to 2.1.6 (#56933) 2021-10-02 10:19:54 +02:00
J. Nick Koston da3cc25234 Add DHCP support for TPLink KL430, KP115 (#56932) 2021-10-02 10:19:11 +02:00
Milan Meulemans d41832de59 Get min and max color temperature for Nanoleaf light from library (#56863) 2021-10-01 21:30:20 -10:00
Milan Meulemans 538773a14a Add SSDP discovery to Nanoleaf (#56907) 2021-10-01 21:29:56 -10:00
Simone Chemelli 73e58c8c62 Bump fritzconnection to 1.7.0 (#56924) 2021-10-02 09:13:40 +02:00
MatthewFlamm 11690bed58 Bump pynws: fix unit code bug (#56923) 2021-10-02 09:11:31 +02:00
Robert Svensson 818f695227 Replace strings with library constants in deCONZ fan platform 2021-10-02 09:09:26 +02:00
Robert Svensson 8258443a9e Replace strings with library constants in deCONZ climate platform 2021-10-02 09:08:01 +02:00
Maciej Bieniek 4cdbd3c576 Fix Unable to serialize to JSON error in Xiaomi Miio (#56929) 2021-10-02 09:05:49 +02:00
Ville Skyttä 2730a27fd0 Use HTTPStatus instead of HTTP_* constants in various test mocks (#56543) 2021-10-01 15:52:45 -07:00
Paulus Schoutsen e5b0bbcca6 Bump netdisco to 3.0.0 (#56903) 2021-10-01 15:38:49 -07:00
Martin 316070f1e9 Fix vicare binary sensor (#56912) 2021-10-01 21:46:44 +02:00
Robert Svensson 8d06527cb1 Improve deCONZ services code quality (#56904)
* setup and unload services does not need to be async

* Only use DECONZ_DOMAIN to decide if service should be setup

* Consolidation of functionality

* Make a service to schema dictionary
2021-10-01 14:31:38 -04:00
Jeff Irion 15a8f6741b Enable template icons for template numbers (#56154) 2021-10-01 09:35:44 -07:00
Ville Skyttä cc97502a0c Use HTTPStatus instead of HTTP_* consts in aiohttp web response statuses (#56541) 2021-10-01 09:27:44 -07:00
Marc Mueller 451199338c Fix bmw_connected_drive battery icon (#56884) 2021-10-01 18:27:32 +02:00
Ricardo Steijn c0016415aa Handle missing serial extended parameters in crownstone (#56864) 2021-10-01 08:42:32 -07:00
Robert Svensson 1c1bb057d7 CLIPGenericFlag should be deCONZ sensor not binary sensor (#56901) 2021-10-01 17:10:01 +02:00
Erik Montnemery 061c335673 Remove some redundant code from trace (#56883) 2021-10-01 08:08:43 -07:00
Glenn Waters e4f15c42e0 Add kPa as a pressure unit (#56885) 2021-10-01 08:08:04 -07:00
Robert Svensson 369412547a Use native unit of measurement in deCONZ sensors (#56897) 2021-10-01 16:50:09 +02:00
Erik Montnemery ab037383ed Adjust state class of solarlog yield and consumption sensors (#56824) 2021-10-01 16:42:42 +02:00
Simone Chemelli 735c9f8f0b Revert fritz pref_disable_new_entities handling (#56891) 2021-10-01 16:18:49 +02:00
Robert Svensson 0916322a43 Deduplicate controls of UniFi services (#56834)
* Fix left over comments from #56717 - no need to keep UNIFI_SERVICES if we control it is only called while UNIFI_DOMAIN is empty

* Fix late comments as well

* Improve service tests

* mock.called_with was not reliable
2021-10-01 15:59:29 +02:00
Marc Mueller 954bd49849 Rename state to value_fn - picnic sensor (#56889) 2021-10-01 15:21:43 +02:00
Otto Winter dc40de6b62 Bump aioesphomeapi from 9.1.0 to 9.1.2 (#56879) 2021-10-01 12:11:06 +02:00
Marc Mueller acda3afe63 Fix check_control_message short description (#56876) 2021-10-01 11:50:49 +02:00
Daniel Hjelseth Høyer d4201eaa23 Opengarage bug fix (#56869)
* Opengarage bug fix

Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>

* Opengarage bug fix

Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>

* Deprecated open garage config

Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>

* Deprecated open garage config

Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>
2021-10-01 09:12:45 +02:00
Ian Foster 3f5725c6ea removing excess variable (#56849) 2021-10-01 07:25:28 +02:00
Tobias Sauerwein 7560c7b3de Add long-term statistics support for rain sensors (#56847) 2021-10-01 07:24:55 +02:00
Milan Meulemans 25b76964a5 Add Device Info to Nanoleaf (#56856) 2021-09-30 18:25:57 -05:00
Milan Meulemans e757cb2ab4 Strictly type Nanoleaf (#56852) 2021-09-30 16:48:28 -05:00
Erik Montnemery dfb3a0c528 Correct database migration to schema version 22 (#56848) 2021-09-30 14:11:00 -07:00
Milan Meulemans efeee27be1 Upgrade aionanoleaf to 0.0.2 (#56845) 2021-09-30 14:04:09 -07:00
Raman Gupta b00822f93a Add strings for new zwave_js config flow keys (#56844) 2021-09-30 22:32:17 +02:00
Franck Nijhof 11f127c1a3 Bump version to 2021.11.0dev0 (#56835) 2021-09-30 19:32:25 +02:00
3025 changed files with 68219 additions and 30154 deletions
+39 -22
View File
@@ -29,10 +29,8 @@ omit =
homeassistant/components/ads/*
homeassistant/components/aemet/weather_update_coordinator.py
homeassistant/components/aftership/*
homeassistant/components/agent_dvr/__init__.py
homeassistant/components/agent_dvr/alarm_control_panel.py
homeassistant/components/agent_dvr/camera.py
homeassistant/components/agent_dvr/const.py
homeassistant/components/agent_dvr/helpers.py
homeassistant/components/airnow/__init__.py
homeassistant/components/airnow/sensor.py
@@ -85,7 +83,6 @@ omit =
homeassistant/components/aurora/binary_sensor.py
homeassistant/components/aurora/const.py
homeassistant/components/aurora/sensor.py
homeassistant/components/aurora_abb_powerone/sensor.py
homeassistant/components/avea/light.py
homeassistant/components/avion/light.py
homeassistant/components/azure_devops/__init__.py
@@ -134,6 +131,7 @@ omit =
homeassistant/components/braviatv/remote.py
homeassistant/components/broadlink/__init__.py
homeassistant/components/broadlink/const.py
homeassistant/components/broadlink/light.py
homeassistant/components/broadlink/remote.py
homeassistant/components/broadlink/switch.py
homeassistant/components/broadlink/updater.py
@@ -269,7 +267,10 @@ omit =
homeassistant/components/enphase_envoy/__init__.py
homeassistant/components/enphase_envoy/sensor.py
homeassistant/components/entur_public_transport/*
homeassistant/components/environment_canada/*
homeassistant/components/environment_canada/__init__.py
homeassistant/components/environment_canada/camera.py
homeassistant/components/environment_canada/sensor.py
homeassistant/components/environment_canada/weather.py
homeassistant/components/envirophat/sensor.py
homeassistant/components/envisalink/*
homeassistant/components/ephember/climate.py
@@ -290,7 +291,6 @@ omit =
homeassistant/components/esphome/select.py
homeassistant/components/esphome/sensor.py
homeassistant/components/esphome/switch.py
homeassistant/components/essent/sensor.py
homeassistant/components/etherscan/sensor.py
homeassistant/components/eufy/*
homeassistant/components/everlights/light.py
@@ -299,6 +299,7 @@ omit =
homeassistant/components/ezviz/camera.py
homeassistant/components/ezviz/coordinator.py
homeassistant/components/ezviz/const.py
homeassistant/components/ezviz/entity.py
homeassistant/components/ezviz/binary_sensor.py
homeassistant/components/ezviz/sensor.py
homeassistant/components/ezviz/switch.py
@@ -331,6 +332,7 @@ omit =
homeassistant/components/fjaraskupan/const.py
homeassistant/components/fjaraskupan/fan.py
homeassistant/components/fjaraskupan/light.py
homeassistant/components/fjaraskupan/number.py
homeassistant/components/fjaraskupan/sensor.py
homeassistant/components/fleetgo/device_tracker.py
homeassistant/components/flexit/climate.py
@@ -343,7 +345,6 @@ omit =
homeassistant/components/flume/sensor.py
homeassistant/components/flunearyou/__init__.py
homeassistant/components/flunearyou/sensor.py
homeassistant/components/flux_led/light.py
homeassistant/components/folder/sensor.py
homeassistant/components/folder_watcher/*
homeassistant/components/foobot/sensor.py
@@ -457,7 +458,6 @@ omit =
homeassistant/components/hp_ilo/sensor.py
homeassistant/components/htu21d/sensor.py
homeassistant/components/huawei_lte/*
homeassistant/components/huawei_router/device_tracker.py
homeassistant/components/hue/light.py
homeassistant/components/hunterdouglas_powerview/__init__.py
homeassistant/components/hunterdouglas_powerview/scene.py
@@ -585,6 +585,11 @@ omit =
homeassistant/components/logi_circle/const.py
homeassistant/components/logi_circle/sensor.py
homeassistant/components/london_underground/sensor.py
homeassistant/components/lookin/__init__.py
homeassistant/components/lookin/entity.py
homeassistant/components/lookin/models.py
homeassistant/components/lookin/sensor.py
homeassistant/components/lookin/climate.py
homeassistant/components/loopenergy/sensor.py
homeassistant/components/luci/device_tracker.py
homeassistant/components/luftdaten/__init__.py
@@ -599,7 +604,6 @@ omit =
homeassistant/components/lutron_caseta/scene.py
homeassistant/components/lutron_caseta/switch.py
homeassistant/components/lw12wifi/light.py
homeassistant/components/lyft/sensor.py
homeassistant/components/lyric/__init__.py
homeassistant/components/lyric/api.py
homeassistant/components/lyric/climate.py
@@ -649,13 +653,7 @@ omit =
homeassistant/components/mitemp_bt/sensor.py
homeassistant/components/mjpeg/camera.py
homeassistant/components/mochad/*
homeassistant/components/modbus/base_platform.py
homeassistant/components/modbus/binary_sensor.py
homeassistant/components/modbus/cover.py
homeassistant/components/modbus/climate.py
homeassistant/components/modbus/modbus.py
homeassistant/components/modbus/sensor.py
homeassistant/components/modbus/validators.py
homeassistant/components/modem_callerid/sensor.py
homeassistant/components/motion_blinds/__init__.py
homeassistant/components/motion_blinds/const.py
@@ -703,7 +701,6 @@ omit =
homeassistant/components/neato/switch.py
homeassistant/components/neato/vacuum.py
homeassistant/components/nederlandse_spoorwegen/sensor.py
homeassistant/components/nello/lock.py
homeassistant/components/nest/legacy/*
homeassistant/components/netdata/sensor.py
homeassistant/components/netgear/__init__.py
@@ -734,11 +731,10 @@ omit =
homeassistant/components/nuki/const.py
homeassistant/components/nuki/binary_sensor.py
homeassistant/components/nuki/lock.py
homeassistant/components/nut/sensor.py
homeassistant/components/nx584/alarm_control_panel.py
homeassistant/components/nzbget/coordinator.py
homeassistant/components/obihai/*
homeassistant/components/octoprint/*
homeassistant/components/octoprint/__init__.py
homeassistant/components/oem/climate.py
homeassistant/components/oasa_telematics/sensor.py
homeassistant/components/ohmconnect/sensor.py
@@ -765,7 +761,10 @@ omit =
homeassistant/components/openevse/sensor.py
homeassistant/components/openexchangerates/sensor.py
homeassistant/components/opengarage/__init__.py
homeassistant/components/opengarage/binary_sensor.py
homeassistant/components/opengarage/cover.py
homeassistant/components/opengarage/entity.py
homeassistant/components/opengarage/sensor.py
homeassistant/components/openhome/__init__.py
homeassistant/components/openhome/media_player.py
homeassistant/components/openhome/const.py
@@ -781,7 +780,6 @@ omit =
homeassistant/components/openweathermap/sensor.py
homeassistant/components/openweathermap/weather.py
homeassistant/components/openweathermap/weather_update_coordinator.py
homeassistant/components/openweathermap/abstract_owm_sensor.py
homeassistant/components/opnsense/*
homeassistant/components/opple/light.py
homeassistant/components/orangepi_gpio/*
@@ -907,6 +905,7 @@ omit =
homeassistant/components/screenlogic/__init__.py
homeassistant/components/screenlogic/binary_sensor.py
homeassistant/components/screenlogic/climate.py
homeassistant/components/screenlogic/light.py
homeassistant/components/screenlogic/sensor.py
homeassistant/components/screenlogic/services.py
homeassistant/components/screenlogic/switch.py
@@ -1002,7 +1001,8 @@ omit =
homeassistant/components/starlingbank/sensor.py
homeassistant/components/steam_online/sensor.py
homeassistant/components/stiebel_eltron/*
homeassistant/components/stookalert/*
homeassistant/components/stookalert/__init__.py
homeassistant/components/stookalert/binary_sensor.py
homeassistant/components/stream/*
homeassistant/components/streamlabswater/*
homeassistant/components/suez_water/*
@@ -1106,7 +1106,14 @@ omit =
homeassistant/components/tractive/entity.py
homeassistant/components/tractive/sensor.py
homeassistant/components/tractive/switch.py
homeassistant/components/tradfri/*
homeassistant/components/tradfri/__init__.py
homeassistant/components/tradfri/base_class.py
homeassistant/components/tradfri/config_flow.py
homeassistant/components/tradfri/cover.py
homeassistant/components/tradfri/fan.py
homeassistant/components/tradfri/light.py
homeassistant/components/tradfri/sensor.py
homeassistant/components/tradfri/switch.py
homeassistant/components/trafikverket_train/sensor.py
homeassistant/components/trafikverket_weatherstation/sensor.py
homeassistant/components/transmission/sensor.py
@@ -1116,12 +1123,22 @@ omit =
homeassistant/components/travisci/sensor.py
homeassistant/components/tuya/__init__.py
homeassistant/components/tuya/base.py
homeassistant/components/tuya/binary_sensor.py
homeassistant/components/tuya/camera.py
homeassistant/components/tuya/climate.py
homeassistant/components/tuya/const.py
homeassistant/components/tuya/cover.py
homeassistant/components/tuya/fan.py
homeassistant/components/tuya/humidifier.py
homeassistant/components/tuya/light.py
homeassistant/components/tuya/number.py
homeassistant/components/tuya/scene.py
homeassistant/components/tuya/select.py
homeassistant/components/tuya/sensor.py
homeassistant/components/tuya/siren.py
homeassistant/components/tuya/switch.py
homeassistant/components/tuya/util.py
homeassistant/components/tuya/vacuum.py
homeassistant/components/twentemilieu/const.py
homeassistant/components/twentemilieu/sensor.py
homeassistant/components/twilio_call/notify.py
@@ -1151,6 +1168,7 @@ omit =
homeassistant/components/velbus/sensor.py
homeassistant/components/velbus/switch.py
homeassistant/components/velux/*
homeassistant/components/venstar/__init__.py
homeassistant/components/venstar/climate.py
homeassistant/components/verisure/__init__.py
homeassistant/components/verisure/alarm_control_panel.py
@@ -1174,6 +1192,7 @@ omit =
homeassistant/components/vilfo/const.py
homeassistant/components/vivotek/camera.py
homeassistant/components/vlc/media_player.py
homeassistant/components/vlc_telnet/__init__.py
homeassistant/components/vlc_telnet/media_player.py
homeassistant/components/volkszaehler/sensor.py
homeassistant/components/volumio/__init__.py
@@ -1193,7 +1212,6 @@ omit =
homeassistant/components/webostv/*
homeassistant/components/whois/sensor.py
homeassistant/components/wiffi/*
homeassistant/components/wink/*
homeassistant/components/wirelesstag/*
homeassistant/components/wolflink/__init__.py
homeassistant/components/wolflink/sensor.py
@@ -1236,7 +1254,6 @@ omit =
homeassistant/components/xiaomi_miio/select.py
homeassistant/components/xiaomi_miio/sensor.py
homeassistant/components/xiaomi_miio/switch.py
homeassistant/components/xiaomi_miio/vacuum.py
homeassistant/components/xiaomi_tv/media_player.py
homeassistant/components/xmpp/notify.py
homeassistant/components/xs1/*
+13 -11
View File
@@ -15,7 +15,7 @@ body:
attributes:
label: The problem
description: >-
Describe the issue you are experiencing here to communicate to the
Describe the issue you are experiencing here, to communicate to the
maintainers. Tell us what you were trying to do and what happened.
Provide a clear and concise description of what the problem is.
@@ -28,10 +28,12 @@ body:
validations:
required: true
attributes:
label: What is version of Home Assistant Core has the issue?
label: What version of Home Assistant Core has the issue?
placeholder: core-
description: >
Can be found in the Configuration panel -> Info.
Can be found in: [Configuration panel -> Info](https://my.home-assistant.io/redirect/info/).
[![Open your Home Assistant instance and show your Home Assistant version information.](https://my.home-assistant.io/badges/info.svg)](https://my.home-assistant.io/redirect/info/)
- type: input
attributes:
label: What was the last working version of Home Assistant Core?
@@ -44,7 +46,9 @@ body:
attributes:
label: What type of installation are you running?
description: >
If you don't know, you can find it in: Configuration panel -> Info.
Can be found in: [Configuration panel -> Info](https://my.home-assistant.io/redirect/info/).
[![Open your Home Assistant instance and show your Home Assistant version information.](https://my.home-assistant.io/badges/info.svg)](https://my.home-assistant.io/redirect/info/)
options:
- Home Assistant OS
- Home Assistant Container
@@ -55,15 +59,15 @@ body:
attributes:
label: Integration causing the issue
description: >
The name of the integration, for example, Automation or Philips Hue.
The name of the integration. For example: Automation, Philips Hue
- type: input
id: integration_link
attributes:
label: Link to integration documentation on our website
placeholder: "https://www.home-assistant.io/integrations/..."
description: |
Providing a link [to the documentation][docs] help us categorizing the
issue, while providing a useful reference at the same time.
Providing a link [to the documentation][docs] helps us categorize the
issue, while also providing a useful reference for others.
[docs]: https://www.home-assistant.io/integrations
@@ -75,8 +79,8 @@ body:
attributes:
label: Example YAML snippet
description: |
If this issue has an example piece of YAML that can help reproducing this problem, please provide.
This can be an piece of YAML from, e.g., an automation, script, scene or configuration.
If applicable, please provide an example piece of YAML that can help reproduce this problem.
This can be from an automation, script, scene or configuration.
render: yaml
- type: textarea
attributes:
@@ -88,5 +92,3 @@ body:
label: Additional information
description: >
If you have any additional information for us, use the field below.
Please note, you can attach screenshots or screen recordings here, by
dragging and dropping files in the field below.
+6 -6
View File
@@ -23,7 +23,7 @@ jobs:
publish: ${{ steps.version.outputs.publish }}
steps:
- name: Checkout the repository
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
with:
fetch-depth: 0
@@ -67,7 +67,7 @@ jobs:
if: needs.init.outputs.publish == 'true'
steps:
- name: Checkout the repository
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
@@ -97,7 +97,7 @@ jobs:
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
if: needs.init.outputs.channel == 'dev'
@@ -170,7 +170,7 @@ jobs:
- tinker
steps:
- name: Checkout the repository
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Login to DockerHub
uses: docker/login-action@v1.10.0
@@ -201,7 +201,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Initialize git
uses: home-assistant/actions/helpers/git-init@master
@@ -233,7 +233,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Login to DockerHub
uses: docker/login-action@v1.10.0
+21 -21
View File
@@ -26,7 +26,7 @@ jobs:
pre-commit-key: ${{ steps.generate-pre-commit-key.outputs.key }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v2.2.2
@@ -84,7 +84,7 @@ jobs:
needs: prepare-base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
id: python
@@ -124,7 +124,7 @@ jobs:
needs: prepare-base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
id: python
@@ -164,7 +164,7 @@ jobs:
needs: prepare-base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
id: python
@@ -207,7 +207,7 @@ jobs:
needs: prepare-base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Register hadolint problem matcher
run: |
echo "::add-matcher::.github/workflows/matchers/hadolint.json"
@@ -226,7 +226,7 @@ jobs:
needs: prepare-base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
id: python
@@ -269,7 +269,7 @@ jobs:
needs: prepare-base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
id: python
@@ -312,7 +312,7 @@ jobs:
needs: prepare-base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
id: python
@@ -352,7 +352,7 @@ jobs:
needs: prepare-base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
id: python
@@ -395,7 +395,7 @@ jobs:
needs: prepare-base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
id: python
@@ -436,7 +436,7 @@ jobs:
# needs: prepare-base
# steps:
# - name: Check out code from GitHub
# uses: actions/checkout@v2.3.4
# uses: actions/checkout@v2.3.5
# - name: Run ShellCheck
# uses: ludeeus/action-shellcheck@0.3.0
@@ -446,7 +446,7 @@ jobs:
needs: prepare-base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
id: python
@@ -493,7 +493,7 @@ jobs:
container: homeassistant/ci-azure:${{ matrix.python-version }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache@v2.1.6
@@ -517,7 +517,7 @@ jobs:
needs: prepare-base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
id: python
@@ -551,7 +551,7 @@ jobs:
container: homeassistant/ci-azure:${{ matrix.python-version }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Generate partial Python venv restore key
id: generate-python-key
run: >-
@@ -595,7 +595,7 @@ jobs:
container: homeassistant/ci-azure:${{ matrix.python-version }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache@v2.1.6
@@ -626,7 +626,7 @@ jobs:
container: homeassistant/ci-azure:${{ matrix.python-version }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache@v2.1.6
@@ -660,7 +660,7 @@ jobs:
container: homeassistant/ci-azure:${{ matrix.python-version }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache@v2.1.6
@@ -682,11 +682,11 @@ jobs:
# Ideally this should be part of our dependencies
# However this plugin is fairly new and doesn't run correctly
# on a non-GitHub environment.
pip install pytest-github-actions-annotate-failures
pip install pytest-github-actions-annotate-failures==0.1.3
- name: Run pytest
run: |
. venv/bin/activate
pytest \
python3 -X dev -bb -m pytest \
-qq \
--timeout=9 \
--durations=10 \
@@ -718,7 +718,7 @@ jobs:
container: homeassistant/ci-azure:${{ matrix.python-version }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache@v2.1.6
+2 -2
View File
@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v2
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
@@ -39,7 +39,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v2
uses: actions/checkout@v2.3.5
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v2.2.2
+3 -3
View File
@@ -21,7 +21,7 @@ jobs:
architectures: ${{ steps.info.outputs.architectures }}
steps:
- name: Checkout the repository
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Get information
id: info
@@ -68,7 +68,7 @@ jobs:
- "3.9-alpine3.14"
steps:
- name: Checkout the repository
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Download env_file
uses: actions/download-artifact@v2
@@ -108,7 +108,7 @@ jobs:
- "3.9-alpine3.14"
steps:
- name: Checkout the repository
uses: actions/checkout@v2.3.4
uses: actions/checkout@v2.3.5
- name: Download env_file
uses: actions/download-artifact@v2
+7 -7
View File
@@ -22,17 +22,17 @@ repos:
- --quiet-level=2
exclude_types: [csv, json]
exclude: ^tests/fixtures/
- repo: https://gitlab.com/pycqa/flake8
rev: 3.9.2
- repo: https://github.com/PyCQA/flake8
rev: 4.0.1
hooks:
- id: flake8
additional_dependencies:
- pycodestyle==2.7.0
- pyflakes==2.3.1
- pycodestyle==2.8.0
- pyflakes==2.4.0
- flake8-docstrings==1.6.0
- pydocstyle==6.0.0
- flake8-comprehensions==3.5.0
- flake8-noqa==1.1.0
- pydocstyle==6.1.1
- flake8-comprehensions==3.7.0
- flake8-noqa==1.2.0
- mccabe==0.6.1
files: ^(homeassistant|script|tests)/.+\.py$
- repo: https://github.com/PyCQA/bandit
+15
View File
@@ -20,6 +20,7 @@ homeassistant.components.ampio.*
homeassistant.components.automation.*
homeassistant.components.binary_sensor.*
homeassistant.components.bluetooth_tracker.*
homeassistant.components.bmw_connected_drive.*
homeassistant.components.bond.*
homeassistant.components.braviatv.*
homeassistant.components.brother.*
@@ -35,18 +36,21 @@ homeassistant.components.dlna_dmr.*
homeassistant.components.dnsip.*
homeassistant.components.dsmr.*
homeassistant.components.dunehd.*
homeassistant.components.efergy.*
homeassistant.components.elgato.*
homeassistant.components.esphome.*
homeassistant.components.energy.*
homeassistant.components.fastdotcom.*
homeassistant.components.fitbit.*
homeassistant.components.flunearyou.*
homeassistant.components.flux_led.*
homeassistant.components.forecast_solar.*
homeassistant.components.fritzbox.*
homeassistant.components.frontend.*
homeassistant.components.fritz.*
homeassistant.components.geo_location.*
homeassistant.components.gios.*
homeassistant.components.goalzero.*
homeassistant.components.group.*
homeassistant.components.guardian.*
homeassistant.components.history.*
@@ -55,23 +59,30 @@ homeassistant.components.http.*
homeassistant.components.huawei_lte.*
homeassistant.components.hyperion.*
homeassistant.components.image_processing.*
homeassistant.components.input_select.*
homeassistant.components.integration.*
homeassistant.components.iqvia.*
homeassistant.components.jewish_calendar.*
homeassistant.components.knx.*
homeassistant.components.kraken.*
homeassistant.components.lcn.*
homeassistant.components.light.*
homeassistant.components.local_ip.*
homeassistant.components.lock.*
homeassistant.components.lookin.*
homeassistant.components.mailbox.*
homeassistant.components.media_player.*
homeassistant.components.modbus.*
homeassistant.components.modem_callerid.*
homeassistant.components.media_source.*
homeassistant.components.mysensors.*
homeassistant.components.nam.*
homeassistant.components.nanoleaf.*
homeassistant.components.neato.*
homeassistant.components.nest.*
homeassistant.components.netatmo.*
homeassistant.components.network.*
homeassistant.components.nfandroidtv.*
homeassistant.components.no_ip.*
homeassistant.components.notify.*
homeassistant.components.notion.*
@@ -89,6 +100,7 @@ homeassistant.components.recorder.statistics
homeassistant.components.remote.*
homeassistant.components.renault.*
homeassistant.components.rituals_perfume_genie.*
homeassistant.components.rpi_power.*
homeassistant.components.samsungtv.*
homeassistant.components.scene.*
homeassistant.components.select.*
@@ -98,6 +110,7 @@ homeassistant.components.simplisafe.*
homeassistant.components.slack.*
homeassistant.components.sonos.media_player
homeassistant.components.ssdp.*
homeassistant.components.stookalert.*
homeassistant.components.stream.*
homeassistant.components.sun.*
homeassistant.components.surepetcare.*
@@ -110,6 +123,7 @@ homeassistant.components.tautulli.*
homeassistant.components.tcp.*
homeassistant.components.tile.*
homeassistant.components.tplink.*
homeassistant.components.tractive.*
homeassistant.components.tradfri.*
homeassistant.components.tts.*
homeassistant.components.upcloud.*
@@ -118,6 +132,7 @@ homeassistant.components.uptimerobot.*
homeassistant.components.vacuum.*
homeassistant.components.vallox.*
homeassistant.components.water_heater.*
homeassistant.components.watttime.*
homeassistant.components.weather.*
homeassistant.components.websocket_api.*
homeassistant.components.zodiac.*
+16 -15
View File
@@ -75,10 +75,10 @@ homeassistant/components/blink/* @fronzbot
homeassistant/components/blueprint/* @home-assistant/core
homeassistant/components/bmp280/* @belidzs
homeassistant/components/bmw_connected_drive/* @gerard33 @rikroe
homeassistant/components/bond/* @prystupa @joshs85
homeassistant/components/bond/* @bdraco @prystupa @joshs85
homeassistant/components/bosch_shc/* @tschamm
homeassistant/components/braviatv/* @bieniu @Drafteed
homeassistant/components/broadlink/* @danielhiversen @felipediel
homeassistant/components/broadlink/* @danielhiversen @felipediel @L-I-Am
homeassistant/components/brother/* @bieniu
homeassistant/components/brunt/* @eavanvalkenburg
homeassistant/components/bsblan/* @liudger
@@ -114,7 +114,7 @@ homeassistant/components/debugpy/* @frenck
homeassistant/components/deconz/* @Kane610
homeassistant/components/delijn/* @bollewolle @Emilv2
homeassistant/components/demo/* @home-assistant/core
homeassistant/components/denonavr/* @scarface-4711 @starkillerOG
homeassistant/components/denonavr/* @ol-iver @starkillerOG
homeassistant/components/derivative/* @afaucogney
homeassistant/components/device_automation/* @home-assistant/core
homeassistant/components/devolo_home_control/* @2Fake @Shutgun
@@ -138,7 +138,7 @@ homeassistant/components/ecovacs/* @OverloadUT
homeassistant/components/edl21/* @mtdcr
homeassistant/components/efergy/* @tkdrob
homeassistant/components/egardia/* @jeroenterheerdt
homeassistant/components/eight_sleep/* @mezz64
homeassistant/components/eight_sleep/* @mezz64 @raman325
homeassistant/components/elgato/* @frenck
homeassistant/components/elkm1/* @gwww @bdraco
homeassistant/components/elv/* @majuss
@@ -151,13 +151,12 @@ homeassistant/components/enigma2/* @fbradyirl
homeassistant/components/enocean/* @bdurrer
homeassistant/components/enphase_envoy/* @gtdiehl
homeassistant/components/entur_public_transport/* @hfurubotten
homeassistant/components/environment_canada/* @michaeldavie
homeassistant/components/environment_canada/* @gwww @michaeldavie
homeassistant/components/ephember/* @ttroy50
homeassistant/components/epson/* @pszafer
homeassistant/components/epsonworkforce/* @ThaStealth
homeassistant/components/eq3btsmart/* @rytilahti
homeassistant/components/esphome/* @OttoWinter @jesserockz
homeassistant/components/essent/* @TheLastProject
homeassistant/components/evohome/* @zxdavb
homeassistant/components/ezviz/* @RenierM26 @baqs
homeassistant/components/faa_delays/* @ntilley905
@@ -174,6 +173,7 @@ homeassistant/components/flo/* @dmulcahey
homeassistant/components/flock/* @fabaff
homeassistant/components/flume/* @ChrisMandich @bdraco
homeassistant/components/flunearyou/* @bachya
homeassistant/components/flux_led/* @icemanch
homeassistant/components/forecast_solar/* @klaasnicolaas @frenck
homeassistant/components/forked_daapd/* @uvjustin
homeassistant/components/fortios/* @kimfrellsen
@@ -181,7 +181,7 @@ homeassistant/components/foscam/* @skgsergio
homeassistant/components/freebox/* @hacf-fr @Quentame
homeassistant/components/freedompro/* @stefano055415
homeassistant/components/fritz/* @mammuth @AaronDavidSchneider @chemelli74
homeassistant/components/fritzbox/* @mib1185
homeassistant/components/fritzbox/* @mib1185 @flabbamann
homeassistant/components/fronius/* @nielstron
homeassistant/components/frontend/* @home-assistant/frontend
homeassistant/components/garages_amsterdam/* @klaasnicolaas
@@ -227,9 +227,8 @@ homeassistant/components/homematic/* @pvizeli @danielperna84
homeassistant/components/honeywell/* @rdfurman
homeassistant/components/http/* @home-assistant/core
homeassistant/components/huawei_lte/* @scop @fphammerle
homeassistant/components/huawei_router/* @abmantis
homeassistant/components/hue/* @balloob @frenck
homeassistant/components/huisbaasje/* @denniss17
homeassistant/components/huisbaasje/* @dennisschroer
homeassistant/components/humidifier/* @home-assistant/core @Shulyaka
homeassistant/components/hunterdouglas_powerview/* @bdraco
homeassistant/components/hvv_departures/* @vigonotion
@@ -287,6 +286,7 @@ homeassistant/components/litterrobot/* @natekspencer
homeassistant/components/local_ip/* @issacg
homeassistant/components/logger/* @home-assistant/core
homeassistant/components/logi_circle/* @evanjd
homeassistant/components/lookin/* @ANMalko
homeassistant/components/loopenergy/* @pavoni
homeassistant/components/lovelace/* @home-assistant/frontend
homeassistant/components/luci/* @mzdrale
@@ -336,7 +336,6 @@ homeassistant/components/nam/* @bieniu
homeassistant/components/nanoleaf/* @milanmeu
homeassistant/components/neato/* @dshokouhi @Santobert
homeassistant/components/nederlandse_spoorwegen/* @YarmoM
homeassistant/components/nello/* @pschmitt
homeassistant/components/ness_alarm/* @nickw444
homeassistant/components/nest/* @allenporter
homeassistant/components/netatmo/* @cgtobi
@@ -361,10 +360,11 @@ homeassistant/components/nsw_rural_fire_service_feed/* @exxamalte
homeassistant/components/nuki/* @pschmitt @pvizeli @pree
homeassistant/components/numato/* @clssn
homeassistant/components/number/* @home-assistant/core @Shulyaka
homeassistant/components/nut/* @bdraco
homeassistant/components/nut/* @bdraco @ollo69
homeassistant/components/nws/* @MatthewFlamm
homeassistant/components/nzbget/* @chriscla
homeassistant/components/obihai/* @dshokouhi
homeassistant/components/octoprint/* @rfleming71
homeassistant/components/ohmconnect/* @robbiet480
homeassistant/components/ombi/* @larssont
homeassistant/components/omnilogic/* @oliver84 @djtimca @gentoosu
@@ -423,6 +423,7 @@ homeassistant/components/rainforest_eagle/* @gtdiehl @jcalbert
homeassistant/components/rainmachine/* @bachya
homeassistant/components/random/* @fabaff
homeassistant/components/recollect_waste/* @bachya
homeassistant/components/recorder/* @home-assistant/core
homeassistant/components/rejseplanen/* @DarkFox
homeassistant/components/renault/* @epenet
homeassistant/components/repetier/* @MTrab
@@ -497,7 +498,7 @@ homeassistant/components/srp_energy/* @briglx
homeassistant/components/starline/* @anonym-tsk
homeassistant/components/statistics/* @fabaff
homeassistant/components/stiebel_eltron/* @fucm
homeassistant/components/stookalert/* @fwestenberg
homeassistant/components/stookalert/* @fwestenberg @frenck
homeassistant/components/stream/* @hunterjm @uvjustin @allenporter
homeassistant/components/stt/* @pvizeli
homeassistant/components/subaru/* @G-Two
@@ -533,7 +534,6 @@ homeassistant/components/tile/* @bachya
homeassistant/components/time_date/* @fabaff
homeassistant/components/tmb/* @alemuro
homeassistant/components/todoist/* @boralyl
homeassistant/components/toon/* @frenck
homeassistant/components/totalconnect/* @austinmroczek
homeassistant/components/tplink/* @rytilahti @thegardenmonkey
homeassistant/components/traccar/* @ludeeus
@@ -544,7 +544,7 @@ homeassistant/components/trafikverket_train/* @endor-force
homeassistant/components/trafikverket_weatherstation/* @endor-force
homeassistant/components/transmission/* @engrbm87 @JPHutchins
homeassistant/components/tts/* @pvizeli
homeassistant/components/tuya/* @Tuya @zlinoliver @METISU
homeassistant/components/tuya/* @Tuya @zlinoliver @METISU @frenck
homeassistant/components/twentemilieu/* @frenck
homeassistant/components/twinkly/* @dr1rrb
homeassistant/components/ubus/* @noltari
@@ -562,6 +562,7 @@ homeassistant/components/utility_meter/* @dgomes
homeassistant/components/vallox/* @andre-richter
homeassistant/components/velbus/* @Cereal2nd @brefra
homeassistant/components/velux/* @Julius2342
homeassistant/components/venstar/* @garbled1
homeassistant/components/vera/* @pavoni
homeassistant/components/verisure/* @frenck
homeassistant/components/versasense/* @flamm3blemuff1n
@@ -571,7 +572,7 @@ homeassistant/components/vicare/* @oischinger
homeassistant/components/vilfo/* @ManneW
homeassistant/components/vivotek/* @HarlemSquirrel
homeassistant/components/vizio/* @raman325
homeassistant/components/vlc_telnet/* @rodripf @dmcc
homeassistant/components/vlc_telnet/* @rodripf @dmcc @MartinHjelmare
homeassistant/components/volkszaehler/* @fabaff
homeassistant/components/volumio/* @OnFreund
homeassistant/components/wake_on_lan/* @ntilley905
+31 -2
View File
@@ -9,7 +9,7 @@ from typing import Any, Dict, Mapping, Optional, Tuple, cast
import jwt
from homeassistant import data_entry_flow
from homeassistant.core import HomeAssistant, callback
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback
from homeassistant.data_entry_flow import FlowResult
from homeassistant.util import dt as dt_util
@@ -155,6 +155,7 @@ class AuthManager:
self._providers = providers
self._mfa_modules = mfa_modules
self.login_flow = AuthManagerFlowManager(hass, self)
self._revoke_callbacks: dict[str, list[CALLBACK_TYPE]] = {}
@property
def auth_providers(self) -> list[AuthProvider]:
@@ -275,6 +276,12 @@ class AuthManager:
self, user: models.User, credentials: models.Credentials
) -> None:
"""Link credentials to an existing user."""
linked_user = await self.async_get_user_by_credentials(credentials)
if linked_user == user:
return
if linked_user is not None:
raise ValueError("Credential is already linked to a user")
await self._store.async_link_user(user, credentials)
async def async_remove_user(self, user: models.User) -> None:
@@ -285,7 +292,7 @@ class AuthManager:
]
if tasks:
await asyncio.wait(tasks)
await asyncio.gather(*tasks)
await self._store.async_remove_user(user)
@@ -446,6 +453,28 @@ class AuthManager:
"""Delete a refresh token."""
await self._store.async_remove_refresh_token(refresh_token)
callbacks = self._revoke_callbacks.pop(refresh_token.id, [])
for revoke_callback in callbacks:
revoke_callback()
@callback
def async_register_revoke_token_callback(
self, refresh_token_id: str, revoke_callback: CALLBACK_TYPE
) -> CALLBACK_TYPE:
"""Register a callback to be called when the refresh token id is revoked."""
if refresh_token_id not in self._revoke_callbacks:
self._revoke_callbacks[refresh_token_id] = []
callbacks = self._revoke_callbacks[refresh_token_id]
callbacks.append(revoke_callback)
@callback
def unregister() -> None:
if revoke_callback in callbacks:
callbacks.remove(revoke_callback)
return unregister
@callback
def async_create_access_token(
self, refresh_token: models.RefreshToken, remote_ip: str | None = None
+4 -5
View File
@@ -25,7 +25,7 @@ from . import (
SetupFlow,
)
REQUIREMENTS = ["pyotp==2.3.0"]
REQUIREMENTS = ["pyotp==2.6.0"]
CONF_MESSAGE = "message"
@@ -56,10 +56,10 @@ def _generate_secret() -> str:
def _generate_random() -> int:
"""Generate a 8 digit number."""
"""Generate a 32 digit number."""
import pyotp # pylint: disable=import-outside-toplevel
return int(pyotp.random_base32(length=8, chars=list("1234567890")))
return int(pyotp.random_base32(length=32, chars=list("1234567890")))
def _generate_otp(secret: str, count: int) -> str:
@@ -245,8 +245,7 @@ class NotifyAuthModule(MultiFactorAuthModule):
await self._async_load()
assert self._user_settings is not None
notify_setting = self._user_settings.get(user_id)
if notify_setting is None:
if (notify_setting := self._user_settings.get(user_id)) is None:
_LOGGER.error("Cannot find user %s", user_id)
return
+2 -2
View File
@@ -18,7 +18,7 @@ from . import (
SetupFlow,
)
REQUIREMENTS = ["pyotp==2.3.0", "PyQRCode==1.2.1"]
REQUIREMENTS = ["pyotp==2.6.0", "PyQRCode==1.2.1"]
CONFIG_SCHEMA = MULTI_FACTOR_AUTH_MODULE_SCHEMA.extend({}, extra=vol.PREVENT_EXTRA)
@@ -181,7 +181,7 @@ class TotpSetupFlow(SetupFlow):
# to fix typing complaint
self._auth_module: TotpAuthModule = auth_module
self._user = user
self._ota_secret: str | None = None
self._ota_secret: str = ""
self._url = None # type Optional[str]
self._image = None # type Optional[str]
@@ -2,7 +2,6 @@
from __future__ import annotations
from collections.abc import Callable
import logging
from typing import Any
import voluptuous as vol
@@ -16,8 +15,6 @@ from .util import test_all
POLICY_SCHEMA = vol.Schema({vol.Optional(CAT_ENTITIES): ENTITY_POLICY_SCHEMA})
_LOGGER = logging.getLogger(__name__)
class AbstractPermissions:
"""Default permissions class."""
+9 -3
View File
@@ -17,7 +17,10 @@ import yarl
from homeassistant import config as conf_util, config_entries, core, loader
from homeassistant.components import http
from homeassistant.const import REQUIRED_NEXT_PYTHON_DATE, REQUIRED_NEXT_PYTHON_VER
from homeassistant.const import (
REQUIRED_NEXT_PYTHON_HA_RELEASE,
REQUIRED_NEXT_PYTHON_VER,
)
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import area_registry, device_registry, entity_registry
from homeassistant.helpers.dispatcher import async_dispatcher_send
@@ -240,11 +243,14 @@ async def async_from_config_dict(
stop = monotonic()
_LOGGER.info("Home Assistant initialized in %.2fs", stop - start)
if REQUIRED_NEXT_PYTHON_DATE and sys.version_info[:3] < REQUIRED_NEXT_PYTHON_VER:
if (
REQUIRED_NEXT_PYTHON_HA_RELEASE
and sys.version_info[:3] < REQUIRED_NEXT_PYTHON_VER
):
msg = (
"Support for the running Python version "
f"{'.'.join(str(x) for x in sys.version_info[:3])} is deprecated and will "
f"be removed in the first release after {REQUIRED_NEXT_PYTHON_DATE}. "
f"be removed in Home Assistant {REQUIRED_NEXT_PYTHON_HA_RELEASE}. "
"Please upgrade Python to "
f"{'.'.join(str(x) for x in REQUIRED_NEXT_PYTHON_VER)} or "
"higher."
+8 -8
View File
@@ -20,7 +20,7 @@ from homeassistant.const import (
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.dispatcher import dispatcher_send
from homeassistant.helpers.entity import Entity
from homeassistant.helpers.entity import DeviceInfo, Entity
from .const import ATTRIBUTION, DEFAULT_CACHEDB, DOMAIN, LOGGER
@@ -322,14 +322,14 @@ class AbodeDevice(AbodeEntity):
}
@property
def device_info(self):
def device_info(self) -> DeviceInfo:
"""Return device registry information for this entity."""
return {
"identifiers": {(DOMAIN, self._device.device_id)},
"manufacturer": "Abode",
"name": self._device.name,
"device_type": self._device.type,
}
return DeviceInfo(
identifiers={(DOMAIN, self._device.device_id)},
manufacturer="Abode",
model=self._device.type,
name=self._device.name,
)
def _update_callback(self, device):
"""Update the device state."""
@@ -1,4 +1,6 @@
"""Config flow for the Abode Security System component."""
from http import HTTPStatus
from abodepy import Abode
from abodepy.exceptions import AbodeAuthenticationException, AbodeException
from abodepy.helpers.errors import MFA_CODE_REQUIRED
@@ -6,7 +8,7 @@ from requests.exceptions import ConnectTimeout, HTTPError
import voluptuous as vol
from homeassistant import config_entries
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, HTTP_BAD_REQUEST
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from .const import DEFAULT_CACHEDB, DOMAIN, LOGGER
@@ -51,7 +53,7 @@ class AbodeFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
LOGGER.error("Unable to connect to Abode: %s", ex)
if ex.errcode == HTTP_BAD_REQUEST:
if ex.errcode == HTTPStatus.BAD_REQUEST:
errors = {"base": "invalid_auth"}
else:
@@ -1,9 +1,19 @@
{
"config": {
"abort": {
"reauth_successful": "\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0442\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435 \u0431\u0435\u0448\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e",
"single_instance_allowed": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Abode."
},
"error": {
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0445 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435"
},
"step": {
"reauth_confirm": {
"data": {
"password": "\u041f\u0430\u0440\u043e\u043b\u0430",
"username": "Email"
}
},
"user": {
"data": {
"password": "\u041f\u0430\u0440\u043e\u043b\u0430",
@@ -1,7 +1,7 @@
{
"config": {
"abort": {
"reauth_successful": "Az \u00fajrahiteles\u00edt\u00e9s sikeres volt",
"reauth_successful": "Az \u00fajrahiteles\u00edt\u00e9s sikeres volt.",
"single_instance_allowed": "M\u00e1r konfigur\u00e1lva van. Csak egy konfigur\u00e1ci\u00f3 lehets\u00e9ges."
},
"error": {
@@ -2,7 +2,7 @@
"domain": "accuweather",
"name": "AccuWeather",
"documentation": "https://www.home-assistant.io/integrations/accuweather/",
"requirements": ["accuweather==0.2.0"],
"requirements": ["accuweather==0.3.0"],
"codeowners": ["@bieniu"],
"config_flow": true,
"quality_scale": "platinum",
+10 -8
View File
@@ -5,8 +5,9 @@ from typing import Any, cast
from homeassistant.components.sensor import SensorEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME, DEVICE_CLASS_TEMPERATURE
from homeassistant.const import CONF_NAME, DEVICE_CLASS_TEMPERATURE
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -59,6 +60,7 @@ async def async_setup_entry(
class AccuWeatherSensor(CoordinatorEntity, SensorEntity):
"""Define an AccuWeather entity."""
_attr_attribution = ATTRIBUTION
coordinator: AccuWeatherDataUpdateCoordinator
entity_description: AccuWeatherSensorDescription
@@ -75,7 +77,7 @@ class AccuWeatherSensor(CoordinatorEntity, SensorEntity):
self._sensor_data = _get_sensor_data(
coordinator.data, forecast_day, description.key
)
self._attrs = {ATTR_ATTRIBUTION: ATTRIBUTION}
self._attrs: dict[str, Any] = {}
if forecast_day is not None:
self._attr_name = f"{name} {description.name} {forecast_day}d"
self._attr_unique_id = (
@@ -92,12 +94,12 @@ class AccuWeatherSensor(CoordinatorEntity, SensorEntity):
else:
self._unit_system = API_IMPERIAL
self._attr_native_unit_of_measurement = description.unit_imperial
self._attr_device_info = {
"identifiers": {(DOMAIN, coordinator.location_key)},
"name": NAME,
"manufacturer": MANUFACTURER,
"entry_type": "service",
}
self._attr_device_info = DeviceInfo(
entry_type="service",
identifiers={(DOMAIN, coordinator.location_key)},
manufacturer=MANUFACTURER,
name=NAME,
)
self.forecast_day = forecast_day
@property
@@ -0,0 +1,7 @@
{
"config": {
"error": {
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0445 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435"
}
}
}
@@ -16,7 +16,7 @@
"longitude": "\u7d93\u5ea6",
"name": "\u540d\u7a31"
},
"description": "\u5047\u5982\u4f60\u9700\u8981\u5354\u52a9\u9032\u884c\u8a2d\u5b9a\uff0c\u8acb\u53c3\u95b1\uff1ahttps://www.home-assistant.io/integrations/accuweather/\n\n\u67d0\u4e9b\u50b3\u611f\u5668\u9810\u8a2d\u70ba\u672a\u555f\u7528\uff0c\u53ef\u4ee5\u65bc\u6574\u5408\u8a2d\u5b9a\u4e2d\u555f\u7528\u9019\u4e9b\u5be6\u9ad4\u3002\u5929\u6c23\u9810\u5831\u9810\u8a2d\u672a\u958b\u555f\u3002\u53ef\u4ee5\u65bc\u6574\u5408\u9078\u9805\u4e2d\u958b\u555f\u3002",
"description": "\u5047\u5982\u4f60\u9700\u8981\u5354\u52a9\u9032\u884c\u8a2d\u5b9a\uff0c\u8acb\u53c3\u95b1\uff1ahttps://www.home-assistant.io/integrations/accuweather/\n\n\u67d0\u4e9b\u611f\u6e2c\u5668\u9810\u8a2d\u70ba\u672a\u555f\u7528\uff0c\u53ef\u4ee5\u65bc\u6574\u5408\u8a2d\u5b9a\u4e2d\u555f\u7528\u9019\u4e9b\u5be6\u9ad4\u3002\u5929\u6c23\u9810\u5831\u9810\u8a2d\u672a\u958b\u555f\u3002\u53ef\u4ee5\u65bc\u6574\u5408\u9078\u9805\u4e2d\u958b\u555f\u3002",
"title": "AccuWeather"
}
}
@@ -19,6 +19,7 @@ from homeassistant.components.weather import (
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_NAME, TEMP_CELSIUS, TEMP_FAHRENHEIT
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from homeassistant.util.dt import utc_from_timestamp
@@ -66,12 +67,12 @@ class AccuWeatherEntity(CoordinatorEntity, WeatherEntity):
TEMP_CELSIUS if coordinator.is_metric else TEMP_FAHRENHEIT
)
self._attr_attribution = ATTRIBUTION
self._attr_device_info = {
"identifiers": {(DOMAIN, coordinator.location_key)},
"name": NAME,
"manufacturer": MANUFACTURER,
"entry_type": "service",
}
self._attr_device_info = DeviceInfo(
entry_type="service",
identifiers={(DOMAIN, coordinator.location_key)},
manufacturer=MANUFACTURER,
name=NAME,
)
@property
def condition(self) -> str | None:
@@ -129,8 +129,7 @@ class AcerSwitch(SwitchEntity):
self._attr_available = False
for key in self._attributes:
msg = CMD_DICT.get(key)
if msg:
if msg := CMD_DICT.get(key):
awns = self._write_read_format(msg)
self._attributes[key] = awns
self._attr_extra_state_attributes = self._attributes
+7 -7
View File
@@ -77,11 +77,11 @@ class AcmedaBase(entity.Entity):
return self.roller.name
@property
def device_info(self):
def device_info(self) -> entity.DeviceInfo:
"""Return the device info."""
return {
"identifiers": {(DOMAIN, self.unique_id)},
"name": self.roller.name,
"manufacturer": "Rollease Acmeda",
"via_device": (DOMAIN, self.roller.hub.id),
}
return entity.DeviceInfo(
identifiers={(DOMAIN, self.unique_id)},
manufacturer="Rollease Acmeda",
name=self.roller.name,
via_device=(DOMAIN, self.roller.hub.id),
)
+30 -47
View File
@@ -1,7 +1,6 @@
"""Support for Adax wifi-enabled home heaters."""
from __future__ import annotations
import logging
from typing import Any
from adax import Adax
@@ -21,11 +20,10 @@ from homeassistant.const import (
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import ACCOUNT_ID
_LOGGER = logging.getLogger(__name__)
from .const import ACCOUNT_ID, DOMAIN
async def async_setup_entry(
@@ -41,8 +39,11 @@ async def async_setup_entry(
)
async_add_entities(
AdaxDevice(room, adax_data_handler)
for room in await adax_data_handler.get_rooms()
(
AdaxDevice(room, adax_data_handler)
for room in await adax_data_handler.get_rooms()
),
True,
)
@@ -58,69 +59,51 @@ class AdaxDevice(ClimateEntity):
def __init__(self, heater_data: dict[str, Any], adax_data_handler: Adax) -> None:
"""Initialize the heater."""
self._heater_data = heater_data
self._device_id = heater_data["id"]
self._adax_data_handler = adax_data_handler
self._attr_unique_id = f"{heater_data['homeId']}_{heater_data['id']}"
@property
def name(self) -> str:
"""Return the name of the device, if any."""
return self._heater_data["name"]
@property
def hvac_mode(self) -> str:
"""Return hvac operation ie. heat, cool mode."""
if self._heater_data["heatingEnabled"]:
return HVAC_MODE_HEAT
return HVAC_MODE_OFF
@property
def icon(self) -> str:
"""Return nice icon for heater."""
if self.hvac_mode == HVAC_MODE_HEAT:
return "mdi:radiator"
return "mdi:radiator-off"
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, heater_data["id"])},
name=self.name,
manufacturer="Adax",
)
async def async_set_hvac_mode(self, hvac_mode: str) -> None:
"""Set hvac mode."""
if hvac_mode == HVAC_MODE_HEAT:
temperature = max(
self.min_temp, self._heater_data.get("targetTemperature", self.min_temp)
)
temperature = max(self.min_temp, self.target_temperature or self.min_temp)
await self._adax_data_handler.set_room_target_temperature(
self._heater_data["id"], temperature, True
self._device_id, temperature, True
)
elif hvac_mode == HVAC_MODE_OFF:
await self._adax_data_handler.set_room_target_temperature(
self._heater_data["id"], self.min_temp, False
self._device_id, self.min_temp, False
)
else:
return
await self._adax_data_handler.update()
@property
def current_temperature(self) -> float | None:
"""Return the current temperature."""
return self._heater_data.get("temperature")
@property
def target_temperature(self) -> int | None:
"""Return the temperature we try to reach."""
return self._heater_data.get("targetTemperature")
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set new target temperature."""
temperature = kwargs.get(ATTR_TEMPERATURE)
if temperature is None:
if (temperature := kwargs.get(ATTR_TEMPERATURE)) is None:
return
await self._adax_data_handler.set_room_target_temperature(
self._heater_data["id"], temperature, True
self._device_id, temperature, True
)
async def async_update(self) -> None:
"""Get the latest data."""
for room in await self._adax_data_handler.get_rooms():
if room["id"] == self._heater_data["id"]:
self._heater_data = room
return
if room["id"] != self._device_id:
continue
self._attr_name = room["name"]
self._attr_current_temperature = room.get("temperature")
self._attr_target_temperature = room.get("targetTemperature")
if room["heatingEnabled"]:
self._attr_hvac_mode = HVAC_MODE_HEAT
self._attr_icon = "mdi:radiator"
else:
self._attr_hvac_mode = HVAC_MODE_OFF
self._attr_icon = "mdi:radiator-off"
return
@@ -0,0 +1,19 @@
{
"config": {
"abort": {
"already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e"
},
"error": {
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0445 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435",
"invalid_auth": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435"
},
"step": {
"user": {
"data": {
"host": "\u0425\u043e\u0441\u0442",
"password": "\u041f\u0430\u0440\u043e\u043b\u0430"
}
}
}
}
}
+7 -7
View File
@@ -196,14 +196,14 @@ class AdGuardHomeDeviceEntity(AdGuardHomeEntity):
@property
def device_info(self) -> DeviceInfo:
"""Return device information about this AdGuard Home instance."""
return {
"identifiers": {
return DeviceInfo(
entry_type="service",
identifiers={
(DOMAIN, self.adguard.host, self.adguard.port, self.adguard.base_path) # type: ignore
},
"name": "AdGuard Home",
"manufacturer": "AdGuard Team",
"sw_version": self.hass.data[DOMAIN][self._entry.entry_id].get(
manufacturer="AdGuard Team",
name="AdGuard Home",
sw_version=self.hass.data[DOMAIN][self._entry.entry_id].get(
DATA_ADGUARD_VERSION
),
"entry_type": "service",
}
)
@@ -3,6 +3,9 @@
"abort": {
"existing_instance_updated": "\u0410\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430\u0449\u0430\u0442\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f."
},
"error": {
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0445 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435"
},
"step": {
"hassio_confirm": {
"description": "\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u0442\u0435 Home Assistant \u0434\u0430 \u0441\u0435 \u0441\u0432\u044a\u0440\u0437\u0432\u0430 \u0441 AdGuard Home, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0435\u043d \u043e\u0442 Supervisor \u0434\u043e\u0431\u0430\u0432\u043a\u0430\u0442\u0430: {addon} ?",
@@ -10,7 +13,9 @@
},
"user": {
"data": {
"host": "\u0425\u043e\u0441\u0442",
"password": "\u041f\u0430\u0440\u043e\u043b\u0430",
"port": "\u041f\u043e\u0440\u0442",
"ssl": "AdGuard Home \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 SSL \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442",
"username": "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435",
"verify_ssl": "AdGuard Home \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043d\u0430\u0434\u0435\u0436\u0434\u0435\u043d \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442"
@@ -12,7 +12,7 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, Upda
from .const import ADVANTAGE_AIR_RETRY, DOMAIN
ADVANTAGE_AIR_SYNC_INTERVAL = 15
PLATFORMS = ["climate", "cover", "binary_sensor", "sensor", "switch"]
PLATFORMS = ["binary_sensor", "climate", "cover", "select", "sensor", "switch"]
_LOGGER = logging.getLogger(__name__)
@@ -5,6 +5,7 @@ from homeassistant.components.binary_sensor import (
DEVICE_CLASS_PROBLEM,
BinarySensorEntity,
)
from homeassistant.const import ENTITY_CATEGORY_DIAGNOSTIC
from .const import DOMAIN as ADVANTAGE_AIR_DOMAIN
from .entity import AdvantageAirEntity
@@ -34,6 +35,7 @@ class AdvantageAirZoneFilter(AdvantageAirEntity, BinarySensorEntity):
"""Advantage Air Filter."""
_attr_device_class = DEVICE_CLASS_PROBLEM
_attr_entity_category = ENTITY_CATEGORY_DIAGNOSTIC
def __init__(self, instance, ac_key):
"""Initialize an Advantage Air Filter."""
@@ -65,13 +67,14 @@ class AdvantageAirZoneMotion(AdvantageAirEntity, BinarySensorEntity):
@property
def is_on(self):
"""Return if motion is detect."""
return self._zone["motion"]
return self._zone["motion"] == 20
class AdvantageAirZoneMyZone(AdvantageAirEntity, BinarySensorEntity):
"""Advantage Air Zone MyZone."""
_attr_entity_registry_enabled_default = False
_attr_entity_category = ENTITY_CATEGORY_DIAGNOSTIC
def __init__(self, instance, ac_key, zone_key):
"""Initialize an Advantage Air Zone MyZone."""
@@ -1,5 +1,6 @@
"""Advantage Air parent entity class."""
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import DOMAIN
@@ -14,13 +15,13 @@ class AdvantageAirEntity(CoordinatorEntity):
self.async_change = instance["async_change"]
self.ac_key = ac_key
self.zone_key = zone_key
self._attr_device_info = {
"identifiers": {(DOMAIN, self.coordinator.data["system"]["rid"])},
"name": self.coordinator.data["system"]["name"],
"manufacturer": "Advantage Air",
"model": self.coordinator.data["system"]["sysType"],
"sw_version": self.coordinator.data["system"]["myAppRev"],
}
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, self.coordinator.data["system"]["rid"])},
manufacturer="Advantage Air",
model=self.coordinator.data["system"]["sysType"],
name=self.coordinator.data["system"]["name"],
sw_version=self.coordinator.data["system"]["myAppRev"],
)
@property
def _ac(self):
@@ -0,0 +1,53 @@
"""Select platform for Advantage Air integration."""
from homeassistant.components.select import SelectEntity
from .const import DOMAIN as ADVANTAGE_AIR_DOMAIN
from .entity import AdvantageAirEntity
ADVANTAGE_AIR_INACTIVE = "Inactive"
async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up AdvantageAir toggle platform."""
instance = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
entities = []
for ac_key in instance["coordinator"].data["aircons"]:
entities.append(AdvantageAirMyZone(instance, ac_key))
async_add_entities(entities)
class AdvantageAirMyZone(AdvantageAirEntity, SelectEntity):
"""Representation of Advantage Air MyZone control."""
_attr_icon = "mdi:home-thermometer"
_attr_options = [ADVANTAGE_AIR_INACTIVE]
_number_to_name = {0: ADVANTAGE_AIR_INACTIVE}
_name_to_number = {ADVANTAGE_AIR_INACTIVE: 0}
def __init__(self, instance, ac_key):
"""Initialize an Advantage Air MyZone control."""
super().__init__(instance, ac_key)
self._attr_name = f'{self._ac["name"]} MyZone'
self._attr_unique_id = (
f'{self.coordinator.data["system"]["rid"]}-{ac_key}-myzone'
)
for zone in instance["coordinator"].data["aircons"][ac_key]["zones"].values():
if zone["type"] > 0:
self._name_to_number[zone["name"]] = zone["number"]
self._number_to_name[zone["number"]] = zone["name"]
self._attr_options.append(zone["name"])
@property
def current_option(self):
"""Return the fresh air status."""
return self._number_to_name[self._ac["myZone"]]
async def async_select_option(self, option):
"""Set the MyZone."""
await self.async_change(
{self.ac_key: {"info": {"myZone": self._name_to_number[option]}}}
)
@@ -6,7 +6,7 @@ from homeassistant.components.sensor import (
STATE_CLASS_MEASUREMENT,
SensorEntity,
)
from homeassistant.const import PERCENTAGE, TEMP_CELSIUS
from homeassistant.const import ENTITY_CATEGORY_DIAGNOSTIC, PERCENTAGE, TEMP_CELSIUS
from homeassistant.helpers import config_validation as cv, entity_platform
from .const import ADVANTAGE_AIR_STATE_OPEN, DOMAIN as ADVANTAGE_AIR_DOMAIN
@@ -50,6 +50,7 @@ class AdvantageAirTimeTo(AdvantageAirEntity, SensorEntity):
"""Representation of Advantage Air timer control."""
_attr_native_unit_of_measurement = ADVANTAGE_AIR_SET_COUNTDOWN_UNIT
_attr_entity_category = ENTITY_CATEGORY_DIAGNOSTIC
def __init__(self, instance, ac_key, action):
"""Initialize the Advantage Air timer control."""
@@ -84,6 +85,7 @@ class AdvantageAirZoneVent(AdvantageAirEntity, SensorEntity):
_attr_native_unit_of_measurement = PERCENTAGE
_attr_state_class = STATE_CLASS_MEASUREMENT
_attr_entity_category = ENTITY_CATEGORY_DIAGNOSTIC
def __init__(self, instance, ac_key, zone_key):
"""Initialize an Advantage Air Zone Vent Sensor."""
@@ -113,6 +115,7 @@ class AdvantageAirZoneSignal(AdvantageAirEntity, SensorEntity):
_attr_native_unit_of_measurement = PERCENTAGE
_attr_state_class = STATE_CLASS_MEASUREMENT
_attr_entity_category = ENTITY_CATEGORY_DIAGNOSTIC
def __init__(self, instance, ac_key, zone_key):
"""Initialize an Advantage Air Zone wireless signal sensor."""
@@ -148,6 +151,7 @@ class AdvantageAirZoneTemp(AdvantageAirEntity, SensorEntity):
_attr_device_class = DEVICE_CLASS_TEMPERATURE
_attr_state_class = STATE_CLASS_MEASUREMENT
_attr_entity_registry_enabled_default = False
_attr_entity_category = ENTITY_CATEGORY_DIAGNOSTIC
def __init__(self, instance, ac_key, zone_key):
"""Initialize an Advantage Air Zone Temp Sensor."""
@@ -0,0 +1,18 @@
{
"config": {
"abort": {
"already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e"
},
"error": {
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0445 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435"
},
"step": {
"user": {
"data": {
"ip_address": "IP \u0430\u0434\u0440\u0435\u0441",
"port": "\u041f\u043e\u0440\u0442"
}
}
}
}
}
+1 -1
View File
@@ -52,7 +52,7 @@ async def async_update_options(hass: HomeAssistant, entry: ConfigEntry) -> None:
await hass.config_entries.async_reload(entry.entry_id)
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
+13 -1
View File
@@ -1,7 +1,10 @@
"""Constant values for the AEMET OpenData component."""
from __future__ import annotations
from homeassistant.components.sensor import SensorEntityDescription
from homeassistant.components.sensor import (
STATE_CLASS_MEASUREMENT,
SensorEntityDescription,
)
from homeassistant.components.weather import (
ATTR_CONDITION_CLEAR_NIGHT,
ATTR_CONDITION_CLOUDY,
@@ -252,12 +255,14 @@ WEATHER_SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
name="Humidity",
native_unit_of_measurement=PERCENTAGE,
device_class=DEVICE_CLASS_HUMIDITY,
state_class=STATE_CLASS_MEASUREMENT,
),
SensorEntityDescription(
key=ATTR_API_PRESSURE,
name="Pressure",
native_unit_of_measurement=PRESSURE_HPA,
device_class=DEVICE_CLASS_PRESSURE,
state_class=STATE_CLASS_MEASUREMENT,
),
SensorEntityDescription(
key=ATTR_API_RAIN,
@@ -268,6 +273,7 @@ WEATHER_SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
key=ATTR_API_RAIN_PROB,
name="Rain probability",
native_unit_of_measurement=PERCENTAGE,
state_class=STATE_CLASS_MEASUREMENT,
),
SensorEntityDescription(
key=ATTR_API_SNOW,
@@ -278,6 +284,7 @@ WEATHER_SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
key=ATTR_API_SNOW_PROB,
name="Snow probability",
native_unit_of_measurement=PERCENTAGE,
state_class=STATE_CLASS_MEASUREMENT,
),
SensorEntityDescription(
key=ATTR_API_STATION_ID,
@@ -296,18 +303,21 @@ WEATHER_SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
key=ATTR_API_STORM_PROB,
name="Storm probability",
native_unit_of_measurement=PERCENTAGE,
state_class=STATE_CLASS_MEASUREMENT,
),
SensorEntityDescription(
key=ATTR_API_TEMPERATURE,
name="Temperature",
native_unit_of_measurement=TEMP_CELSIUS,
device_class=DEVICE_CLASS_TEMPERATURE,
state_class=STATE_CLASS_MEASUREMENT,
),
SensorEntityDescription(
key=ATTR_API_TEMPERATURE_FEELING,
name="Temperature feeling",
native_unit_of_measurement=TEMP_CELSIUS,
device_class=DEVICE_CLASS_TEMPERATURE,
state_class=STATE_CLASS_MEASUREMENT,
),
SensorEntityDescription(
key=ATTR_API_TOWN_ID,
@@ -326,6 +336,7 @@ WEATHER_SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
key=ATTR_API_WIND_BEARING,
name="Wind bearing",
native_unit_of_measurement=DEGREE,
state_class=STATE_CLASS_MEASUREMENT,
),
SensorEntityDescription(
key=ATTR_API_WIND_MAX_SPEED,
@@ -336,6 +347,7 @@ WEATHER_SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
key=ATTR_API_WIND_SPEED,
name="Wind speed",
native_unit_of_measurement=SPEED_KILOMETERS_PER_HOUR,
state_class=STATE_CLASS_MEASUREMENT,
),
)
+5 -4
View File
@@ -1,6 +1,7 @@
"""Support for non-delivered packages recorded in AfterShip."""
from __future__ import annotations
from http import HTTPStatus
import logging
from typing import Any, Final
@@ -11,7 +12,7 @@ from homeassistant.components.sensor import (
PLATFORM_SCHEMA as BASE_PLATFORM_SCHEMA,
SensorEntity,
)
from homeassistant.const import ATTR_ATTRIBUTION, CONF_API_KEY, CONF_NAME, HTTP_OK
from homeassistant.const import CONF_API_KEY, CONF_NAME
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv
@@ -64,7 +65,7 @@ async def async_setup_platform(
await aftership.get_trackings()
if not aftership.meta or aftership.meta["code"] != HTTP_OK:
if not aftership.meta or aftership.meta["code"] != HTTPStatus.OK:
_LOGGER.error(
"No tracking data found. Check API key is correct: %s", aftership.meta
)
@@ -109,6 +110,7 @@ async def async_setup_platform(
class AfterShipSensor(SensorEntity):
"""Representation of a AfterShip sensor."""
_attr_attribution = ATTRIBUTION
_attr_native_unit_of_measurement: str = "packages"
_attr_icon: str = ICON
@@ -150,7 +152,7 @@ class AfterShipSensor(SensorEntity):
if not self.aftership.meta:
_LOGGER.error("Unknown errors when querying")
return
if self.aftership.meta["code"] != HTTP_OK:
if self.aftership.meta["code"] != HTTPStatus.OK:
_LOGGER.error(
"Errors when querying AfterShip. %s", str(self.aftership.meta)
)
@@ -191,7 +193,6 @@ class AfterShipSensor(SensorEntity):
_LOGGER.debug("Ignoring %s as it has status: %s", name, status)
self._attributes = {
ATTR_ATTRIBUTION: ATTRIBUTION,
**status_counts,
ATTR_TRACKINGS: trackings,
}
@@ -11,6 +11,7 @@ from homeassistant.const import (
STATE_ALARM_ARMED_NIGHT,
STATE_ALARM_DISARMED,
)
from homeassistant.helpers.entity import DeviceInfo
from .const import CONNECTION, DOMAIN as AGENT_DOMAIN
@@ -45,12 +46,12 @@ class AgentBaseStation(AlarmControlPanelEntity):
self._client = client
self._attr_name = f"{client.name} {CONST_ALARM_CONTROL_PANEL_NAME}"
self._attr_unique_id = f"{client.unique}_CP"
self._attr_device_info = {
"identifiers": {(AGENT_DOMAIN, client.unique)},
"manufacturer": "Agent",
"model": CONST_ALARM_CONTROL_PANEL_NAME,
"sw_version": client.version,
}
self._attr_device_info = DeviceInfo(
identifiers={(AGENT_DOMAIN, client.unique)},
manufacturer="Agent",
model=CONST_ALARM_CONTROL_PANEL_NAME,
sw_version=client.version,
)
async def async_update(self):
"""Update the state of the device."""
+8 -7
View File
@@ -13,6 +13,7 @@ from homeassistant.components.mjpeg.camera import (
)
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME
from homeassistant.helpers import entity_platform
from homeassistant.helpers.entity import DeviceInfo
from .const import (
ATTRIBUTION,
@@ -79,13 +80,13 @@ class AgentCamera(MjpegCamera):
self._attr_name = f"{device.client.name} {device.name}"
self._attr_unique_id = f"{device._client.unique}_{device.typeID}_{device.id}"
super().__init__(device_info)
self._attr_device_info = {
"identifiers": {(AGENT_DOMAIN, self.unique_id)},
"name": self.name,
"manufacturer": "Agent",
"model": "Camera",
"sw_version": device.client.version,
}
self._attr_device_info = DeviceInfo(
identifiers={(AGENT_DOMAIN, self.unique_id)},
manufacturer="Agent",
model="Camera",
name=self.name,
sw_version=device.client.version,
)
async def async_update(self):
"""Update our state from the Agent API."""
@@ -33,9 +33,7 @@ class AgentFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
try:
await agent_client.update()
except AgentConnectionError:
pass
except AgentError:
except (AgentConnectionError, AgentError):
pass
await agent_client.close()
@@ -0,0 +1,15 @@
{
"config": {
"abort": {
"already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e"
},
"step": {
"user": {
"data": {
"host": "\u0425\u043e\u0441\u0442",
"port": "\u041f\u043e\u0440\u0442"
}
}
}
}
}
@@ -4,7 +4,7 @@
"already_configured": "Az eszk\u00f6z m\u00e1r konfigur\u00e1lva van"
},
"error": {
"already_in_progress": "A konfigur\u00e1l\u00e1s m\u00e1r folyamatban van.",
"already_in_progress": "A konfigur\u00e1l\u00e1s m\u00e1r folyamatban van",
"cannot_connect": "Sikertelen csatlakoz\u00e1s"
},
"step": {
@@ -6,10 +6,7 @@ import logging
from typing import Final, final
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
ATTR_ATTRIBUTION,
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
)
from homeassistant.const import CONCENTRATION_MICROGRAMS_PER_CUBIC_METER
from homeassistant.core import HomeAssistant
from homeassistant.helpers.config_validation import ( # noqa: F401
PLATFORM_SCHEMA,
@@ -41,7 +38,6 @@ SCAN_INTERVAL: Final = timedelta(seconds=30)
PROP_TO_ATTR: Final[dict[str, str]] = {
"air_quality_index": ATTR_AQI,
"attribution": ATTR_ATTRIBUTION,
"carbon_dioxide": ATTR_CO2,
"carbon_monoxide": ATTR_CO,
"nitrogen_oxide": ATTR_N2O,
@@ -114,11 +110,6 @@ class AirQualityEntity(Entity):
"""Return the CO2 (carbon dioxide) level."""
return None
@property
def attribution(self) -> StateType:
"""Return the attribution."""
return None
@property
def sulphur_dioxide(self) -> StateType:
"""Return the SO2 (sulphur dioxide) level."""
+4 -10
View File
@@ -1,6 +1,7 @@
"""Adds config flow for Airly."""
from __future__ import annotations
from http import HTTPStatus
from typing import Any
from aiohttp import ClientSession
@@ -10,14 +11,7 @@ import async_timeout
import voluptuous as vol
from homeassistant import config_entries
from homeassistant.const import (
CONF_API_KEY,
CONF_LATITUDE,
CONF_LONGITUDE,
CONF_NAME,
HTTP_NOT_FOUND,
HTTP_UNAUTHORIZED,
)
from homeassistant.const import CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME
from homeassistant.data_entry_flow import FlowResult
from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv
@@ -60,9 +54,9 @@ class AirlyFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
use_nearest=True,
)
except AirlyError as err:
if err.status_code == HTTP_UNAUTHORIZED:
if err.status_code == HTTPStatus.UNAUTHORIZED:
errors["base"] = "invalid_api_key"
if err.status_code == HTTP_NOT_FOUND:
if err.status_code == HTTPStatus.NOT_FOUND:
errors["base"] = "wrong_location"
else:
if not location_point_valid:
+1
View File
@@ -32,3 +32,4 @@ MANUFACTURER: Final = "Airly sp. z o.o."
MAX_UPDATE_INTERVAL: Final = 90
MIN_UPDATE_INTERVAL: Final = 5
NO_AIRLY_SENSORS: Final = "There are no Airly sensors in this area yet."
URL = "https://airly.org/map/#{latitude},{longitude}"
+11 -8
View File
@@ -27,6 +27,7 @@ from homeassistant.const import (
TEMP_CELSIUS,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -54,6 +55,7 @@ from .const import (
MANUFACTURER,
SUFFIX_LIMIT,
SUFFIX_PERCENT,
URL,
)
PARALLEL_UPDATES = 1
@@ -151,14 +153,15 @@ class AirlySensor(CoordinatorEntity, SensorEntity):
) -> None:
"""Initialize."""
super().__init__(coordinator)
self._attr_device_info = {
"identifiers": {
(DOMAIN, f"{coordinator.latitude}-{coordinator.longitude}")
},
"name": DEFAULT_NAME,
"manufacturer": MANUFACTURER,
"entry_type": "service",
}
self._attr_device_info = DeviceInfo(
entry_type="service",
identifiers={(DOMAIN, f"{coordinator.latitude}-{coordinator.longitude}")},
manufacturer=MANUFACTURER,
name=DEFAULT_NAME,
configuration_url=URL.format(
latitude=coordinator.latitude, longitude=coordinator.longitude
),
)
self._attr_name = f"{name} {description.name}"
self._attr_unique_id = (
f"{coordinator.latitude}-{coordinator.longitude}-{description.key}".lower()
+1 -1
View File
@@ -64,7 +64,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
@@ -1,7 +1,22 @@
{
"config": {
"abort": {
"already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e"
},
"error": {
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0445 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435",
"invalid_auth": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435",
"invalid_location": "\u041d\u044f\u043c\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438 \u0437\u0430 \u0442\u043e\u0432\u0430 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435",
"unknown": "\u041d\u0435\u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430"
},
"step": {
"user": {
"data": {
"api_key": "API \u043a\u043b\u044e\u0447",
"latitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0448\u0438\u0440\u0438\u043d\u0430",
"longitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0434\u044a\u043b\u0436\u0438\u043d\u0430"
}
}
}
}
}
+10 -5
View File
@@ -22,12 +22,14 @@ from homeassistant.const import (
DEVICE_CLASS_PRESSURE,
DEVICE_CLASS_SIGNAL_STRENGTH,
DEVICE_CLASS_TEMPERATURE,
ENTITY_CATEGORY_DIAGNOSTIC,
PERCENTAGE,
PRESSURE_MBAR,
SIGNAL_STRENGTH_DECIBELS,
TEMP_CELSIUS,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import (
CoordinatorEntity,
@@ -64,6 +66,7 @@ SENSORS: dict[str, SensorEntityDescription] = {
key="battery",
device_class=DEVICE_CLASS_BATTERY,
native_unit_of_measurement=PERCENTAGE,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
name="Battery",
),
"co2": SensorEntityDescription(
@@ -96,6 +99,7 @@ SENSORS: dict[str, SensorEntityDescription] = {
device_class=DEVICE_CLASS_SIGNAL_STRENGTH,
name="RSSI",
entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
"pm1": SensorEntityDescription(
key="pm1",
@@ -152,11 +156,12 @@ class AirthingsHeaterEnergySensor(CoordinatorEntity, SensorEntity):
self._attr_name = f"{airthings_device.name} {entity_description.name}"
self._attr_unique_id = f"{airthings_device.device_id}_{entity_description.key}"
self._id = airthings_device.device_id
self._attr_device_info = {
"identifiers": {(DOMAIN, airthings_device.device_id)},
"name": airthings_device.name,
"manufacturer": "Airthings",
}
self._attr_device_info = DeviceInfo(
configuration_url="https://dashboard.airthings.com/",
identifiers={(DOMAIN, airthings_device.device_id)},
name=airthings_device.name,
manufacturer="Airthings",
)
@property
def native_value(self) -> StateType:
@@ -0,0 +1,19 @@
{
"config": {
"abort": {
"already_configured": "\u0410\u043a\u0430\u0443\u043d\u0442\u0430 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d"
},
"error": {
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0445 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435",
"invalid_auth": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435",
"unknown": "\u041d\u0435\u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430"
},
"step": {
"user": {
"data": {
"id": "ID"
}
}
}
}
}
@@ -0,0 +1,19 @@
{
"config": {
"abort": {
"already_configured": "\u00da\u010det je ji\u017e nastaven"
},
"error": {
"cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit",
"invalid_auth": "Neplatn\u00e9 ov\u011b\u0159en\u00ed",
"unknown": "Neo\u010dek\u00e1van\u00e1 chyba"
},
"step": {
"user": {
"data": {
"id": "ID"
}
}
}
}
}
@@ -0,0 +1,20 @@
{
"config": {
"abort": {
"already_configured": "Konto jest ju\u017c skonfigurowane"
},
"error": {
"cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia",
"invalid_auth": "Niepoprawne uwierzytelnienie",
"unknown": "Nieoczekiwany b\u0142\u0105d"
},
"step": {
"user": {
"data": {
"id": "ID",
"secret": "Sekret"
}
}
}
}
}
+15 -14
View File
@@ -21,6 +21,7 @@ from homeassistant.components.climate.const import (
)
from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS
from homeassistant.core import callback
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import DOMAIN
@@ -96,14 +97,14 @@ class AirtouchAC(CoordinatorEntity, ClimateEntity):
return super()._handle_coordinator_update()
@property
def device_info(self):
def device_info(self) -> DeviceInfo:
"""Return device info for this device."""
return {
"identifiers": {(DOMAIN, self.unique_id)},
"name": self.name,
"manufacturer": "Airtouch",
"model": "Airtouch 4",
}
return DeviceInfo(
identifiers={(DOMAIN, self.unique_id)},
name=self.name,
manufacturer="Airtouch",
model="Airtouch 4",
)
@property
def unique_id(self):
@@ -211,14 +212,14 @@ class AirtouchGroup(CoordinatorEntity, ClimateEntity):
return super()._handle_coordinator_update()
@property
def device_info(self):
def device_info(self) -> DeviceInfo:
"""Return device info for this device."""
return {
"identifiers": {(DOMAIN, self.unique_id)},
"name": self.name,
"manufacturer": "Airtouch",
"model": "Airtouch 4",
}
return DeviceInfo(
identifiers={(DOMAIN, self.unique_id)},
manufacturer="Airtouch",
model="Airtouch 4",
name=self.name,
)
@property
def unique_id(self):
@@ -0,0 +1,17 @@
{
"config": {
"abort": {
"already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e"
},
"error": {
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0445 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435"
},
"step": {
"user": {
"data": {
"host": "\u0425\u043e\u0441\u0442"
}
}
}
}
}
+64 -72
View File
@@ -4,7 +4,7 @@ from __future__ import annotations
from collections.abc import Mapping
from datetime import timedelta
from math import ceil
from typing import Any
from typing import Any, Dict, cast
from pyairvisual import CloudAPI, NodeSamba
from pyairvisual.errors import (
@@ -54,8 +54,6 @@ from .const import (
PLATFORMS = ["sensor"]
DATA_LISTENER = "listener"
DEFAULT_ATTRIBUTION = "Data provided by AirVisual"
DEFAULT_NODE_PRO_UPDATE_INTERVAL = timedelta(minutes=1)
@@ -106,12 +104,13 @@ def async_get_cloud_coordinators_by_api_key(
hass: HomeAssistant, api_key: str
) -> list[DataUpdateCoordinator]:
"""Get all DataUpdateCoordinator objects related to a particular API key."""
coordinators = []
for entry_id, coordinator in hass.data[DOMAIN][DATA_COORDINATOR].items():
config_entry = hass.config_entries.async_get_entry(entry_id)
if config_entry and config_entry.data.get(CONF_API_KEY) == api_key:
coordinators.append(coordinator)
return coordinators
return [
coordinator
for entry_id, attrs in hass.data[DOMAIN].items()
if (entry := hass.config_entries.async_get_entry(entry_id))
and (coordinator := attrs.get(DATA_COORDINATOR))
and entry.data.get(CONF_API_KEY) == api_key
]
@callback
@@ -139,25 +138,25 @@ def async_sync_geo_coordinator_update_intervals(
@callback
def _standardize_geography_config_entry(
hass: HomeAssistant, config_entry: ConfigEntry
hass: HomeAssistant, entry: ConfigEntry
) -> None:
"""Ensure that geography config entries have appropriate properties."""
entry_updates = {}
if not config_entry.unique_id:
if not entry.unique_id:
# If the config entry doesn't already have a unique ID, set one:
entry_updates["unique_id"] = config_entry.data[CONF_API_KEY]
if not config_entry.options:
entry_updates["unique_id"] = entry.data[CONF_API_KEY]
if not entry.options:
# If the config entry doesn't already have any options set, set defaults:
entry_updates["options"] = {CONF_SHOW_ON_MAP: True}
if config_entry.data.get(CONF_INTEGRATION_TYPE) not in [
if entry.data.get(CONF_INTEGRATION_TYPE) not in [
INTEGRATION_TYPE_GEOGRAPHY_COORDS,
INTEGRATION_TYPE_GEOGRAPHY_NAME,
]:
# If the config entry data doesn't contain an integration type that we know
# about, infer it from the data we have:
entry_updates["data"] = {**config_entry.data}
if CONF_CITY in config_entry.data:
entry_updates["data"] = {**entry.data}
if CONF_CITY in entry.data:
entry_updates["data"][
CONF_INTEGRATION_TYPE
] = INTEGRATION_TYPE_GEOGRAPHY_NAME
@@ -169,55 +168,55 @@ def _standardize_geography_config_entry(
if not entry_updates:
return
hass.config_entries.async_update_entry(config_entry, **entry_updates)
hass.config_entries.async_update_entry(entry, **entry_updates)
@callback
def _standardize_node_pro_config_entry(
hass: HomeAssistant, config_entry: ConfigEntry
) -> None:
def _standardize_node_pro_config_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
"""Ensure that Node/Pro config entries have appropriate properties."""
entry_updates: dict[str, Any] = {}
if CONF_INTEGRATION_TYPE not in config_entry.data:
if CONF_INTEGRATION_TYPE not in entry.data:
# If the config entry data doesn't contain the integration type, add it:
entry_updates["data"] = {
**config_entry.data,
**entry.data,
CONF_INTEGRATION_TYPE: INTEGRATION_TYPE_NODE_PRO,
}
if not entry_updates:
return
hass.config_entries.async_update_entry(config_entry, **entry_updates)
hass.config_entries.async_update_entry(entry, **entry_updates)
async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up AirVisual as config entry."""
hass.data.setdefault(DOMAIN, {DATA_COORDINATOR: {}, DATA_LISTENER: {}})
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = {}
if CONF_API_KEY in config_entry.data:
_standardize_geography_config_entry(hass, config_entry)
if CONF_API_KEY in entry.data:
_standardize_geography_config_entry(hass, entry)
websession = aiohttp_client.async_get_clientsession(hass)
cloud_api = CloudAPI(config_entry.data[CONF_API_KEY], session=websession)
cloud_api = CloudAPI(entry.data[CONF_API_KEY], session=websession)
async def async_update_data() -> dict[str, Any]:
"""Get new data from the API."""
if CONF_CITY in config_entry.data:
if CONF_CITY in entry.data:
api_coro = cloud_api.air_quality.city(
config_entry.data[CONF_CITY],
config_entry.data[CONF_STATE],
config_entry.data[CONF_COUNTRY],
entry.data[CONF_CITY],
entry.data[CONF_STATE],
entry.data[CONF_COUNTRY],
)
else:
api_coro = cloud_api.air_quality.nearest_city(
config_entry.data[CONF_LATITUDE],
config_entry.data[CONF_LONGITUDE],
entry.data[CONF_LATITUDE],
entry.data[CONF_LONGITUDE],
)
try:
return await api_coro
data = await api_coro
return cast(Dict[str, Any], data)
except (InvalidKeyError, KeyExpiredError) as ex:
raise ConfigEntryAuthFailed from ex
except AirVisualError as err:
@@ -226,7 +225,7 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b
coordinator = DataUpdateCoordinator(
hass,
LOGGER,
name=async_get_geography_id(config_entry.data),
name=async_get_geography_id(entry.data),
# We give a placeholder update interval in order to create the coordinator;
# then, below, we use the coordinator's presence (along with any other
# coordinators using the same API key) to calculate an actual, leveled
@@ -236,16 +235,14 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b
)
# Only geography-based entries have options:
hass.data[DOMAIN][DATA_LISTENER][
config_entry.entry_id
] = config_entry.add_update_listener(async_reload_entry)
entry.async_on_unload(entry.add_update_listener(async_reload_entry))
else:
# Remove outdated air_quality entities from the entity registry if they exist:
ent_reg = entity_registry.async_get(hass)
for entity_entry in [
e
for e in ent_reg.entities.values()
if e.config_entry_id == config_entry.entry_id
if e.config_entry_id == entry.entry_id
and e.entity_id.startswith("air_quality")
]:
LOGGER.debug(
@@ -253,15 +250,16 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b
)
ent_reg.async_remove(entity_entry.entity_id)
_standardize_node_pro_config_entry(hass, config_entry)
_standardize_node_pro_config_entry(hass, entry)
async def async_update_data() -> dict[str, Any]:
"""Get new data from the API."""
try:
async with NodeSamba(
config_entry.data[CONF_IP_ADDRESS], config_entry.data[CONF_PASSWORD]
entry.data[CONF_IP_ADDRESS], entry.data[CONF_PASSWORD]
) as node:
return await node.async_get_latest_measurements()
data = await node.async_get_latest_measurements()
return cast(Dict[str, Any], data)
except NodeProError as err:
raise UpdateFailed(f"Error while retrieving data: {err}") from err
@@ -274,41 +272,38 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b
)
await coordinator.async_config_entry_first_refresh()
hass.data[DOMAIN][DATA_COORDINATOR][config_entry.entry_id] = coordinator
hass.data[DOMAIN][entry.entry_id][DATA_COORDINATOR] = coordinator
# Reassess the interval between 2 server requests
if CONF_API_KEY in config_entry.data:
async_sync_geo_coordinator_update_intervals(
hass, config_entry.data[CONF_API_KEY]
)
if CONF_API_KEY in entry.data:
async_sync_geo_coordinator_update_intervals(hass, entry.data[CONF_API_KEY])
hass.config_entries.async_setup_platforms(config_entry, PLATFORMS)
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
return True
async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Migrate an old config entry."""
version = config_entry.version
version = entry.version
LOGGER.debug("Migrating from version %s", version)
# 1 -> 2: One geography per config entry
if version == 1:
version = config_entry.version = 2
version = entry.version = 2
# Update the config entry to only include the first geography (there is always
# guaranteed to be at least one):
geographies = list(config_entry.data[CONF_GEOGRAPHIES])
geographies = list(entry.data[CONF_GEOGRAPHIES])
first_geography = geographies.pop(0)
first_id = async_get_geography_id(first_geography)
hass.config_entries.async_update_entry(
config_entry,
entry,
unique_id=first_id,
title=f"Cloud API ({first_id})",
data={CONF_API_KEY: config_entry.data[CONF_API_KEY], **first_geography},
data={CONF_API_KEY: entry.data[CONF_API_KEY], **first_geography},
)
# For any geographies that remain, create a new config entry for each one:
@@ -321,7 +316,7 @@ async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) ->
hass.config_entries.flow.async_init(
DOMAIN,
context={"source": source},
data={CONF_API_KEY: config_entry.data[CONF_API_KEY], **geography},
data={CONF_API_KEY: entry.data[CONF_API_KEY], **geography},
)
)
@@ -330,42 +325,39 @@ async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) ->
return True
async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload an AirVisual config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(
config_entry, PLATFORMS
)
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok:
hass.data[DOMAIN][DATA_COORDINATOR].pop(config_entry.entry_id)
remove_listener = hass.data[DOMAIN][DATA_LISTENER].pop(config_entry.entry_id)
remove_listener()
if CONF_API_KEY in config_entry.data:
hass.data[DOMAIN].pop(entry.entry_id)
if CONF_API_KEY in entry.data:
# Re-calculate the update interval period for any remaining consumers of
# this API key:
async_sync_geo_coordinator_update_intervals(
hass, config_entry.data[CONF_API_KEY]
)
async_sync_geo_coordinator_update_intervals(hass, entry.data[CONF_API_KEY])
return unload_ok
async def async_reload_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> None:
async def async_reload_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
"""Handle an options update."""
await hass.config_entries.async_reload(config_entry.entry_id)
await hass.config_entries.async_reload(entry.entry_id)
class AirVisualEntity(CoordinatorEntity):
"""Define a generic AirVisual entity."""
def __init__(
self, coordinator: DataUpdateCoordinator, description: EntityDescription
self,
coordinator: DataUpdateCoordinator,
entry: ConfigEntry,
description: EntityDescription,
) -> None:
"""Initialize."""
super().__init__(coordinator)
self._attr_extra_state_attributes = {ATTR_ATTRIBUTION: DEFAULT_ATTRIBUTION}
self._entry = entry
self.entity_description = description
async def async_added_to_hass(self) -> None:
@@ -141,6 +141,9 @@ class AirVisualFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
existing_entry = await self.async_set_unique_id(self._geo_id)
if existing_entry:
self.hass.config_entries.async_update_entry(existing_entry, data=user_input)
self.hass.async_create_task(
self.hass.config_entries.async_reload(existing_entry.entry_id)
)
return self.async_abort(reason="reauth_successful")
return self.async_create_entry(
@@ -237,7 +240,7 @@ class AirVisualFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
step_id="reauth_confirm", data_schema=API_KEY_DATA_SCHEMA
)
conf = {CONF_API_KEY: user_input[CONF_API_KEY], **self._entry_data_for_reauth}
conf = {**self._entry_data_for_reauth, CONF_API_KEY: user_input[CONF_API_KEY]}
return await self._async_finish_geography(
conf, self._entry_data_for_reauth[CONF_INTEGRATION_TYPE]
@@ -262,9 +265,9 @@ class AirVisualFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
class AirVisualOptionsFlowHandler(config_entries.OptionsFlow):
"""Handle an AirVisual options flow."""
def __init__(self, config_entry: ConfigEntry) -> None:
def __init__(self, entry: ConfigEntry) -> None:
"""Initialize."""
self.config_entry = config_entry
self.entry = entry
async def async_step_init(
self, user_input: dict[str, str] | None = None
@@ -279,7 +282,7 @@ class AirVisualOptionsFlowHandler(config_entries.OptionsFlow):
{
vol.Required(
CONF_SHOW_ON_MAP,
default=self.config_entry.options.get(CONF_SHOW_ON_MAP),
default=self.entry.options.get(CONF_SHOW_ON_MAP),
): bool
}
),
+28 -26
View File
@@ -27,6 +27,7 @@ from homeassistant.const import (
DEVICE_CLASS_PM25,
DEVICE_CLASS_TEMPERATURE,
DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS,
ENTITY_CATEGORY_DIAGNOSTIC,
PERCENTAGE,
TEMP_CELSIUS,
)
@@ -103,6 +104,7 @@ NODE_PRO_SENSOR_DESCRIPTIONS = (
key=SENSOR_KIND_BATTERY_LEVEL,
name="Battery",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
native_unit_of_measurement=PERCENTAGE,
),
SensorEntityDescription(
@@ -189,26 +191,24 @@ POLLUTANT_UNITS = {
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
"""Set up AirVisual sensors based on a config entry."""
coordinator = hass.data[DOMAIN][DATA_COORDINATOR][config_entry.entry_id]
coordinator = hass.data[DOMAIN][entry.entry_id][DATA_COORDINATOR]
sensors: list[AirVisualGeographySensor | AirVisualNodeProSensor]
if config_entry.data[CONF_INTEGRATION_TYPE] in (
if entry.data[CONF_INTEGRATION_TYPE] in (
INTEGRATION_TYPE_GEOGRAPHY_COORDS,
INTEGRATION_TYPE_GEOGRAPHY_NAME,
):
sensors = [
AirVisualGeographySensor(coordinator, config_entry, description, locale)
AirVisualGeographySensor(coordinator, entry, description, locale)
for locale in GEOGRAPHY_SENSOR_LOCALES
for description in GEOGRAPHY_SENSOR_DESCRIPTIONS
]
else:
sensors = [
AirVisualNodeProSensor(coordinator, description)
AirVisualNodeProSensor(coordinator, entry, description)
for description in NODE_PRO_SENSOR_DESCRIPTIONS
]
@@ -221,23 +221,22 @@ class AirVisualGeographySensor(AirVisualEntity, SensorEntity):
def __init__(
self,
coordinator: DataUpdateCoordinator,
config_entry: ConfigEntry,
entry: ConfigEntry,
description: SensorEntityDescription,
locale: str,
) -> None:
"""Initialize."""
super().__init__(coordinator, description)
super().__init__(coordinator, entry, description)
self._attr_extra_state_attributes.update(
{
ATTR_CITY: config_entry.data.get(CONF_CITY),
ATTR_STATE: config_entry.data.get(CONF_STATE),
ATTR_COUNTRY: config_entry.data.get(CONF_COUNTRY),
ATTR_CITY: entry.data.get(CONF_CITY),
ATTR_STATE: entry.data.get(CONF_STATE),
ATTR_COUNTRY: entry.data.get(CONF_COUNTRY),
}
)
self._attr_name = f"{GEOGRAPHY_SENSOR_LOCALES[locale]} {description.name}"
self._attr_unique_id = f"{config_entry.unique_id}_{locale}_{description.key}"
self._config_entry = config_entry
self._attr_unique_id = f"{entry.unique_id}_{locale}_{description.key}"
self._locale = locale
@property
@@ -279,16 +278,16 @@ class AirVisualGeographySensor(AirVisualEntity, SensorEntity):
#
# We use any coordinates in the config entry and, in the case of a geography by
# name, we fall back to the latitude longitude provided in the coordinator data:
latitude = self._config_entry.data.get(
latitude = self._entry.data.get(
CONF_LATITUDE,
self.coordinator.data["location"]["coordinates"][1],
)
longitude = self._config_entry.data.get(
longitude = self._entry.data.get(
CONF_LONGITUDE,
self.coordinator.data["location"]["coordinates"][0],
)
if self._config_entry.options[CONF_SHOW_ON_MAP]:
if self._entry.options[CONF_SHOW_ON_MAP]:
self._attr_extra_state_attributes[ATTR_LATITUDE] = latitude
self._attr_extra_state_attributes[ATTR_LONGITUDE] = longitude
self._attr_extra_state_attributes.pop("lati", None)
@@ -304,10 +303,13 @@ class AirVisualNodeProSensor(AirVisualEntity, SensorEntity):
"""Define an AirVisual sensor related to a Node/Pro unit."""
def __init__(
self, coordinator: DataUpdateCoordinator, description: SensorEntityDescription
self,
coordinator: DataUpdateCoordinator,
entry: ConfigEntry,
description: SensorEntityDescription,
) -> None:
"""Initialize."""
super().__init__(coordinator, description)
super().__init__(coordinator, entry, description)
self._attr_name = (
f"{coordinator.data['settings']['node_name']} Node/Pro: {description.name}"
@@ -317,16 +319,16 @@ class AirVisualNodeProSensor(AirVisualEntity, SensorEntity):
@property
def device_info(self) -> DeviceInfo:
"""Return device registry information for this entity."""
return {
"identifiers": {(DOMAIN, self.coordinator.data["serial_number"])},
"name": self.coordinator.data["settings"]["node_name"],
"manufacturer": "AirVisual",
"model": f'{self.coordinator.data["status"]["model"]}',
"sw_version": (
return DeviceInfo(
identifiers={(DOMAIN, self.coordinator.data["serial_number"])},
manufacturer="AirVisual",
model=f'{self.coordinator.data["status"]["model"]}',
name=self.coordinator.data["settings"]["node_name"],
sw_version=(
f'Version {self.coordinator.data["status"]["system_version"]}'
f'{self.coordinator.data["status"]["app_version"]}'
),
}
)
@callback
def update_from_latest_data(self) -> None:
@@ -1,11 +1,30 @@
{
"config": {
"abort": {
"reauth_successful": "\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0442\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435 \u0431\u0435\u0448\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e"
},
"error": {
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0445 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435",
"general_error": "\u041d\u0435\u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430",
"invalid_api_key": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d API \u043a\u043b\u044e\u0447"
},
"step": {
"geography_by_name": {
"data": {
"city": "\u0413\u0440\u0430\u0434",
"country": "\u0421\u0442\u0440\u0430\u043d\u0430"
}
},
"node_pro": {
"data": {
"ip_address": "\u0425\u043e\u0441\u0442",
"password": "\u041f\u0430\u0440\u043e\u043b\u0430"
}
},
"reauth_confirm": {
"data": {
"api_key": "API \u043a\u043b\u044e\u0447"
}
}
}
}
@@ -2,7 +2,7 @@
"config": {
"abort": {
"already_configured": "A hely m\u00e1r konfigur\u00e1lva van vagy a Node/Pro azonos\u00edt\u00f3 m\u00e1r regisztr\u00e1lva van.",
"reauth_successful": "Az \u00fajrahiteles\u00edt\u00e9s sikeres volt"
"reauth_successful": "Az \u00fajrahiteles\u00edt\u00e9s sikeres volt."
},
"error": {
"cannot_connect": "Sikertelen csatlakoz\u00e1s",
@@ -0,0 +1,9 @@
{
"state": {
"airvisual__pollutant_label": {
"o3": "\u041e\u0437\u043e\u043d",
"p1": "PM10",
"p2": "PM2.5"
}
}
}
@@ -0,0 +1,20 @@
{
"state": {
"airvisual__pollutant_label": {
"co": "\u4e00\u6c27\u5316\u78b3",
"n2": "\u4e8c\u6c27\u5316\u6c2e",
"o3": "\u81ed\u6c27",
"p1": "PM10",
"p2": "PM2.5",
"s2": "\u4e8c\u6c27\u5316\u786b"
},
"airvisual__pollutant_level": {
"good": "\u826f\u597d",
"hazardous": "\u5371\u5bb3\u5065\u5eb7",
"moderate": "\u4e2d\u7b49",
"unhealthy": "\u4e0d\u5229\u4e8e\u5065\u5eb7",
"unhealthy_sensitive": "\u4e0d\u5229\u4e8e\u654f\u611f\u4eba\u7fa4",
"very_unhealthy": "\u975e\u5e38\u4e0d\u5229\u4e8e\u5065\u5eb7"
}
}
}
@@ -48,9 +48,7 @@ async def _async_reproduce_state(
reproduce_options: dict[str, Any] | None = None,
) -> None:
"""Reproduce a single state."""
cur_state = hass.states.get(state.entity_id)
if cur_state is None:
if (cur_state := hass.states.get(state.entity_id)) is None:
_LOGGER.warning("Unable to find entity %s", state.entity_id)
return
@@ -1,4 +1,30 @@
{
"device_automation": {
"action_type": {
"arm_away": "\u05d3\u05e8\u05d9\u05db\u05ea {entity_name} \u05dc\u05d0 \u05d1\u05d1\u05d9\u05ea",
"arm_home": "\u05d3\u05e8\u05d9\u05db\u05ea {entity_name} \u05d4\u05d1\u05d9\u05ea\u05d4",
"arm_night": "\u05d3\u05e8\u05d9\u05db\u05ea {entity_name} \u05dc\u05d9\u05dc\u05d4",
"arm_vacation": "\u05d3\u05e8\u05d9\u05db\u05ea {entity_name} \u05d7\u05d5\u05e4\u05e9\u05d4",
"disarm": "\u05e0\u05d9\u05d8\u05e8\u05d5\u05dc {entity_name}",
"trigger": "\u05d4\u05e4\u05e2\u05dc\u05ea {entity_name}"
},
"condition_type": {
"is_armed_away": "{entity_name} \u05d3\u05e8\u05d5\u05da \u05dc\u05d0 \u05d1\u05d1\u05d9\u05ea",
"is_armed_home": "{entity_name} \u05d3\u05e8\u05d5\u05da \u05d1\u05d9\u05ea",
"is_armed_night": "{entity_name} \u05d3\u05e8\u05d5\u05da \u05dc\u05d9\u05dc\u05d4",
"is_armed_vacation": "{entity_name} \u05d1\u05d7\u05d5\u05e4\u05e9\u05d4 \u05d3\u05e8\u05d5\u05db\u05d4",
"is_disarmed": "{entity_name} \u05de\u05e0\u05d5\u05d8\u05e8\u05dc",
"is_triggered": "{entity_name} \u05de\u05d5\u05e4\u05e2\u05dc"
},
"trigger_type": {
"armed_away": "{entity_name} \u05d3\u05e8\u05d5\u05da \u05dc\u05d0 \u05d1\u05d1\u05d9\u05ea",
"armed_home": "{entity_name} \u05d3\u05e8\u05d5\u05da \u05d1\u05d1\u05d9\u05ea",
"armed_night": "{entity_name} \u05d3\u05e8\u05d5\u05da \u05dc\u05d9\u05dc\u05d4",
"armed_vacation": "{entity_name} \u05d7\u05d5\u05e4\u05e9\u05d4 \u05d3\u05e8\u05d5\u05db\u05d4",
"disarmed": "{entity_name} \u05de\u05e0\u05d5\u05d8\u05e8\u05dc",
"triggered": "{entity_name} \u05de\u05d5\u05e4\u05e2\u05dc"
}
},
"state": {
"_": {
"armed": "\u05d3\u05e8\u05d5\u05da",
@@ -1,23 +1,40 @@
{
"device_automation": {
"action_type": {
"arm_away": "D\u0131\u015farda",
"arm_home": "Evde",
"arm_night": "Gece",
"disarm": "Devre d\u0131\u015f\u0131 {entity_name}",
"trigger": "Tetikle {entity_name}"
},
"condition_type": {
"is_armed_away": "{entity_name} D\u0131\u015farda Modu Aktif",
"is_armed_home": "{entity_name} Evde Modu Aktif",
"is_armed_night": "{entity_name} Gece Modu Aktif",
"is_disarmed": "{entity_name} Devre D\u0131\u015f\u0131",
"is_triggered": "{entity_name} tetiklendi"
},
"trigger_type": {
"disarmed": "{entity_name} b\u0131rak\u0131ld\u0131",
"armed_away": "{entity_name} D\u0131\u015farda Modu Aktif",
"armed_home": "{entity_name} Evde Modu Aktif",
"armed_night": "{entity_name} Gece Modu Aktif",
"disarmed": "{entity_name} Devre D\u0131\u015f\u0131",
"triggered": "{entity_name} tetiklendi"
}
},
"state": {
"_": {
"armed": "Etkin",
"armed_away": "Etkin d\u0131\u015far\u0131da",
"armed_custom_bypass": "Alarm etkin \u00f6zel baypas",
"armed_home": "Etkin evde",
"armed_night": "Etkin gece",
"armed": "Aktif",
"armed_away": "D\u0131\u015farda Aktif",
"armed_custom_bypass": "\u00d6zel Mod Aktif",
"armed_home": "Evde Aktif",
"armed_night": "Gece Aktif",
"arming": "Alarm etkinle\u015fiyor",
"disarmed": "Etkisiz",
"disarmed": "Devre D\u0131\u015f\u0131",
"disarming": "Alarm devre d\u0131\u015f\u0131",
"pending": "Beklemede",
"triggered": "Tetiklendi"
}
},
"title": "Alarm kontrol paneli"
"title": "Alarm Kontrol Paneli"
}
@@ -29,6 +29,7 @@
"armed_custom_bypass": "\u81ea\u5b9a\u4e49\u533a\u57df\u8b66\u6212",
"armed_home": "\u5728\u5bb6\u8b66\u6212",
"armed_night": "\u591c\u95f4\u8b66\u6212",
"armed_vacation": "\u5ea6\u5047\u8b66\u6212",
"arming": "\u8b66\u6212\u4e2d",
"disarmed": "\u8b66\u6212\u89e3\u9664",
"disarming": "\u8b66\u6212\u89e3\u9664",
@@ -0,0 +1,20 @@
{
"config": {
"abort": {
"already_configured": "\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0442\u043e \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e"
},
"step": {
"protocol": {
"data": {
"host": "\u0425\u043e\u0441\u0442",
"port": "\u041f\u043e\u0440\u0442"
}
},
"user": {
"data": {
"protocol": "\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b"
}
}
}
}
}
@@ -34,7 +34,9 @@
"data": {
"zone_name": "B\u00f6lge Ad\u0131",
"zone_relayaddr": "R\u00f6le Adresi",
"zone_relaychan": "R\u00f6le Kanal\u0131"
"zone_relaychan": "R\u00f6le Kanal\u0131",
"zone_rfid": "RF Id",
"zone_type": "B\u00f6lge Tipi"
}
},
"zone_select": {
+1 -2
View File
@@ -221,8 +221,7 @@ class Alert(ToggleEntity):
async def watched_entity_change(self, ev):
"""Determine if the alert should start or stop."""
to_state = ev.data.get("new_state")
if to_state is None:
if (to_state := ev.data.get("new_state")) is None:
return
_LOGGER.debug("Watched entity (%s) has changed", ev.data.get("entity_id"))
if to_state.state == self._alert_state and not self._firing:
@@ -30,9 +30,7 @@ async def _async_reproduce_state(
reproduce_options: dict[str, Any] | None = None,
) -> None:
"""Reproduce a single state."""
cur_state = hass.states.get(state.entity_id)
if cur_state is None:
if (cur_state := hass.states.get(state.entity_id)) is None:
_LOGGER.warning("Unable to find entity %s", state.entity_id)
return
+3 -2
View File
@@ -1,13 +1,14 @@
"""Support for Alexa skill auth."""
import asyncio
from datetime import timedelta
from http import HTTPStatus
import json
import logging
import aiohttp
import async_timeout
from homeassistant.const import CONF_CLIENT_ID, CONF_CLIENT_SECRET, HTTP_OK
from homeassistant.const import CONF_CLIENT_ID, CONF_CLIENT_SECRET
from homeassistant.core import callback
from homeassistant.helpers import aiohttp_client
from homeassistant.util import dt
@@ -119,7 +120,7 @@ class Auth:
_LOGGER.debug("LWA response header: %s", response.headers)
_LOGGER.debug("LWA response status: %s", response.status)
if response.status != HTTP_OK:
if response.status != HTTPStatus.OK:
_LOGGER.error("Error calling LWA to get auth token")
return None
@@ -182,8 +182,7 @@ class AlexaCapability:
"""Serialize according to the Discovery API."""
result = {"type": "AlexaInterface", "interface": self.name(), "version": "3"}
instance = self.instance
if instance is not None:
if (instance := self.instance) is not None:
result["instance"] = instance
properties_supported = self.properties_supported()
@@ -264,8 +263,7 @@ class AlexaCapability:
"timeOfSample": dt_util.utcnow().strftime(DATE_FORMAT),
"uncertaintyInMilliseconds": 0,
}
instance = self.instance
if instance is not None:
if (instance := self.instance) is not None:
result["instance"] = instance
yield result
@@ -1098,8 +1096,7 @@ class AlexaThermostatController(AlexaCapability):
supported_modes = []
hvac_modes = self.entity.attributes.get(climate.ATTR_HVAC_MODES)
for mode in hvac_modes:
thermostat_mode = API_THERMOSTAT_MODES.get(mode)
if thermostat_mode:
if thermostat_mode := API_THERMOSTAT_MODES.get(mode):
supported_modes.append(thermostat_mode)
preset_modes = self.entity.attributes.get(climate.ATTR_PRESET_MODES)
@@ -1538,7 +1535,9 @@ class AlexaRangeController(AlexaCapability):
labels=["Percentage", AlexaGlobalCatalog.SETTING_FAN_SPEED],
min_value=0,
max_value=100,
precision=percentage_step if percentage_step else 100,
# precision must be a divider of 100 and must be an integer; set step
# size to 1 for a consistent behavior except for on/off fans
precision=1 if percentage_step else 100,
unit=AlexaGlobalCatalog.UNIT_PERCENT,
)
return self._resource.serialize_capability_resources()
@@ -1,11 +1,12 @@
"""Support for Alexa skill service end point."""
import copy
import hmac
from http import HTTPStatus
import logging
import uuid
from homeassistant.components import http
from homeassistant.const import CONF_PASSWORD, HTTP_NOT_FOUND, HTTP_UNAUTHORIZED
from homeassistant.const import CONF_PASSWORD
from homeassistant.core import callback
from homeassistant.helpers import template
import homeassistant.util.dt as dt_util
@@ -58,7 +59,7 @@ class AlexaFlashBriefingView(http.HomeAssistantView):
if request.query.get(API_PASSWORD) is None:
err = "No password provided for Alexa flash briefing: %s"
_LOGGER.error(err, briefing_id)
return b"", HTTP_UNAUTHORIZED
return b"", HTTPStatus.UNAUTHORIZED
if not hmac.compare_digest(
request.query[API_PASSWORD].encode("utf-8"),
@@ -66,12 +67,12 @@ class AlexaFlashBriefingView(http.HomeAssistantView):
):
err = "Wrong password for Alexa flash briefing: %s"
_LOGGER.error(err, briefing_id)
return b"", HTTP_UNAUTHORIZED
return b"", HTTPStatus.UNAUTHORIZED
if not isinstance(self.flash_briefings.get(briefing_id), list):
err = "No configured Alexa flash briefing was found for: %s"
_LOGGER.error(err, briefing_id)
return b"", HTTP_NOT_FOUND
return b"", HTTPStatus.NOT_FOUND
briefing = []
@@ -93,8 +94,7 @@ class AlexaFlashBriefingView(http.HomeAssistantView):
else:
output[ATTR_MAIN_TEXT] = item.get(CONF_TEXT)
uid = item.get(CONF_UID)
if uid is None:
if (uid := item.get(CONF_UID)) is None:
uid = str(uuid.uuid4())
output[ATTR_UID] = uid
+3 -6
View File
@@ -117,8 +117,7 @@ async def async_api_accept_grant(hass, config, directive, context):
async def async_api_turn_on(hass, config, directive, context):
"""Process a turn on request."""
entity = directive.entity
domain = entity.domain
if domain == group.DOMAIN:
if (domain := entity.domain) == group.DOMAIN:
domain = ha.DOMAIN
service = SERVICE_TURN_ON
@@ -1151,8 +1150,7 @@ async def async_api_adjust_range(hass, config, directive, context):
if instance == f"{cover.DOMAIN}.{cover.ATTR_POSITION}":
range_delta = int(range_delta * 20) if range_delta_default else int(range_delta)
service = SERVICE_SET_COVER_POSITION
current = entity.attributes.get(cover.ATTR_POSITION)
if not current:
if not (current := entity.attributes.get(cover.ATTR_POSITION)):
msg = f"Unable to determine {entity.entity_id} current position"
raise AlexaInvalidValueError(msg)
position = response_value = min(100, max(0, range_delta + current))
@@ -1188,8 +1186,7 @@ async def async_api_adjust_range(hass, config, directive, context):
else int(range_delta)
)
service = fan.SERVICE_SET_PERCENTAGE
current = entity.attributes.get(fan.ATTR_PERCENTAGE)
if not current:
if not (current := entity.attributes.get(fan.ATTR_PERCENTAGE)):
msg = f"Unable to determine {entity.entity_id} current fan speed"
raise AlexaInvalidValueError(msg)
percentage = response_value = min(100, max(0, range_delta + current))
+1 -3
View File
@@ -120,9 +120,7 @@ async def async_handle_message(hass, message):
req = message.get("request")
req_type = req["type"]
handler = HANDLERS.get(req_type)
if not handler:
if not (handler := HANDLERS.get(req_type)):
raise UnknownRequest(f"Received unknown request {req_type}")
return await handler(hass, message)
+1 -2
View File
@@ -12,9 +12,8 @@ def async_describe_events(hass, async_describe_event):
def async_describe_logbook_event(event):
"""Describe a logbook event."""
data = event.data
entity_id = data["request"].get("entity_id")
if entity_id:
if entity_id := data["request"].get("entity_id"):
state = hass.states.get(entity_id)
name = state.name if state else entity_id
message = f"sent command {data['request']['namespace']}/{data['request']['name']} for {name}"
@@ -3,7 +3,13 @@ import logging
from homeassistant import core
from homeassistant.components.http.view import HomeAssistantView
from homeassistant.const import CONF_CLIENT_ID, CONF_CLIENT_SECRET
from homeassistant.const import (
CONF_CLIENT_ID,
CONF_CLIENT_SECRET,
ENTITY_CATEGORY_CONFIG,
ENTITY_CATEGORY_DIAGNOSTIC,
)
from homeassistant.helpers import entity_registry as er
from .auth import Auth
from .config import AbstractConfig
@@ -60,7 +66,18 @@ class AlexaConfig(AbstractConfig):
def should_expose(self, entity_id):
"""If an entity should be exposed."""
return self._config[CONF_FILTER](entity_id)
if not self._config[CONF_FILTER].empty_filter:
return self._config[CONF_FILTER](entity_id)
entity_registry = er.async_get(self.hass)
if registry_entry := entity_registry.async_get(entity_id):
auxiliary_entity = registry_entry.entity_category in (
ENTITY_CATEGORY_CONFIG,
ENTITY_CATEGORY_DIAGNOSTIC,
)
else:
auxiliary_entity = False
return not auxiliary_entity
@core.callback
def async_invalidate_access_token(self):
@@ -2,13 +2,14 @@
from __future__ import annotations
import asyncio
from http import HTTPStatus
import json
import logging
import aiohttp
import async_timeout
from homeassistant.const import HTTP_ACCEPTED, MATCH_ALL, STATE_ON
from homeassistant.const import MATCH_ALL, STATE_ON
from homeassistant.core import HomeAssistant, State, callback
from homeassistant.helpers.significant_change import create_checker
import homeassistant.util.dt as dt_util
@@ -148,7 +149,7 @@ async def async_send_changereport_message(
_LOGGER.debug("Sent: %s", json.dumps(message_serialized))
_LOGGER.debug("Received (%s): %s", response.status, response_text)
if response.status == HTTP_ACCEPTED:
if response.status == HTTPStatus.ACCEPTED:
return
response_json = json.loads(response_text)
@@ -279,7 +280,7 @@ async def async_send_doorbell_event_message(hass, config, alexa_entity):
_LOGGER.debug("Sent: %s", json.dumps(message_serialized))
_LOGGER.debug("Received (%s): %s", response.status, response_text)
if response.status == HTTP_ACCEPTED:
if response.status == HTTPStatus.ACCEPTED:
return
response_json = json.loads(response_text)
@@ -2,7 +2,8 @@
"config": {
"abort": {
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 Almond \u0441\u044a\u0440\u0432\u044a\u0440\u0430.",
"missing_configuration": "\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430 \u043a\u0430\u043a \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Almond."
"missing_configuration": "\u041c\u043e\u043b\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430 \u043a\u0430\u043a \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 Almond.",
"single_instance_allowed": "\u0412\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e. \u0412\u044a\u0437\u043c\u043e\u0436\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f."
},
"step": {
"pick_implementation": {
-1
View File
@@ -21,7 +21,6 @@ DOMAIN: Final = "ambee"
LOGGER = logging.getLogger(__package__)
SCAN_INTERVAL = timedelta(hours=1)
ATTR_ENTRY_TYPE: Final = "entry_type"
ENTRY_TYPE_SERVICE: Final = "service"
DEVICE_CLASS_AMBEE_RISK: Final = "ambee__risk"
+1 -1
View File
@@ -3,7 +3,7 @@
"name": "Ambee",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/ambee",
"requirements": ["ambee==0.3.0"],
"requirements": ["ambee==0.4.0"],
"codeowners": ["@frenck"],
"quality_scale": "platinum",
"iot_class": "cloud_polling"
+8 -8
View File
@@ -7,8 +7,8 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_IDENTIFIERS, ATTR_MANUFACTURER, ATTR_NAME
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from homeassistant.helpers.update_coordinator import (
@@ -16,7 +16,7 @@ from homeassistant.helpers.update_coordinator import (
DataUpdateCoordinator,
)
from .const import ATTR_ENTRY_TYPE, DOMAIN, ENTRY_TYPE_SERVICE, SENSORS, SERVICES
from .const import DOMAIN, ENTRY_TYPE_SERVICE, SENSORS, SERVICES
async def async_setup_entry(
@@ -58,12 +58,12 @@ class AmbeeSensorEntity(CoordinatorEntity, SensorEntity):
self.entity_description = description
self._attr_unique_id = f"{entry_id}_{service_key}_{description.key}"
self._attr_device_info = {
ATTR_IDENTIFIERS: {(DOMAIN, f"{entry_id}_{service_key}")},
ATTR_NAME: service,
ATTR_MANUFACTURER: "Ambee",
ATTR_ENTRY_TYPE: ENTRY_TYPE_SERVICE,
}
self._attr_device_info = DeviceInfo(
entry_type=ENTRY_TYPE_SERVICE,
identifiers={(DOMAIN, f"{entry_id}_{service_key}")},
manufacturer="Ambee",
name=service,
)
@property
def native_value(self) -> StateType:
@@ -0,0 +1,26 @@
{
"config": {
"abort": {
"reauth_successful": "\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0442\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435 \u0431\u0435\u0448\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e"
},
"error": {
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0445 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435",
"invalid_api_key": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d API \u043a\u043b\u044e\u0447"
},
"step": {
"reauth_confirm": {
"data": {
"api_key": "API \u043a\u043b\u044e\u0447"
}
},
"user": {
"data": {
"api_key": "API \u043a\u043b\u044e\u0447",
"latitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0448\u0438\u0440\u0438\u043d\u0430",
"longitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0434\u044a\u043b\u0436\u0438\u043d\u0430",
"name": "\u0418\u043c\u0435"
}
}
}
}
}
@@ -1,7 +1,7 @@
{
"config": {
"abort": {
"reauth_successful": "Az \u00fajrahiteles\u00edt\u00e9s sikeres volt"
"reauth_successful": "Az \u00fajrahiteles\u00edt\u00e9s sikeres volt."
},
"error": {
"cannot_connect": "Sikertelen csatlakoz\u00e1s",
@@ -11,7 +11,7 @@
"reauth_confirm": {
"data": {
"api_key": "\u041a\u043b\u044e\u0447 API",
"description": "\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Ambee."
"description": "\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Ambee"
}
},
"user": {
@@ -10,7 +10,6 @@ from homeassistant.components.binary_sensor import (
BinarySensorEntityDescription,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_ATTRIBUTION
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -28,6 +27,8 @@ PRICE_SPIKE_ICONS = {
class AmberPriceGridSensor(CoordinatorEntity, BinarySensorEntity):
"""Sensor to show single grid binary values."""
_attr_attribution = ATTRIBUTION
def __init__(
self,
coordinator: AmberUpdateCoordinator,
@@ -38,7 +39,6 @@ class AmberPriceGridSensor(CoordinatorEntity, BinarySensorEntity):
self.site_id = coordinator.site_id
self.entity_description = description
self._attr_unique_id = f"{coordinator.site_id}-{description.key}"
self._attr_device_state_attributes = {ATTR_ATTRIBUTION: ATTRIBUTION}
@property
def is_on(self) -> bool | None:
@@ -67,7 +67,6 @@ class AmberPriceSpikeBinarySensor(AmberPriceGridSensor):
spike_status = self.coordinator.data["grid"]["price_spike"]
return {
"spike_status": spike_status,
ATTR_ATTRIBUTION: ATTRIBUTION,
}
@@ -20,7 +20,7 @@ from homeassistant.components.sensor import (
SensorEntityDescription,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_ATTRIBUTION, CURRENCY_DOLLAR, ENERGY_KILO_WATT_HOUR
from homeassistant.const import CURRENCY_DOLLAR, ENERGY_KILO_WATT_HOUR
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -54,6 +54,8 @@ def friendly_channel_type(channel_type: str) -> str:
class AmberSensor(CoordinatorEntity, SensorEntity):
"""Amber Base Sensor."""
_attr_attribution = ATTRIBUTION
def __init__(
self,
coordinator: AmberUpdateCoordinator,
@@ -88,7 +90,7 @@ class AmberPriceSensor(AmberSensor):
"""Return additional pieces of information about the price."""
interval = self.coordinator.data[self.entity_description.key][self.channel_type]
data: dict[str, Any] = {ATTR_ATTRIBUTION: ATTRIBUTION}
data: dict[str, Any] = {}
if interval is None:
return data
@@ -143,7 +145,6 @@ class AmberForecastSensor(AmberSensor):
data = {
"forecasts": [],
"channel_type": intervals[0].channel_type.value,
ATTR_ATTRIBUTION: ATTRIBUTION,
}
for interval in intervals:
@@ -172,6 +173,8 @@ class AmberForecastSensor(AmberSensor):
class AmberGridSensor(CoordinatorEntity, SensorEntity):
"""Sensor to show single grid specific values."""
_attr_attribution = ATTRIBUTION
def __init__(
self,
coordinator: AmberUpdateCoordinator,
@@ -181,7 +184,6 @@ class AmberGridSensor(CoordinatorEntity, SensorEntity):
super().__init__(coordinator)
self.site_id = coordinator.site_id
self.entity_description = description
self._attr_device_state_attributes = {ATTR_ATTRIBUTION: ATTRIBUTION}
self._attr_unique_id = f"{coordinator.site_id}-{description.key}"
@property
@@ -0,0 +1,13 @@
{
"config": {
"step": {
"site": {
"title": "Amber Electric"
},
"user": {
"description": "\u041e\u0442\u0438\u0434\u0435\u0442\u0435 \u043d\u0430 {api_url}, \u0437\u0430 \u0434\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u0442\u0435 API \u043a\u043b\u044e\u0447",
"title": "Amber Electric"
}
}
}
}
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"api_token": "API\u30c8\u30fc\u30af\u30f3"
}
}
}
}
}
@@ -0,0 +1,9 @@
{
"config": {
"step": {
"user": {
"title": "Amber Electric"
}
}
}
}
@@ -21,6 +21,7 @@ from homeassistant.const import (
)
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.entity import DeviceInfo
from .const import (
ATTR_VALUE,
@@ -149,16 +150,15 @@ class AmbiclimateEntity(ClimateEntity):
self._store = store
self._attr_unique_id = heater.device_id
self._attr_name = heater.name
self._attr_device_info = {
"identifiers": {(DOMAIN, self.unique_id)},
"name": self.name,
"manufacturer": "Ambiclimate",
}
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, self.unique_id)},
manufacturer="Ambiclimate",
name=self.name,
)
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set new target temperature."""
temperature = kwargs.get(ATTR_TEMPERATURE)
if temperature is None:
if (temperature := kwargs.get(ATTR_TEMPERATURE)) is None:
return
await self._heater.set_target_temperature(temperature)
@@ -143,8 +143,7 @@ class AmbiclimateAuthCallbackView(HomeAssistantView):
async def get(self, request: web.Request) -> str:
"""Receive authorization token."""
# pylint: disable=no-self-use
code = request.query.get("code")
if code is None:
if (code := request.query.get("code")) is None:
return "No code"
hass = request.app["hass"]
hass.async_create_task(
@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"access_token": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f."
"access_token": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u0434 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f.",
"already_configured": "\u0410\u043a\u0430\u0443\u043d\u0442\u0430 \u0432\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d"
},
"create_entry": {
"default": "\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u043a\u0438\u0440\u0430\u043d\u0435 \u0441 Ambiclimate."
@@ -3,7 +3,7 @@ from __future__ import annotations
from typing import Any
from aioambient import Client
from aioambient import Websocket
from aioambient.errors import WebsocketError
from homeassistant.config_entries import ConfigEntry
@@ -15,18 +15,17 @@ from homeassistant.const import (
)
from homeassistant.core import Event, HomeAssistant, callback
from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers import aiohttp_client, config_validation as cv
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
)
from homeassistant.helpers.entity import Entity, EntityDescription
from homeassistant.helpers.entity import DeviceInfo, Entity, EntityDescription
from homeassistant.helpers.event import async_call_later
from .const import (
ATTR_LAST_DATA,
CONF_APP_KEY,
DATA_CLIENT,
DOMAIN,
LOGGER,
TYPE_SOLARRADIATION,
@@ -57,37 +56,32 @@ def async_hydrate_station_data(data: dict[str, Any]) -> dict[str, Any]:
return data
async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up the Ambient PWS as config entry."""
hass.data.setdefault(DOMAIN, {DATA_CLIENT: {}})
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = {}
if not config_entry.unique_id:
if not entry.unique_id:
hass.config_entries.async_update_entry(
config_entry, unique_id=config_entry.data[CONF_APP_KEY]
entry, unique_id=entry.data[CONF_APP_KEY]
)
session = aiohttp_client.async_get_clientsession(hass)
try:
ambient = AmbientStation(
hass,
config_entry,
Client(
config_entry.data[CONF_API_KEY],
config_entry.data[CONF_APP_KEY],
session=session,
logger=LOGGER,
),
entry,
Websocket(entry.data[CONF_APP_KEY], entry.data[CONF_API_KEY]),
)
hass.loop.create_task(ambient.ws_connect())
hass.data[DOMAIN][DATA_CLIENT][config_entry.entry_id] = ambient
hass.data[DOMAIN][entry.entry_id] = ambient
except WebsocketError as err:
LOGGER.error("Config entry failed: %s", err)
raise ConfigEntryNotReady from err
async def _async_disconnect_websocket(_: Event) -> None:
await ambient.client.websocket.disconnect()
await ambient.websocket.disconnect()
config_entry.async_on_unload(
entry.async_on_unload(
hass.bus.async_listen_once(
EVENT_HOMEASSISTANT_STOP, _async_disconnect_websocket
)
@@ -96,30 +90,32 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b
return True
async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload an Ambient PWS config entry."""
ambient = hass.data[DOMAIN][DATA_CLIENT].pop(config_entry.entry_id)
hass.async_create_task(ambient.ws_disconnect())
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok:
ambient = hass.data[DOMAIN].pop(entry.entry_id)
hass.async_create_task(ambient.ws_disconnect())
return await hass.config_entries.async_unload_platforms(config_entry, PLATFORMS)
return unload_ok
async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Migrate old entry."""
version = config_entry.version
version = entry.version
LOGGER.debug("Migrating from version %s", version)
# 1 -> 2: Unique ID format changed, so delete and re-import:
if version == 1:
dev_reg = await hass.helpers.device_registry.async_get_registry()
dev_reg.async_clear_config_entry(config_entry)
dev_reg.async_clear_config_entry(entry)
en_reg = await hass.helpers.entity_registry.async_get_registry()
en_reg.async_clear_config_entry(config_entry)
en_reg.async_clear_config_entry(entry)
version = config_entry.version = 2
hass.config_entries.async_update_entry(config_entry)
version = entry.version = 2
hass.config_entries.async_update_entry(entry)
LOGGER.info("Migration to version %s successful", version)
return True
@@ -129,22 +125,22 @@ class AmbientStation:
"""Define a class to handle the Ambient websocket."""
def __init__(
self, hass: HomeAssistant, config_entry: ConfigEntry, client: Client
self, hass: HomeAssistant, entry: ConfigEntry, websocket: Websocket
) -> None:
"""Initialize."""
self._config_entry = config_entry
self._entry = entry
self._entry_setup_complete = False
self._hass = hass
self._ws_reconnect_delay = DEFAULT_SOCKET_MIN_RETRY
self.client = client
self.stations: dict[str, dict] = {}
self.websocket = websocket
async def _attempt_connect(self) -> None:
"""Attempt to connect to the socket (retrying later on fail)."""
async def connect(timestamp: int | None = None) -> None:
"""Connect."""
await self.client.websocket.connect()
await self.websocket.connect()
try:
await connect()
@@ -194,22 +190,20 @@ class AmbientStation:
# attempt forward setup of the config entry (because it will have
# already been done):
if not self._entry_setup_complete:
self._hass.config_entries.async_setup_platforms(
self._config_entry, PLATFORMS
)
self._hass.config_entries.async_setup_platforms(self._entry, PLATFORMS)
self._entry_setup_complete = True
self._ws_reconnect_delay = DEFAULT_SOCKET_MIN_RETRY
self.client.websocket.on_connect(on_connect)
self.client.websocket.on_data(on_data)
self.client.websocket.on_disconnect(on_disconnect)
self.client.websocket.on_subscribed(on_subscribed)
self.websocket.on_connect(on_connect)
self.websocket.on_data(on_data)
self.websocket.on_disconnect(on_disconnect)
self.websocket.on_subscribed(on_subscribed)
await self._attempt_connect()
async def ws_disconnect(self) -> None:
"""Disconnect from the websocket."""
await self.client.websocket.disconnect()
await self.websocket.disconnect()
class AmbientWeatherEntity(Entity):
@@ -226,11 +220,11 @@ class AmbientWeatherEntity(Entity):
) -> None:
"""Initialize the entity."""
self._ambient = ambient
self._attr_device_info = {
"identifiers": {(DOMAIN, mac_address)},
"name": station_name,
"manufacturer": "Ambient Weather",
}
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, mac_address)},
manufacturer="Ambient Weather",
name=station_name,
)
self._attr_name = f"{station_name}_{description.name}"
self._attr_unique_id = f"{mac_address}_{description.key}"
self._mac_address = mac_address
@@ -11,12 +11,12 @@ from homeassistant.components.binary_sensor import (
BinarySensorEntityDescription,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_NAME
from homeassistant.const import ATTR_NAME, ENTITY_CATEGORY_DIAGNOSTIC
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AmbientWeatherEntity
from .const import ATTR_LAST_DATA, DATA_CLIENT, DOMAIN
from .const import ATTR_LAST_DATA, DOMAIN
TYPE_BATT1 = "batt1"
TYPE_BATT10 = "batt10"
@@ -63,144 +63,168 @@ BINARY_SENSOR_DESCRIPTIONS = (
key=TYPE_BATTOUT,
name="Battery",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_BATT1,
name="Battery 1",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_BATT2,
name="Battery 2",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_BATT3,
name="Battery 3",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_BATT4,
name="Battery 4",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_BATT5,
name="Battery 5",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_BATT6,
name="Battery 6",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_BATT7,
name="Battery 7",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_BATT8,
name="Battery 8",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_BATT9,
name="Battery 9",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_BATT10,
name="Battery 10",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_BATT_CO2,
name="CO2 Battery",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_PM25IN_BATT,
name="PM25 Indoor Battery",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_PM25_BATT,
name="PM25 Battery",
device_class=DEVICE_CLASS_BATTERY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=0,
),
AmbientBinarySensorDescription(
key=TYPE_RELAY1,
name="Relay 1",
device_class=DEVICE_CLASS_CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=1,
),
AmbientBinarySensorDescription(
key=TYPE_RELAY2,
name="Relay 2",
device_class=DEVICE_CLASS_CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=1,
),
AmbientBinarySensorDescription(
key=TYPE_RELAY3,
name="Relay 3",
device_class=DEVICE_CLASS_CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=1,
),
AmbientBinarySensorDescription(
key=TYPE_RELAY4,
name="Relay 4",
device_class=DEVICE_CLASS_CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=1,
),
AmbientBinarySensorDescription(
key=TYPE_RELAY5,
name="Relay 5",
device_class=DEVICE_CLASS_CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=1,
),
AmbientBinarySensorDescription(
key=TYPE_RELAY6,
name="Relay 6",
device_class=DEVICE_CLASS_CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=1,
),
AmbientBinarySensorDescription(
key=TYPE_RELAY7,
name="Relay 7",
device_class=DEVICE_CLASS_CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=1,
),
AmbientBinarySensorDescription(
key=TYPE_RELAY8,
name="Relay 8",
device_class=DEVICE_CLASS_CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=1,
),
AmbientBinarySensorDescription(
key=TYPE_RELAY9,
name="Relay 9",
device_class=DEVICE_CLASS_CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=1,
),
AmbientBinarySensorDescription(
key=TYPE_RELAY10,
name="Relay 10",
device_class=DEVICE_CLASS_CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
on_state=1,
),
)
@@ -210,7 +234,7 @@ async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
"""Set up Ambient PWS binary sensors based on a config entry."""
ambient = hass.data[DOMAIN][DATA_CLIENT][entry.entry_id]
ambient = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
[
@@ -1,7 +1,7 @@
"""Config flow to configure the Ambient PWS component."""
from __future__ import annotations
from aioambient import Client
from aioambient import API
from aioambient.errors import AmbientError
import voluptuous as vol
@@ -41,12 +41,10 @@ class AmbientStationFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
self._abort_if_unique_id_configured()
session = aiohttp_client.async_get_clientsession(self.hass)
client = Client(
user_input[CONF_API_KEY], user_input[CONF_APP_KEY], session=session
)
api = API(user_input[CONF_APP_KEY], user_input[CONF_API_KEY], session=session)
try:
devices = await client.api.get_devices()
devices = await api.get_devices()
except AmbientError:
return await self._show_form({"base": "invalid_key"})
@@ -8,7 +8,5 @@ ATTR_LAST_DATA = "last_data"
CONF_APP_KEY = "app_key"
DATA_CLIENT = "data_client"
TYPE_SOLARRADIATION = "solarradiation"
TYPE_SOLARRADIATION_LX = "solarradiation_lx"
@@ -3,7 +3,7 @@
"name": "Ambient Weather Station",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/ambient_station",
"requirements": ["aioambient==1.3.0"],
"requirements": ["aioambient==2021.10.1"],
"codeowners": ["@bachya"],
"iot_class": "cloud_push"
}
@@ -39,7 +39,7 @@ from . import (
AmbientStation,
AmbientWeatherEntity,
)
from .const import ATTR_LAST_DATA, DATA_CLIENT, DOMAIN
from .const import ATTR_LAST_DATA, DOMAIN
TYPE_24HOURRAININ = "24hourrainin"
TYPE_BAROMABSIN = "baromabsin"
@@ -609,7 +609,7 @@ async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
"""Set up Ambient PWS sensors based on a config entry."""
ambient = hass.data[DOMAIN][DATA_CLIENT][entry.entry_id]
ambient = hass.data[DOMAIN][entry.entry_id]
async_add_entities(
[
@@ -13,7 +13,7 @@
"api_key": "API kulcs",
"app_key": "Alkalmaz\u00e1skulcs"
},
"title": "T\u00f6ltsd ki az adataid"
"title": "T\u00f6ltse ki az adatait"
}
}
}

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