Compare commits

...

1113 Commits

Author SHA1 Message Date
Franck Nijhof
b4f1683c40 2022.9.6 (#78916) 2022-09-22 10:29:12 +02:00
rikroe
7be5fde8d6 Bump bimmer_connected to 0.10.4 (#78910)
Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2022-09-22 08:55:03 +02:00
J. Nick Koston
d44ff16f9d Handle timeout fetching bond token in config flow (#78896) 2022-09-22 08:55:00 +02:00
J. Nick Koston
b51dc0884e Fix samsungtv to abort when ATTR_UPNP_MANUFACTURER is missing (#78895) 2022-09-22 08:54:56 +02:00
Jan Bouwhuis
f3451858ef Correct return typing for catch_log_exception (#78399) 2022-09-22 08:54:42 +02:00
Paulus Schoutsen
103f490519 Bumped version to 2022.9.6 2022-09-21 22:33:08 -04:00
Paulus Schoutsen
68fa40c0fa Disable force update Netatmo (#78913) 2022-09-21 22:31:36 -04:00
J. Nick Koston
5c294550e8 Handle default RSSI values from bleak in bluetooth (#78908) 2022-09-21 22:30:41 -04:00
Michael
72769130f9 Check Surveillance Station permissions during setup of Synology DSM integration (#78884) 2022-09-21 22:30:40 -04:00
Jc2k
8f21e7775b Fix parsing Eve Energy characteristic data (#78880) 2022-09-21 22:30:40 -04:00
Marc Mueller
6704efd1ef Pin Python patch versions [ci] (#78830) 2022-09-21 22:29:25 -04:00
Joakim Plate
829777a211 If brightness is not available, don't set a value (#78827) 2022-09-21 22:25:42 -04:00
J. Nick Koston
48c6fbf22e Bump dbus-fast to 1.5.1 (#78802) 2022-09-21 22:25:42 -04:00
Aaron Bach
fac2a46781 Guard Guardian switches from redundant on/off calls (#78791) 2022-09-21 22:25:13 -04:00
Aaron Bach
a688b4c581 Fix bug wherein RainMachine services use the wrong controller (#78780) 2022-09-21 22:21:29 -04:00
Nico
8c9e0a8239 Bump aioimaplib to 1.0.1 (#78738) 2022-09-21 22:21:28 -04:00
J. Nick Koston
91398b6a75 Drop PARALLEL_UPDATES from switchbot (#78713) 2022-09-21 22:21:28 -04:00
Jan Bouwhuis
dea221b155 Link manually added MQTT entities the the MQTT config entry (#78547)
Co-authored-by: Erik <erik@montnemery.com>
2022-09-21 22:20:56 -04:00
starkillerOG
bfcb333227 Add status codes 23 and 26 to Xiaomi Miio vacuum (#78289)
* Add status codes 23 and 26

* change status 26
2022-09-21 22:15:47 -04:00
Jan Bouwhuis
3dd0dbf38f Make hass.data["mqtt"] an instance of a DataClass (#77972)
* Use dataclass to reference hass.data globals

* Add discovery_registry_hooks to dataclass

* Move discovery registry hooks to dataclass

* Add device triggers to dataclass

* Cleanup DEVICE_TRIGGERS const

* Add last_discovery to data_class

* Simplify typing for class `Subscription`

* Follow up on comment

* Redo suggested typing change to sasisfy mypy

* Restore typing

* Add mypy version to CI check logging

* revert changes to ci.yaml

* Add docstr for protocol

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

* Mypy update after merging #78399

* Remove mypy ignore

* Correct return type

Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
2022-09-21 22:15:47 -04:00
Jan Bouwhuis
4894e2e5a4 Refactor common MQTT tests to use modern schema (#77583)
* Common tests availability

* Common tests attributes

* Common tests unique id

* Common tests discovery

* Common tests encoding

* Common tests device info

* Common tests entity_id updated

* Common tests entity debug info

* Common test entity category

* Common tests setup reload unload+corrections

* Cleanup sweep

* Comments from curent change

* Cleanup

* Remove unused legacy config
2022-09-21 22:15:46 -04:00
Jan Bouwhuis
e7a616e8e4 Refactor MQTT tests to use modern platform schema part 2 (#77525)
* Tests light json

* Tests light template

* Missed test light json

* Tests light

* Tests lock

* Tests number

* Tests scene

* Tests select

* Tests sensor

* Tests siren

* Tests state vacuuum

* Tests switch

* Derive DEFAULT_CONFIG_LEGACY from DEFAULT_CONFIG

* Suggested comment changes
2022-09-21 22:15:46 -04:00
Jan Bouwhuis
b3a4838978 Refactor MQTT tests to use modern platform schema part 1 (#77387)
* Tests alarm_control_panel

* Tests binary_sensor

* Tests button

* Tests camera

* Tests Climate + corrections default config

* Tests cover

* Tests device_tracker

* Tests fan

* Tests humidifier

* Fix test_supported_features test fan

* Tests init

* Tests legacy vacuum

* Derive DEFAULT_CONFIG_LEGACY from DEFAULT_CONFIG

* Commit suggestion comment changes
2022-09-21 22:15:45 -04:00
J. Nick Koston
933dde1d1e Handle Modalias missing from the bluetooth adapter details on older BlueZ (#78716) 2022-09-18 21:10:05 -04:00
Paulus Schoutsen
a411cd9c20 2022.9.5 (#78703) 2022-09-18 14:05:34 -04:00
Paulus Schoutsen
da81dbe6ac Bumped version to 2022.9.5 2022-09-18 13:13:54 -04:00
J. Nick Koston
f5c30ab10a Bump thermobeacon-ble to 0.3.2 (#78693) 2022-09-18 13:13:48 -04:00
J. Nick Koston
454675d86b Fix bluetooth callback matchers when only matching on connectable (#78687) 2022-09-18 13:13:08 -04:00
Franck Nijhof
cce4496ad6 Remove mDNS iteration from Plugwise unique ID (#78680)
* Remove mDNS iteration from Plugwise unique ID

* Add iteration to tests
2022-09-18 13:10:11 -04:00
Raman Gupta
ebeebeaec1 Handle multiple files properly in zwave_js update entity (#78658)
* Handle multiple files properly in zwave_js update entity

* Until we have progress, set in progress to true. And fix when we write state

* fix tests

* Assert we set in progress to true before we get progress

* Fix tests

* Comment
2022-09-18 13:10:10 -04:00
Franck Nijhof
c8d16175da Update demetriek to 0.2.4 (#78646) 2022-09-18 13:10:09 -04:00
J. Nick Koston
a2aa0e608d Add a helpful message to the config_entries.OperationNotAllowed exception (#78631)
We only expect this exception to be raised as a result of an
implementation problem. When it is raised during production
it is currently hard to trace down why its happening

See #75835
2022-09-18 13:10:09 -04:00
Sergio Conde Gómez
7eb98ffbd1 Bump qingping-ble to 0.7.0 (#78630) 2022-09-18 13:10:08 -04:00
J. Nick Koston
6e62080cd9 Fix reconnect race in HomeKit Controller (#78629) 2022-09-18 13:10:07 -04:00
J. Nick Koston
39dee6d426 Fix switchbot not accepting the first advertisement (#78610) 2022-09-18 13:10:07 -04:00
Franck Nijhof
3a89a49d4a Fix WebSocket condition testing (#78570) 2022-09-18 13:10:06 -04:00
On Freund
ef66d8e705 Bump pyrisco to v0.5.5 (#78566)
Upgrade to pyrisco 0.5.5
2022-09-18 13:10:05 -04:00
Raman Gupta
c1809681b6 Fix zwave_js update entity startup state (#78563)
* Fix update entity startup state

* Only write state if there is a change

* Add test to show that when an existing entity gets recreated, skipped version does not reset

* Remove unused blocks

* Update homeassistant/components/zwave_js/update.py

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

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2022-09-18 13:10:05 -04:00
J. Nick Koston
050c09df62 Bump aiohomekit to 1.5.8 (#78515) 2022-09-18 12:58:22 -04:00
J. Nick Koston
e0b63ac488 Bump led-ble to 0.10.1 (#78511) 2022-09-18 12:58:21 -04:00
J. Nick Koston
ed6575fefb Bump yalexs_ble to 1.9.2 (#78508) 2022-09-18 12:58:21 -04:00
J. Nick Koston
318ae7750a Bump PySwitchbot to 0.19.9 (#78504) 2022-09-18 12:58:20 -04:00
Teemu R
0525a1cd97 Bump python-songpal to 0.15.1 (#78481) 2022-09-18 12:58:20 -04:00
J. Nick Koston
d31d4e2916 Bump bleak-retry-connector to 0.17.1 (#78474) 2022-09-18 12:58:19 -04:00
Erik Montnemery
40c5689507 Prevent deleting blueprints which are in use (#78444) 2022-09-18 12:57:40 -04:00
Raman Gupta
a4749178f1 Only redact zwave_js values that are worth redacting (#78420)
* Only redact zwave_js values that are worth redacting

* Tweak test

* Use redacted fixture for test
2022-09-18 12:56:40 -04:00
Pete
8229e241f1 Fix fan speed regression for some xiaomi fans (#78406)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-09-18 12:56:39 -04:00
Franck Nijhof
2b40f3f1e5 2022.9.4 (#78438) 2022-09-14 11:01:27 +02:00
Franck Nijhof
e839849456 Bumped version to 2022.9.4 2022-09-14 10:03:04 +02:00
Bram Kragten
e711758cfd Update frontend to 20220907.2 (#78431) 2022-09-14 10:02:43 +02:00
Paulus Schoutsen
896955e4df 2022.9.3 (#78410) 2022-09-13 21:50:29 -04:00
Diogo Gomes
7b83807baa Retry on unavailable IPMA api (#78332)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-09-13 21:01:19 -04:00
Aaron Bach
6a197332c7 Fix bug with RainMachine update entity (#78411)
* Fix bug with RainMachine update entity

* Comment
2022-09-13 20:57:38 -04:00
Paulus Schoutsen
1955ff9e0d Bumped version to 2022.9.3 2022-09-13 16:31:51 -04:00
J. Nick Koston
29caf06439 Bump govee-ble to 0.17.3 (#78405) 2022-09-13 16:31:40 -04:00
Bram Kragten
0b5953038e Update frontend to 20220907.1 (#78404) 2022-09-13 16:31:39 -04:00
Marc Mueller
f07e1bc500 Fix CI workflow caching (#78398) 2022-09-13 16:31:38 -04:00
J. Nick Koston
843d5f101a Fix flapping system log test (#78391)
Since we run tests with asyncio debug on, there is
a chance we will get an asyncio log message instead
of the one we want

Fixes https://github.com/home-assistant/core/actions/runs/3045080236/jobs/4906717578
2022-09-13 16:31:38 -04:00
Pascal Vizeli
d98ed5c6f6 Unregister EcoWitt webhook at unload (#78388) 2022-09-13 16:31:37 -04:00
Erik Montnemery
8599472880 Don't allow partial update of timer settings (#78378) 2022-09-13 16:31:37 -04:00
Erik Montnemery
04d6bb085b Don't allow partial update of input_text settings (#78377) 2022-09-13 16:31:36 -04:00
Erik Montnemery
6f9a311cec Don't allow partial update of input_select settings (#78376) 2022-09-13 16:31:35 -04:00
Erik Montnemery
336179df6d Don't allow partial update of input_button settings (#78374) 2022-09-13 16:31:34 -04:00
Erik Montnemery
9459af30b0 Don't allow partial update of input_datetime settings (#78373) 2022-09-13 16:31:34 -04:00
Erik Montnemery
ee07ca8caa Don't allow partial update of input_boolean settings (#78372) 2022-09-13 16:31:33 -04:00
Erik Montnemery
3beed13586 Don't allow partial update of counter settings (#78371) 2022-09-13 16:31:33 -04:00
J. Nick Koston
f0753f7a97 Bump aiohomekit to 1.5.7 (#78369) 2022-09-13 16:31:32 -04:00
J. Nick Koston
dd007cd765 Bump led-ble to 0.10.0 (#78367) 2022-09-13 16:31:31 -04:00
J. Nick Koston
7cdac3ee8c Bump xiaomi-ble to 0.10.0 (#78365) 2022-09-13 16:31:31 -04:00
J. Nick Koston
cd7f65bb6a Bump xiaomi-ble to 0.9.3 (#78301) 2022-09-13 16:31:30 -04:00
J. Nick Koston
b21a37cad5 Bump yalexs-ble to 1.9.0 (#78362) 2022-09-13 16:30:45 -04:00
J. Nick Koston
bfcb9402ef Bump PySwitchbot to 0.19.8 (#78361)
* Bump PySwitchbot to 0.19.7

Changes for bleak 0.17

https://github.com/Danielhiversen/pySwitchbot/compare/0.19.6...0.19.7

* bump again to fix some more stale state bugs
2022-09-13 16:30:44 -04:00
Erik Montnemery
ad396f0538 Don't allow partial update of input_number settings (#78356) 2022-09-13 16:30:44 -04:00
Erik Montnemery
12edfb3929 Drop initial when loading input_number from storage (#78354) 2022-09-13 16:30:43 -04:00
J. Nick Koston
47f6be77cc Bump bleak to 0.17.0 (#78333) 2022-09-13 16:30:42 -04:00
Erik Montnemery
9acf74d783 Fix calculating gas cost for gas measured in ft3 (#78327) 2022-09-13 16:30:42 -04:00
David F. Mulcahey
0aa2685e0c Fix sengled bulbs in ZHA (#78315)
* Fix sengled bulbs in ZHA

* fix tests

* update discovery data
2022-09-13 16:30:41 -04:00
J. Nick Koston
a90b6d37bf Make yalexs_ble matcher more specific (#78307) 2022-09-13 16:30:40 -04:00
J. Nick Koston
d6bf1a8caa Bump pySwitchbot to 0.19.6 (#78304)
No longer swallows exceptions from bleak connection errors which
was hiding the root cause of problems.

This was the original behavior from a long time ago which
does not make sense anymore since we retry a few times anyways

https://github.com/Danielhiversen/pySwitchbot/compare/0.19.5...0.19.6
2022-09-13 16:30:40 -04:00
J. Nick Koston
95a89448e0 Bump aiodiscover to 1.4.13 (#78253) 2022-09-13 16:30:39 -04:00
J. Nick Koston
f6d26476b5 Bump bluetooth-auto-recovery to 0.3.3 (#78245)
Downgrades a few more loggers to debug since the only reason we check them is to give a better error message when the bluetooth adapter is blocked by rfkill.

https://github.com/Bluetooth-Devices/bluetooth-auto-recovery/compare/v0.3.2...v0.3.3

closes #78211
2022-09-13 16:30:38 -04:00
d-walsh
9640553b52 Fix missing dependency for dbus_next (#78235) 2022-09-13 16:30:38 -04:00
TheJulianJES
3129114d07 Bump PyViCare==2.17.0 (#78232) 2022-09-13 16:30:37 -04:00
Yevhenii Vaskivskyi
184a1c95f0 Bump blinkpy to 0.19.2 (#78097) 2022-09-13 16:30:36 -04:00
Robert Svensson
f18ab504a5 Move up setup of service to make it more robust when running multiple instances of deCONZ (#77621) 2022-09-13 16:30:36 -04:00
Paulus Schoutsen
2bd71f62ea 2022.9.2 (#78169) 2022-09-11 13:28:28 -04:00
J. Nick Koston
296db8b2af Bump aiohomekit to 1.5.6 (#78228) 2022-09-11 12:21:29 -04:00
J. Nick Koston
a277664187 Bump led-ble to 0.9.1 (#78226) 2022-09-11 12:21:28 -04:00
J. Nick Koston
1b7a06912a Bump yalexs-ble to 1.8.1 (#78225) 2022-09-11 12:21:27 -04:00
J. Nick Koston
e7986a54a5 Bump PySwitchbot to 0.19.5 (#78224) 2022-09-11 12:21:26 -04:00
G Johansson
de8b066a1d Bump pysensibo to 1.0.20 (#78222) 2022-09-11 12:21:25 -04:00
J. Nick Koston
4d4a87ba05 Bump led_ble to 0.8.5 (#78215)
* Bump led_ble to 0.8.4

Changelog: https://github.com/Bluetooth-Devices/led-ble/compare/v0.8.3...v0.8.4

* bump again
2022-09-11 12:21:24 -04:00
Aaron Bach
4b79e82e31 Bump regenmaschine to 2022.09.1 (#78210) 2022-09-11 12:21:24 -04:00
J. Nick Koston
1e8f461270 Bump bluetooth-adapters to 0.4.1 (#78205)
Switches to dbus-fast which fixes a file descriptor leak
2022-09-11 12:21:23 -04:00
Vincent Knoop Pathuis
6e88b8d3d5 Landis+Gyr integration: increase timeout and add debug logging (#78025) 2022-09-11 12:21:22 -04:00
J. Nick Koston
a626ab4f1a Bump aiohomekit to 1.5.4 to handle stale ble connections at startup (#78203) 2022-09-10 14:37:06 -04:00
J. Nick Koston
c7cb0d1a07 Close stale switchbot connections at setup time (#78202) 2022-09-10 14:37:05 -04:00
puddly
183c61b6ca Bump ZHA dependencies (#78201) 2022-09-10 14:37:05 -04:00
J. Nick Koston
95c20df367 Fix Yale Access Bluetooth not setting up when already connected at startup (#78199) 2022-09-10 14:37:04 -04:00
J. Nick Koston
a969ce273a Fix switchbot not setting up when already connected at startup (#78198) 2022-09-10 14:37:03 -04:00
J. Nick Koston
5f90760176 Bump led-ble to 0.8.3 (#78188)
* Bump led-ble to 0.8.0

Fixes setup when the previous shutdown was not clean and
the device is still connected

* bump again

* bump again

* bump again
2022-09-10 14:37:03 -04:00
Pascal Vizeli
795be361b4 Add dependencies to ecowitt (#78187) 2022-09-10 14:37:02 -04:00
Rami Mosleh
cdd5c809bb Fix sending notification to multiple targets in Pushover (#78111)
fix sending to mulitple targets
2022-09-10 14:37:01 -04:00
Paulus Schoutsen
c731e2f125 Fix ecowitt typing (#78171) 2022-09-09 23:32:26 -04:00
J. Nick Koston
1789a8a385 Bump aiohomekit to 1.5.3 (#78170) 2022-09-09 23:20:55 -04:00
Paulus Schoutsen
57717f13fc Bumped version to 2022.9.2 2022-09-09 22:39:13 -04:00
J. Nick Koston
e4aab6a818 Bump pySwitchbot to 0.19.1 (#78168) 2022-09-09 22:37:35 -04:00
Jc2k
258791626e Add missing moisture sensor to xiaomi_ble (#78160) 2022-09-09 22:37:35 -04:00
Pascal Vizeli
78802c8480 Bump aioecowitt to 2022.09.1 (#78142) 2022-09-09 22:37:34 -04:00
Yevhenii Vaskivskyi
b24f3725d6 Add missing strings for errors in amberelectric config flow (#78140) 2022-09-09 22:37:33 -04:00
J. Nick Koston
06116f76fa Bump bluetooth-adapters to 0.3.6 (#78138) 2022-09-09 22:37:33 -04:00
Erik Montnemery
27c0a37053 Allow non-integers in threshold sensor config flow (#78137) 2022-09-09 22:37:32 -04:00
Erik Montnemery
2b961fd327 Improve unique_id collision checks in entity_platform (#78132) 2022-09-09 22:37:31 -04:00
Raman Gupta
125afb39f0 Fix zwave_js update entity (#78116)
* Test zwave_js update entity progress

* Block until firmware update is done

* Update homeassistant/components/zwave_js/update.py

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

* revert params

* unsub finished event listener

* fix tests

* Add test for returned failure

* refactor a little

* rename

* Remove unnecessary controller logic for mocking

* Clear event when resetting

* Comments

* readability

* Fix test

* Fix test

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-09-09 22:37:31 -04:00
Anders Melchiorsen
3ee62d619f Fix LIFX light turning on while fading off (#78095) 2022-09-09 22:37:30 -04:00
J. Nick Koston
dc7c860c6a Fix switchbot writing state too frequently (#78094) 2022-09-09 22:37:29 -04:00
Paulus Schoutsen
f042cc5d7b Handle missing supported brands (#78090) 2022-09-09 22:37:29 -04:00
Jan Bouwhuis
4c0872b4e4 Improve warning messages on invalid received modes (#77909) 2022-09-09 22:37:28 -04:00
Jan Bouwhuis
21f6b50f7c Clear MQTT discovery topic when a disabled entity is removed (#77757)
* Cleanup discovery on entity removal

* Add test

* Cleanup and test

* Test with clearing payload not unique id

* Address comments

* Tests cover and typing

* Just pass hass

* reuse code

* Follow up comments revert changes to cover tests

* Add test unique_id has priority over disabled

* Update homeassistant/components/mqtt/__init__.py

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

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2022-09-09 22:37:27 -04:00
Jan Bouwhuis
d670df74cb Fix reload of MQTT config entries (#76089)
* Wait for unsubscribes

* Spelling comment

* Remove notify_all() during _register_mid()

* Update homeassistant/components/mqtt/client.py

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

* Correct handling reload manual set up MQTT items

* Save and restore device trigger subscriptions

* Clarify we are storing all remaining subscriptions

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2022-09-09 22:37:27 -04:00
Paulus Schoutsen
0a7f3f6ced 2022.9.1 (#78081) 2022-09-08 21:58:18 -04:00
rlippmann
fee9a303ff Fix issue #77920 - ecobee remote sensors not updating (#78035) 2022-09-08 21:02:32 -04:00
Paulus Schoutsen
a4f398a750 Bumped version to 2022.9.1 2022-09-08 16:50:47 -04:00
Jan Bouwhuis
c873eae79c Allow OpenWeatherMap config flow to test using old API to pass (#78074)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-09-08 16:50:13 -04:00
Nathan Spencer
d559b6482a Bump pylitterbot to 2022.9.1 (#78071) 2022-09-08 16:50:12 -04:00
Aaron Bach
760853f615 Fix bug with 1st gen RainMachine controllers and unknown API calls (#78070)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2022-09-08 16:50:12 -04:00
J. Nick Koston
cfe8ebdad4 Bump bluetooth-auto-recovery to 0.3.2 (#78063) 2022-09-08 16:50:11 -04:00
J. Nick Koston
2ddd1b516c Bump bluetooth-adapters to 0.3.5 (#78052) 2022-09-08 16:50:10 -04:00
Martin Hjelmare
3b025b211e Fix zwave_js device re-interview (#78046)
* Handle stale node and entity info on re-interview

* Add test

* Unsubscribe on config entry unload
2022-09-08 16:50:10 -04:00
Maikel Punie
4009a32fb5 Bump velbus-aio to 2022.9.1 (#78039)
Bump velbusaio to 2022.9.1
2022-09-08 16:50:09 -04:00
Joakim Sørensen
6f3b49601e Extract lametric device from coordinator in notify (#78027) 2022-09-08 16:50:08 -04:00
Martin Hjelmare
31858ad779 Fix zwave_js default emulate hardware in options flow (#78024) 2022-09-08 16:50:08 -04:00
Raman Gupta
ab9d9d599e Add value ID to zwave_js device diagnostics (#78015) 2022-09-08 16:50:07 -04:00
Yevhenii Vaskivskyi
ce6d337bd5 Fix len method typo for Osram light (#78008)
* Fix `len` method typo for Osram light

* Fix typo in line 395
2022-09-08 16:50:06 -04:00
Raman Gupta
3fd887b1f2 Show progress for zwave_js.update entity (#77905)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-09-08 16:50:05 -04:00
Raman Gupta
996a3477b0 Increase rate limit for zwave_js updates
Al provided a new key which bumps the rate limit from 10k per hour to 100k per hour
2022-09-08 14:03:04 -04:00
Paulus Schoutsen
910f27f3a2 2022.9.0 (#77968) 2022-09-07 12:49:59 -04:00
Franck Nijhof
4ab5cdcb79 Bumped version to 2022.9.0 2022-09-07 17:46:53 +02:00
Bram Kragten
e69fde6875 Update frontend to 20220907.0 (#77963) 2022-09-07 17:45:47 +02:00
J. Nick Koston
10f7e2ff8a Handle stale switchbot advertisement data while connected (#77956) 2022-09-07 17:45:42 +02:00
J. Nick Koston
3acc3af38c Bump PySwitchbot to 0.18.25 (#77935) 2022-09-07 17:45:36 +02:00
J. Nick Koston
a3edbfc601 Small tweaks to improve performance of bluetooth matching (#77934)
* Small tweaks to improve performance of bluetooth matching

* Small tweaks to improve performance of bluetooth matching

* cleanup
2022-09-07 17:45:31 +02:00
J. Nick Koston
941a5e3820 Bump led-ble to 0.7.1 (#77931) 2022-09-07 17:45:26 +02:00
J. Nick Koston
2eeab820b7 Bump aiohomekit to 1.5.2 (#77927) 2022-09-07 17:45:21 +02:00
Franck Nijhof
8d0ebdd1f9 Revert "Add ability to ignore devices for UniFi Protect" (#77916) 2022-09-07 17:45:16 +02:00
Raman Gupta
9901b31316 Bump zwave-js-server-python to 0.41.1 (#77915)
* Bump zwave-js-server-python to 0.41.1

* Fix fixture
2022-09-07 17:45:11 +02:00
Chris McCurdy
a4f528e908 Add additional method of retrieving UUID for LG soundbar configuration (#77856) 2022-09-07 17:45:05 +02:00
puddly
9aa87761cf Fix ZHA lighting initial hue/saturation attribute read (#77727)
* Handle the case of `current_hue` being `None`

* WIP unit tests
2022-09-07 17:45:00 +02:00
Matthew Simpson
d1b637ea7a Bump btsmarthub_devicelist to 0.2.2 (#77609) 2022-09-07 17:44:54 +02:00
Paulus Schoutsen
c8ad8a6d86 Bumped version to 2022.9.0b6 2022-09-06 12:55:44 -04:00
Bram Kragten
9155f669e9 Update frontend to 20220906.0 (#77910) 2022-09-06 12:55:37 -04:00
J. Nick Koston
e1e153f391 Bump bluetooth-auto-recovery to 0.3.1 (#77898) 2022-09-06 12:55:36 -04:00
Artem Draft
1dbcf88e15 Bump pybravia to 0.2.2 (#77867) 2022-09-06 12:55:35 -04:00
Raman Gupta
a13438c5b0 Improve performance impact of zwave_js update entity and other tweaks (#77866)
* Improve performance impact of zwave_js update entity and other tweaks

* Reduce concurrent polls

* we need to write state after setting in progress to false

* Fix existing tests

* Fix tests by fixing fixtures

* remove redundant conditional

* Add test for delayed startup

* tweaks

* outdent happy path

* Add missing PROGRESS feature support

* Update homeassistant/components/zwave_js/update.py

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

* Update homeassistant/components/zwave_js/update.py

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

* Fix tests by reverting outdent, PR comments, mark callback

* Remove redundant conditional

* make more readable

* Remove unused SCAN_INTERVAL

* Catch FailedZWaveCommand

* Add comment and remove poll unsub on update

* Fix catching error and add test

* readability

* Fix tests

* Add assertions

* rely on built in progress indicator

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-09-06 12:55:35 -04:00
J. Nick Koston
d98687b789 Bump thermopro-ble to 0.4.3 (#77863)
* Bump thermopro-ble to 0.4.2

- Turns on rounding of long values
- Uses bluetooth-data-tools under the hood
- Adds the TP393 since it works without any changes to the parser

Changelog: https://github.com/Bluetooth-Devices/thermopro-ble/compare/v0.4.0...v0.4.2

* bump again for device detection fix
2022-09-06 12:55:34 -04:00
Marc Mueller
319b0b8902 Pin astroid to fix pylint (#77862) 2022-09-06 12:55:33 -04:00
J. Nick Koston
62dcbc4d4a Add RSSI to the bluetooth debug log (#77860) 2022-09-06 12:55:33 -04:00
J. Nick Koston
6989b16274 Bump zeroconf to 0.39.1 (#77859) 2022-09-06 12:55:32 -04:00
J. Nick Koston
31d085cdf8 Fix history stats device class when type is not time (#77855) 2022-09-06 12:55:31 -04:00
Oliver Völker
61ee621c90 Adjust Renault default scan interval (#77823)
raise DEFAULT_SCAN_INTERVAL to 7 minutes

This PR is raising the default scan interval for the Renault API from 5 minutes to 7 minutes. Lower intervals fail sometimes, maybe due to quota limitations. This seems to be a working interval as described in home-assistant#73220
2022-09-06 12:55:30 -04:00
Yevhenii Vaskivskyi
f5e61ecdec Handle exception on projector being unavailable (#77802) 2022-09-06 12:55:30 -04:00
G Johansson
2bfcdc66b6 Allow empty db in SQL options flow (#77777) 2022-09-06 12:55:29 -04:00
Martin Hjelmare
3240f8f938 Refactor zwave_js event handling (#77732)
* Refactor zwave_js event handling

* Clean up
2022-09-06 12:55:28 -04:00
Steven Looman
74ddc336ca Use identifiers host and serial number to match device (#75657) 2022-09-06 12:55:28 -04:00
Paulus Schoutsen
6c36d5acaa Bumped version to 2022.9.0b5 2022-09-05 14:28:36 -04:00
Bram Kragten
e8c4711d88 Update frontend to 20220905.0 (#77854) 2022-09-05 14:28:26 -04:00
J. Nick Koston
bca9dc1f61 Bump govee-ble to 0.17.2 (#77849) 2022-09-05 14:28:25 -04:00
J. Nick Koston
4f8421617e Bump led-ble to 0.7.0 (#77845) 2022-09-05 14:28:24 -04:00
Erik Montnemery
40421b41f7 Add the hardware integration to default_config (#77840) 2022-09-05 14:28:24 -04:00
Jc2k
b0ff4fc057 Less verbose error logs for bleak connection errors in ActiveBluetoothProcessorCoordinator (#77839)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-09-05 14:28:23 -04:00
Charles Garwood
605e350159 Add remoteAdminPasswordEnd to redacted keys in fully_kiosk diagnostics (#77837)
Add remoteAdminPasswordEnd to redacted keys in diagnostics
2022-09-05 14:28:22 -04:00
Artem Draft
ad8cd9c957 Bump pybravia to 0.2.1 (#77832) 2022-09-05 14:28:21 -04:00
Raman Gupta
e8ab4eef44 Fix device info for zwave_js device entities (#77821) 2022-09-05 14:28:21 -04:00
J. Nick Koston
b1241bf0f2 Fix isy994 calling sync api in async context (#77812) 2022-09-05 14:28:20 -04:00
J. Nick Koston
f3e811417f Prefilter noisy apple devices from bluetooth (#77808) 2022-09-05 14:28:19 -04:00
Ernst Klamer
1231ba4d03 Rename BThome to BTHome (#77807)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-09-05 14:28:19 -04:00
G Johansson
e07554dc25 Bump yale_smart_alarm_client to 0.3.9 (#77797) 2022-09-05 14:28:18 -04:00
Robert Hillis
2fa517b81b Make Sonos typing more complete (#68072) 2022-09-05 14:28:17 -04:00
Paulus Schoutsen
0d042d496d Bumped version to 2022.9.0b4 2022-09-04 13:00:37 -04:00
G Johansson
c8156d5de6 Bump pysensibo to 1.0.19 (#77790) 2022-09-04 13:00:28 -04:00
J. Nick Koston
9f06baa778 Bump led-ble to 0.6.0 (#77788)
* Bump ble-led to 0.6.0

Fixes reading the white channel on same devices

Changelog: https://github.com/Bluetooth-Devices/led-ble/compare/v0.5.4...v0.6.0

* Bump flux_led to 0.28.32

Changelog: https://github.com/Danielhiversen/flux_led/compare/0.28.31...0.28.32

Fixes white channel support for some more older protocols

* keep them in sync

* Update homeassistant/components/led_ble/manifest.json
2022-09-04 13:00:27 -04:00
J. Nick Koston
52abf0851b Bump flux_led to 0.28.32 (#77787) 2022-09-04 13:00:27 -04:00
Justin Vanderhooft
da83ceca5b Tweak unique id formatting for Melnor Bluetooth switches (#77773) 2022-09-04 13:00:26 -04:00
Avi Miller
f9b95cc4a4 Fix lifx service call interference (#77770)
* Fix #77735 by restoring the wait to let state settle

Signed-off-by: Avi Miller <me@dje.li>

* Skip the asyncio.sleep during testing

Signed-off-by: Avi Miller <me@dje.li>

* Patch out asyncio.sleep for lifx tests

Signed-off-by: Avi Miller <me@dje.li>

* Patch out a constant instead of overriding asyncio.sleep directly

Signed-off-by: Avi Miller <me@dje.li>

Signed-off-by: Avi Miller <me@dje.li>
2022-09-04 13:00:25 -04:00
Avi Miller
f60ae40661 Rename the binary sensor to better reflect its purpose (#77711) 2022-09-04 13:00:25 -04:00
Avi Miller
ea0b406692 Add binary sensor platform to LIFX integration (#77535)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-09-04 13:00:24 -04:00
Michael
9387449abf Replace archived sucks by py-sucks and bump to 0.9.8 for Ecovacs integration (#77768) 2022-09-04 12:58:19 -04:00
Matt Zimmerman
5f4013164c Update smarttub to 0.0.33 (#77766) 2022-09-04 12:58:18 -04:00
Raman Gupta
3856178dc0 Handle dead nodes in zwave_js update entity (#77763) 2022-09-04 12:58:17 -04:00
J. Nick Koston
32a9fba58e Increase default august timeout (#77762)
Fixes
```
2022-08-28 20:32:46.223 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/Users/bdraco/home-assistant/homeassistant/helpers/debounce.py", line 82, in async_call
    await task
  File "/Users/bdraco/home-assistant/homeassistant/components/august/activity.py", line 49, in _async_update_house_id
    await self._async_update_house_id(house_id)
  File "/Users/bdraco/home-assistant/homeassistant/components/august/activity.py", line 137, in _async_update_house_id
    activities = await self._api.async_get_house_activities(
  File "/Users/bdraco/home-assistant/venv/lib/python3.10/site-packages/yalexs/api_async.py", line 96, in async_get_house_activities
    response = await self._async_dict_to_api(
  File "/Users/bdraco/home-assistant/venv/lib/python3.10/site-packages/yalexs/api_async.py", line 294, in _async_dict_to_api
    response = await self._aiohttp_session.request(method, url, **api_dict)
  File "/Users/bdraco/home-assistant/venv/lib/python3.10/site-packages/aiohttp/client.py", line 466, in _request
    with timer:
  File "/Users/bdraco/home-assistant/venv/lib/python3.10/site-packages/aiohttp/helpers.py", line 721, in __exit__
    raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutError
```
2022-09-04 12:58:17 -04:00
J. Nick Koston
9733887b6a Add BlueMaestro integration (#77758)
* Add BlueMaestro integration

* tests

* dc
2022-09-04 12:58:16 -04:00
Michael
b215514c90 Fix upgrade api disabling during setup of Synology DSM (#77753) 2022-09-04 12:58:15 -04:00
Pete
0e930fd626 Fix setting and reading percentage for MIOT based fans (#77626) 2022-09-04 12:58:15 -04:00
Simon Hansen
cd4c31bc79 Convert platform in iss integration (#77218)
* Hopefully fix everthing and be happy

* ...

* update coverage file

* Fix tests
2022-09-04 12:58:14 -04:00
starkillerOG
bc04755d05 Register xiaomi_miio unload callbacks later in setup (#76714) 2022-09-04 12:58:13 -04:00
Paulus Schoutsen
041eaf27a9 Bumped version to 2022.9.0b3 2022-09-02 20:54:37 -04:00
Paulus Schoutsen
d6a99da461 Bump frontend to 20220902.0 (#77734) 2022-09-02 20:54:30 -04:00
Raman Gupta
1d2439a6e5 Change zwave_js firmware update service API key (#77719)
* Change zwave_js firmware update service API key

* Update const.py
2022-09-02 20:54:29 -04:00
J. Nick Koston
6fff633325 Bump bluetooth-adapters to 3.3.4 (#77705) 2022-09-02 20:54:29 -04:00
Nathan Spencer
9652c0c326 Adjust litterrobot platform loading/unloading (#77682)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2022-09-02 20:54:28 -04:00
Christopher Bailey
36c1b9a419 Fix timezone edge cases for Unifi Protect media source (#77636)
* Fixes timezone edge cases for Unifi Protect media source

* linting
2022-09-02 20:54:27 -04:00
Paulus Schoutsen
a10a16ab21 Bumped version to 2022.9.0b2 2022-09-01 21:25:12 -04:00
Paulus Schoutsen
1f9c5ff369 Bump frontend to 20220901.0 (#77689) 2022-09-01 21:25:05 -04:00
J. Nick Koston
f4273a098d Bump bluetooth-adapters to 0.3.3 (#77683) 2022-09-01 21:25:05 -04:00
Paulus Schoutsen
329c692065 Pin Pandas 1.4.3 (#77679) 2022-09-01 21:25:04 -04:00
J. Nick Koston
dc2c0a159f Ensure unique id is set for esphome when setup via user flow (#77677) 2022-09-01 21:25:03 -04:00
J. Nick Koston
c9d4924dea Bump pySwitchbot to 0.18.22 (#77673) 2022-09-01 21:25:02 -04:00
starkillerOG
0cdbb295bc bump pynetgear to 0.10.8 (#77672) 2022-09-01 21:25:02 -04:00
Jc2k
ee0e12ac46 Fix async_all_discovered_devices(False) to return connectable and unconnectable devices (#77670) 2022-09-01 21:25:01 -04:00
Erik Montnemery
377791d6e7 Include entity registry id in entity registry WS API (#77668) 2022-09-01 21:25:00 -04:00
Erik Montnemery
37e425db30 Clean up user overridden device class in entity registry (#77662) 2022-09-01 21:25:00 -04:00
Kevin Stillhammer
073ca240f1 Required option_flow values for here_travel_time (#77651) 2022-09-01 21:24:59 -04:00
luar123
68a01562ec Add and remove Snapcast client/group callbacks properly (#77624)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2022-09-01 21:24:58 -04:00
On Freund
8c697b1881 Increase sleep in Risco setup (#77619) 2022-09-01 21:24:57 -04:00
Nathan Spencer
d6b2f0ff76 Code quality improvements for litterrobot integration (#77605) 2022-09-01 21:24:57 -04:00
uvjustin
b3830d0f17 Fix basic browse_media support in forked-daapd (#77595) 2022-09-01 21:24:56 -04:00
Kevin Stillhammer
aa57594d21 Required config_flow values for here_travel_time (#75026) 2022-09-01 21:24:55 -04:00
Paulus Schoutsen
5f4411113a Bumped version to 2022.9.0b1 2022-08-31 22:57:12 -04:00
Justin Vanderhooft
a080256f88 Bump melnor-bluetooth to 0.0.15 (#77631) 2022-08-31 22:57:07 -04:00
J. Nick Koston
129f717634 Bump bleak to 0.16.0 (#77629)
Co-authored-by: Justin Vanderhooft <justinvdhooft@gmail.com>
2022-08-31 22:57:06 -04:00
Matthias Alphart
de35e84543 Update xknx to 1.0.2 (#77627) 2022-08-31 22:57:06 -04:00
Christopher Bailey
7d90f6ccea Bump version of pyunifiprotect to 4.2.0 (#77618) 2022-08-31 22:57:05 -04:00
Artem Draft
37acd3e3f2 Suppress 404 in Bravia TV (#77288) 2022-08-31 22:57:04 -04:00
Mick Vleeshouwer
8b8db998df Catch unknown user exception in Overkiz integration (#76693) 2022-08-31 22:57:04 -04:00
Paulus Schoutsen
7115e63044 Bumped version to 2022.9.0b0 2022-08-31 14:11:29 -04:00
Joakim Plate
083e902dc0 Ignore unknown states in universal media player (#77388)
Ignore unknown states
2022-08-31 19:53:14 +02:00
Paulus Schoutsen
1bee9923dc Bump frontend to 20220831.0 (#77615) 2022-08-31 19:28:58 +02:00
jjlawren
4e21d56d7b Bump plexapi to 4.13.0 (#77597) 2022-08-31 16:44:31 +00:00
puddly
f8fc90bc07 Add ZHA config flow single instance checks for zeroconf and hardware (#77612) 2022-08-31 12:41:41 -04:00
J. Nick Koston
67ccb6f25a Fix yet another Govee H5181 variant (#77611) 2022-08-31 12:41:22 -04:00
Paulus Schoutsen
708e614823 Migrate Ecowitt to webhooks (#77610) 2022-08-31 12:41:04 -04:00
puddly
4b24370549 ZHA Yellow config flow fixes (#77603) 2022-08-31 11:21:37 -04:00
Erik Montnemery
7d5c00b851 Fix comment in login_flow (#77600) 2022-08-31 15:58:18 +02:00
Artem Draft
0aae416425 Log command list in Bravia TV Remote (#77329) 2022-08-31 15:58:07 +02:00
Erik Montnemery
d0375959fd Add additional test to schedule (#77601) 2022-08-31 15:19:50 +02:00
MosheTzvi
875651f32d Add Chatzot Hayom to Jewish calendar (#76378) 2022-08-31 14:47:23 +02:00
Erik Montnemery
d18097580e Bump hatasmota to 0.6.0 (#77560) 2022-08-31 14:23:57 +02:00
Nathan Spencer
5bc2f37bf8 Add support for Feeder-Robot select (#77512)
* Add support for Feeder-Robot select

* Use lambda to get current selected option

* Use generics and required keys mixin

* Code improvements

* Even more generics

* Fix missing type hint

* Apply suggestions from code review

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

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2022-08-31 13:23:51 +02:00
rikroe
cfa838b27a Small refactoring of BMW lock entity (#77451)
* Refactor entity_description

* Fix default attrs not always shown

* Simplify further

Co-authored-by: @emontnemery

Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2022-08-31 13:19:47 +02:00
Diogo Gomes
f98e86d3a6 Bump pyipma to 3.0.2 (#76332)
* upgrade to pyipma 3.0.0

* bump to support python3.9

* remove deprecated async_setup_platform

* full coverage

* add migrate
2022-08-31 07:00:42 -04:00
Robert Hillis
e5eddba223 Litterrobot - Do not load a platform if there is no device supporting it (#77497)
* Do not load button platform if no Litter Robot 3

* uno mas

* uno mas

* Do not load Vacuum if not needed

* Use dict to map platforms for each model

* uno mas
2022-08-31 12:54:59 +02:00
Rami Mosleh
b303c8e040 Refactor version key in glances (#77541)
* update version key

* Fix merge mistake

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2022-08-31 12:52:52 +02:00
Pascal Vizeli
105bb3e082 Ecowitt integration (#77441)
* Add ecowitt integration

* add tests

* use total

* use total

* test coverage

* Update homeassistant/components/ecowitt/__init__.py

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

* Update homeassistant/components/ecowitt/binary_sensor.py

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

* Update homeassistant/components/ecowitt/entity.py

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

* Update homeassistant/components/ecowitt/diagnostics.py

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

* add to async_on_unload

* remove attr_name / unload callback

* support unload platforms

* using replace

* address mapping

* update type

* mark final

* Apply suggestions from code review

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

* Fix bracket

* Fix another bracket

* Address comment

* Add strings

* update tests

* Update homeassistant/components/ecowitt/strings.json

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

* update text

* Update homeassistant/components/ecowitt/strings.json

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

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-31 12:51:39 +02:00
likeablob
ee6ffb1be4 Fix feedreader component to keep the last entry timestamp up to date (#77547)
Fix feedreader to keep the last entry timestamp up to date

- Use `updated` date in precedence over `published` date to update `last_entry_timestamp`
  in the case a feed entry has both updated date and published date.
2022-08-31 12:43:50 +02:00
Erik Montnemery
008ac8d10d Improve statistics metadata WS API (#77209) 2022-08-31 11:30:45 +02:00
epenet
7c585bd380 Fix sync context in icloud (#77582)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-31 10:52:41 +02:00
Robert Svensson
61ff52c93a Normalize deCONZ sensor unique IDs (#76357)
* Normalize deCONZ sensor unique IDs

* Handle battery sensors properly

* Fix daylight sensor unique ID
2022-08-31 08:12:25 +02:00
epenet
3df2ec1ed6 Implement reauth_confirm in icloud (#77530) 2022-08-31 00:07:32 -04:00
Nathan Spencer
e192c99d2f Add support for Feeder-Robot switches (#77503) 2022-08-31 00:03:02 -04:00
On Freund
3caa4963bc Use partition name as device name in Risco alarm control panels (#77526) 2022-08-30 23:48:03 -04:00
Joakim Plate
4185a70882 Allow data from un-connectable sources in fjäråskupan (#77236) 2022-08-30 23:40:25 -04:00
Robert Svensson
ff3d3088ee Add Aqara FP1 support to deCONZ integration (#77568) 2022-08-30 23:33:05 -04:00
puddly
5b3f4ec471 Fix failing unifiprotect unit tests (#77575)
* Patch `final` pydantic fields during unit test

* Use a fixed date with 31 days to ensure unit tests pass every month
2022-08-30 22:17:03 -04:00
Raman Gupta
0c35166a7b Simplify zwave_js update entity (#77572) 2022-08-30 22:02:13 -04:00
Nathan Spencer
3ba1fbe69d Add pet weight sensor for Litter-Robot 4 (#77566) 2022-08-30 22:01:49 -04:00
J. Nick Koston
5297dc1d5f Bump govee-ble to add support for H5185 firmware variant (#77564) 2022-08-30 22:01:35 -04:00
J. Nick Koston
edb8c58566 Add sensorpro (BLE) integration (#77569) 2022-08-30 21:49:31 -04:00
Erik Montnemery
cdca08e68a Add periodic system stats to hardware integration (#76873) 2022-08-30 21:45:13 -04:00
GitHub Action
1f08635d0a [ci skip] Translation update 2022-08-31 00:31:51 +00:00
puddly
a3af8c07a9 Fix SkyConnect unit tests broken by #77044 (#77570) 2022-08-30 19:03:44 -04:00
J. Nick Koston
4b3355c111 Bump flux_led to 0.28.31 to add support for Armacost devices (#77500) 2022-08-30 16:14:58 -05:00
Justin Vanderhooft
8d94c8f74a Add Melnor Bluetooth valve watering Integration (#70457) 2022-08-30 16:06:44 -05:00
Ernst Klamer
f43f440739 Add new sensors to BThome (#77561) 2022-08-30 17:03:41 -04:00
Erik Montnemery
7c5a5f86ee Allow setting to-time in schedule to 24:00 (#77558) 2022-08-30 15:54:31 -04:00
epenet
4b2e4c8276 Improve type hints in demo [3/3] (#77186) 2022-08-30 21:51:21 +02:00
epenet
7f883b7ff3 Use attributes in mochad (#76032) 2022-08-30 21:49:28 +02:00
epenet
46affe5c82 Adjust type hints in generic_thermostat (#77490) 2022-08-30 21:46:50 +02:00
Erik Montnemery
4655ed995e Fix resetting of attributes in EntityRegistry.async_get_or_create (#77516)
* Fix resetting of attributes in EntityRegistry.async_get_or_create

* Fix typing

* Fix resetting config entry

* Improve test

* Update tests
2022-08-30 21:07:50 +02:00
epenet
67db380253 Adjust type hints in greewave (#77492) 2022-08-30 21:06:31 +02:00
epenet
809aa6b30f Adjust type hints in gitlab_ci (#77493) 2022-08-30 21:05:49 +02:00
Erik Montnemery
c8c9a4b09f Migrate osramlightify light to color_mode (#70915) 2022-08-30 20:58:38 +02:00
epenet
b366354d55 Improve type hints in insteon (#77532) 2022-08-30 20:56:10 +02:00
epenet
7f55e26cd1 Improve type hints in icloud (#77531) 2022-08-30 20:55:27 +02:00
epenet
a1374963d1 Improve entity type hints [h] (#77468) 2022-08-30 20:55:01 +02:00
Kevin Addeman
05264cedfa Fix lutron_caseta handling of 'None' serials for RA3/QSX zones (#77553)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-30 13:46:54 -05:00
Erik Montnemery
8936c91f50 Migrate smartthings light to color_mode (#70968) 2022-08-30 20:45:52 +02:00
Nathan Spencer
fe881230db Add support for Feeder-Robot button (#77501)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2022-08-30 13:30:42 -05:00
J. Nick Koston
0c60e887e3 Bump unifi-discovery to 1.1.6 (#77557) 2022-08-30 13:30:30 -05:00
J. Nick Koston
ba499dff25 Add Nutrichef as a supported brand of inkbird (#77551) 2022-08-30 13:29:13 -05:00
J. Nick Koston
935274c2e7 Bump bluetooth-auto-recovery to 0.3.0 (#77555) 2022-08-30 12:55:48 -05:00
epenet
23090cb8a2 Improve entity type hints [i] (#77529) 2022-08-30 19:21:08 +02:00
epenet
50663bbc5d Use _attr_available in denonavr (#77486) 2022-08-30 19:19:36 +02:00
epenet
9cdb7bba4c Fix glances config-flow flaky test (#77549) 2022-08-30 11:57:42 -05:00
Raman Gupta
df214c2d26 Add support for zwave_js firmware update service (#77401)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2022-08-30 12:49:27 -04:00
puddly
f78b39bdbf ZHA backup/restore config flow (#77044) 2022-08-30 12:40:16 -04:00
Rami Mosleh
e48d493db4 Bump glances library to 0.4.1 (#77540) 2022-08-30 11:14:54 -05:00
epenet
a2f1b88227 Use generics in litterrobot (#77537) 2022-08-30 11:14:06 -05:00
mkmer
110803f23a Bump AIOAladdinConnect 0.1.44 (#77542) 2022-08-30 11:12:41 -05:00
Paulus Schoutsen
c11925f7a9 Add prusalink test cases and fix config flow (#77544) 2022-08-30 17:04:14 +02:00
Robert Hillis
b0a05530b0 Migrate Litterrobot to new entity naming style (#77484)
* Migrate Litterrobot to new entity naming style

* uno mas
2022-08-30 16:37:03 +02:00
Åke Strandberg
640d8b40f0 Add hvac_action property to Senz (#77413)
Add hvac_action property
2022-08-30 16:27:42 +02:00
guozi7788
f9eee0e9d7 Add the USB discovery for the Sonoff ZigBee dongle plus V2 (#77523) 2022-08-30 08:58:21 -05:00
epenet
b47de426d8 Adjust callback registration in harmony (#77533) 2022-08-30 08:54:32 -05:00
David F. Mulcahey
5f31bdf2d7 Bump the ZHA quirks lib (#77545) 2022-08-30 09:53:40 -04:00
Paulus Schoutsen
3e066e469a Remove "Awair" from score entity name (#77522) 2022-08-30 08:23:39 -04:00
Erik Montnemery
cac4015882 Fix schedule during single weekday (#77543) 2022-08-30 08:14:46 -04:00
Joakim Sørensen
6ed095f000 Revert dark_ image variants for add-ons (#77528) 2022-08-30 07:56:19 -04:00
Wagner Sartori Junior
8bb182dffb Sync supported locales from alexa official documentation into alexa smart home integration (#77536) 2022-08-30 07:55:52 -04:00
Erik Montnemery
14717951c3 Support configuring the mode of MQTT number entities (#77478)
* Support configuring the mode of MQTT number entities

* Use modern schema for tests

Co-authored-by: jbouwh <jan@jbsoft.nl>
2022-08-30 12:47:35 +02:00
Simon Hansen
cf5a11a1e7 Use DataUpdateCoordinator in ISS (#65178)
* Move update method to coordinator

* Add missing type annotations

* Simplify update function

* Add missing type annotation for coordinates

* Forgot to extend with CoordinatorEntity

* ...

* Tweaks

* ...

* Fix linting and conflicts

* import coordinatorentity

* ...

* Hopefully fixed linting

* ...

* Fix suggestions
2022-08-30 08:11:53 +02:00
Joris Pelgröm
fa0dfd812c Update allowlisted OAuth redirect URIs for Wear OS (#77411) 2022-08-29 21:52:10 -04:00
Paulus Schoutsen
79b5147b46 Awair local use config entry name + add measurement state class (#77383) 2022-08-29 20:46:03 -04:00
Paulus Schoutsen
481205535c Add PrusaLink integration (#77429)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-29 20:45:27 -04:00
GitHub Action
035cd16a95 [ci skip] Translation update 2022-08-30 00:30:17 +00:00
Erik Montnemery
3bddd6cf96 Correct device class for tasmota apparent and reactive power sensors (#77519) 2022-08-29 19:30:48 -04:00
Paulus Schoutsen
14f68ec1a9 Store redirect URI in context instead of asking each time (#77380)
* Store redirect URI in context instead of asking each time

* Fix tests
2022-08-29 19:28:42 -04:00
puddly
2224d0f43a Add a callback for data flow handler removal (#77394)
* Add a callback for when data flows are removed

* Call `async_remove` at the very end

* Handle and log exceptions caught during flow removal

* Log the error as an exception, with a traceback

* Adjust test's expected logging output to match updated format specifier
2022-08-29 16:25:34 -04:00
simeon-simsoft
a6c61cf339 Wallbox switch entity state incorrect while discharging (#76530)
Switch entity state incorrect while discharging
2022-08-29 22:07:48 +02:00
epenet
e19e65908a Use _attr_precision in entities (#77477) 2022-08-29 22:02:29 +02:00
Simon Engelhardt
d4c020b675 Fix Tuya mc device support (#77346)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2022-08-29 21:14:12 +02:00
Samuel Dumont
bb1e6bf209 Fix oauth2 in Toon (#77480) 2022-08-29 21:12:09 +02:00
Franck Nijhof
fcdedf54ea Merge branch 'master' into dev 2022-08-29 20:52:48 +02:00
Nathan Spencer
58d4172dec Bump pylitterbot to 2022.8.2 (#77504) 2022-08-29 13:41:07 -05:00
Christopher Bailey
b7244da3ab Bump version of pyunifiprotect to 4.1.9 (#77498) 2022-08-29 13:39:04 -05:00
Paulus Schoutsen
7d9ae0784e Allow searching for person (#77339) 2022-08-29 19:59:00 +02:00
Charles Garwood
4ba8fb6457 Add basic media_player to Fully Kiosk Browser integration (#77266) 2022-08-29 19:39:05 +02:00
J. Nick Koston
8e0c26bf86 Add LED BLE integration (#77489)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2022-08-29 11:38:18 -05:00
epenet
af9910d143 Use _attr_native_value in glances sensor (#77494) 2022-08-29 11:58:36 -04:00
Nathan Spencer
d4ae81d2bb Add support for Feeder-Robot sensors (#77395) 2022-08-29 10:48:24 -05:00
puddly
2e8d598795 Allow ZHA startup to fail instead of raising ConfigEntryNotReady (#77417)
* Retry startup within ZHA instead of raising `ConfigEntryNotReady`

* Add unit tests

* Disable pylint warning for intentional broad except
2022-08-29 11:42:01 -04:00
J. Nick Koston
795691038f Add light platform to switchbot (#77430) 2022-08-29 09:30:09 -05:00
J. Nick Koston
40e8979951 Add bluetooth api to get the count of connectable and non-connectable scanners (#77427) 2022-08-29 10:21:30 -04:00
Erik Montnemery
6b9c4c7ec1 Tweak comment about humidity sensors (#77482) 2022-08-29 09:57:40 -04:00
Erik Montnemery
2e3a2d29e5 Finish update of integrations to import issue_registry from helpers (#77473) 2022-08-29 09:52:17 -04:00
Penny Wood
d47edd5a34 Bump pizone version (#77257) 2022-08-29 08:30:35 -05:00
Doug Hoffman
01c200e11d Fix issue caused by restoring datetime value from mobile app (#77462)
* Only pass strings to dt_util.parse_datetime()

* Update homeassistant/components/mobile_app/sensor.py

* Update sensor.py

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2022-08-29 12:19:44 +02:00
J. Nick Koston
8c41d0d3d7 Ensure LIFX connection is cleaned up on failure (#77465)
Fixes #77464
2022-08-29 11:02:41 +02:00
Rami Mosleh
bf01b5a466 Import issue_registry from helpers for speedtestdotnet (#77467)
import issue_registry from helpers for speedtestdotnet
2022-08-29 10:40:47 +02:00
Anil Daoud
3846efecc5 Handle kaiterra ClientConnectorError exception (#77428)
* Update api_data.py

add ClientConnectorError exception

* Update api_data.py

fix ClientConnectorError exception handling

* Update api_data.py

import in alphabetical order and better exception logging
2022-08-29 10:40:24 +02:00
epenet
0c401bcab2 Use _attr_temperature_unit in climate entities (#77472) 2022-08-29 10:20:55 +02:00
epenet
8ed689fede Add new rule to enforce relative imports in pylint (#77358)
* Add new rule to enforce relative imports in pylint

* Early return

* Adjust components
2022-08-29 08:55:32 +02:00
Erik Montnemery
067d21a307 Refactor hardware.async_info to return list[HardwareInfo] (#77183) 2022-08-29 08:45:39 +02:00
Robert Svensson
0154a1cecb Improve deCONZ binary sensor classes (#77419) 2022-08-29 08:15:10 +02:00
Brett Adams
779e020dc4 Add update platform to Advantage Air (#75391)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-28 23:41:37 -05:00
Robert Hillis
7c27be230c Add reauth flow to Litterrobot (#77459)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-28 23:40:28 -05:00
J. Nick Koston
4333d9a7d1 Fix recorder being imported before deps are installed (#77460) 2022-08-28 22:18:35 -05:00
Robert Hillis
f41ba39a5e Add Litter Robot 4 DHCP discovery (#77463) 2022-08-28 21:11:57 -05:00
Christopher Bailey
0867392f96 Add ability to ignore devices for UniFi Protect (#77414)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-28 20:35:45 -05:00
Brett Adams
2857739958 Add light platform to Advantage Air (#75425) 2022-08-28 19:44:08 -05:00
GitHub Action
a093057420 [ci skip] Translation update 2022-08-29 00:27:51 +00:00
Marc Mueller
37395ecd36 Update tesla-wall-connector to 1.0.2 (#77458) 2022-08-28 17:51:36 -05:00
jjlawren
5c8bd1ec25 Fix Plex to Cast media resuming (#76681) 2022-08-28 17:51:20 -05:00
epenet
7eb8e1f25d Improve type hints in demo [1/3] (#77180) 2022-08-28 17:51:10 -05:00
Raj Laud
575ac5ae0a Squeezebox play now support (#72626)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-28 17:50:44 -05:00
Tomasz Wieczorek
50a1de9f73 Add set default for domain for scaffold script (#76628)
* Add set default for domain for scaffold script

* Add default domain for config_flow_discovery integration

* Extend comment explaining usage
2022-08-29 00:02:27 +02:00
Robert Hillis
7be6d6eba2 Use generators for async_add_entities in Anthemav (#76587) 2022-08-28 16:40:53 -05:00
Maciej Bieniek
bf510fcb4c Add CAQI sensors to Nettigo Air Monitor integration (#76709)
* Add CAQI sensors

* Add state translation

* Add icon

* Update tests

* Remove unit

* Update test

* Do not use device_class

* Update tests

* Remove unit and device_class
2022-08-28 21:54:00 +02:00
Marc Mueller
1210897f83 Update pylint to 2.15.0 (#77408)
* Update pylint to 2.15.0

* Remove useless suppressions

* Fix TypeVar name
2022-08-28 21:14:09 +02:00
Joakim Sørensen
0caf998547 Bump awesomeversion from 22.6.0 to 22.8.0 (#77436) 2022-08-28 14:52:23 -04:00
J. Nick Koston
533d23ce05 Add thermobeacon supported brands (#77423)
Add thermobeacon alternate brands
2022-08-28 20:46:04 +02:00
Christopher Bailey
d29be2390b Add new features from UniFi Protect 2.2.1-beta5 (#77391) 2022-08-28 12:31:07 -05:00
Matthias Alphart
441d7c0461 Wait for config entry platforms in KNX (#77437) 2022-08-28 12:36:31 +02:00
Raman Gupta
eab0ff5185 Bump zwave-js-server-python to 0.41.0 (#76903) 2022-08-27 21:27:41 -04:00
GitHub Action
7f1a203721 [ci skip] Translation update 2022-08-28 00:29:27 +00:00
J. Nick Koston
a28aeeeca7 Hide bluetooth passive option if its not available on the host system (#77421)
* Hide bluetooth passive option if its not available

- We now have a way to determine in advance if passive
  scanning is supported by BlueZ

* drop string
2022-08-27 19:18:54 -04:00
Raman Gupta
d25a76d3d6 Use Platform and ValueType enum in zwave_js.discovery (#77402) 2022-08-28 00:47:46 +02:00
J. Nick Koston
8e88e039f7 Add diagnostics to bluetooth (#77393) 2022-08-27 16:41:49 -05:00
Kris Molendyke
15ad10643a Bump Tank Utility Version (#77103)
* Bump Tank Utility Version

Bumps to a new release which includes the license in the artifact.

* Regen all reqs
2022-08-27 12:07:56 -04:00
On Freund
1addf5a51b Upgarde PyRisco to 0.5.3 (#77407)
Upgarde PyRisco
2022-08-27 11:59:57 -04:00
Jan Bouwhuis
448b720eb7 Fix trait processing Fan state without percentage_step (#77351)
* Fix trait processing Fan without percentage_step

* Update homeassistant/components/google_assistant/trait.py

Co-authored-by: Joakim Plate <elupus@ecce.se>

* Fix test

* Fix formatting

Co-authored-by: Joakim Plate <elupus@ecce.se>
2022-08-27 17:17:02 +02:00
Ernst Klamer
b2e958292c Add support for BThome (#77224)
* Add BThome BLE

* Update BThome to latest version

* 0.3.4

* Rename to bthome 2

* Fix uuids not being found

* Make energy a total increasing state class

* Change unit of measurement of VOC

* Use short identifier

* Fix the reauth flow

* Bump bthome_ble

* Parameterize sensor tests

* Remove Move function to parameter

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-08-27 15:25:29 +02:00
J. Nick Koston
a6770f8b03 Adjust bluetooth matcher comments (#77409) 2022-08-27 15:23:47 +02:00
Joakim Plate
fcba6def49 Replace STATE_HOME with STATE_IDLE (#77385) 2022-08-27 13:50:41 +02:00
J. Nick Koston
61d5ed1dcf Index bluetooth matchers to resolve performance concerns with many adapters/remotes (#77372) 2022-08-26 23:07:51 -04:00
J. Nick Koston
f6bc5ad8b1 Add Thermobeacon (BLE) integration (#77313) 2022-08-26 22:44:10 -04:00
Robert Hillis
9c6780f76a Rework Accuweather sensors (#76567) 2022-08-26 22:11:25 -04:00
epenet
2b9116f1f8 Use _attr_should_poll in components [s-t] (#77368)
* Use _attr_should_poll in components [s-t]

* Adjust touchline

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

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-26 22:03:50 -04:00
GitHub Action
c916fcb2c6 [ci skip] Translation update 2022-08-27 00:24:30 +00:00
Christopher Bailey
487cd313c1 Bump version of pyunifiprotect to 4.1.8 (#77389) 2022-08-26 18:15:29 -05:00
epenet
d32f3e359f Use _attr_should_poll in components [o-r] (#77364) 2022-08-26 21:41:41 +02:00
epenet
4142530368 Adjust inheritance in ring (#77366)
* Adjust inheritance in ring

* Fix extra_state_attributes
2022-08-26 21:40:28 +02:00
epenet
d8b2563b3d Use _attr_should_poll in components [u-z] (#77371) 2022-08-26 21:22:27 +02:00
epenet
dff9baf880 Use _attr_should_poll in components [j-n] (#77357) 2022-08-26 21:19:37 +02:00
Rami Mosleh
b36321988f Deprecate speedtest service (#77261)
deprecate speedtest service
2022-08-26 11:57:43 -07:00
David F. Mulcahey
5af015dd7d Fix missing entities in ZHA for IKEA STARKVIND (#77360) 2022-08-26 19:44:34 +02:00
epenet
9b8912a558 Remove unnecessary property from proliphix (#77363) 2022-08-26 19:43:36 +02:00
David F. Mulcahey
0881ff2d1f Add guard to enhanced current hue usage in ZHA (#77359) 2022-08-26 10:00:46 -04:00
Charles Garwood
36d77d1f33 Add diagnostics to Fully Kiosk Browser integration (#77274) 2022-08-26 15:21:45 +02:00
epenet
38ca74b547 Adjust pylint plugin for absolute/relative imports (#77219)
* Adjust pylint plugin for absolute/relative imports

* Adjust components

* One more

* Adjust mqtt

* Adjust mqtt.DOMAIN import

* Adjust internal import

* Add tests for valid local component imports

* Adjust relative path check

* Fixes

* Fixes
2022-08-26 14:27:13 +02:00
Christopher Bailey
1fb8fbf5de Refactor and unify device fetching for UniFi Protect (#77341) 2022-08-26 06:46:11 -05:00
Franck Nijhof
dfc3e7d80f Don't expose attribute option in state selector (#77347) 2022-08-26 11:51:36 +02:00
epenet
7fb9c4a37f Improve type hint in flexit climate entity (#77159) 2022-08-26 11:43:20 +02:00
epenet
b043053aad Improve entity type hints [g] (#77145) 2022-08-26 11:37:12 +02:00
epenet
452ee0284a Improve type hints in demo [2/3] (#77185) 2022-08-26 11:34:38 +02:00
Brett Adams
94cd8e801b Fix attributes scope in Advantage Air Select platform (#76744) 2022-08-26 11:04:38 +02:00
rikroe
516dc3372f Migrate BMW Connected Drive to new entity naming (#77045)
Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2022-08-26 11:04:09 +02:00
Aidan Timson
b5f9f08aa8 Use UUID identifier in System Bridge (#76921) 2022-08-26 11:02:10 +02:00
epenet
ab6bb7cd93 Fix issue with flexit fan mode (#77157) 2022-08-26 10:55:06 +02:00
epenet
0482d50d13 Improve type hint in frontier silicon media player (#77167) 2022-08-26 10:54:22 +02:00
epenet
c840026198 Improve type hint in fibaro climate entity (#77153) 2022-08-26 10:52:57 +02:00
Marc Mueller
79bdc02829 Improve esphome state property decorator typing (#77152) 2022-08-26 10:52:05 +02:00
epenet
563c956539 Improve type hint in everlights light entity (#77139) 2022-08-26 10:50:47 +02:00
epenet
6c4290e418 Improve type hint in acmeda base entity (#77171) 2022-08-26 10:48:31 +02:00
epenet
8f9ff0f88e Improve type hint in freedompro entities (#77170) 2022-08-26 10:48:12 +02:00
epenet
8896229ea6 Improve type hint in foobot sensor entity (#77164) 2022-08-26 10:33:17 +02:00
epenet
3031caafed Improve type hint in flic binary sensor entity (#77161) 2022-08-26 10:30:51 +02:00
Marc Mueller
c438c26df3 Improve WLED typing (#77200) 2022-08-26 10:25:33 +02:00
epenet
f9a46cc79f Use _attr_should_poll in econet (#77262) 2022-08-26 10:21:13 +02:00
epenet
2a8109304f Use _attr_should_poll in components [h-i] (#77270) 2022-08-26 10:20:38 +02:00
epenet
a46c25d2c8 Use _attr_should_poll in components [a-g] (#77268) 2022-08-26 10:15:33 +02:00
J. Nick Koston
120c76524d Fix incorrect key update for Gen2 locks with yalexs_ble (#77335) 2022-08-26 09:33:35 +02:00
Christopher Bailey
6558643448 Handle remove packets for UniFi Protect (#77337)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-25 22:05:18 -05:00
J. Nick Koston
47848b7cf8 Fix IssueSeverity import (#77338) 2022-08-25 21:52:33 -05:00
Franck Nijhof
5f0cca9b26 Raise repairs issue if automation calls unknown service (#76949) 2022-08-25 20:56:26 -04:00
GitHub Action
d7724235ff [ci skip] Translation update 2022-08-26 00:27:16 +00:00
Christopher Bailey
5c0fc0c002 Add adopt/unadopt flows for UniFi Protect devices (#76524)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-25 18:54:52 -05:00
Martin Hjelmare
bda9cb59d2 Clean up double spotify persistent notification for re-auth (#77307) 2022-08-26 00:20:29 +02:00
Christopher Bailey
0e10e6f4cd Bump version of pyunifiprotect to 4.1.7 (#77334) 2022-08-26 00:15:56 +02:00
J. Nick Koston
29b74f10c2 Bump govee-ble to 0.16.1 (#77311) 2022-08-26 00:05:43 +02:00
Paulus Schoutsen
525afb729c Disable some upnp entities by default (#77330) 2022-08-25 23:45:27 +02:00
J. Nick Koston
a09e9040f3 Bump aiohomekit to 1.5.1 (#77323) 2022-08-25 15:22:09 -05:00
Paulus Schoutsen
f2e177a5af 2022.8.7 (#77324) 2022-08-25 15:51:17 -04:00
Jeef
edb4e4de35 Refactor Flume to use base entity class (#77115)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-25 14:45:35 -05:00
mkmer
c420242656 Add BLE sensor to Aladdin_connect (#76221)
* Add BLE sensor
Default Enable BLE & Battery for Model 02

* recommended changes

* Recommended changes

Model 02 -> 01 (oops)
2x async_block_till_done() not needed.
2022-08-25 14:36:54 -04:00
Nathan Spencer
8c24d5810c Remove deprecated reset_waste_drawer and set_wait_time services from litterrobot (#77052) 2022-08-25 13:31:04 -05:00
Paulus Schoutsen
f700a2ea1c Bumped version to 2022.8.7 2022-08-25 14:13:44 -04:00
mletenay
c169a957ab Fix grid_export_limit unit for DT inverters (#77290)
FIx grid_export_limit unit for DT inverters
2022-08-25 14:13:40 -04:00
Matthias Alphart
abaf89f57d Update xknx to 1.0.1 (#77244) 2022-08-25 14:13:39 -04:00
donoghdb
88451e3002 Fix met_eireann default wind speed unit (#77229)
Update default units
2022-08-25 14:13:38 -04:00
mkmer
3efc5bb0be Fix Aladdin connect multiple doors on one device (#77226)
Fixed Multiple doors device_info
2022-08-25 14:13:37 -04:00
Robert Svensson
0c617a0471 Fix level controllable output controls in deCONZ (#77223)
Fix level controllable output controls
2022-08-25 14:13:36 -04:00
Robert Svensson
58debaf837 Minor deCONZ clean up (#76323)
* Rename secondary_temperature with internal_temperature

* Prefix binary and sensor descriptions matching on all sensor devices with COMMON_

* Always create entities in the same order

Its been reported previously that if the integration is removed and setup again that entity IDs can change if not sorted in the numerical order

* Rename alarmsystems to alarm_systems

* Use websocket enums

* Don't use legacy pydeconz constants

* Bump pydeconz to v103

* unsub -> unsubscribe
2022-08-25 14:13:36 -04:00
puddly
b8b4031d31 Bump ZHA dependencies (#77125) 2022-08-25 14:12:24 -04:00
Maciej Bieniek
94d8863da9 Protect against an exception in Shelly climate platform (#77102)
Check if state in HVACMode
2022-08-25 14:12:23 -04:00
J. Nick Koston
df5b57431d Bump pySwitchbot to 0.18.14 (#77090) 2022-08-25 14:12:23 -04:00
J. Nick Koston
1150c3a51a Bump pySwitchbot to 0.18.12 (#77040) 2022-08-25 14:12:22 -04:00
Dave Atherton
81a5c0f9b5 Change growatt server URL (#76824)
Co-authored-by: Chris Straffon <c.m.straffon@gmail.com>
2022-08-25 14:12:21 -04:00
Stephan Uhle
160e3bda23 Add edl21 sensor unit mapping for Hz (#76783)
Added sensor unit mapping for Hz.
2022-08-25 14:12:20 -04:00
Christopher Bailey
7fbb9c189f Bump version of pyunifiprotect to 4.1.15 (#77320) 2022-08-25 13:09:38 -05:00
Nathan Spencer
b563bd0ae5 Add support for Litter-Robot 4 (#75790) 2022-08-25 11:32:27 -05:00
Jeef
462ec4ced3 Add Flume DataUpdateCoordinator class (#77114)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-25 11:21:41 -05:00
Erik Montnemery
ac9ba8f231 Improve demo test coverage (#77301) 2022-08-25 10:39:51 -05:00
Jc2k
f166d21390 Fix characteristic cache clear in homekit_controller on BLE unpair (#77309) 2022-08-25 16:22:58 +01:00
Erik Montnemery
c741d9d045 Update integrations to import issue_registry from helpers (#77305)
* Update integrations to import issue_registry from helpers

* Update tests
2022-08-25 15:33:05 +02:00
J. Nick Koston
0f86bb94d5 Add thermopro integration (BLE) (#77242) 2022-08-25 08:24:55 -05:00
Robert Hillis
4f526a9212 Add reauth flow to Skybell (#75682)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-25 08:24:09 -05:00
Artem Draft
8ddee30787 Revert "Add remote learn command to BraviaTV" (#77306) 2022-08-25 14:23:11 +02:00
Jan Bouwhuis
5d9e462118 Add repair for deprecated MQTT yaml config (#77174)
* Add repair for deprecated MQTT yaml config

* Update homeassistant/components/mqtt/strings.json

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

* Update homeassistant/components/mqtt/strings.json

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

* Add restart instruction

* Update homeassistant/components/mqtt/strings.json

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

* Update English translation

* update issue_registry imports

* Update homeassistant/components/mqtt/manifest.json

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

Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-25 13:30:05 +02:00
Erik Montnemery
e18dd4da16 Add pressure to openweathermap weather forecast (#77303) 2022-08-25 13:16:12 +02:00
Jan Bouwhuis
7fc294d9b1 Set cv hass in hass fixture (#77271)
* Set cv hass in hass fixture

* Move test_hass_cv and update docstring

* Update tests/test_test_fixtures.py

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

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-25 12:29:31 +02:00
Maciej Bieniek
ad6beac535 Add hw_version to MQTT device info (#77210)
* Add hw_version

* Add abbreviation for hw_version

* Update tests

* Update discovery tests
2022-08-25 11:55:33 +02:00
Erik Montnemery
dfed3ba75e Move issue_registry to homeassistant.helpers (#77299)
* Move issue_registry to homeassistant.helpers

* Add backwards compatibility
2022-08-25 11:32:06 +02:00
epenet
79ab794e6a Add .strict-typing to prettier ignore list (#77177) 2022-08-25 09:39:00 +02:00
Erik Montnemery
3d723bddf8 Use mock_restore_cache in tests (#77298) 2022-08-25 09:28:53 +02:00
Erik Montnemery
c55505b47b Use mock_restore_cache in mqtt tests (#77297) 2022-08-25 09:27:38 +02:00
mletenay
cef6ffb552 Fix grid_export_limit unit for DT inverters (#77290)
FIx grid_export_limit unit for DT inverters
2022-08-25 08:43:09 +02:00
mletenay
bbc2c28ef3 Add Synchronize inverter clock button (#69220)
* Add Synchronize inverter clock button

* Use generic GoodweButtonEntityDescription

* Replace deprecated code

* Fix DT inverter export limit type

* Remove fix to DT inverter export limit time
2022-08-25 07:52:05 +02:00
mkmer
cd7625d4a2 Bump AIOAladdinConnect to 0.1.43 (#77263)
Bumped AIOAladdin Connect 0.1.43
Added door to callback key
2022-08-25 07:05:57 +02:00
J. Nick Koston
f6a03625ba Implement websocket message coalescing (#77238)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2022-08-24 22:50:48 -05:00
Robert Svensson
2161b6f049 Fix level controllable output controls in deCONZ (#77223)
Fix level controllable output controls
2022-08-24 22:00:54 -04:00
epenet
859effee56 Remove unnecessary property from fritz (#77269) 2022-08-24 21:59:00 -04:00
GitHub Action
16b93d1af2 [ci skip] Translation update 2022-08-25 00:28:02 +00:00
epenet
d33f93d5ca Remove unnecessary property from hvv_departures (#77267) 2022-08-24 19:46:59 -04:00
J. Nick Koston
e79f1de9e9 Bump qingping-ble to 0.6.0 (#77289)
Adds support for the Qingping Temp RH M

Changelog: https://github.com/Bluetooth-Devices/qingping-ble/compare/v0.5.0...v0.6.0
2022-08-24 19:46:34 -04:00
Maciej Bieniek
ae481948a3 Bump Accuweather library (#77285)
Bump accuweather library
2022-08-24 19:46:22 -04:00
J. Nick Koston
109d5c7084 Fix bluetooth discovery when advertisement format changes (#77286) 2022-08-24 17:36:21 -05:00
yllar
5d1c9a2e94 Songpal dependency upgrade (#77278)
Bump python-songpal to 0.15
2022-08-24 16:54:59 -04:00
Artem Draft
647eb9650d Add remote learn command to BraviaTV (#76655)
* add bravia remote learn

* unwrap
2022-08-24 22:50:07 +02:00
kingy444
cfa26ae0ca Migrate Hunter Douglas Powerview to aiopvapi 2.0.0 (#76998) 2022-08-24 12:53:22 -05:00
J. Nick Koston
d1486d04d9 Add support for bleak passive scanning on linux (#75542) 2022-08-24 12:17:28 -05:00
epenet
7ee47f0f26 Adjust inheritance in homeworks (#77265) 2022-08-24 15:41:35 +02:00
Franck Nijhof
4d02cccd11 Fix typing of ConfigEntrySelector (#77259) 2022-08-24 15:15:29 +02:00
McYars
7f4c5c04d3 Add Xiaomi Smartmi Fresh Air System XFXTDFR02ZM (#76637) 2022-08-24 15:09:01 +02:00
Franck Nijhof
a4d7130d7a Fix unneeded inheritance in LaMetric base entity (#77260) 2022-08-24 15:01:24 +02:00
On Freund
635eda584d Support for local push in Risco integration (#75874)
* Local config flow

* Local entities

* Apply suggestions from code review

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

* Address code review comments

* More type hints

* Apply suggestions from code review

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

* More annotations

* Even more annonations

* New entity naming

* Move fixtures to conftest

* Improve state tests for local

* Remove mutable default arguments

* Remove assertions for lack of state

* Add missing file

* Switch setup to fixtures

* Use error fixtures in test_config_flow

* Apply suggestions from code review

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

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-24 13:09:54 +02:00
Erik Montnemery
2497ff5a39 Add energy and gas sensors to demo integration (#77206) 2022-08-24 11:09:23 +02:00
Erik Montnemery
853fab0a68 Mock MQTT setup in hassio tests (#77245)
* Mock MQTT setup in hassio tests

* Tweak
2022-08-24 10:48:23 +02:00
Franck Nijhof
c26d6879ae Add button platform to LaMetric (#76768)
* Add button platform to LaMetric

* coveragerc

* Fix docstring

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

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-24 10:10:36 +02:00
Matthias Alphart
619e99d24c Update xknx to 1.0.1 (#77244) 2022-08-24 09:57:57 +02:00
mkmer
a926e7062c Fix Aladdin connect multiple doors on one device (#77226)
Fixed Multiple doors device_info
2022-08-24 09:53:17 +02:00
epenet
a40ddb5e83 Use _attr_should_poll in xiaomi_aqara entities (#77197)
* Use _attr_should_poll in xiaomi_aqara entities

* Adjust switch
2022-08-24 09:11:01 +02:00
donoghdb
671f129317 Fix met_eireann default wind speed unit (#77229)
Update default units
2022-08-24 08:18:10 +02:00
J. Nick Koston
de7fdeddf9 Update qingping matcher to support additional models (#77225)
* Update qingping matcher to support additional models

* tweak

* bump

* Update BinarySensorEntityDescription

Co-authored-by: Marcel van der Veldt <m.vanderveldt@outlook.com>
2022-08-24 06:18:47 +02:00
puddly
8167cd615a Bump ZHA dependencies (#77125) 2022-08-23 20:53:43 -04:00
GitHub Action
a4dcb3a9c1 [ci skip] Translation update 2022-08-24 00:27:09 +00:00
Franck Nijhof
dc17bca00c Add config entry selector (#77108) 2022-08-24 00:29:30 +02:00
Martin Hjelmare
f1075644f8 Bump pymysensors to 0.24.0 (#77201) 2022-08-24 00:00:54 +02:00
mkmer
5ce64539c5 Bump AIOAladdinConnect to 0.1.42 (#77205) 2022-08-23 23:57:38 +02:00
y34hbuddy
99ec341d6e Refactor volvooncall to use ConfigFlow (#76680)
* refactor volvooncall to use ConfigFlow

* remove unused constant SIGNAL_STATE_UPDATED

* implemented feedback

* improve ConfigFlow UX by giving an option for region=None

* implemented more feedback

* next round of feedback

* implemented more feedback

* improve test coverage

* more test coverage

* Apply suggestions from code review

* implemented feedback on tests

* Apply suggestions from code review

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-23 20:58:17 +02:00
Erik Montnemery
f61edf0778 Fix updating of statistics metadata name (#77207)
* Fix updating of statistics metadata name

* Fix test

* Test renaming
2022-08-23 17:51:17 +02:00
Abílio Costa
b1d249c391 Update Whirlpool integration for 0.17.0 library (#76780)
* Update Whirlpool integration for 0.17.0 library

* Use dataclass for integration shared data
2022-08-23 17:25:58 +02:00
J. Nick Koston
7f001cc1d1 ESPHome BLE scanner support (#77123)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
2022-08-23 10:41:50 -04:00
J. Nick Koston
c975146146 Reduce discovery integration matching overhead (#77194) 2022-08-23 10:35:20 -04:00
dependabot[bot]
bf5ab64b99 Bump actions/cache from 3.0.7 to 3.0.8 (#77196)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-23 12:37:28 +02:00
Erik Flodin
9e66b30af9 Add new sensors for energy produced (via Tibbber) (#76165)
The new sensors tibber:energy_(production|profit)_<home_id> are like the
existing consumption/totalCost ones except that they report outgoing
energy instead of incomeing.
2022-08-23 10:02:58 +02:00
Thijs W
680a477009 Fix frontier silicon EQ Mode not present on all devices (#76200)
* Fix #76159: EQ Mode not present on all devices

* Address review remarks

* Duplicate bookkeeping of sound mode support

* reduce length of try-blocks
2022-08-23 09:41:07 +02:00
Jan Bouwhuis
be2366d773 Add this object to MQTT templates (#77142)
* Add `this` object to MQTT templates

* Only set once, remove hass guard

* Set once if there is a state

* Add tests TemplateStateFromEntityId calls once
2022-08-23 08:43:07 +02:00
J. Nick Koston
c76dec138a Discover new bluetooth adapters when they are plugged in (#77006) 2022-08-22 15:45:08 -10:00
epenet
325557c3e9 Use _attr_should_poll in zha entities (#77175) 2022-08-22 21:38:26 -04:00
Christopher Bailey
ce3502291d Add better support for UniFi Protect Cameras with Removable Lens (#76942) 2022-08-22 14:58:31 -10:00
GitHub Action
0f0e398945 [ci skip] Translation update 2022-08-23 00:32:02 +00:00
Franck Nijhof
9843753f30 Add alias support to all triggers (#77184) 2022-08-22 17:43:09 -04:00
Klaas Schoute
29b502bb0a Add diagnostics for Pure Energie integration (#77151)
* Add diagnostics for Pure Energie integration

* Update test after feedback
2022-08-22 22:18:17 +02:00
epenet
f0646dfb42 Improve type hint in filter sensor entity (#77155) 2022-08-22 21:40:33 +02:00
epenet
df5f6bdfc1 Use _attr_should_poll in camera entities (#77173) 2022-08-22 20:30:35 +02:00
epenet
03ed552ca9 Improve type hint in foscam camera entity (#77166) 2022-08-22 20:23:15 +02:00
Christopher Bailey
e3210291a5 Bump version of pyunifiprotect to 4.1.4 (#77172) 2022-08-22 08:10:02 -10:00
Oscar Calvo
e4b288ef7c Load sms notify via discovery (#76733)
* Fix #76283

Fix #76283

* Update notify.py

* Support sending SMS as ANSI

* Put back load via discovery

* Update homeassistant/components/sms/const.py

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

* Update homeassistant/components/sms/__init__.py

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

* Update homeassistant/components/sms/__init__.py

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

* Update homeassistant/components/sms/notify.py

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

* Fix typo

* Apply PR feedback

* Fix bad reference

* Update homeassistant/components/sms/notify.py

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

* Update homeassistant/components/sms/notify.py

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

* Update homeassistant/components/sms/notify.py

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

* Update homeassistant/components/sms/notify.py

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

* Update homeassistant/components/sms/notify.py

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

* Apply PR feedback

* Add back schema

* Update homeassistant/components/sms/notify.py

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

* Fix pylint

* Remove platform schema

* Fix after merge

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-22 20:03:57 +02:00
J. Nick Koston
3938015c93 Add support for scanners that do not provide connectable devices (#77132) 2022-08-22 14:02:26 -04:00
Erik Montnemery
61ff1b786b Add a context variable holding a HomeAssistant reference (#76303)
* Add a context variable holding a HomeAssistant reference

* Move variable setup and update test

* Refactor

* Revert "Refactor"

This reverts commit 346d005ee67b9e27e05363d04a7f48eaf416a16b.

* Set context variable when creating HomeAssistant object

* Update docstring

* Update docstring

Co-authored-by: jbouwh <jan@jbsoft.nl>
2022-08-22 15:58:01 +02:00
epenet
58b9785485 Improve entity type hints [f] (#77143) 2022-08-22 13:36:33 +02:00
epenet
b108ddbfd3 Improve type hint in ephember climate entity (#77138) 2022-08-22 13:32:06 +02:00
epenet
d7685f869a Improve type hint in emby media-player entity (#77136) 2022-08-22 13:30:28 +02:00
epenet
6693cfd036 Improve type hint in ecobee climate entity (#77133) 2022-08-22 13:27:36 +02:00
epenet
9467b7d018 Improve type hint in eq3btsmart climate entity (#77131) 2022-08-22 13:27:02 +02:00
Franck Nijhof
5a0e4fa5ee Add hide attribute support to attribute selector (#77072)
Co-authored-by: Erik Montnemery <erik@montnemery.com>
2022-08-22 12:55:30 +02:00
epenet
5cb91d7cef Improve type hint in eddystone sensor entity (#77135) 2022-08-22 11:36:59 +02:00
epenet
361f82f5fa Improve type hints in epson media player (#77129) 2022-08-22 11:34:20 +02:00
Oscar Calvo
8cd04750fc Support send SMS using GSM alphabet (#76834)
* Fix #76283

Fix #76283

* Update notify.py

* Load SMS via discovery

* Put back send as ANSI
2022-08-22 09:22:43 +02:00
Khole
1940d9a377 Hive Add ability to trigger the alarm (#76985)
* Add ability to trigger the alarm

* Add mapping for sos state when triggered manually

* Update homeassistant/components/hive/alarm_control_panel.py

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

* Update homeassistant/components/hive/alarm_control_panel.py

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

* Fix linter issues

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2022-08-22 09:20:12 +02:00
epenet
ed60611b07 Improve type hint in cast media_player entity (#77025)
* Improve type hint in cast media_player entity

* Update docstring
2022-08-22 09:13:14 +02:00
Maciej Bieniek
e03eb238e2 Protect against an exception in Shelly climate platform (#77102)
Check if state in HVACMode
2022-08-22 09:03:32 +02:00
sophof
8b46174667 Add NZBGet speed limit sensor (#77104)
* Added sensor for download rate limit

* Added test for speed limit
2022-08-22 09:02:05 +02:00
Maciej Bieniek
cba2893862 Set quality scale to platinum in the NextDNS integration (#77099)
* Set quality scale to platinum

* Catch exceptions on when service calls

* Add tests
2022-08-21 22:08:57 -07:00
GitHub Action
eef7bdb44b [ci skip] Translation update 2022-08-22 00:27:12 +00:00
J. Nick Koston
f3e432c9c7 Reduce bluetooth logging noise when an adapter is recovered (#77109) 2022-08-21 12:03:14 -10:00
Franck Nijhof
bce74ee19e Merge branch 'master' into dev 2022-08-21 22:17:58 +02:00
J. Nick Koston
86e17865f9 Bump pySwitchbot to 0.18.14 (#77090) 2022-08-21 20:36:27 +02:00
Vincent Knoop Pathuis
90ef87f4a6 Add default polling for landis gyr heat meter (#77078) 2022-08-21 20:16:38 +02:00
Maciej Bieniek
ed7ceb0268 Bump NextDNS backend library (#77105) 2022-08-21 19:34:37 +02:00
Daniel
2f652901b6 Add long term statistics for tellduslive (#75789)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2022-08-21 19:31:49 +02:00
Gábor Gyenge
23ef3bf9ac Add UV switch to Pet Waterer in Tuya integration (#76718)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2022-08-21 19:31:34 +02:00
Artem Draft
ac56b3306a Fix covers moving state in HomeKit (#77101)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-21 06:54:37 -10:00
J. Nick Koston
5d8f5708f4 Bump qingping-ble to 0.3.0 (#77094) 2022-08-21 18:51:58 +02:00
Joakim Plate
4dad24bc51 Don't check for periodic ventilation in fan control (#77089)
Don't check for periodic ventilation
2022-08-21 09:48:23 +02:00
Joakim Plate
2689eddbe8 Make sure we always connect to last known bluetooth device in fjäråskupan (#77088)
Make sure we always connect to last known device
2022-08-21 09:47:04 +02:00
J. Nick Koston
9edb25887c Bump yalexs_ble to 1.6.4 (#77080) 2022-08-20 15:08:35 -10:00
GitHub Action
296e52d918 [ci skip] Translation update 2022-08-21 00:24:25 +00:00
J. Nick Koston
2d0b11f18e Add a new constant for multiple bluetooth watchdog failure hits (#77081) 2022-08-20 13:41:25 -10:00
J. Nick Koston
0bd4973134 Bump bluetooth-auto-recovery to 0.2.2 (#77082) 2022-08-20 13:41:09 -10:00
J. Nick Koston
ced8278e32 Auto recover when the Bluetooth adapter stops responding (#77043) 2022-08-20 11:58:14 -10:00
Jc2k
eb0828efdb Dont rely on config flow to monitor homekit_controller c# changes (#76861) 2022-08-20 10:58:59 -10:00
Kevin Addeman
8b1713a691 Add support for non-serialized devices (light, switch, cover, fan in RA3 Zones) (#75323)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-20 10:56:19 -10:00
mvn23
87be71ce6a Update pyotgw to 2.0.3 (#77073) 2022-08-20 20:18:27 +02:00
Franck Nijhof
453307e01a Add attribute support to state selector (#77071) 2022-08-20 13:30:38 -04:00
J. Nick Koston
18246bb8c8 Improve bluetooth logging when there are multiple adapters (#77007) 2022-08-20 13:22:42 -04:00
Franck Nijhof
49957c752b Add coordinator and number platform to LaMetric (#76766) 2022-08-20 19:06:35 +02:00
epenet
9ac01b8c9b Improve type hint in derivative sensor entity (#77038) 2022-08-20 11:27:01 +02:00
epenet
2c2e0cd4a0 Improve type hint in daikin climate entity (#77037) 2022-08-20 08:41:41 +02:00
epenet
c9fe1f44b8 Improve type hint in denon media player entity (#77036) 2022-08-20 08:40:51 +02:00
epenet
1edb68f8ba Improve type hint in darksky sensor entity (#77035) 2022-08-20 08:39:53 +02:00
epenet
f329428c7f Remove unused variable from directv media player (#77034) 2022-08-20 08:38:59 +02:00
epenet
b88e71762d Improve type hint in cups sensor entity (#77030) 2022-08-20 08:37:47 +02:00
epenet
09ab07921a Improve type hint in compensation sensor entity (#77027) 2022-08-20 08:34:47 +02:00
epenet
fea0ec4d4d Improve type hints in vacuum entities (#76561) 2022-08-20 08:33:27 +02:00
J. Nick Koston
52fbd50d3c Bump yalexs_ble to 1.6.2 (#77056) 2022-08-20 08:15:25 +02:00
J. Nick Koston
828bf63ac2 Bump pySwitchbot to 0.18.12 (#77040) 2022-08-20 08:14:47 +02:00
Klaas Schoute
5cb79696d0 Use data description for Pure Energie integration (#77047) 2022-08-20 08:04:17 +02:00
Klaas Schoute
0795d28ed5 Remove name option from config_flow for P1 Monitor (#77046) 2022-08-20 08:03:43 +02:00
epenet
3a3f41f3df Improve entity type hints [e] (#77041) 2022-08-20 07:52:55 +02:00
GitHub Action
21cd2f5db7 [ci skip] Translation update 2022-08-20 00:23:43 +00:00
Aidan Timson
a076d3faa0 Address late review of system bridge media source (#77032)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-20 00:27:33 +02:00
J. Nick Koston
98c9399ff0 Bump yalexs-ble to 1.6.0 (#77042) 2022-08-19 11:27:43 -10:00
epenet
bf7239c25d Improve entity type hints [d] (#77031) 2022-08-19 16:10:45 +02:00
Franck Nijhof
2d197fd59e Add state selector (#77024)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-08-19 09:24:53 -04:00
Stephan Uhle
d8392ef6ba Add edl21 sensor unit mapping for Hz (#76783)
Added sensor unit mapping for Hz.
2022-08-19 13:28:03 +02:00
Martin Hjelmare
d0986c7650 Type feedreader strictly (#76707)
* Type feedreader strictly

* Run hassfest
2022-08-19 13:20:41 +02:00
epenet
0f792eb92e Improve entity type hints [c] (#77023) 2022-08-19 13:02:46 +02:00
Rami Mosleh
80c1c11b1a Re-write tests for transmission (#76607)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-19 12:10:34 +02:00
epenet
039c071a80 Improve type hint in brottsplatskartan sensor entity (#77019) 2022-08-19 12:09:58 +02:00
Rami Mosleh
63dcd8ec08 Bump pydroid-ipcam to 2.0.0 (#76906)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-19 11:57:30 +02:00
Dave Atherton
324f5555ed Change growatt server URL (#76824)
Co-authored-by: Chris Straffon <c.m.straffon@gmail.com>
2022-08-19 11:51:27 +02:00
Jan Bouwhuis
90aba6c523 Add cv.deprecated to MQTT modern schema's too (#76884)
Add cv.deprcated to modern schema too
2022-08-19 11:12:47 +02:00
epenet
a5e151691c Fix acmeda battery sensor definition (#76928)
* Fix acmeda battery sensor definition

* Use float | int | None
2022-08-19 11:02:48 +02:00
Johannes Jonker
f966b48d84 Add newly-released Amazon Polly voices (#76934)
* Add newly-released Amazon Polly voices

Cf. announcement at https://aws.amazon.com/about-aws/whats-new/2022/06/amazon-polly-adds-male-neural-tts-voices-languages/ and updated voice list at https://docs.aws.amazon.com/polly/latest/dg/voicelist.html

* Fix inline comment spacing
2022-08-19 11:01:42 +02:00
epenet
61af82223f Improve type hint in blebox light entity (#77013)
* Improve type hint in blebox light entity

* Adjust

* Adjust supported_features

* Adjust effect_list property

* Improve base class
2022-08-19 10:58:51 +02:00
Robert Hillis
cbeaea98d1 Remove deprecated YAML configuration from Skybell (#76940) 2022-08-19 10:56:01 +02:00
Aaron Bach
c3305caabe Provide slight speedup to RainMachine device lookup during service call (#76944)
Fix
2022-08-19 10:41:33 +02:00
Rami Mosleh
655e2f92ba Add strict typing to mikrotik (#76974)
add strict typing to mikrotik
2022-08-19 10:39:14 +02:00
epenet
801f7d1d5f Adjust type hints in airtouch4 climate entity (#76987) 2022-08-19 10:33:34 +02:00
epenet
d70bc68b93 Improve type hint in brottsplatskartan sensor entity (#77015) 2022-08-19 10:30:34 +02:00
epenet
4de50fc471 Improve type hint in bsblan climate entity (#77014) 2022-08-19 10:09:20 +02:00
epenet
dedf063e43 Improve entity type hints [b] (#77012) 2022-08-19 09:54:13 +02:00
Aaron Bach
dd109839b9 Provide slight speedup to Guardian device lookup during service call (#77004)
* Provide slight speedup to Guardian device lookup during service call

* Messages
2022-08-19 09:39:48 +02:00
Erik Montnemery
6d49362573 Revert rename of confirm step in zha config flow (#77010)
* Revert rename of confirm step in zha config flow

* Update tests
2022-08-19 09:33:57 +02:00
Marc Mueller
1faabb8f40 Add timeouts to requests calls (#76851) 2022-08-19 08:58:18 +02:00
rikroe
4eb4146e29 Remove unneeded charging_status attribute in bmw_connected_drive binary sensor (#74921)
* Use `charging_status.value` in attribute for BMW binary sensor

* Remove `charging_status` attribute

Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2022-08-19 08:36:46 +02:00
Rami Mosleh
72a4f8af3d Add config flow to pushover (#74500)
* Add config flow to `pushover`

* Add tests for reauth

* add deprecated yaml issue

* address comments

* fix test error, other fixes

* update translations
2022-08-19 08:07:32 +02:00
Kevin Addeman
09aaf45f0a Fix lutron caseta Sunnata Keypad support (#75324)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-08-18 16:23:20 -10:00
J. Nick Koston
cd59d3ab81 Add support for multiple Bluetooth adapters (#76963) 2022-08-18 21:41:07 -04:00
GitHub Action
a434d755b3 [ci skip] Translation update 2022-08-19 00:27:31 +00:00
epenet
f323c5e880 Adjust type hints in android_ip_webcam switch entity (#76989) 2022-08-18 22:49:59 +02:00
epenet
009a573324 Adjust type hints in alpha-vantage sensor entity (#76988) 2022-08-18 22:48:49 +02:00
epenet
7a45739104 Adjust type hints in aquostv media player entity (#76990) 2022-08-18 22:47:56 +02:00
Klaas Schoute
b8d8d5540e P1 Monitor add water meter support (#74004) 2022-08-18 22:35:28 +02:00
epenet
eec45c1208 Adjust type hints in august sensor entity (#76992) 2022-08-18 22:21:19 +02:00
Erik Montnemery
bb74730e96 Add support for USB dongles to the hardware integration (#76795)
* Add support for USB dongles to the hardware integration

* Update hardware integrations

* Adjust tests

* Add USB discovery for SkyConnect 1.0

* Improve test coverage

* Apply suggestions from code review

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

* Fix frozen dataclass shizzle

* Adjust test

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-08-18 21:52:12 +02:00
epenet
fb5a67fb1f Add vacuum checks to pylint plugin (#76560) 2022-08-18 19:22:08 +02:00
Joakim Sørensen
f5487b3a7e Bump pyhaversion from 22.4.1 to 22.8.0 (#76994) 2022-08-18 18:03:10 +02:00
Paulus Schoutsen
6e92931087 Add file selector and file upload integration (#76672) 2022-08-18 12:02:12 -04:00
IceBotYT
92a9011953 Code quality changes for LaCrosse View (#76265) 2022-08-18 17:17:58 +02:00
Erik Montnemery
21ebd1f612 Simplify ZHA config entry title (#76991) 2022-08-18 10:58:44 -04:00
Erik Montnemery
88a5b90489 Minor improvement of zha test (#76993) 2022-08-18 16:52:41 +02:00
Vincent Knoop Pathuis
7a497c1e6e Add Landis+Gyr Heat Meter integration (#73363)
* Add Landis+Gyr Heat Meter integration

* Add contant for better sensor config

* Add test for init

* Refactor some of the PR suggestions in config_flow

* Apply small fix

* Correct total_increasing to total

* Add test for restore state

* Add MWh entity that can be added as gas on the energy dashoard

* Remove GJ as unit

* Round MWh to 5 iso 3 digits

* Update homeassistant/components/landisgyr_heat_meter/const.py

* Update CODEOWNERS

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2022-08-18 16:40:04 +02:00
epenet
65eb1584f7 Improve entity type hints [a] (#76986) 2022-08-18 15:56:52 +02:00
epenet
24f1287bf9 Improve type hints in homeassistant scene (#76930) 2022-08-18 15:39:56 +02:00
epenet
c7301a449b Add switch checks to pylint plugin (#76909) 2022-08-18 14:48:23 +02:00
Erik Montnemery
60c8d95a77 Remove white_value support from light (#76926) 2022-08-18 08:21:05 -04:00
Paulus Schoutsen
c894ddeb95 Merge pull request #76964 from home-assistant/rc 2022-08-18 08:09:01 -04:00
Yasser Saleemi
f0deaa33a0 Include moonsighting calc for islamic_prayer_times (#75595) 2022-08-18 14:07:58 +02:00
Franck Nijhof
c212fe7ca5 Adjust version comparison in HA Cloud account linking (#76978) 2022-08-18 14:06:50 +02:00
Charles Garwood
1aef60c81c Add screen on/off switch to Fully Kiosk Browser integration (#76957) 2022-08-18 13:33:38 +02:00
epenet
07ba3c1383 Add update checks to pylint plugin (#76912) 2022-08-18 13:27:05 +02:00
Erik Montnemery
a79f578b1d Add issue_domain parameter to repairs.create_issue (#76972) 2022-08-18 12:45:24 +02:00
Maciej Bieniek
681b726128 Add parental control switches to NextDNS integration (#76559)
* Add new switches

* Make new switches disabled by default

* Update tests
2022-08-18 11:40:24 +02:00
Franck Nijhof
6e9c67c203 Update coverage to 6.4.4 (#76907) 2022-08-18 10:52:55 +02:00
Charles Garwood
6fbdc8e339 Add Fully Kiosk Browser number platform (#76952)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2022-08-18 10:51:28 +02:00
epenet
4a84a8caa9 Use Platform enum (#76967) 2022-08-18 10:22:49 +02:00
Paulus Schoutsen
d5b6ccab07 Bumped version to 2022.8.6 2022-08-17 23:09:00 -04:00
Robert Hillis
b9964c73ed Pass the real config for Slack (#76960) 2022-08-17 23:08:57 -04:00
Robert Hillis
341bf8eff4 Pass the real config for Discord (#76959) 2022-08-17 23:08:56 -04:00
J. Nick Koston
34cb79408a Fix race in notify setup (#76954) 2022-08-17 23:08:55 -04:00
epenet
c0b4eb35fe Fix acmeda set cover tilt position (#76927) 2022-08-17 23:08:55 -04:00
Erik Montnemery
b4cb9a521a Correct restoring of mobile_app sensors (#76886) 2022-08-17 23:08:54 -04:00
starkillerOG
c1d02388d1 Bump pynetgear to 0.10.7 (#76754) 2022-08-17 23:08:53 -04:00
Mick Vleeshouwer
8e9313840e Fix Overkiz startup order to prevent unnamed device showing up (#76695)
Gateways should be added first, before platform setup
2022-08-17 23:08:53 -04:00
rikroe
1f13e332ac Fix displayed units for BMW Connected Drive (#76613)
* Fix displayed units

* Add tests for unit conversion

* Streamline test config entry init

* Refactor test to pytest fixture

* Fix renamed mock

Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2022-08-17 23:08:52 -04:00
J. Nick Koston
82b6deeb79 Bump qingping-ble to 0.2.4 (#76958) 2022-08-17 22:43:22 -04:00
Robert Hillis
6ab9652b60 Pass the real config for Discord (#76959) 2022-08-17 22:41:59 -04:00
Robert Hillis
280ae91ba1 Pass the real config for Slack (#76960) 2022-08-17 22:41:28 -04:00
J. Nick Koston
03fac0c529 Fix race in notify setup (#76954) 2022-08-17 22:37:47 -04:00
Joakim Plate
3eaa1c30af Restore fixed step fan speeds for google assistant (#76871) 2022-08-17 22:15:48 -04:00
GitHub Action
d2e5d91eba [ci skip] Translation update 2022-08-18 00:25:40 +00:00
Franck Nijhof
71cdc1645b Refactor LaMetric integration (#76759)
* Refactor LaMetric integration

* Use async_setup

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

* use async_get_service

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

* Update tests/components/lametric/conftest.py

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

* Update tests/components/lametric/conftest.py

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

* Pass hassconfig

* Remove try/catch

* Fix passing hassconfig

* Use menu

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-18 00:49:11 +02:00
J. Nick Koston
071cae2c0b Implement auto switching when there are multiple bluetooth scanners (#76947) 2022-08-17 12:38:04 -10:00
J. Nick Koston
7bf13167d8 Prevent bluetooth scanner from being shutdown by BleakClient not using BLEDevice (#76945) 2022-08-17 11:42:12 -10:00
J. Nick Koston
3bcc274dfa Rework bluetooth to support scans from multiple sources (#76900) 2022-08-17 10:51:56 -10:00
Christopher Bailey
ff7ef7e526 Bump version of pyunifiprotect to 4.1.2 (#76936) 2022-08-17 18:45:34 +02:00
epenet
49c793b1a2 Add scene checks to pylint plugin (#76908) 2022-08-17 18:44:08 +02:00
epenet
27b5ebb9d3 Add RestoreSensor to sensor checks in pylint (#76916) 2022-08-17 18:43:28 +02:00
epenet
fc6c66fe6c Add RestoreEntity to button checks in pylint (#76932) 2022-08-17 18:42:35 +02:00
René Klomp
a63a3b96b7 Bump pysma to 0.6.12 (#76937) 2022-08-17 17:53:21 +02:00
epenet
ce07748979 Add water_heater checks to pylint plugin (#76911) 2022-08-17 17:50:00 +02:00
epenet
171893b484 Fix acmeda set cover tilt position (#76927) 2022-08-17 17:00:30 +02:00
epenet
35d01d7939 Add RestoreNumber to number checks in pylint (#76933) 2022-08-17 16:58:42 +02:00
epenet
673a72503d Improve type hints in water_heater (#76910)
* Improve type hints in water_heater

* Adjust melcloud
2022-08-17 16:58:17 +02:00
epenet
8619df5294 Improve type hints in utility_meter select entity (#76447) 2022-08-17 16:38:41 +02:00
Charles Garwood
79ab13d118 Add Fully Kiosk Browser switch platform (#76931) 2022-08-17 16:30:20 +02:00
epenet
eec0f3351a Add weather checks to pylint plugin (#76915) 2022-08-17 16:27:47 +02:00
Diogo Gomes
ef6b6e7850 Remove deprecated utility_meter entity (#76480)
* remove deprecated utility_meter domain

* remove select_tariff
2022-08-17 16:25:34 +02:00
Charles Garwood
924704e0d1 Fix fully_kiosk button test docstring and function name (#76935)
Fix button test docstring and function name
2022-08-17 10:22:12 -04:00
Erik Montnemery
05e33821fd Remove white_value support from group light (#76924) 2022-08-17 08:01:50 -04:00
Erik Montnemery
d034ed1fc2 Remove some error prone code from Alexa tests (#76917) 2022-08-17 07:54:54 -04:00
Erik Montnemery
426a620084 Remove deprecated white_value support from template light (#76923) 2022-08-17 07:53:56 -04:00
Erik Montnemery
4cc1428eea Add support for color_mode white to MQTT JSON light (#76918) 2022-08-17 13:07:50 +02:00
Erik Montnemery
0ed265e2be Correct restoring of mobile_app sensors (#76886) 2022-08-17 10:53:05 +02:00
Franck Nijhof
b4323108b1 Update cryptography to 37.0.4 (#76853) 2022-08-17 09:41:50 +02:00
mkmer
5ef6b5a300 Add BLE sensor to Aladdin_connect (#76221)
* Add BLE sensor
Default Enable BLE & Battery for Model 02

* recommended changes

* Recommended changes

Model 02 -> 01 (oops)
2x async_block_till_done() not needed.
2022-08-17 09:09:19 +02:00
Charles Garwood
7e366a78e6 Add Fully Kiosk Browser button platform (#76894)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2022-08-17 08:36:56 +02:00
J. Nick Koston
ee1b08bbd6 Bump govee-ble to 0.16.0 (#76882) 2022-08-16 21:21:47 -04:00
Franck Nijhof
7a82279af8 Update hass-nabucasa to 0.55.0 (#76892) 2022-08-16 21:20:47 -04:00
Marc Mueller
d73754d292 Fix TypeAlias + TypeVar names (#76897) 2022-08-16 21:19:55 -04:00
Franck Nijhof
ec1b133201 Add DHCP updates to Fully Kiosk (#76896) 2022-08-16 21:19:23 -04:00
J. Nick Koston
6f3cdb6db1 Reorganize bluetooth integration to prepare for remote and multi-adapter support (#76883) 2022-08-16 14:52:53 -10:00
Paulus Schoutsen
8c62713af3 Bump frontend to 20220816.0 (#76895) 2022-08-16 20:49:27 -04:00
GitHub Action
683132ae19 [ci skip] Translation update 2022-08-17 00:26:42 +00:00
Charles Garwood
8070875ff4 Add Fully Kiosk Browser sensor platform (#76887) 2022-08-17 00:20:30 +02:00
Paulus Schoutsen
59878ea1ef Indieauth updates (#76880) 2022-08-16 17:17:10 -04:00
rikroe
cb2799bc37 Fix displayed units for BMW Connected Drive (#76613)
* Fix displayed units

* Add tests for unit conversion

* Streamline test config entry init

* Refactor test to pytest fixture

* Fix renamed mock

Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2022-08-16 21:36:33 +02:00
Charles Garwood
1e9ede25ad Add Fully Kiosk Browser integration with initial binary sensor platform (#76737)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2022-08-16 20:08:35 +02:00
starkillerOG
73ad34244e Bump pynetgear to 0.10.7 (#76754) 2022-08-16 19:49:49 +02:00
epenet
5736ba6230 Add remote checks to pylint plugin (#76875) 2022-08-16 19:24:00 +02:00
epenet
2630ff8fce Add sensor checks to pylint plugin (#76876) 2022-08-16 19:22:15 +02:00
Zach Berger
5331af2143 Capture local Awair firmware version to DeviceInfo (#76700) 2022-08-16 13:17:53 -04:00
Igor Pakhomov
65f86ce44f Add additional select for dmaker.airfresh.t2017 to xiaomi_miio (#67058) 2022-08-16 17:30:56 +02:00
Franck Nijhof
d50b5cebee Various improvement for JustNimbus (#76858)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-16 17:10:11 +02:00
Franck Nijhof
93a72982ce Update debugpy to 1.6.3 (#76849) 2022-08-16 17:09:50 +02:00
Franck Nijhof
1a2a20cfc5 Update google-cloud-texttospeech to 2.12.1 (#76854) 2022-08-16 17:09:00 +02:00
Joakim Sørensen
2ab4817d81 Use secure in Speedtest (#76852) 2022-08-16 08:05:09 -07:00
Erik Montnemery
73001e29ff Remove deprecated white_value support from MQTT light (#76848)
* Remove deprecated white_value support from MQTT light

* Remove deprecated white_value support from MQTT JSON light

* Remove deprecated white_value support from MQTT template light
2022-08-16 16:47:21 +02:00
Franck Nijhof
63d71457aa Type BrowseMedia children as a covariant (#76869) 2022-08-16 16:31:09 +02:00
Franck Nijhof
2e191d6a60 Update sentry-sdk to 1.9.5 (#76857) 2022-08-16 16:30:04 +02:00
Franck Nijhof
3d567d2c1b Update numpy to 1.23.2 (#76855) 2022-08-16 16:18:40 +02:00
Marc Mueller
563ec67d39 Add strict typing for auth (#75586) 2022-08-16 10:10:37 -04:00
Franck Nijhof
735dec8dde Process UniFi Protect review comments (#76870) 2022-08-16 15:53:16 +02:00
Aidan Timson
3cb062dc13 Add System Bridge Media Source (#72865) 2022-08-16 09:48:01 -04:00
Franck Nijhof
00c0ea8869 Remove stale debug prints (#76865) 2022-08-16 09:33:33 -04:00
Martin Hjelmare
45b253f65f Clean awair debug print (#76864) 2022-08-16 14:58:55 +02:00
Paulus Schoutsen
c7d46bc719 Improve Awair config flow (#76838) 2022-08-16 14:30:07 +02:00
jonasrickert
3e1c9f1ac7 Add Rollotron DECT 1213 to fritzbox (#76386) 2022-08-16 11:49:31 +02:00
Jc2k
a663445f25 Bump aiohomekit to 1.3.0 (#76841) 2022-08-16 10:34:17 +01:00
Marc Mueller
93630cf1f8 Add missing entry for SOURCE_TYPE_* to hass-imports plugin (#76829) 2022-08-16 11:17:10 +02:00
Marc Mueller
91005f4694 Update pylint plugin to use TriggerActionType (#76819) 2022-08-16 11:16:33 +02:00
Mick Vleeshouwer
7ec54edc69 Fix Overkiz startup order to prevent unnamed device showing up (#76695)
Gateways should be added first, before platform setup
2022-08-16 07:54:26 +02:00
Marc Mueller
b8f83f6c70 Use BinarySensorDeviceClass instead of deprecated constants (#76830) 2022-08-16 07:40:33 +02:00
Paulus Schoutsen
795ed9fbf6 Merge pull request #76835 from home-assistant/rc 2022-08-15 21:59:42 -04:00
Paulus Schoutsen
ec4ff824ad Bumped version to 2022.8.5 2022-08-15 21:09:58 -04:00
J. Nick Koston
f4a09455c0 Fix lifx homekit discoveries not being ignorable or updating the IP (#76825) 2022-08-15 21:09:48 -04:00
Erik Montnemery
bf88448ffd Correct referenced entities and devices for event triggers (#76818) 2022-08-15 21:09:48 -04:00
J. Nick Koston
bae01f188a Fix bluetooth callback registration not surviving a reload (#76817) 2022-08-15 21:09:47 -04:00
J. Nick Koston
d142618297 Bump aiohomekit to 1.2.11 (#76784) 2022-08-15 21:09:46 -04:00
Frank
d91e9f7f98 Bump homeconnect to 0.7.2 (#76773) 2022-08-15 21:09:45 -04:00
J. Nick Koston
70541eac61 Fix stale data with SensorPush sensors (#76771) 2022-08-15 21:09:45 -04:00
Marcel van der Veldt
30a5e396d3 Bump aiohue to 4.5.0 (#76757) 2022-08-15 21:09:44 -04:00
rikroe
ae99b53757 Bump bimmer_connected to 0.10.2 (#76751)
Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2022-08-15 21:09:43 -04:00
J. Nick Koston
71a6128c65 Fix bad data with inkbird bbq sensors (#76739) 2022-08-15 21:09:43 -04:00
J. Nick Koston
69ea07f29d Bump aiohomekit to 1.2.10 (#76738) 2022-08-15 21:09:42 -04:00
Marvin Wichmann
41faf9092a Update xknx to 1.0.0 🎉 (#76734) 2022-08-15 21:09:41 -04:00
starkillerOG
ef6285800f Motion Blinds fix OperationNotAllowed (#76712)
fix OperationNotAllowed

homeassistant.config_entries.OperationNotAllowed
2022-08-15 21:09:41 -04:00
Allen Porter
bd40d6f332 Fix google calendar disabled entity handling (#76699)
Fix google calendar disable entity handling
2022-08-15 21:09:40 -04:00
J. Nick Koston
d10e2336e2 Bump pySwitchbot to 0.18.10 to handle empty data and disconnects (#76684)
* Bump pySwitchbot to 0.18.7 to handle empty data

Fixes #76621

* bump again

* bump

* bump for rssi on disconnect logging
2022-08-15 21:09:39 -04:00
J. Nick Koston
875de80b41 Bump pySwitchbot to 0.18.6 to fix disconnect race (#76656) 2022-08-15 21:09:38 -04:00
J. Nick Koston
666e938b14 Bump pySwitchbot to 0.18.5 (#76640) 2022-08-15 21:09:37 -04:00
hansgoed
972aad0e99 🐛 Fix "The request content was malformed" error in home_connect (#76411) 2022-08-15 21:09:36 -04:00
Aidan Timson
872b2f56ac Update systembridgeconnector to 3.4.4 (#75362)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-15 21:09:36 -04:00
J. Nick Koston
b43242ef0d Fix lifx homekit discoveries not being ignorable or updating the IP (#76825) 2022-08-15 21:09:13 -04:00
GitHub Action
ff3fd4c29d [ci skip] Translation update 2022-08-16 00:30:51 +00:00
Erik Montnemery
1c1b23ef69 Correct referenced entities and devices for event triggers (#76818) 2022-08-15 17:35:30 -04:00
Marc Mueller
f400a404cd Update pylint to 2.14.5 (#76821) 2022-08-15 23:27:08 +02:00
J. Nick Koston
4890785299 Fix bluetooth callback registration not surviving a reload (#76817) 2022-08-15 10:19:37 -10:00
Marc Mueller
d8916c3e47 Use TriggerActionType [a-k] (#76812) 2022-08-15 20:26:49 +02:00
Marc Mueller
badbc414fb Use TriggerActionType [w-z] (#76814) 2022-08-15 20:15:57 +02:00
Marc Mueller
702f8180a6 Use TriggerActionType [l-t] (#76813) 2022-08-15 14:00:42 -04:00
Marcel van der Veldt
223ea03492 Fix Hue events for relative_rotary devices (such as Hue Tap Dial) (#76758)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2022-08-15 13:32:44 -04:00
Marc Mueller
453cbc3e14 Use TriggerActionType [core, t-z] (#76808) 2022-08-15 18:15:20 +02:00
Marc Mueller
7360cce1c2 Use TriggerActionType [core, homeassistant] (#76805) 2022-08-15 18:06:16 +02:00
Marc Mueller
19cf6089d6 Use TriggerActionType [core, a-d] (#76803) 2022-08-15 17:44:12 +02:00
Marc Mueller
1ebac6c7ca Use TriggerActionType [core, r-t] (#76807) 2022-08-15 17:40:16 +02:00
Marc Mueller
af002d9dc4 Use TriggerActionType [core, l-m] (#76806) 2022-08-15 17:39:55 +02:00
Marc Mueller
e39672078d Use TriggerActionType [core, d-h] (#76804) 2022-08-15 17:39:14 +02:00
hansgoed
1557a7c36d 🐛 Fix "The request content was malformed" error in home_connect (#76411) 2022-08-15 15:07:39 +02:00
Aidan Timson
64898af58e Update systembridgeconnector to 3.4.4 (#75362)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-15 15:00:29 +02:00
Marc Mueller
c93d9d9a90 Move AutomationActionType to helpers.trigger (#76790) 2022-08-15 08:37:11 -04:00
rikroe
4239757c2c Bump bimmer_connected to 0.10.2 (#76751)
Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2022-08-15 13:55:23 +02:00
Álvaro Fernández Rojas
cf867730cd Update aioqsw to v0.2.2 (#76760) 2022-08-15 12:12:31 +02:00
Álvaro Fernández Rojas
f443edfef4 Enable statistics for WLED WiFi RSSI/Signal sensors (#76789) 2022-08-15 11:49:22 +02:00
Franck Nijhof
8f0f734c28 Fix entity category for LIFX buttons (#76788) 2022-08-15 11:35:53 +02:00
Marcel van der Veldt
669e6bec39 Bump aiohue to 4.5.0 (#76757) 2022-08-15 11:23:38 +02:00
Frank
f4c23ad68d Bump homeconnect to 0.7.2 (#76773) 2022-08-15 10:44:14 +02:00
epenet
6243f24b05 Add media-player checks to pylint plugin (#76675)
* Add media-player checks to pylint plugin

* Fix invalid hints

* Add tests

* Adjust tests

* Add extra test

* Adjust regex

* Cleanup comment

* Move media player tests up
2022-08-15 09:48:03 +02:00
Aaron Bach
c9feda1562 Fix missing state classes on various Ambient PWS entities (#76683) 2022-08-14 21:13:11 -10:00
J. Nick Koston
68979009e3 Bump aiohomekit to 1.2.11 (#76784) 2022-08-14 20:54:49 -10:00
J. Nick Koston
cf19536c43 Fix stale data with SensorPush sensors (#76771) 2022-08-14 20:48:28 -10:00
J. Nick Koston
9dedba4843 Fix bad data with inkbird bbq sensors (#76739) 2022-08-14 20:48:06 -10:00
Jan Bouwhuis
161e533c5f Remove MQTT climate support for hold and away modes (#76299)
Remove support for hold and away modes
2022-08-15 08:27:37 +02:00
Jan Bouwhuis
f72cfef7be Fix MQTT camera encoding (#76124)
* Fix MQTT camera encoding

* Reduce code

* Add test for using image_encoding parameter

* Move deprecation check to validation

* Dependency

* Set correct strings and log warning

* Rename constant

* Use better issue string identifier

* Revert unwanted change to hassio test

* Avoid term `deprecated` in issue description

* Revert changes using the repairs API

* Add a notice when work-a-round will be removed

* Update homeassistant/components/mqtt/camera.py

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

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2022-08-15 08:26:17 +02:00
epenet
4f9e6d2407 Improve vacuum type hints (#76747)
* Improve vacuum type hints

* Black

* Black

* Adjust

* One more
2022-08-15 08:23:05 +02:00
J. Nick Koston
8a85881ca0 Bump pySwitchbot to 0.18.10 to handle empty data and disconnects (#76684)
* Bump pySwitchbot to 0.18.7 to handle empty data

Fixes #76621

* bump again

* bump

* bump for rssi on disconnect logging
2022-08-15 07:53:27 +02:00
epenet
aadecdf6cb Add type hints to MediaPlayerEntity (#76743)
* Add media-player checks to pylint plugin

* Fix invalid hints

* Add tests

* Adjust tests

* Add extra test

* Adjust regex

* Cleanup comment

* Revert

* Revert

* Update homeassistant/components/media_player/__init__.py

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

* Update homeassistant/components/denonavr/media_player.py

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

Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
2022-08-15 00:54:25 +03:00
Christopher Bailey
7fc2d9e087 Persist previous mic/record values for UniFi Protect privacy mode (#76472) 2022-08-14 10:57:25 -10:00
J. Nick Koston
5f827f4ca6 Bump aiohomekit to 1.2.10 (#76738) 2022-08-13 21:56:57 -10:00
J. Nick Koston
f55c274d83 Add Qingping integration (BLE) (#76598)
* Add Qingping integration (BLE)

* commit the binary sensor

* add binary_sensor file

* Update homeassistant/components/qingping/sensor.py

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

* Update homeassistant/components/qingping/config_flow.py

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

* Update homeassistant/components/qingping/sensor.py

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

* fix const CONCENTRATION_MICROGRAMS_PER_CUBIC_METER

* cover case where config flow is started, another path adds it, and then they resume

* fix missed values

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-14 09:00:27 +02:00
Marvin Wichmann
0d45cef6f6 Update xknx to 1.0.0 🎉 (#76734) 2022-08-14 06:31:39 +02:00
GitHub Action
bec8e544f4 [ci skip] Translation update 2022-08-14 00:25:47 +00:00
J. Nick Koston
b4a840c00d Avoid creating door sensor when it does no exist on older yalexs_ble locks (#76710) 2022-08-13 12:47:35 -10:00
Marc Mueller
bac44cf473 Enable no_implicit_optional globally [mypy] (#76723) 2022-08-13 19:33:57 +02:00
dependabot[bot]
4fc1d59b74 Bump actions/cache from 3.0.6 to 3.0.7 (#76648)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-13 18:55:09 +02:00
Marc Mueller
67e339c67b Fix implicit Optional [t-z] (#76722) 2022-08-13 18:47:17 +02:00
Marc Mueller
5db1fec99e Fix implicit Optional [p-s] (#76721) 2022-08-13 18:46:49 +02:00
Marc Mueller
5a046ae7be Fix implicit Optional [a-n] (#76720) 2022-08-13 18:46:34 +02:00
Marc Mueller
cf7c716bda Fix implicit Optional [core] (#76719) 2022-08-13 18:46:08 +02:00
rikroe
a70252a243 Log not allowed attributes only once in BMW binary sensors (#76708)
* Log not allowed keys only once

* Fix spelling

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

Co-authored-by: rikroe <rikroe@users.noreply.github.com>
Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com>
2022-08-13 16:05:23 +02:00
starkillerOG
db03c273f1 Netgear skip devices withouth mac (#76626)
skip devices withouth mac
2022-08-13 15:17:49 +02:00
Allen Porter
b969ed00b9 Fix google calendar disabled entity handling (#76699)
Fix google calendar disable entity handling
2022-08-13 15:02:32 +02:00
starkillerOG
bcc0a92e2b Motion Blinds fix OperationNotAllowed (#76712)
fix OperationNotAllowed

homeassistant.config_entries.OperationNotAllowed
2022-08-13 14:39:04 +02:00
J. Nick Koston
93a80d8fc3 Bump yalexs-ble to 1.4.0 (#76685) 2022-08-13 10:36:30 +02:00
Mick Vleeshouwer
9181b0171a Bump pyoverkiz to 1.5.0 (#76682) 2022-08-13 10:35:13 +02:00
Maciej Bieniek
e44b1fa98c Bump nettigo-air-monitor to 1.4.2 (#76670) 2022-08-13 10:32:58 +02:00
rikroe
c9c84639ad Remove charging_time_label sensor in BMW Connected Drive (#76616)
Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2022-08-13 10:30:39 +02:00
J. Nick Koston
58883feaf6 Small cleanups to Yale Access Bluetooth (#76691)
- Abort the discovery flow if the user has already
  started interacting with a user flow or bluetooth
  discovery

- Remove docs_url from the flow

- Fix useless return
2022-08-13 09:55:48 +02:00
GitHub Action
6e03b12a93 [ci skip] Translation update 2022-08-13 00:25:00 +00:00
Paulus Schoutsen
2f29f38ec6 Streamline discovery flow callback (#76666) 2022-08-12 16:42:41 -07:00
starkillerOG
2e40fc7288 Bump motionblinds to 0.6.12 (#76665) 2022-08-12 16:39:12 -07:00
Paulus Schoutsen
e2fae855e7 Merge pull request #76679 from home-assistant/rc 2022-08-12 14:48:45 -04:00
Paulus Schoutsen
fdde4d540d Bumped version to 2022.8.4 2022-08-12 14:04:21 -04:00
rikroe
5606b4026f Fix non-awaited coroutine in BMW notify (#76664)
Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2022-08-12 14:04:18 -04:00
J. Nick Koston
84b8029c6a Add missing _abort_if_unique_id_configured to ble integrations (#76624) 2022-08-12 14:04:17 -04:00
Martin Hjelmare
294cc3ac6e Fix evohome preset modes (#76606) 2022-08-12 14:04:16 -04:00
J. Nick Koston
99c20223e5 Fix Govee 5181 with old firmware (#76600) 2022-08-12 14:04:16 -04:00
Antonino Piazza
451ab47caa Improve code quality in huawei_lte (#76583)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-12 14:04:15 -04:00
Franck Nijhof
738423056e Fix Spotify deviding None value in current progress (#76581) 2022-08-12 14:04:14 -04:00
Jc2k
a3ea881a01 Fix homekit_controller not noticing ip and port changes that zeroconf has found (#76570) 2022-08-12 14:04:13 -04:00
Dave
2dcc886b2f Replaces aiohttp.hdrs CONTENT_TYPE with plain string for the Swisscom integration (#76568) 2022-08-12 14:04:12 -04:00
puddly
6e688b2b7f Bump ZHA dependencies (#76565) 2022-08-12 14:04:12 -04:00
Robert Hillis
e033c8b380 Migrate Abode to new entity naming style (#76673) 2022-08-12 13:14:41 -04:00
rikroe
0293db343f Allow only known attrs for BMW binary sensors (#76663)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2022-08-12 09:45:28 -04:00
J. Nick Koston
eeb9a9f058 Make sure all discovery flows are using the helper (#76641) 2022-08-12 09:25:23 -04:00
rikroe
a86397cc10 Fix non-awaited coroutine in BMW notify (#76664)
Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2022-08-12 09:19:16 -04:00
J. Nick Koston
563e899d2e Bump yalexs_ble to 1.3.1 to fix disconnect race (#76657) 2022-08-12 08:58:59 -04:00
J. Nick Koston
795e7f5707 Bump pySwitchbot to 0.18.6 to fix disconnect race (#76656) 2022-08-12 08:58:48 -04:00
Rami Mosleh
cafc6ca895 Fix typing in glances config flow (#76654)
fix typing in config_flow
2022-08-12 11:42:42 +02:00
Jc2k
46369b274b Initial binary_sensor support for Xiaomi BLE (#76635) 2022-08-11 22:25:24 -10:00
Rami Mosleh
86b968bf79 Migrate Glances to new entity naming style (#76651)
* Migrate Glances to new entity naming style

* minor fixes
2022-08-12 09:50:27 +02:00
J. Nick Koston
828b97f460 Bump pySwitchbot to 0.18.5 (#76640) 2022-08-11 16:03:31 -10:00
David F. Mulcahey
3937ac2ca3 Track code coverage for ZHA sensor entities (#76617)
* Track code coverage for ZHA sensor entities

* remove correct entry
2022-08-11 21:13:27 -04:00
J. Nick Koston
75ca80428d Add support for August locks to Yale Access Bluetooth (#76625) 2022-08-11 21:12:25 -04:00
J. Nick Koston
4a5a039984 Use async_timeout instead of asyncio.wait_for in switchbot (#76630) 2022-08-11 21:10:59 -04:00
J. Nick Koston
14e6c84104 Bump yalexs-ble to 1.2.0 (#76631)
Implements service caching

Speeds up lock and unlock operations

Changelog: https://github.com/bdraco/yalexs-ble/compare/v1.1.3...v1.2.0
2022-08-11 21:10:14 -04:00
J. Nick Koston
ae9ab48d05 Downgrade bluetooth_le_tracker timeout message to debug (#76639)
Fixes #76558
2022-08-11 21:09:27 -04:00
GitHub Action
7c81f790a7 [ci skip] Translation update 2022-08-12 00:23:47 +00:00
J. Nick Koston
4f064268b0 Add missing _abort_if_unique_id_configured to ble integrations (#76624) 2022-08-11 13:55:52 -10:00
Jc2k
51ca74b3d1 Fix titles for discoveries and device names in xiaomi_ble (#76618) 2022-08-11 23:24:55 +01:00
Franck Nijhof
f0827a20c3 Add schedule helper (#76566)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-08-11 16:14:01 +02:00
Zach Berger
ebbff7b60e Add Awair Local API support (#75535) 2022-08-11 09:01:35 -04:00
Martin Hjelmare
078a4974e1 Fix evohome preset modes (#76606) 2022-08-11 08:53:40 -04:00
epenet
66b742f110 Improve type hints in yeelight lights (#76018)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2022-08-11 12:41:24 +02:00
J. Nick Koston
eb0b6f3d75 Fix Govee 5181 with old firmware (#76600) 2022-08-11 11:08:03 +02:00
J. Nick Koston
b5787fe8fa Add RSSI sensors to Yale Access Bluetooth (#76590) 2022-08-11 11:05:58 +02:00
Antonino Piazza
9919dd500d Improve code quality in huawei_lte (#76583)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-11 11:03:12 +02:00
Franck Nijhof
a30dfd9f3e Add class attribute for capability attributes in entity base class (#76599) 2022-08-11 10:34:58 +02:00
Jc2k
6ad2708946 Support polling the MiFlora battery (#76342) 2022-08-11 10:10:18 +02:00
epenet
7fc2a73c88 Improve type hints in harmony (#76445) 2022-08-11 09:50:35 +02:00
J. Nick Koston
8f0ade7a68 Bump yalexs-ble to 1.1.3 (#76595) 2022-08-11 09:34:23 +02:00
J. Nick Koston
bf899101ce Update offline keys from august cloud for august branded yale locks (#76577) 2022-08-10 16:21:41 -10:00
Franck Nijhof
4c70129427 Improve state attributes of CityBikes (#76578) 2022-08-10 21:36:13 -04:00
Franck Nijhof
420084f6f1 Update sentry-sdk to 1.9.3 (#76573) 2022-08-10 21:35:13 -04:00
Jc2k
5523b6fc9f Fix homekit_controller not noticing ip and port changes that zeroconf has found (#76570) 2022-08-10 21:35:05 -04:00
J. Nick Koston
828ea99c61 Add door sensors to Yale Access Bluetooth (#76571) 2022-08-10 21:34:48 -04:00
Franck Nijhof
6e65cb4928 Fix Spotify deviding None value in current progress (#76581) 2022-08-10 21:27:52 -04:00
Franck Nijhof
dbfba3a951 Remove attribution from extra state attributes (#76580) 2022-08-10 21:24:12 -04:00
Robert Hillis
8ecbb85852 Use generators for async_add_entities in Ambient Station (#76586) 2022-08-10 19:05:09 -06:00
GitHub Action
519d478d61 [ci skip] Translation update 2022-08-11 00:26:23 +00:00
Aaron Bach
e0d8f0cc95 Add persistent repair items for deprecated Guardian services (#76312)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2022-08-11 00:18:11 +02:00
epenet
0edf82fcb4 Improve type hints in yamaha_musiccast number (#76467) 2022-08-11 00:16:38 +02:00
epenet
46d3f2e14c Improve type hints in freedompro lights (#76045) 2022-08-11 00:12:47 +02:00
epenet
c8f11d65d2 Improve type hints in demo and mqtt number entity (#76464) 2022-08-11 00:10:28 +02:00
Alastair D'Silva
f7c23fe193 Handle EmonCMS feeds that return NULL gracefully (#76074) 2022-08-11 00:09:37 +02:00
Robert Hillis
ca3033b84c Use generators for async_add_entities in Abode (#76569) 2022-08-11 00:09:05 +02:00
Robert Hillis
52fd63acbc Use generators for async_add_entities in Accuweather (#76574) 2022-08-11 00:05:32 +02:00
Keilin Bickar
d81298a2d6 Add sensor state class for SleepIQ sensors (#76372)
Co-authored-by: Inca <inca@popre.net>
2022-08-10 23:59:50 +02:00
Dave
2bab6447a9 Replaces aiohttp.hdrs CONTENT_TYPE with plain string for the Swisscom integration (#76568) 2022-08-10 23:57:58 +02:00
Brandon Rothweiler
58ac3eee3b Always round down for Mazda odometer entity (#76500) 2022-08-10 23:56:20 +02:00
epenet
9555df88c8 Improve type hints in zwave_me number entity (#76469) 2022-08-10 23:49:02 +02:00
J. Nick Koston
bb0038319d Add Yale Access Bluetooth integration (#76182) 2022-08-10 10:08:02 -10:00
puddly
2f99d6a32d Bump ZHA dependencies (#76565) 2022-08-10 15:51:31 -04:00
J. Nick Koston
b1497b0857 Simplify switchbot config flow (#76272) 2022-08-10 09:02:08 -10:00
epenet
54fc17e10d Improve type hints in xiaomi_miio vacuum entities (#76563)
Co-authored-by: Teemu R. <tpr@iki.fi>
2022-08-10 20:40:38 +02:00
Jc2k
0639681991 Add new Bluetooth coordinator helper for polling mostly passive devices (#76549) 2022-08-10 18:56:34 +01:00
epenet
982d197ff3 Add number checks to pylint plugin (#76457)
* Add number checks to pylint plugin

* Adjust ancestor checks

* Add tests

* Add comments in tests
2022-08-10 16:30:58 +02:00
epenet
eeff766078 Improve type hints in xiaomi_miio number entity (#76466) 2022-08-10 16:25:03 +02:00
Jan Bouwhuis
acaa20cabe Improve MQTT warning message on illegal discovery topic (#76545) 2022-08-10 09:38:40 -04:00
Artem Draft
19295d33ba Migrate BraviaTV to new async backend (#75727) 2022-08-10 13:11:49 +02:00
Paulus Schoutsen
0fd38ef9f8 Merge pull request #76535 from home-assistant/rc 2022-08-09 21:55:49 -04:00
GitHub Action
4a938ec33e [ci skip] Translation update 2022-08-10 00:23:36 +00:00
Paulus Schoutsen
56c80cd31a Bumped version to 2022.8.3 2022-08-09 17:18:19 -04:00
J. Nick Koston
303d8b05d1 Bump aiohomekit to 1.2.8 (#76532) 2022-08-09 17:18:12 -04:00
Oscar Calvo
972c05eac8 Fix #76283 (#76531) 2022-08-09 17:18:11 -04:00
J. Nick Koston
e5088d7e84 Fix pairing with HK accessories that do not provide format for vendor chars (#76502) 2022-08-09 17:18:10 -04:00
J. Nick Koston
6c1597ff98 Bump govee-ble to 0.14.0 to fix H5052 sensors (#76497) 2022-08-09 17:18:09 -04:00
J. Nick Koston
edac82487d Fix inkbird ibbq2s that identify with xbbq (#76492) 2022-08-09 17:18:09 -04:00
J. Nick Koston
5213148fa8 Bump aiohomekit to 1.2.6 (#76488) 2022-08-09 17:18:08 -04:00
Christopher Bailey
8e3f5ec470 Bump version of pyunifiprotect to 4.0.12 (#76465) 2022-08-09 17:14:01 -04:00
epenet
af90159e7c Fix iCloud listeners (#76437) 2022-08-09 17:14:01 -04:00
J. Nick Koston
f01b0a1a62 Fix Govee 5185 Meat Thermometers with older firmware not being discovered (#76414) 2022-08-09 17:13:02 -04:00
Aaron Bach
ee2acabcbe Fix bug where RainMachine entity states don't populate on startup (#76412) 2022-08-09 17:12:35 -04:00
Aaron Bach
79b371229d Automatically enable common RainMachine restriction entities (#76405)
Automatically enable common delay-related RainMachine entities
2022-08-09 17:09:05 -04:00
Aaron Bach
0f6b059e3e Add debug logging for unknown Notion errors (#76395)
* Add debug logging for unknown Notion errors

* Remove unused constant

* Code review
2022-08-09 17:09:04 -04:00
J. Nick Koston
b04352e745 Bump aiohomekit to 1.2.8 (#76532) 2022-08-09 17:08:38 -04:00
Oscar Calvo
596b7fed34 Fix #76283 (#76531) 2022-08-09 16:46:22 -04:00
Marc Mueller
dc47121f2c Better type hass_job method calls (#76053) 2022-08-09 16:12:33 -04:00
Marc Mueller
70aeaa3c76 Use Callback protocol for AutomationActionType (#76054) 2022-08-09 16:10:26 -04:00
J. Nick Koston
ad361b8fc2 Fix pairing with HK accessories that do not provide format for vendor chars (#76502) 2022-08-09 09:48:48 -10:00
Christopher Bailey
23fc151150 Bump version of pyunifiprotect to 4.0.13 (#76523) 2022-08-09 08:41:02 -10:00
epenet
38c57944fa Improve type hints in zha number entity (#76468) 2022-08-09 18:32:36 +02:00
epenet
7d0a4ee00a Improve type hints in rfxtrx siren entity (#76459) 2022-08-09 17:54:33 +02:00
Maciej Bieniek
6eb1dbdb74 Add NextDNS binary sensor platform (#75266)
* Add binary_sensor platform

* Add tests

* Add quality scale

* Sort coordinators

* Remove quality scale

* Fix docstring
2022-08-09 17:51:04 +02:00
Maciej Bieniek
753a3c0921 Add new sensors to NextDNS integration (#76262)
* Add DNS-over-HTTP/3 sensors

* Update tests
2022-08-09 17:45:48 +02:00
epenet
bd795be0e9 Cleanup device_class checks in pylint plugin (#76458) 2022-08-09 10:56:15 -04:00
epenet
bcdf880364 Add siren checks to pylint plugin (#76460) 2022-08-09 10:55:52 -04:00
Kevin Stillhammer
b19ace9124 Use constructor instead of factory method for sensors in here_travel_time (#76471) 2022-08-09 10:54:07 -04:00
J. Nick Koston
929eeac1e4 Add support for Govee 5184 BBQ sensors (#76490) 2022-08-09 10:53:21 -04:00
J. Nick Koston
6bae03c14b Fix inkbird ibbq2s that identify with xbbq (#76492) 2022-08-09 10:49:17 -04:00
uvjustin
891158f332 Use stream to generate fallback image for onvif (#75584) 2022-08-09 10:41:19 -04:00
Franck Nijhof
2b2ea3dd73 Update flake8-noqa to 1.2.8 (#76506) 2022-08-09 09:35:38 -04:00
Franck Nijhof
4e3db5bb5c Update sqlalchemy to 1.4.40 (#76505) 2022-08-09 09:35:22 -04:00
J. Nick Koston
a0ceb38f5f Bump govee-ble to 0.14.0 to fix H5052 sensors (#76497) 2022-08-09 09:35:08 -04:00
Álvaro Fernández Rojas
46a8f19197 Update aioqsw to v0.2.0 (#76509) 2022-08-09 15:24:53 +02:00
Rami Mosleh
f90d007e73 Add config flow to android_ip_webcam (#76222)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-09 14:08:46 +02:00
Jc2k
7d427ddbd4 Allow parsing to happen in PassiveBluetoothProcessorCoordinator (#76384) 2022-08-09 06:36:39 +01:00
GitHub Action
12721da063 [ci skip] Translation update 2022-08-09 00:28:50 +00:00
J. Nick Koston
2d43145303 Bump aiohomekit to 1.2.6 (#76488) 2022-08-08 13:06:49 -10:00
Aaron Bach
759503f863 Ensure ConfirmRepairFlow can make use of translation placeholders (#76336)
* Ensure ConfirmRepairFlow can make use of translation placeholders

* Automatically determine the issue

* Fix tests

* Update homeassistant/components/repairs/issue_handler.py

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

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2022-08-08 16:46:48 -06:00
Sarabveer Singh
01de1c6304 Update HomeKit PM2.5 mappings to US AQI (#76358) 2022-08-08 11:49:07 -10:00
Koen van Zuijlen
cefc535edb Add JustNimbus integration (#75718)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2022-08-08 23:35:05 +02:00
Aaron Bach
acbeb8c881 Bump regenmaschine to 2022.08.0 (#76483) 2022-08-08 14:53:27 -06:00
rlippmann
36d6ef6228 Add ecobee CO2, VOC, and AQI sensors (#76366)
* Add support for CO2, VOC, and AQI sensors

* Update sensor.py

* Formatting changes

* Use class thermostat member in async_update

* Remove thermostat attribute, add mixin class

* Add docstrings

* Add blank line

* Sort imports

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-08 22:34:38 +02:00
Christopher Bailey
d139d1e175 Add UniFi Protect media source (#73244) 2022-08-08 10:00:50 -10:00
Franck Nijhof
8456a25f86 Update apprise to 1.0.0 (#76441) 2022-08-08 20:03:21 +02:00
Franck Nijhof
e199b24374 Update sentry-sdk to 1.9.2 (#76444) 2022-08-08 20:00:05 +02:00
Christopher Bailey
ccf7b8fbb9 Bump version of pyunifiprotect to 4.0.12 (#76465) 2022-08-08 07:50:41 -10:00
uvjustin
6540bed59d Defer preload stream start on startup (#75801) 2022-08-08 11:15:31 -04:00
Maciej Bieniek
9f240d5bab Bump NextDNS backend library (#76300)
* Bump NextDNS backend library

* Update tests

* Update diagnostics tests

* Use fixtures
2022-08-08 07:52:36 -07:00
Franck Nijhof
f67a45f643 Update coverage to 6.4.3 (#76443) 2022-08-08 16:16:40 +02:00
epenet
3fcdad74fc Fix iCloud listeners (#76437) 2022-08-08 09:35:45 -04:00
epenet
fe9c101817 Improve select type hints (#76446) 2022-08-08 15:22:22 +02:00
epenet
3026a70f96 Improve type hints in zwave_js select entity (#76449) 2022-08-08 14:55:23 +02:00
Pieter Mulder
7cd4be1310 Add tests for the HDMI-CEC integration (#75094)
* Add basic tests to the HDMI-CEC component

* Add tests for the HDMI-CEC switch component

* Add test for watchdog code

* Start adding tests for the HDMI-CEC media player platform

Also some cleanup and code move.

* Add more tests for media_player

And cleanup some switch tests.

* Improve xfail message for features

* Align test pyCEC dependency with main dependency

* Make fixtures snake_case

* Cleanup call asserts

* Cleanup service tests

* fix issues with media player tests

* Cleanup MockHDMIDevice class

* Cleanup watchdog tests

* Add myself as code owner for the HDMI-CEC integration

* Fix async fire time changed time jump

* Fix event api sync context

* Delint tests

* Parametrize watchdog test

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-08 13:47:05 +02:00
Laz
a1d5a4bc79 Add Escea fireplace integration (#56039)
Co-authored-by: Teemu R. <tpr@iki.fi>
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-08 11:48:42 +02:00
dependabot[bot]
bcc2be344a Bump actions/cache from 3.0.5 to 3.0.6 (#76432)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-08 11:27:36 +02:00
Shay Levy
42dd0cabb3 Fix Shelly H&T sensors rounding (#76426) 2022-08-08 07:52:39 +03:00
GitHub Action
f11fbf2989 [ci skip] Translation update 2022-08-08 00:22:41 +00:00
Martin Hjelmare
d1ab93fbaf Add openexchangerates config flow (#76390) 2022-08-07 23:45:32 +02:00
Aaron Bach
ceecab9559 Add update entity to RainMachine (#76100)
* Add update entity to RainMachine

* Fix tests

* Cleanup

* Test missing controller diagnostics

* Code review
2022-08-07 15:21:49 -06:00
Aaron Bach
dc30d97938 Add debug logging for unknown Notion errors (#76395)
* Add debug logging for unknown Notion errors

* Remove unused constant

* Code review
2022-08-07 14:51:00 -06:00
Aaron Bach
8ea9f975fd Fix bug potential in RainMachine switches by simplifying architecture (#76417)
* Fix bug potential in RainMachine switches by simplifying architecture

* Better typing (per code review)

* Broader error catch
2022-08-07 14:50:49 -06:00
Aaron Bach
27f1955f28 Automatically enable common RainMachine restriction entities (#76405)
Automatically enable common delay-related RainMachine entities
2022-08-07 14:27:52 -06:00
J. Nick Koston
56acb66514 Fix Govee 5185 Meat Thermometers with older firmware not being discovered (#76414) 2022-08-07 10:11:34 -10:00
J. Nick Koston
33b194e48d Switch a few recent merges to use FlowResultType (#76416) 2022-08-07 10:01:32 -10:00
Alex Yao
714d46b153 Silence Yeelight Discovery Log Errors (#76373) 2022-08-07 09:47:49 -10:00
Aaron Bach
9552250f36 Fix bug where RainMachine entity states don't populate on startup (#76412) 2022-08-07 13:44:50 -06:00
Aaron Bach
e89459453b Add more controller-related RainMachine diagnostics (#76409) 2022-08-07 13:44:27 -06:00
Álvaro Fernández Rojas
7deeea02c2 Update aioairzone to v0.4.8 (#76404) 2022-08-07 09:29:07 -10:00
Avi Miller
d14b76e7fc Enable the LIFX diagnostic buttons by default (#76389) 2022-08-07 08:45:26 -10:00
Paulus Schoutsen
89e0db3548 Remove Z-Wave JS trigger uart USB id (#76391) 2022-08-07 14:36:30 -04:00
jjlawren
ea88f229a3 Bump plexapi to 4.12.1 (#76393) 2022-08-07 13:41:12 -04:00
rlippmann
36808a0db4 Add ecobee Smart Premium thermostat (#76365)
Update const.py

Add device model constant for ecobee Smart Premium thermostat
2022-08-07 18:27:17 +02:00
J. Nick Koston
c7838c347f Bump zeroconf to 0.39.0 (#76328) 2022-08-07 12:11:11 -04:00
mvn23
ddf3d23c27 Fix opentherm_gw startup failure handling (#76376) 2022-08-07 12:10:32 -04:00
Martin Hjelmare
a6963e6a38 Add zwave_js usb port selection (#76385) 2022-08-07 11:06:03 -04:00
J. Nick Koston
1fe44d0997 Ensure bluetooth recovers if Dbus gets restarted (#76249) 2022-08-07 11:03:56 -04:00
Joakim Plate
4aeaeeda0d Postpone broadlink platform switch until config entry is ready (#76371) 2022-08-07 09:42:47 -04:00
Maciej Bieniek
cd1227d8b9 Fix default sensor names in NextDNS integration (#76264) 2022-08-07 15:04:04 +02:00
Leonardo Figueiro
34984a8af8 Add switch to wilight (#62873)
* Created switch.py and support

* updated support.py

* test for wilight switch

* Update for Test

* Updated test_switch.py

* Trigger service with index

* Updated support.py and switch.py

* Updated support.py

* Updated switch.py as PR#63614

* Updated switch.py

* add type hints

* Updated support.py

* Updated switch.py

* Updated switch.py and services.yaml

* Updated pywilight

* Update homeassistant/components/wilight/switch.py

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

* Update homeassistant/components/wilight/switch.py

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

* Update homeassistant/components/wilight/switch.py

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

* Update homeassistant/components/wilight/switch.py

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

* Update ci.yaml

* Update ci.yaml

* Updated as pywilight

Renamed Device as PyWiLightDevice in pywilight.

* Updated as pywilight

Renamed Device as PyWiLightDevice in pywilight.

* Updated as pywilight

Renamed Device as PyWiLightDevice in pywilight.

* Updated as pywilight

Renamed Device as PyWiLightDevice in pywilight.

* Update switch.py

* Update homeassistant/components/wilight/support.py

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

* Update support.py

* Update switch.py

* Update support.py

* Update support.py

* Update switch.py

* Update switch.py

* Update services.yaml

* Update switch.py

* Update services.yaml

* Update switch.py

* Update homeassistant/components/wilight/switch.py

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

* Update homeassistant/components/wilight/switch.py

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

* Update homeassistant/components/wilight/switch.py

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

* Update switch.py

* Update switch.py

* Update switch.py

* Update test_switch.py

* Update test_switch.py

* Update test_switch.py

* Decrease exception scope

* Clean up

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-07 11:07:01 +02:00
Avi Miller
74cfdc6c1f Add identify and restart button entities to the LIFX integration (#75568) 2022-08-06 17:28:30 -10:00
Avi Miller
db3e21df86 Update aiolifx to version 0.8.2 (#76367) 2022-08-06 15:02:32 -10:00
GitHub Action
4b53b920cb [ci skip] Translation update 2022-08-07 00:29:25 +00:00
Martin Hjelmare
953d9eb9c8 Bump aioopenexchangerates to 0.4.0 (#76356) 2022-08-07 01:23:18 +02:00
Martin Hjelmare
e864b82c03 Improve mysensors config flow (#75122)
* Improve mysensors config flow

* Improve form input order

* Update flow tests
2022-08-07 01:22:50 +02:00
Jc2k
1aa0e64354 Update gree to use the network component to set discovery interfaces (#75812) 2022-08-06 21:45:44 +01:00
J. Nick Koston
c580bce879 Move HKC entity classes into entity.py (#76333) 2022-08-06 08:10:26 -10:00
J. Nick Koston
adce55b4db Bump pySwitchbot to 0.18.4 (#76322)
* Bump pySwitchbot to 0.18.3

Fixes #76321

Changelog: https://github.com/Danielhiversen/pySwitchbot/compare/0.17.3...0.18.3

* bump
2022-08-06 12:46:27 +02:00
J. Nick Koston
76f137eb75 Bump yalexs to 1.2.1 (#76339)
Changelog: https://github.com/bdraco/yalexs/compare/v1.1.25...v1.2.1
2022-08-06 12:39:33 +02:00
Jean-François Roy
7c6a64c348 Bump aiobafi6 to 0.7.2 to unblock #76328 (#76330) 2022-08-05 14:30:45 -10:00
GitHub Action
32a2999b85 [ci skip] Translation update 2022-08-06 00:24:46 +00:00
Robert Svensson
c2f026d0a7 Minor deCONZ clean up (#76323)
* Rename secondary_temperature with internal_temperature

* Prefix binary and sensor descriptions matching on all sensor devices with COMMON_

* Always create entities in the same order

Its been reported previously that if the integration is removed and setup again that entity IDs can change if not sorted in the numerical order

* Rename alarmsystems to alarm_systems

* Use websocket enums

* Don't use legacy pydeconz constants

* Bump pydeconz to v103

* unsub -> unsubscribe
2022-08-06 01:34:27 +02:00
Franck Nijhof
742877f79b Revert "Disable Spotify Media Player entity by default (#69372)" (#76250) 2022-08-05 16:28:52 +02:00
Joakim Plate
a0ef3ad21b Use stored philips_js system data on start (#75981)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-05 16:06:19 +02:00
David F. Mulcahey
df67a8cd4f Fix ZHA light color temp support (#76305) 2022-08-05 09:34:21 -04:00
Joakim Plate
cdde4f9925 Add bluetooth API to allow rediscovery of address (#76005)
* Add API to allow rediscovery of domains

* Switch to clearing per device

* Drop unneded change
2022-08-05 14:49:34 +02:00
Jan Bouwhuis
741efb89d5 Remove deprecated send_if_off option for MQTT climate (#76293)
* Remove `send_if_off` option for mqtt climate

* Use cv.remove()
2022-08-05 13:17:46 +02:00
Erik Montnemery
9aa8838479 Allow storing arbitrary data in repairs issues (#76288) 2022-08-05 13:16:29 +02:00
Erik Montnemery
b366090175 Allow creating fixable repairs issues without flows (#76224)
* Allow creating fixable repairs issues without flows

* Add test

* Adjust test
2022-08-05 12:07:51 +02:00
epenet
861b694cff Use attributes in litejet light (#76031) 2022-08-05 11:39:51 +02:00
Robert Svensson
44aa49dde8 Bump pydeconz to v102 (#76287) 2022-08-05 11:22:55 +02:00
puddly
34dcc74491 Bump ZHA dependencies (#76275) 2022-08-05 11:06:40 +02:00
Franck Nijhof
babb3d10a1 Deprecate the Deutsche Bahn (#76286) 2022-08-05 10:59:43 +02:00
Erik Montnemery
3b29cbcd61 Support creating persistent repairs issues (#76211) 2022-08-05 10:11:20 +02:00
GitHub Action
cb46441b74 [ci skip] Translation update 2022-08-05 00:28:51 +00:00
Franck Nijhof
ce871835b2 Update pyupgrade to v2.37.3 (#76257) 2022-08-05 01:04:10 +02:00
J. Nick Koston
ca4b7cca1a Run black on twitter to fix CI (#76254) 2022-08-04 23:45:35 +02:00
epenet
fa9d0b9ff7 Use attributes in tikteck light (#76022) 2022-08-04 23:11:37 +02:00
epenet
a987cad973 Use attributes in unifiled light (#76019) 2022-08-04 23:10:27 +02:00
Daniel Dietzler
bb58ad0f54 Add ability to specify user(s) when sending DMs using the Twitter integration (#71310) 2022-08-04 22:08:24 +02:00
Franck Nijhof
33bf94c4b2 Update orjson to 3.7.11 (#76171) 2022-08-04 22:37:57 +03:00
Jonathan Keslin
d76ebbbb0b Remove @decompil3d as maintainer on volvooncall (#76153)
* Remove @decompil3d as maintainer on volvooncall

* Run hassfest

Signed-off-by: Franck Nijhof <git@frenck.dev>

Co-authored-by: Franck Nijhof <git@frenck.dev>
2022-08-04 22:37:20 +03:00
Phil Bruckner
343508a015 Fix Life360 recovery from server errors (#76231) 2022-08-04 21:28:59 +02:00
Aaron Bach
3d42c4ca87 Add reboot button to RainMachine (#75227) 2022-08-04 13:22:10 -06:00
Franck Nijhof
0df4642b62 Remove YAML configuration from Simplepush (#76175) 2022-08-04 21:03:26 +02:00
epenet
0ffdf9fb6e Add device_tracker checks to pylint plugin (#76228) 2022-08-04 21:03:13 +02:00
Franck Nijhof
31d9425e49 Add entity category to Wiz number entities (#76191) 2022-08-04 20:58:12 +02:00
On Freund
b2ceb2043b Fix arm away in Risco (#76188) 2022-08-04 20:57:53 +02:00
Aaron Bach
639a522caa Add repair item to remove no-longer-functioning Flu Near You integration (#76177)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2022-08-04 19:45:28 +02:00
y34hbuddy
b5a6ee3c56 Refactor volvooncall to (mostly) use DataUpdateCoordinator (#75885)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-04 19:44:39 +02:00
J. Nick Koston
02ad4843b8 Fix flux_led ignored entries not being respected (#76173) 2022-08-04 19:44:22 +02:00
Aaron Bach
b2dc810ea4 More explicitly call out special cases with SimpliSafe authorization code (#76232) 2022-08-04 19:43:02 +02:00
Diogo Gomes
8ca5b5d4a4 Remove icon attribute if device class is set (#76161) 2022-08-04 19:36:37 +02:00
Jc2k
91486f2d61 Enable strict typing for HomeKit Controller config flow module (#76233) 2022-08-04 17:41:47 +01:00
MosheTzvi
8810d3320c added Hanetz Hachama (#76216)
added missing variable
2022-08-04 10:08:23 -06:00
Franck Nijhof
5e75bed929 Update sentry-sdk to 1.9.0 (#76192) 2022-08-04 18:04:54 +02:00
mkmer
0ce44150fd Bump AIOAladdin Connect to 0.1.41 (#76217) 2022-08-04 10:01:58 -06:00
J. Nick Koston
5d7cef6416 Fix race in bluetooth async_process_advertisements (#76176) 2022-08-04 17:58:15 +02:00
J. Nick Koston
63b454c9ed BLE pairing reliablity fixes for HomeKit Controller (#76199)
- Remove the cached map from memory when unpairing so
  we do not reuse it again if they unpair/repair

- Fixes for accessories that use a config number of
  0

- General reliablity improvements to the pairing process
  under the hood of aiohomekit
2022-08-04 16:38:55 +01:00
Rami Mosleh
ff255fedda Fix nullable ip_address in mikrotik (#76197) 2022-08-04 16:04:12 +02:00
Franck Nijhof
8793cf4996 Fix spelling of OpenWrt in luci integration manifest (#76219) 2022-08-04 15:57:00 +02:00
epenet
9af64b1c3b Improve type hints in zha light (#75947) 2022-08-04 14:02:07 +02:00
Maciej Bieniek
88a5ab1e1e Bump NextDNS library (#76207) 2022-08-04 14:01:26 +02:00
Franck Nijhof
726eb82758 Mark RPI Power binary sensor as diagnostic (#76198) 2022-08-04 13:21:37 +02:00
Jc2k
aa3097a3be Add a Thread network status sensor to homekit_controller (#76209) 2022-08-04 11:55:29 +01:00
Jc2k
d5695a2d86 Fix some homekit_controller pylint warnings and (local only) test failures (#76122) 2022-08-04 11:30:37 +01:00
epenet
b7b965c9c9 Use attributes in yeelightsunflower light (#75995) 2022-08-04 09:41:07 +02:00
Jan Bouwhuis
e6e5b98bc7 Allow climate operation mode fan_only as custom mode in Alexa (#76148)
* Add support for FAN_ONLY mode

* Tests for fan_only as custom mode
2022-08-04 09:13:20 +02:00
Franck Nijhof
22eba6ce1b Remove attribution from extra state attributes (#76172) 2022-08-04 08:13:20 +02:00
GitHub Action
e2e277490b [ci skip] Translation update 2022-08-04 00:27:38 +00:00
epenet
1ff7686160 Use attributes in zengge light (#75994) 2022-08-04 01:15:56 +02:00
Aaron Bach
847f150a78 Modify RainMachine to store a single dataclass in hass.data (#75460)
* Modify RainMachine to store a single dataclass in `hass.data`

* Pass one object around instead of multiple
2022-08-03 16:23:42 -06:00
Artem Draft
3388248eb5 Fix prettier on HomeKit Controller (#76168) 2022-08-03 11:58:30 -10:00
Jc2k
72a0ca4871 Add homekit_controller thread node capabilties diagnostic sensor (#76120) 2022-08-03 22:03:10 +01:00
Martin Hjelmare
842cc060f8 Fix zwave_js addon info (#76044)
* Add add-on store info command

* Use add-on store info command in zwave_js

* Fix init tests

* Update tests

* Fix method for addon store info

* Fix response parsing

* Fix store addon installed response parsing

* Remove addon info log that can contain network keys

* Add supervisor store addon info test

* Default to version None if add-on not installed

Co-authored-by: Mike Degatano <michael.degatano@gmail.com>

Co-authored-by: Mike Degatano <michael.degatano@gmail.com>
2022-08-03 22:33:05 +02:00
Paul Annekov
dd862595a3 New binary sensors for Ukraine Alarm (#76155)
new alert types for ukraine alarm
2022-08-03 23:19:10 +03:00
epenet
1806172551 Improve type hints in hive lights (#76025) 2022-08-03 22:26:34 +03:00
Aaron Bach
fbde347e64 Move RainMachine utils to the correct location (#76051)
* Move RainMachine utils to the correct location

* Imports
2022-08-03 22:24:55 +03:00
epenet
84747ada66 Use attributes in decora light (#76047) 2022-08-03 22:22:30 +03:00
J. Nick Koston
34b0e0d062 Bump bleak to 0.15.1 (#76136) 2022-08-03 07:46:54 -10:00
Franck Nijhof
fc09c6cab1 Merge branch 'master' into dev 2022-08-03 15:09:27 +02:00
Erik Flodin
7f83cba83a Bump pyTibber to 0.24.0 (#76098)
To be able to add tibber sensors for production.
2022-08-03 11:53:29 +02:00
Heine Furubotten
651928ee0c Bump azure-servicebus to support py3.10 (#76092)
Bump azure-servicebus
2022-08-03 10:31:09 +02:00
epenet
1ee4445a7b Improve type hints in azure devops config flow (#75909)
* Improve type hints in azure devops config flow

* Improve
2022-08-03 10:15:41 +02:00
epenet
1ba18f8df6 Improve type hints in vesync lights (#75998)
* Improve type hints in vesync lights

* Adjust import
2022-08-03 09:56:13 +02:00
Robert Svensson
98f0b24c42 Fix deconz group log warning (#76114) 2022-08-03 09:41:00 +02:00
J. Nick Koston
6006fc7e30 Bump aiohomekit to 1.2.3 to fix hang at startup (#76102) 2022-08-03 08:35:41 +02:00
J. Nick Koston
0dbb119677 Bump pySwitchbot to 0.17.3 to fix hang at startup (#76103) 2022-08-03 08:34:46 +02:00
GitHub Action
e09bbc749c [ci skip] Translation update 2022-08-03 00:28:23 +00:00
J. Nick Koston
bf931f1225 Handle additional bluetooth start exceptions (#76096) 2022-08-02 13:46:43 -10:00
Jc2k
fbf3c1a5d4 Fix Xiaomi BLE UI string issues (#76099) 2022-08-02 22:05:36 +01:00
Jc2k
a0adfb9e62 Fix serialization of Xiaomi BLE reauth flow (#76095)
* Use data instead of context to fix serialisation bug

* Test change to async_start_reauth
2022-08-02 21:38:38 +01:00
J. Nick Koston
a628be4db8 Only stat the .dockerenv file once (#76097) 2022-08-02 10:38:01 -10:00
J. Nick Koston
cf849c59a4 Bump pyatv to 0.10.3 (#76091) 2022-08-02 21:11:50 +02:00
lunmay
9f31be8f01 Fix capitalization in mitemp_bt strings (#76063)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2022-08-02 19:22:29 +02:00
Erik Montnemery
17fbee7dd3 Refresh homeassistant_alerts when hass has started (#76083) 2022-08-02 19:05:09 +02:00
Jc2k
f043203b56 Add optional context parameter to async_start_reauth (#76077) 2022-08-02 18:20:37 +02:00
Zack Barett
a1d495a25b Bump Frontend to 20220802.0 (#76087) 2022-08-02 18:08:33 +02:00
David F. Mulcahey
67cef0dc94 Ensure ZHA devices load before validating device triggers (#76084) 2022-08-02 17:29:32 +02:00
epenet
be4f9598f9 Improve type hints in blinksticklight lights (#75999) 2022-08-02 16:28:41 +02:00
mkmer
fbe22d4fe7 Bump AIOAladdinConnect to 0.1.39 (#76082) 2022-08-02 16:10:20 +02:00
Martin Hjelmare
cfe6c8939c Add Open Exchange Rates coordinator (#76017)
* Add Open Exchange Rates coordinator

* Move debug log

* Fix update interval calculation
2022-08-02 14:49:46 +02:00
Erik Montnemery
404d530b5f Handle missing attributes in meater objects (#76072) 2022-08-02 14:13:07 +02:00
Jc2k
d69d7a8761 Fix typo in new xiaomi_ble string (#76076) 2022-08-02 14:11:06 +02:00
Franck Nijhof
48a34756f0 Remove Somfy from Overkiz title in manifest (#76073) 2022-08-02 13:03:34 +02:00
Maciej Bieniek
320b264d03 Use SourceType.ROUTER in Tractive integration (#76071)
Use SourceType.ROUTER
2022-08-02 12:40:14 +02:00
J. Nick Koston
fe6d6b81e3 Add support for switchbot motion sensors (#76059) 2022-08-02 12:38:31 +02:00
epenet
786780bc8c Use attributes in limitlessled light (#76066) 2022-08-02 12:35:24 +02:00
Franck Nijhof
033e3b7e85 Small title adjustment to the Home Assistant Alerts integration (#76070) 2022-08-02 11:42:57 +02:00
Sven Serlier
dbac8b804f Update featured integrations image (#76011) 2022-08-02 09:09:24 +02:00
mkmer
bec4b168d6 Bump AIOAladdinConnect to 0.1.37 (#76046) 2022-08-02 08:56:50 +02:00
Erik Montnemery
32b1259786 Support multiple trigger instances for a single webhook (#76037) 2022-08-02 08:54:28 +02:00
J. Nick Koston
56050e9fbe Lower bluetooth startup timeout to 9s to avoid warning (#76050) 2022-08-02 08:46:22 +02:00
J. Nick Koston
33651d14df Bump bluetooth-adapters to 0.1.3 (#76052) 2022-08-02 08:36:27 +02:00
J. Nick Koston
41d7eba1ad Fix govee H5074 data (#76057) 2022-08-02 08:34:48 +02:00
Eloston
44b6213217 Add support for SwitchBot Plug Mini (#76056) 2022-08-01 16:29:44 -10:00
Allen Porter
26e2ef8175 Add repair issues for nest app auth removal and yaml deprecation (#75974)
* Add repair issues for nest app auth removal and yaml deprecation

* Apply PR feedback

* Re-apply suggestion that i force pushed over

* Update criticality level
2022-08-02 03:20:20 +02:00
GitHub Action
81e3ef03f7 [ci skip] Translation update 2022-08-02 00:27:42 +00:00
epenet
3eafe13085 Improve UI in pylint plugin (#74157)
* Adjust FlowResult result type

* Adjust tests

* Adjust return_type

* Use StrEnum for base device_class

* Add test for device_class

* Add and use SentinelValues.DEVICE_CLASS

* Remove duplicate device_class

* Cleanup return-type

* Drop inheritance check from device_class

* Add caching for class methods

* Improve tests

* Adjust duplicate checks

* Adjust tests

* Fix rebase
2022-08-02 00:03:52 +02:00
Jc2k
652a8e9e8a Add reauth flow to xiaomi_ble, fixes problem adding LYWSD03MMC (#76028) 2022-08-01 22:04:16 +01:00
epenet
27ed3d324f Replace object with enum for pylint sentinel (#76030)
* Replace object with enum for pylint sentinel

* Use standard enum
2022-08-01 19:34:06 +02:00
epenet
deff0ad61e Implement generic in Deconz base device (#76015)
* Make DevonzBase a generic

* Adjust alarm_control_panel

* Adjust binary_sensor

* Adjust climate

* More platforms

* Adjust light

* Ignore type-var

* Add space

* Implement recommendation

* Use type: ignore[union-attr]

* Revert "Use type: ignore[union-attr]"

This reverts commit 983443062aab0a9c599b2750d823d0c5148c05ce.

* Adjust assert

* Adjust lock

* Rename type variables

* type: ignore[union-attr]

* Formatting

Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
2022-08-01 19:18:29 +02:00
krazos
567f181a21 Fix capitalization of Sonos "Status light" entity name (#76035)
Tweak capitalization of "Status light" entity name

Tweak capitalization of "Status light" entity name for consistency with blog post guidance, which states that entity names should start with a capital letter, with the rest of the words lower case
2022-08-01 18:45:18 +02:00
Franck Nijhof
fc399f21e9 Guard imports for type hinting in Bluetooth (#75984) 2022-08-01 17:54:06 +02:00
David F. Mulcahey
bd3de4452b Enhance logging for ZHA device trigger validation (#76036)
* Enhance logging for ZHA device trigger validation

* use IntegrationError
2022-08-01 11:43:07 -04:00
rhadamantys
7141c36f8b Fix invalid enocean unique_id (#74508)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-01 17:42:47 +02:00
Aaron Godfrey
91384e07d0 Add unique id for todoist calendar entity (#75674)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-01 17:15:51 +02:00
Ethan Madden
1eb0983fba Enable air quality sensor for Core300s (#75695) 2022-08-01 17:06:28 +02:00
Joakim Plate
2dd62b14b6 Convert fjäråskupan to built in bluetooth (#75380)
* Add bluetooth discovery

* Use home assistant standard api

* Fixup manufacture data

* Adjust config flow to use standard features

* Fixup tests

* Mock bluetooth

* Simplify device check

* Fix missing typing

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-08-01 16:56:08 +02:00
mkmer
f2da46d99b Remove aiohttp close from aladdin connect config_flow (#76029)
Remove aiohttp close from config_flow - throwing error found in #75933
2022-08-01 16:07:17 +02:00
Erik Montnemery
687ac91947 Support MWh for gas consumption sensors (#76016) 2022-08-01 14:22:24 +02:00
epenet
1a40d400dc Add function/property name to pylint message (#75913) 2022-08-01 14:09:47 +02:00
Martin Hjelmare
826de707e4 Add strict typing to openexchangerates (#76004) 2022-08-01 11:35:31 +02:00
Marc Mueller
81d1786a16 Remove unused logging args parameter (#75619) 2022-08-01 10:13:05 +02:00
Simone Chemelli
0738f08215 Add missing sensors for Shelly Plus H&T (#76001)
* Add missing sensors for Shelly Plus H&T

* Cleanup

* Fix

* Add voltage to battery sensor

* Apply review comments
2022-08-01 09:52:51 +02:00
GitHub Action
5bb5920697 [ci skip] Translation update 2022-08-01 00:28:32 +00:00
epenet
89729b2c49 Improve Registry typing in Alexa handlers (#75921) 2022-08-01 00:39:38 +02:00
Jc2k
0167875789 Add physical controls lock to homekit_controller (#75993) 2022-07-31 13:30:29 -07:00
mkmer
003ee853a3 Bump AIOAladdinConnect to 0.1.33 (#75986)
Bump aladdin_connect 0.1.33
2022-07-31 13:14:30 -07:00
Franck Nijhof
4af95ecf78 Fix Home Connect services not being set up (#75997) 2022-07-31 13:14:09 -07:00
J. Nick Koston
a95851c9c2 Bump pySwitchbot to 0.16.0 to fix compat with bleak 0.15 (#75991) 2022-07-31 13:13:05 -07:00
Aaron Bach
a3bffdf523 Appropriately mark Guardian entities as unavailable during reboot (#75234) 2022-07-31 13:10:29 -07:00
epenet
98293f2179 Use climate enums in alexa (#75911) 2022-07-31 21:29:54 +02:00
Paul Annekov
97b30bec8b Added a configuration_url for the ukraine_alarm service (#75988) 2022-07-31 21:25:16 +02:00
mvn23
84d91d2b3a Bump pyotgw to 2.0.2 (#75980) 2022-07-31 21:14:03 +02:00
epenet
20fec104e2 Improve type hints in light [a-i] (#75936)
* Improve type hints in ads light

* Improve type hints in avea light

* Improve type hints in avion light

* Improve type hints in broadlink light

* More type hints

* One more
2022-07-31 20:46:13 +02:00
Franck Nijhof
c795597511 Improve authentication handling for camera view (#75979) 2022-07-31 18:00:42 +02:00
Marc Mueller
1a8ccfeb56 Use device_tracker SourceType enum [a-g] (#75963) 2022-07-31 15:51:04 +02:00
Marc Mueller
f068fc8eb7 Use device_tracker SourceType enum [h-m] (#75964) 2022-07-31 15:49:57 +02:00
Marc Mueller
450b7cd644 Use device_tracker SourceType enum [n-r] (#75965) 2022-07-31 15:48:43 +02:00
Marc Mueller
c9ddb10024 Use device_tracker SourceType enum [s-z] (#75966) 2022-07-31 14:01:18 +02:00
epenet
7b1463e03d Improve type hints in light [i-r] (#75943) 2022-07-31 13:53:22 +02:00
epenet
11a19c2612 Improve type hints in light [s-z] (#75946) 2022-07-31 13:50:24 +02:00
epenet
90458ee200 Use attributes in zerproc light (#75951) 2022-07-31 13:46:25 +02:00
Allen Porter
9e76e8cef8 Bump grpc requirements to 1.48.0 (#75603) 2022-07-31 13:37:29 +02:00
MasonCrawford
ee273daf8d Small fixes for LG soundbar (#75938) 2022-07-31 13:32:40 +02:00
Heine Furubotten
1e115341af Bump enturclient to 0.2.4 (#75928) 2022-07-31 13:28:09 +02:00
Aidan Timson
1204b4f700 Add typings to Certificate Expiry integration (#75945) 2022-07-31 13:26:16 +02:00
mvn23
abb7495ced Handle failed connection attempts in opentherm_gw (#75961) 2022-07-31 12:21:25 +02:00
GitHub Action
377f56ff5f [ci skip] Translation update 2022-07-31 00:25:44 +00:00
J. Nick Koston
b9b916cdcd Bump govee-ble to fix H5179 sensors (#75957)
Changelog: https://github.com/Bluetooth-Devices/govee-ble/compare/v0.12.4...v0.12.5
2022-07-30 15:15:06 +02:00
ildar170975
faf25b2235 Add telegram disable_web_page_preview (#75898)
* Add telegram disable_web_page_preview

Adds ability to specify disable_web_page_preview to telegram.notify:
```
- service: notify.telegram
  data:
    message: >-
      <a href="https://www.home-assistant.io/">HA site</a>
    data:
      parse_mode: html
      disable_web_page_preview: true
```

* Update homeassistant/components/telegram/notify.py

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

* Update notify.py

* Update notify.py

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-07-30 14:06:55 +02:00
Alex Henry
ace359b1bd Add multi-zone support to Anthem AV receiver and distribution solution (#74779)
* Add multi-zone support to Anthem AV receiver and distribution amplifier

* Fix typo in comment

* Convert properties to attribute and add test

* Migrate entity name

* Fix after rebase add strict typing and bump version

* fix typing

* Simplify test

* Small improvement

* remove dispatcher send and use callback
2022-07-30 14:04:24 +02:00
epenet
8181da7090 Improve type hints in axis (#75910) 2022-07-30 11:04:31 +02:00
J. Nick Koston
bb3e094552 Fix switchbot failing to setup when last_run_success is not saved (#75887) 2022-07-29 21:33:29 -07:00
J. Nick Koston
80a9659524 Update to bleak 0.15 (#75941) 2022-07-29 17:53:33 -07:00
GitHub Action
c4ad6d46ae [ci skip] Translation update 2022-07-30 00:22:48 +00:00
Bob van Mierlo
69a0943205 Increase the discovery timeout (#75948) 2022-07-29 21:46:30 +01:00
Jan Stienstra
879b415415 Fix incorrect check for media source (#75880)
* Fix incorrect check for media source

* Update homeassistant/components/jellyfin/media_source.py

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

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2022-07-29 10:11:53 -07:00
Franck Nijhof
2798a77b5f Fix SimplePush repairs issue (#75922) 2022-07-29 09:56:19 -07:00
Matthias Alphart
9bbbee3d88 Update xknx to 0.22.1 (#75932) 2022-07-29 09:54:49 -07:00
Jc2k
ca6676a708 Fix xiaomi_ble discovery for devices that don't put the fe95 uuid in service_uuids (#75923) 2022-07-29 14:28:39 +02:00
Marc Mueller
2b1e1365fd Add StrEnum for device_tracker SourceType (#75892)
Add StrEnum for device_tracker SourceType
2022-07-29 13:09:03 +02:00
Nephiel
ab5dfb3c42 Use climate enums in google_assistant (#75888) 2022-07-29 12:08:32 +02:00
G Johansson
08b169a7ad Fix broken Yale lock (#75918)
Yale fix lock
2022-07-29 11:57:19 +02:00
Paulus Schoutsen
aec885a467 Fix Roon media player being set up before hass.data set up (#75904) 2022-07-29 09:53:08 +02:00
Paulus Schoutsen
4b2beda473 Move some bleak imports to be behind TYPE_CHECKING (#75894) 2022-07-28 22:26:37 -07:00
J. Nick Koston
9f16c14681 Fix incorrect manufacturer_id for govee 5182 model (#75899) 2022-07-28 17:07:32 -10:00
Alex Henry
bbd7041a73 Refactor and improve anthemav (#75852) 2022-07-29 03:20:05 +02:00
GitHub Action
a1d96175a8 [ci skip] Translation update 2022-07-29 00:25:31 +00:00
Marc Mueller
003fe9220e Add protocol types for device_tracker async_see and see (#75891) 2022-07-29 00:27:47 +02:00
J. Nick Koston
702cef3fc7 Add startup timeout to bluetooth (#75848)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-07-28 11:14:13 -10:00
Franck Nijhof
6ba0b9cff2 Fix AdGuard Home rules count sensor (#75879) 2022-07-28 13:36:11 -07:00
Jc2k
10356b9379 Fix Xiaomi BLE not detecting encryption for some devices (#75851) 2022-07-28 19:10:37 +01:00
Brandon West
4ed0463438 Bump russound_rio to 0.1.8 (#75837) 2022-07-28 18:27:48 +02:00
Franck Nijhof
166e58eaa4 Fix camera token to trigger authentication IP ban (#75870) 2022-07-28 18:20:39 +02:00
Zack Barett
a020482c23 Update frontend to 20220728.0 (#75872) 2022-07-28 18:20:10 +02:00
Franck Nijhof
16e75f2a13 Fix incorrect sensor key in DSMR (#75865) 2022-07-28 18:15:27 +02:00
Franck Nijhof
1012064bb7 Remove state class from daily net sensors in DSMR Reader (#75864) 2022-07-28 18:13:16 +02:00
puddly
8e2f0497ce ZHA network backup and restore API (#75791)
* Implement WS API endpoints for zigpy backups

* Implement backup restoration

* Display error messages caused by invalid backup JSON

* Indicate to the frontend when a backup is incomplete

* Perform a coordinator backup before HA performs a backup

* Fix `backup.async_post_backup` docstring

* Rename `data` to `backup` in restore command

* Add unit tests for new websocket APIs

* Unit test backup platform

* Move code to overwrite EZSP EUI64 into ZHA

* Include the radio type in the network settings API response
2022-07-28 11:24:31 -04:00
Franck Nijhof
91180923ae Fix HTTP 404 being logged as a stack trace (#75861) 2022-07-28 16:43:32 +02:00
Chaim Turkel
7251445ffb Add shabat sensors to jewish_calendar (#57866)
* add shabat sensors

* add shabat sensors

* add shabat sensors

* add shabat sensors

* add shabat sensors

* Remove redundunt classes and combine sensors

* Update homeassistant/components/jewish_calendar/binary_sensor.py

Co-authored-by: Yuval Aboulafia <yuval.abou@gmail.com>

* Update homeassistant/components/jewish_calendar/binary_sensor.py

Co-authored-by: Yuval Aboulafia <yuval.abou@gmail.com>

* updated requirements

* call get_zmanim once

* add type hint to entity description

* fix errors resulted from type hints introduction

* fix mypy error

* use attr for state

* Update homeassistant/components/jewish_calendar/binary_sensor.py

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

* Fix typing

Co-authored-by: Yuval Aboulafia <yuval.abou@gmail.com>
Co-authored-by: Teemu R. <tpr@iki.fi>
2022-07-28 16:19:20 +02:00
Franck Nijhof
4f56028491 Fix unit of measurement usage in COSignal (#75856) 2022-07-28 12:39:10 +02:00
borky
25d943d272 Add xiaomi air purifier 4 and 4 pro support (#75745)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-07-28 12:38:04 +02:00
Robert Svensson
c16db4c3e1 Make Axis utilise forward_entry_setups (#75178) 2022-07-28 11:41:03 +02:00
Rami Mosleh
4f25b8d58e Add issue to repairs for deprecated Simplepush YAML configuration (#75850) 2022-07-28 11:05:56 +02:00
GitHub Action
0317cbb388 [ci skip] Translation update 2022-07-28 00:25:05 +00:00
Rolf Berkenbosch
997f03d0ea Fix fetching MeteoAlarm XML data (#75840) 2022-07-27 23:50:41 +02:00
Franck Nijhof
f07d64e7db Raise YAML removal issue for Xbox (#75843) 2022-07-27 23:49:22 +02:00
Raman Gupta
4aa6300b8b Update zwave_js WS API names (#75797) 2022-07-27 23:42:17 +02:00
Raman Gupta
44f1d92890 Add new zwave_js notification parameters (#75796) 2022-07-27 23:40:44 +02:00
Zack Barett
b0c17d67df Add Leviton as a supported brand of ZwaveJS (#75729)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-07-27 23:39:39 +02:00
Franck Nijhof
ef9142f379 Fix temperature unit in evohome (#75842) 2022-07-27 13:58:58 -07:00
Paulus Schoutsen
b0f877eca2 Add issue_domain to repairs (#75839) 2022-07-27 22:53:51 +02:00
Tom Harris
4ffd6fc4be Add Insteon lock and load controller devices (#75632) 2022-07-27 10:06:33 -10:00
Paulus Schoutsen
04d00a9acd Remove learn more URL from Home Assistant alerts (#75838) 2022-07-27 21:59:43 +02:00
borky
2e4f13996f Set Level for MIOT purifiers as in python-miio (#75814)
* Set Level for MIOT purifiers as in python-miio

* Refactoring after review suggestion
2022-07-27 18:33:07 +02:00
Raman Gupta
3a8748bc93 Bump zwave-js-server-python to 0.40.0 (#75795) 2022-07-27 18:01:00 +02:00
IceBotYT
d99334eb07 Add LaCrosse View integration (#71896)
* Add new LaCrosse View integration

* Add new LaCrosse View integration

* Add retry logic

* Actually use the start time for the retry logic

* Get new token after 1 hour

* Replace retry logic with more reliable logic

* Improve test coverage

* Add device info and unique id to config entry

* Fix manufacturer name

* Improve token refresh and check sensor permission

* Improve test cover

* Add LaCrosse View to .strict-typing

* Remove empty fields in manifest.json

* Fix mypy

* Add retry logic for get_data

* Add missing break statement in retry decorator

* Fix requirements

* Finish suggestions by Allen Porter

* Suggestions by Allen Porter

* Fix typing issues with calls to get_locations and get_sensors
2022-07-27 07:37:22 -07:00
Franck Nijhof
7659555ce5 Bump version to 2022.9.0dev0 (#75818) 2022-07-27 15:55:52 +02:00
4064 changed files with 103263 additions and 29503 deletions

View File

@@ -56,7 +56,9 @@ omit =
homeassistant/components/ambient_station/sensor.py
homeassistant/components/amcrest/*
homeassistant/components/ampio/*
homeassistant/components/android_ip_webcam/*
homeassistant/components/android_ip_webcam/binary_sensor.py
homeassistant/components/android_ip_webcam/sensor.py
homeassistant/components/android_ip_webcam/switch.py
homeassistant/components/androidtv/diagnostics.py
homeassistant/components/anel_pwrctrl/switch.py
homeassistant/components/anthemav/media_player.py
@@ -137,6 +139,7 @@ omit =
homeassistant/components/bosch_shc/switch.py
homeassistant/components/braviatv/__init__.py
homeassistant/components/braviatv/const.py
homeassistant/components/braviatv/coordinator.py
homeassistant/components/braviatv/entity.py
homeassistant/components/braviatv/media_player.py
homeassistant/components/braviatv/remote.py
@@ -257,6 +260,11 @@ omit =
homeassistant/components/econet/const.py
homeassistant/components/econet/sensor.py
homeassistant/components/econet/water_heater.py
homeassistant/components/ecowitt/__init__.py
homeassistant/components/ecowitt/binary_sensor.py
homeassistant/components/ecowitt/diagnostics.py
homeassistant/components/ecowitt/entity.py
homeassistant/components/ecowitt/sensor.py
homeassistant/components/ecovacs/*
homeassistant/components/edl21/*
homeassistant/components/eddystone_temperature/sensor.py
@@ -309,8 +317,12 @@ omit =
homeassistant/components/epson/media_player.py
homeassistant/components/epsonworkforce/sensor.py
homeassistant/components/eq3btsmart/climate.py
homeassistant/components/escea/climate.py
homeassistant/components/escea/discovery.py
homeassistant/components/escea/__init__.py
homeassistant/components/esphome/__init__.py
homeassistant/components/esphome/binary_sensor.py
homeassistant/components/esphome/bluetooth.py
homeassistant/components/esphome/button.py
homeassistant/components/esphome/camera.py
homeassistant/components/esphome/climate.py
@@ -386,6 +398,8 @@ omit =
homeassistant/components/flick_electric/sensor.py
homeassistant/components/flock/notify.py
homeassistant/components/flume/__init__.py
homeassistant/components/flume/coordinator.py
homeassistant/components/flume/entity.py
homeassistant/components/flume/sensor.py
homeassistant/components/flunearyou/__init__.py
homeassistant/components/flunearyou/repairs.py
@@ -432,10 +446,10 @@ omit =
homeassistant/components/gitlab_ci/sensor.py
homeassistant/components/gitter/sensor.py
homeassistant/components/glances/__init__.py
homeassistant/components/glances/const.py
homeassistant/components/glances/sensor.py
homeassistant/components/goalfeed/*
homeassistant/components/goodwe/__init__.py
homeassistant/components/goodwe/button.py
homeassistant/components/goodwe/const.py
homeassistant/components/goodwe/number.py
homeassistant/components/goodwe/select.py
@@ -470,7 +484,6 @@ omit =
homeassistant/components/harmony/remote.py
homeassistant/components/harmony/util.py
homeassistant/components/haveibeenpwned/sensor.py
homeassistant/components/hdmi_cec/*
homeassistant/components/heatmiser/climate.py
homeassistant/components/hikvision/binary_sensor.py
homeassistant/components/hikvisioncam/switch.py
@@ -574,7 +587,7 @@ omit =
homeassistant/components/iqvia/sensor.py
homeassistant/components/irish_rail_transport/sensor.py
homeassistant/components/iss/__init__.py
homeassistant/components/iss/binary_sensor.py
homeassistant/components/iss/sensor.py
homeassistant/components/isy994/__init__.py
homeassistant/components/isy994/binary_sensor.py
homeassistant/components/isy994/climate.py
@@ -600,6 +613,10 @@ omit =
homeassistant/components/juicenet/number.py
homeassistant/components/juicenet/sensor.py
homeassistant/components/juicenet/switch.py
homeassistant/components/justnimbus/const.py
homeassistant/components/justnimbus/coordinator.py
homeassistant/components/justnimbus/entity.py
homeassistant/components/justnimbus/sensor.py
homeassistant/components/kaiterra/*
homeassistant/components/kankun/switch.py
homeassistant/components/keba/*
@@ -630,7 +647,12 @@ omit =
homeassistant/components/kostal_plenticore/switch.py
homeassistant/components/kwb/sensor.py
homeassistant/components/lacrosse/sensor.py
homeassistant/components/lametric/*
homeassistant/components/lametric/__init__.py
homeassistant/components/lametric/button.py
homeassistant/components/lametric/coordinator.py
homeassistant/components/lametric/entity.py
homeassistant/components/lametric/notify.py
homeassistant/components/lametric/number.py
homeassistant/components/lannouncer/notify.py
homeassistant/components/lastfm/sensor.py
homeassistant/components/launch_library/__init__.py
@@ -641,6 +663,9 @@ omit =
homeassistant/components/lcn/helpers.py
homeassistant/components/lcn/scene.py
homeassistant/components/lcn/services.py
homeassistant/components/led_ble/__init__.py
homeassistant/components/led_ble/light.py
homeassistant/components/led_ble/util.py
homeassistant/components/lg_netcast/media_player.py
homeassistant/components/lg_soundbar/media_player.py
homeassistant/components/life360/__init__.py
@@ -700,6 +725,10 @@ omit =
homeassistant/components/melcloud/const.py
homeassistant/components/melcloud/sensor.py
homeassistant/components/melcloud/water_heater.py
homeassistant/components/melnor/__init__.py
homeassistant/components/melnor/const.py
homeassistant/components/melnor/models.py
homeassistant/components/melnor/switch.py
homeassistant/components/message_bird/notify.py
homeassistant/components/met/weather.py
homeassistant/components/met_eireann/__init__.py
@@ -851,6 +880,8 @@ omit =
homeassistant/components/open_meteo/weather.py
homeassistant/components/opencv/*
homeassistant/components/openevse/sensor.py
homeassistant/components/openexchangerates/__init__.py
homeassistant/components/openexchangerates/coordinator.py
homeassistant/components/openexchangerates/sensor.py
homeassistant/components/opengarage/__init__.py
homeassistant/components/opengarage/binary_sensor.py
@@ -976,9 +1007,11 @@ omit =
homeassistant/components/raincloud/*
homeassistant/components/rainmachine/__init__.py
homeassistant/components/rainmachine/binary_sensor.py
homeassistant/components/rainmachine/button.py
homeassistant/components/rainmachine/model.py
homeassistant/components/rainmachine/sensor.py
homeassistant/components/rainmachine/switch.py
homeassistant/components/rainmachine/update.py
homeassistant/components/rainmachine/util.py
homeassistant/components/raspyrfm/*
homeassistant/components/recollect_waste/__init__.py
@@ -1183,6 +1216,7 @@ omit =
homeassistant/components/switchbot/const.py
homeassistant/components/switchbot/entity.py
homeassistant/components/switchbot/cover.py
homeassistant/components/switchbot/light.py
homeassistant/components/switchbot/sensor.py
homeassistant/components/switchbot/coordinator.py
homeassistant/components/switchmate/switch.py
@@ -1210,6 +1244,7 @@ omit =
homeassistant/components/system_bridge/binary_sensor.py
homeassistant/components/system_bridge/const.py
homeassistant/components/system_bridge/coordinator.py
homeassistant/components/system_bridge/media_source.py
homeassistant/components/system_bridge/sensor.py
homeassistant/components/systemmonitor/sensor.py
homeassistant/components/tado/__init__.py
@@ -1408,7 +1443,14 @@ omit =
homeassistant/components/volumio/__init__.py
homeassistant/components/volumio/browse_media.py
homeassistant/components/volumio/media_player.py
homeassistant/components/volvooncall/*
homeassistant/components/volvooncall/__init__.py
homeassistant/components/volvooncall/binary_sensor.py
homeassistant/components/volvooncall/const.py
homeassistant/components/volvooncall/device_tracker.py
homeassistant/components/volvooncall/errors.py
homeassistant/components/volvooncall/lock.py
homeassistant/components/volvooncall/sensor.py
homeassistant/components/volvooncall/switch.py
homeassistant/components/vulcan/__init__.py
homeassistant/components/vulcan/calendar.py
homeassistant/components/vulcan/fetch_data.py
@@ -1464,12 +1506,17 @@ omit =
homeassistant/components/xiaomi_miio/light.py
homeassistant/components/xiaomi_miio/number.py
homeassistant/components/xiaomi_miio/remote.py
homeassistant/components/xiaomi_miio/select.py
homeassistant/components/xiaomi_miio/sensor.py
homeassistant/components/xiaomi_miio/switch.py
homeassistant/components/xiaomi_tv/media_player.py
homeassistant/components/xmpp/notify.py
homeassistant/components/xs1/*
homeassistant/components/yalexs_ble/__init__.py
homeassistant/components/yalexs_ble/binary_sensor.py
homeassistant/components/yalexs_ble/entity.py
homeassistant/components/yalexs_ble/lock.py
homeassistant/components/yalexs_ble/sensor.py
homeassistant/components/yalexs_ble/util.py
homeassistant/components/yale_smart_alarm/__init__.py
homeassistant/components/yale_smart_alarm/alarm_control_panel.py
homeassistant/components/yale_smart_alarm/binary_sensor.py
@@ -1519,7 +1566,6 @@ omit =
homeassistant/components/zha/core/registries.py
homeassistant/components/zha/entity.py
homeassistant/components/zha/light.py
homeassistant/components/zha/sensor.py
homeassistant/components/zhong_hong/climate.py
homeassistant/components/ziggo_mediabox_xl/media_player.py
homeassistant/components/zoneminder/*

View File

@@ -22,8 +22,9 @@ on:
env:
CACHE_VERSION: 1
PIP_CACHE_VERSION: 1
HA_SHORT_VERSION: 2022.8
DEFAULT_PYTHON: 3.9
HA_SHORT_VERSION: 2022.9
DEFAULT_PYTHON: 3.9.14
ALL_PYTHON_VERSIONS: "['3.9.14', '3.10.7']"
PRE_COMMIT_CACHE: ~/.cache/pre-commit
PIP_CACHE: /tmp/pip-cache
SQLALCHEMY_WARN_20: 1
@@ -46,6 +47,7 @@ jobs:
pre-commit_cache_key: ${{ steps.generate_pre-commit_cache_key.outputs.key }}
python_cache_key: ${{ steps.generate_python_cache_key.outputs.key }}
requirements: ${{ steps.core.outputs.requirements }}
python_versions: ${{ steps.info.outputs.python_versions }}
test_full_suite: ${{ steps.info.outputs.test_full_suite }}
test_group_count: ${{ steps.info.outputs.test_group_count }}
test_groups: ${{ steps.info.outputs.test_groups }}
@@ -143,6 +145,8 @@ jobs:
fi
# Output & sent to GitHub Actions
echo "python_versions: ${ALL_PYTHON_VERSIONS}"
echo "::set-output name=python_versions::${ALL_PYTHON_VERSIONS}"
echo "test_full_suite: ${test_full_suite}"
echo "::set-output name=test_full_suite::${test_full_suite}"
echo "integrations_glob: ${integrations_glob}"
@@ -169,10 +173,9 @@ jobs:
uses: actions/setup-python@v4.1.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
cache: "pip"
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: venv
key: ${{ runner.os }}-venv-${{ needs.info.outputs.pre-commit_cache_key }}
@@ -185,7 +188,7 @@ jobs:
pip install "$(cat requirements_test.txt | grep pre-commit)"
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: ${{ env.PRE_COMMIT_CACHE }}
key: ${{ runner.os }}-pre-commit-${{ needs.info.outputs.pre-commit_cache_key }}
@@ -211,7 +214,7 @@ jobs:
python-version: ${{ env.DEFAULT_PYTHON }}
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: venv
key: ${{ runner.os }}-venv-${{ needs.info.outputs.pre-commit_cache_key }}
@@ -222,7 +225,7 @@ jobs:
exit 1
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: ${{ env.PRE_COMMIT_CACHE }}
key: ${{ runner.os }}-pre-commit-${{ needs.info.outputs.pre-commit_cache_key }}
@@ -260,7 +263,7 @@ jobs:
python-version: ${{ env.DEFAULT_PYTHON }}
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: venv
key: ${{ runner.os }}-venv-${{ needs.info.outputs.pre-commit_cache_key }}
@@ -271,7 +274,7 @@ jobs:
exit 1
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: ${{ env.PRE_COMMIT_CACHE }}
key: ${{ runner.os }}-pre-commit-${{ needs.info.outputs.pre-commit_cache_key }}
@@ -312,7 +315,7 @@ jobs:
python-version: ${{ env.DEFAULT_PYTHON }}
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: venv
key: ${{ runner.os }}-venv-${{ needs.info.outputs.pre-commit_cache_key }}
@@ -323,7 +326,7 @@ jobs:
exit 1
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: ${{ env.PRE_COMMIT_CACHE }}
key: ${{ runner.os }}-pre-commit-${{ needs.info.outputs.pre-commit_cache_key }}
@@ -353,7 +356,7 @@ jobs:
python-version: ${{ env.DEFAULT_PYTHON }}
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: venv
key: ${{ runner.os }}-venv-${{ needs.info.outputs.pre-commit_cache_key }}
@@ -364,7 +367,7 @@ jobs:
exit 1
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: ${{ env.PRE_COMMIT_CACHE }}
key: ${{ runner.os }}-pre-commit-${{ needs.info.outputs.pre-commit_cache_key }}
@@ -464,7 +467,7 @@ jobs:
timeout-minutes: 60
strategy:
matrix:
python-version: ["3.9", "3.10"]
python-version: ${{ fromJSON(needs.info.outputs.python_versions) }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.0.2
@@ -480,7 +483,7 @@ jobs:
env.HA_SHORT_VERSION }}-$(date -u '+%Y-%m-%dT%H:%M:%s')"
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: venv
key: >-
@@ -488,7 +491,7 @@ jobs:
needs.info.outputs.python_cache_key }}
- name: Restore pip wheel cache
if: steps.cache-venv.outputs.cache-hit != 'true'
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: ${{ env.PIP_CACHE }}
key: >-
@@ -538,7 +541,7 @@ jobs:
python-version: ${{ env.DEFAULT_PYTHON }}
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: venv
key: >-
@@ -570,7 +573,7 @@ jobs:
python-version: ${{ env.DEFAULT_PYTHON }}
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: venv
key: >-
@@ -603,7 +606,7 @@ jobs:
python-version: ${{ env.DEFAULT_PYTHON }}
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: venv
key: >-
@@ -647,7 +650,7 @@ jobs:
python-version: ${{ env.DEFAULT_PYTHON }}
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: venv
key: >-
@@ -683,7 +686,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.10"]
python-version: ${{ fromJson(needs.info.outputs.python_versions) }}
name: Run pip check ${{ matrix.python-version }}
steps:
- name: Check out code from GitHub
@@ -695,7 +698,7 @@ jobs:
python-version: ${{ matrix.python-version }}
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: venv
key: >-
@@ -730,7 +733,7 @@ jobs:
fail-fast: false
matrix:
group: ${{ fromJson(needs.info.outputs.test_groups) }}
python-version: ["3.9", "3.10"]
python-version: ${{ fromJson(needs.info.outputs.python_versions) }}
name: >-
Run tests Python ${{ matrix.python-version }} (${{ matrix.group }})
steps:
@@ -749,7 +752,7 @@ jobs:
python-version: ${{ matrix.python-version }}
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache@v3.0.5
uses: actions/cache@v3.0.8
with:
path: venv
key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{

View File

@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/asottile/pyupgrade
rev: v2.37.2
rev: v2.37.3
hooks:
- id: pyupgrade
args: [--py39-plus]
@@ -32,7 +32,7 @@ repos:
- flake8-docstrings==1.6.0
- pydocstyle==6.1.1
- flake8-comprehensions==3.10.0
- flake8-noqa==1.2.5
- flake8-noqa==1.2.8
- mccabe==0.6.1
files: ^(homeassistant|script|tests)/.+\.py$
- repo: https://github.com/PyCQA/bandit

View File

@@ -1,4 +1,5 @@
*.md
.strict-typing
azure-*.yml
docs/source/_templates/*
homeassistant/components/*/translations/*.json

View File

@@ -56,9 +56,12 @@ homeassistant.components.ambee.*
homeassistant.components.ambient_station.*
homeassistant.components.amcrest.*
homeassistant.components.ampio.*
homeassistant.components.anthemav.*
homeassistant.components.aseko_pool_live.*
homeassistant.components.asuswrt.*
homeassistant.components.auth.*
homeassistant.components.automation.*
homeassistant.components.awair.*
homeassistant.components.backup.*
homeassistant.components.baf.*
homeassistant.components.binary_sensor.*
@@ -95,6 +98,8 @@ homeassistant.components.energy.*
homeassistant.components.evil_genius_labs.*
homeassistant.components.fan.*
homeassistant.components.fastdotcom.*
homeassistant.components.feedreader.*
homeassistant.components.file_upload.*
homeassistant.components.filesize.*
homeassistant.components.fitbit.*
homeassistant.components.flunearyou.*
@@ -105,6 +110,7 @@ homeassistant.components.fritzbox_callmonitor.*
homeassistant.components.fronius.*
homeassistant.components.frontend.*
homeassistant.components.fritz.*
homeassistant.components.fully_kiosk.*
homeassistant.components.geo_location.*
homeassistant.components.geocaching.*
homeassistant.components.gios.*
@@ -149,6 +155,7 @@ homeassistant.components.jewish_calendar.*
homeassistant.components.kaleidescape.*
homeassistant.components.knx.*
homeassistant.components.kraken.*
homeassistant.components.lacrosse_view.*
homeassistant.components.lametric.*
homeassistant.components.laundrify.*
homeassistant.components.lcn.*
@@ -164,6 +171,7 @@ homeassistant.components.mailbox.*
homeassistant.components.media_player.*
homeassistant.components.media_source.*
homeassistant.components.metoffice.*
homeassistant.components.mikrotik.*
homeassistant.components.mjpeg.*
homeassistant.components.modbus.*
homeassistant.components.modem_callerid.*
@@ -185,6 +193,7 @@ homeassistant.components.nut.*
homeassistant.components.oncue.*
homeassistant.components.onewire.*
homeassistant.components.open_meteo.*
homeassistant.components.openexchangerates.*
homeassistant.components.openuv.*
homeassistant.components.peco.*
homeassistant.components.overkiz.*
@@ -192,6 +201,7 @@ homeassistant.components.persistent_notification.*
homeassistant.components.pi_hole.*
homeassistant.components.powerwall.*
homeassistant.components.proximity.*
homeassistant.components.prusalink.*
homeassistant.components.pvoutput.*
homeassistant.components.pure_energie.*
homeassistant.components.qnap_qsw.*
@@ -210,6 +220,7 @@ homeassistant.components.rpi_power.*
homeassistant.components.rtsp_to_webrtc.*
homeassistant.components.samsungtv.*
homeassistant.components.scene.*
homeassistant.components.schedule.*
homeassistant.components.select.*
homeassistant.components.sensibo.*
homeassistant.components.sensor.*

View File

@@ -72,6 +72,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/amcrest/ @flacjacket
/homeassistant/components/analytics/ @home-assistant/core @ludeeus
/tests/components/analytics/ @home-assistant/core @ludeeus
/homeassistant/components/android_ip_webcam/ @engrbm87
/tests/components/android_ip_webcam/ @engrbm87
/homeassistant/components/androidtv/ @JeffLIrion @ollo69
/tests/components/androidtv/ @JeffLIrion @ollo69
/homeassistant/components/anthemav/ @hyralex
@@ -135,6 +137,8 @@ build.json @home-assistant/supervisor
/tests/components/blebox/ @bbx-a @riokuu
/homeassistant/components/blink/ @fronzbot
/tests/components/blink/ @fronzbot
/homeassistant/components/bluemaestro/ @bdraco
/tests/components/bluemaestro/ @bdraco
/homeassistant/components/blueprint/ @home-assistant/core
/tests/components/blueprint/ @home-assistant/core
/homeassistant/components/bluesound/ @thrawnarn
@@ -157,6 +161,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/bsblan/ @liudger
/tests/components/bsblan/ @liudger
/homeassistant/components/bt_smarthub/ @jxwolstenholme
/homeassistant/components/bthome/ @Ernst79
/tests/components/bthome/ @Ernst79
/homeassistant/components/buienradar/ @mjj4791 @ties @Robbie1221
/tests/components/buienradar/ @mjj4791 @ties @Robbie1221
/homeassistant/components/button/ @home-assistant/core
@@ -271,7 +277,9 @@ build.json @home-assistant/supervisor
/tests/components/ecobee/ @marthoc
/homeassistant/components/econet/ @vangorra @w1ll1am23
/tests/components/econet/ @vangorra @w1ll1am23
/homeassistant/components/ecovacs/ @OverloadUT
/homeassistant/components/ecovacs/ @OverloadUT @mib1185
/homeassistant/components/ecowitt/ @pvizeli
/tests/components/ecowitt/ @pvizeli
/homeassistant/components/edl21/ @mtdcr
/homeassistant/components/efergy/ @tkdrob
/tests/components/efergy/ @tkdrob
@@ -309,6 +317,8 @@ build.json @home-assistant/supervisor
/tests/components/epson/ @pszafer
/homeassistant/components/epsonworkforce/ @ThaStealth
/homeassistant/components/eq3btsmart/ @rytilahti
/homeassistant/components/escea/ @lazdavila
/tests/components/escea/ @lazdavila
/homeassistant/components/esphome/ @OttoWinter @jesserockz
/tests/components/esphome/ @OttoWinter @jesserockz
/homeassistant/components/evil_genius_labs/ @balloob
@@ -325,6 +335,8 @@ build.json @home-assistant/supervisor
/tests/components/fibaro/ @rappenze
/homeassistant/components/file/ @fabaff
/tests/components/file/ @fabaff
/homeassistant/components/file_upload/ @home-assistant/core
/tests/components/file_upload/ @home-assistant/core
/homeassistant/components/filesize/ @gjohansson-ST
/tests/components/filesize/ @gjohansson-ST
/homeassistant/components/filter/ @dgomes
@@ -343,8 +355,8 @@ build.json @home-assistant/supervisor
/tests/components/flipr/ @cnico
/homeassistant/components/flo/ @dmulcahey
/tests/components/flo/ @dmulcahey
/homeassistant/components/flume/ @ChrisMandich @bdraco
/tests/components/flume/ @ChrisMandich @bdraco
/homeassistant/components/flume/ @ChrisMandich @bdraco @jeeftor
/tests/components/flume/ @ChrisMandich @bdraco @jeeftor
/homeassistant/components/flunearyou/ @bachya
/tests/components/flunearyou/ @bachya
/homeassistant/components/flux_led/ @icemanch @bdraco
@@ -371,6 +383,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/frontend/ @home-assistant/frontend
/tests/components/frontend/ @home-assistant/frontend
/homeassistant/components/frontier_silicon/ @wlcrs
/homeassistant/components/fully_kiosk/ @cgarwood
/tests/components/fully_kiosk/ @cgarwood
/homeassistant/components/garages_amsterdam/ @klaasnicolaas
/tests/components/garages_amsterdam/ @klaasnicolaas
/homeassistant/components/gdacs/ @exxamalte
@@ -434,6 +448,8 @@ build.json @home-assistant/supervisor
/tests/components/harmony/ @ehendrix23 @bramkragten @bdraco @mkeesey @Aohzan
/homeassistant/components/hassio/ @home-assistant/supervisor
/tests/components/hassio/ @home-assistant/supervisor
/homeassistant/components/hdmi_cec/ @inytar
/tests/components/hdmi_cec/ @inytar
/homeassistant/components/heatmiser/ @andylockran
/homeassistant/components/heos/ @andrewsayre
/tests/components/heos/ @andrewsayre
@@ -457,6 +473,8 @@ build.json @home-assistant/supervisor
/tests/components/homeassistant/ @home-assistant/core
/homeassistant/components/homeassistant_alerts/ @home-assistant/core
/tests/components/homeassistant_alerts/ @home-assistant/core
/homeassistant/components/homeassistant_sky_connect/ @home-assistant/core
/tests/components/homeassistant_sky_connect/ @home-assistant/core
/homeassistant/components/homeassistant_yellow/ @home-assistant/core
/tests/components/homeassistant_yellow/ @home-assistant/core
/homeassistant/components/homekit/ @bdraco
@@ -551,6 +569,8 @@ build.json @home-assistant/supervisor
/tests/components/jewish_calendar/ @tsvi
/homeassistant/components/juicenet/ @jesserockz
/tests/components/juicenet/ @jesserockz
/homeassistant/components/justnimbus/ @kvanzuijlen
/tests/components/justnimbus/ @kvanzuijlen
/homeassistant/components/kaiterra/ @Michsior14
/homeassistant/components/kaleidescape/ @SteveEasley
/tests/components/kaleidescape/ @SteveEasley
@@ -573,13 +593,20 @@ build.json @home-assistant/supervisor
/tests/components/kraken/ @eifinger
/homeassistant/components/kulersky/ @emlove
/tests/components/kulersky/ @emlove
/homeassistant/components/lacrosse_view/ @IceBotYT
/tests/components/lacrosse_view/ @IceBotYT
/homeassistant/components/lametric/ @robbiet480 @frenck
/tests/components/lametric/ @robbiet480 @frenck
/homeassistant/components/landisgyr_heat_meter/ @vpathuis
/tests/components/landisgyr_heat_meter/ @vpathuis
/homeassistant/components/launch_library/ @ludeeus @DurgNomis-drol
/tests/components/launch_library/ @ludeeus @DurgNomis-drol
/homeassistant/components/laundrify/ @xLarry
/tests/components/laundrify/ @xLarry
/homeassistant/components/lcn/ @alengwenus
/tests/components/lcn/ @alengwenus
/homeassistant/components/led_ble/ @bdraco
/tests/components/led_ble/ @bdraco
/homeassistant/components/lg_netcast/ @Drafteed
/homeassistant/components/life360/ @pnbruckner
/tests/components/life360/ @pnbruckner
@@ -590,8 +617,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/linux_battery/ @fabaff
/homeassistant/components/litejet/ @joncar
/tests/components/litejet/ @joncar
/homeassistant/components/litterrobot/ @natekspencer
/tests/components/litterrobot/ @natekspencer
/homeassistant/components/litterrobot/ @natekspencer @tkdrob
/tests/components/litterrobot/ @natekspencer @tkdrob
/homeassistant/components/local_ip/ @issacg
/tests/components/local_ip/ @issacg
/homeassistant/components/lock/ @home-assistant/core
@@ -611,8 +638,8 @@ build.json @home-assistant/supervisor
/tests/components/luftdaten/ @fabaff @frenck
/homeassistant/components/lupusec/ @majuss
/homeassistant/components/lutron/ @JonGilmore
/homeassistant/components/lutron_caseta/ @swails @bdraco
/tests/components/lutron_caseta/ @swails @bdraco
/homeassistant/components/lutron_caseta/ @swails @bdraco @danaues
/tests/components/lutron_caseta/ @swails @bdraco @danaues
/homeassistant/components/lyric/ @timmo001
/tests/components/lyric/ @timmo001
/homeassistant/components/mastodon/ @fabaff
@@ -630,6 +657,8 @@ build.json @home-assistant/supervisor
/tests/components/melcloud/ @vilppuvuorinen
/homeassistant/components/melissa/ @kennedyshead
/tests/components/melissa/ @kennedyshead
/homeassistant/components/melnor/ @vanstinator
/tests/components/melnor/ @vanstinator
/homeassistant/components/met/ @danielhiversen @thimic
/tests/components/met/ @danielhiversen @thimic
/homeassistant/components/met_eireann/ @DylanGore
@@ -764,6 +793,8 @@ build.json @home-assistant/supervisor
/tests/components/open_meteo/ @frenck
/homeassistant/components/openerz/ @misialq
/tests/components/openerz/ @misialq
/homeassistant/components/openexchangerates/ @MartinHjelmare
/tests/components/openexchangerates/ @MartinHjelmare
/homeassistant/components/opengarage/ @danielhiversen
/tests/components/opengarage/ @danielhiversen
/homeassistant/components/openhome/ @bazwilliams
@@ -821,17 +852,23 @@ build.json @home-assistant/supervisor
/homeassistant/components/prosegur/ @dgomes
/tests/components/prosegur/ @dgomes
/homeassistant/components/proxmoxve/ @jhollowe @Corbeno
/homeassistant/components/prusalink/ @balloob
/tests/components/prusalink/ @balloob
/homeassistant/components/ps4/ @ktnrg45
/tests/components/ps4/ @ktnrg45
/homeassistant/components/pure_energie/ @klaasnicolaas
/tests/components/pure_energie/ @klaasnicolaas
/homeassistant/components/push/ @dgomes
/tests/components/push/ @dgomes
/homeassistant/components/pushover/ @engrbm87
/tests/components/pushover/ @engrbm87
/homeassistant/components/pvoutput/ @frenck
/tests/components/pvoutput/ @frenck
/homeassistant/components/pvpc_hourly_pricing/ @azogue
/tests/components/pvpc_hourly_pricing/ @azogue
/homeassistant/components/qbittorrent/ @geoffreylagaisse
/homeassistant/components/qingping/ @bdraco @skgsergio
/tests/components/qingping/ @bdraco @skgsergio
/homeassistant/components/qld_bushfire/ @exxamalte
/tests/components/qld_bushfire/ @exxamalte
/homeassistant/components/qnap_qsw/ @Noltari
@@ -909,6 +946,8 @@ build.json @home-assistant/supervisor
/tests/components/samsungtv/ @chemelli74 @epenet
/homeassistant/components/scene/ @home-assistant/core
/tests/components/scene/ @home-assistant/core
/homeassistant/components/schedule/ @home-assistant/core
/tests/components/schedule/ @home-assistant/core
/homeassistant/components/schluter/ @prairieapps
/homeassistant/components/scrape/ @fabaff
/tests/components/scrape/ @fabaff
@@ -930,6 +969,8 @@ build.json @home-assistant/supervisor
/tests/components/sensibo/ @andrey-git @gjohansson-ST
/homeassistant/components/sensor/ @home-assistant/core
/tests/components/sensor/ @home-assistant/core
/homeassistant/components/sensorpro/ @bdraco
/tests/components/sensorpro/ @bdraco
/homeassistant/components/sensorpush/ @bdraco
/tests/components/sensorpush/ @bdraco
/homeassistant/components/sentry/ @dcramer @frenck
@@ -1078,6 +1119,10 @@ build.json @home-assistant/supervisor
/homeassistant/components/tesla_wall_connector/ @einarhauks
/tests/components/tesla_wall_connector/ @einarhauks
/homeassistant/components/tfiac/ @fredrike @mellado
/homeassistant/components/thermobeacon/ @bdraco
/tests/components/thermobeacon/ @bdraco
/homeassistant/components/thermopro/ @bdraco
/tests/components/thermopro/ @bdraco
/homeassistant/components/thethingsnetwork/ @fabaff
/homeassistant/components/threshold/ @fabaff
/tests/components/threshold/ @fabaff
@@ -1173,7 +1218,8 @@ build.json @home-assistant/supervisor
/tests/components/vlc_telnet/ @rodripf @MartinHjelmare
/homeassistant/components/volumio/ @OnFreund
/tests/components/volumio/ @OnFreund
/homeassistant/components/volvooncall/ @molobrakos @decompil3d
/homeassistant/components/volvooncall/ @molobrakos
/tests/components/volvooncall/ @molobrakos
/homeassistant/components/vulcan/ @Antoni-Czaplicki
/tests/components/vulcan/ @Antoni-Czaplicki
/homeassistant/components/wake_on_lan/ @ntilley905
@@ -1234,6 +1280,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/xmpp/ @fabaff @flowolf
/homeassistant/components/yale_smart_alarm/ @gjohansson-ST
/tests/components/yale_smart_alarm/ @gjohansson-ST
/homeassistant/components/yalexs_ble/ @bdraco
/tests/components/yalexs_ble/ @bdraco
/homeassistant/components/yamaha_musiccast/ @vigonotion @micha91
/tests/components/yamaha_musiccast/ @vigonotion @micha91
/homeassistant/components/yandex_transport/ @rishatik92 @devbis

View File

@@ -12,7 +12,7 @@ demo <https://home-assistant.io/demo/>`__, `installation instructions <https://h
Featured integrations
---------------------
|screenshot-components|
|screenshot-integrations|
The system is built using a modular approach so support for other devices or actions can be implemented easily. See also the `section on architecture <https://developers.home-assistant.io/docs/architecture_index/>`__ and the `section on creating your own
components <https://developers.home-assistant.io/docs/creating_component_index/>`__.
@@ -24,5 +24,5 @@ of a component, check the `Home Assistant help section <https://home-assistant.i
:target: https://discord.gg/c5DvZ4e
.. |screenshot-states| image:: https://raw.githubusercontent.com/home-assistant/core/master/docs/screenshots.png
:target: https://home-assistant.io/demo/
.. |screenshot-components| image:: https://raw.githubusercontent.com/home-assistant/core/dev/docs/screenshot-components.png
.. |screenshot-integrations| image:: https://raw.githubusercontent.com/home-assistant/core/dev/docs/screenshot-integrations.png
:target: https://home-assistant.io/integrations/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

View File

@@ -24,7 +24,13 @@ from .const import (
SIGNAL_BOOTSTRAP_INTEGRATONS,
)
from .exceptions import HomeAssistantError
from .helpers import area_registry, device_registry, entity_registry, recorder
from .helpers import (
area_registry,
device_registry,
entity_registry,
issue_registry,
recorder,
)
from .helpers.dispatcher import async_dispatcher_send
from .helpers.typing import ConfigType
from .setup import (
@@ -521,9 +527,10 @@ async def _async_set_up_integrations(
# Load the registries and cache the result of platform.uname().processor
await asyncio.gather(
area_registry.async_load(hass),
device_registry.async_load(hass),
entity_registry.async_load(hass),
area_registry.async_load(hass),
issue_registry.async_load(hass),
hass.async_add_executor_job(_cache_uname_processor),
)

View File

@@ -248,6 +248,7 @@ class AbodeEntity(entity.Entity):
"""Representation of an Abode entity."""
_attr_attribution = ATTRIBUTION
_attr_has_entity_name = True
def __init__(self, data: AbodeSystem) -> None:
"""Initialize Abode entity."""
@@ -283,7 +284,6 @@ class AbodeDevice(AbodeEntity):
"""Initialize Abode device."""
super().__init__(data)
self._device = device
self._attr_name = device.name
self._attr_unique_id = device.device_uuid
async def async_added_to_hass(self) -> None:

View File

@@ -30,12 +30,10 @@ async def async_setup_entry(
CONST.TYPE_OPENING,
]
entities = []
for device in data.abode.get_devices(generic_type=device_types):
entities.append(AbodeBinarySensor(data, device))
async_add_entities(entities)
async_add_entities(
AbodeBinarySensor(data, device)
for device in data.abode.get_devices(generic_type=device_types)
)
class AbodeBinarySensor(AbodeDevice, BinarySensorEntity):

View File

@@ -28,12 +28,11 @@ async def async_setup_entry(
) -> None:
"""Set up Abode camera devices."""
data: AbodeSystem = hass.data[DOMAIN]
entities = []
for device in data.abode.get_devices(generic_type=CONST.TYPE_CAMERA):
entities.append(AbodeCamera(data, device, TIMELINE.CAPTURE_IMAGE))
async_add_entities(entities)
async_add_entities(
AbodeCamera(data, device, TIMELINE.CAPTURE_IMAGE)
for device in data.abode.get_devices(generic_type=CONST.TYPE_CAMERA)
)
class AbodeCamera(AbodeDevice, Camera):
@@ -75,7 +74,9 @@ class AbodeCamera(AbodeDevice, Camera):
"""Attempt to download the most recent capture."""
if self._device.image_url:
try:
self._response = requests.get(self._device.image_url, stream=True)
self._response = requests.get(
self._device.image_url, stream=True, timeout=10
)
self._response.raise_for_status()
except requests.HTTPError as err:

View File

@@ -19,12 +19,10 @@ async def async_setup_entry(
"""Set up Abode cover devices."""
data: AbodeSystem = hass.data[DOMAIN]
entities = []
for device in data.abode.get_devices(generic_type=CONST.TYPE_COVER):
entities.append(AbodeCover(data, device))
async_add_entities(entities)
async_add_entities(
AbodeCover(data, device)
for device in data.abode.get_devices(generic_type=CONST.TYPE_COVER)
)
class AbodeCover(AbodeDevice, CoverEntity):

View File

@@ -32,12 +32,10 @@ async def async_setup_entry(
"""Set up Abode light devices."""
data: AbodeSystem = hass.data[DOMAIN]
entities = []
for device in data.abode.get_devices(generic_type=CONST.TYPE_LIGHT):
entities.append(AbodeLight(data, device))
async_add_entities(entities)
async_add_entities(
AbodeLight(data, device)
for device in data.abode.get_devices(generic_type=CONST.TYPE_LIGHT)
)
class AbodeLight(AbodeDevice, LightEntity):

View File

@@ -19,12 +19,10 @@ async def async_setup_entry(
"""Set up Abode lock devices."""
data: AbodeSystem = hass.data[DOMAIN]
entities = []
for device in data.abode.get_devices(generic_type=CONST.TYPE_LOCK):
entities.append(AbodeLock(data, device))
async_add_entities(entities)
async_add_entities(
AbodeLock(data, device)
for device in data.abode.get_devices(generic_type=CONST.TYPE_LOCK)
)
class AbodeLock(AbodeDevice, LockEntity):

View File

@@ -42,19 +42,12 @@ async def async_setup_entry(
"""Set up Abode sensor devices."""
data: AbodeSystem = hass.data[DOMAIN]
entities = []
for device in data.abode.get_devices(generic_type=CONST.TYPE_SENSOR):
conditions = device.get_value(CONST.STATUSES_KEY)
entities.extend(
[
AbodeSensor(data, device, description)
for description in SENSOR_TYPES
if description.key in conditions
]
)
async_add_entities(entities)
async_add_entities(
AbodeSensor(data, device, description)
for description in SENSOR_TYPES
for device in data.abode.get_devices(generic_type=CONST.TYPE_SENSOR)
if description.key in device.get_value(CONST.STATUSES_KEY)
)
class AbodeSensor(AbodeDevice, SensorEntity):
@@ -71,7 +64,6 @@ class AbodeSensor(AbodeDevice, SensorEntity):
"""Initialize a sensor for an Abode device."""
super().__init__(data, device)
self.entity_description = description
self._attr_name = f"{device.name} {description.name}"
self._attr_unique_id = f"{device.device_uuid}-{description.key}"
if description.key == CONST.TEMP_STATUS_KEY:
self._attr_native_unit_of_measurement = device.temp_unit

View File

@@ -25,14 +25,16 @@ async def async_setup_entry(
"""Set up Abode switch devices."""
data: AbodeSystem = hass.data[DOMAIN]
entities: list[SwitchEntity] = []
entities: list[SwitchEntity] = [
AbodeSwitch(data, device)
for device_type in DEVICE_TYPES
for device in data.abode.get_devices(generic_type=device_type)
]
for device_type in DEVICE_TYPES:
for device in data.abode.get_devices(generic_type=device_type):
entities.append(AbodeSwitch(data, device))
for automation in data.abode.get_automations():
entities.append(AbodeAutomationSwitch(data, automation))
entities.extend(
AbodeAutomationSwitch(data, automation)
for automation in data.abode.get_automations()
)
async_add_entities(entities)

View File

@@ -7,7 +7,7 @@
"error": {
"cannot_connect": "No se pudo conectar",
"invalid_auth": "Autenticaci\u00f3n no v\u00e1lida",
"invalid_mfa_code": "C\u00f3digo MFA inv\u00e1lido"
"invalid_mfa_code": "C\u00f3digo MFA no v\u00e1lido"
},
"step": {
"mfa": {
@@ -21,14 +21,14 @@
"password": "Contrase\u00f1a",
"username": "Correo electr\u00f3nico"
},
"title": "Rellene su informaci\u00f3n de inicio de sesi\u00f3n de Abode"
"title": "Completa tu informaci\u00f3n de inicio de sesi\u00f3n de Abode"
},
"user": {
"data": {
"password": "Contrase\u00f1a",
"username": "Correo electr\u00f3nico"
},
"title": "Rellene la informaci\u00f3n de acceso Abode"
"title": "Completa tu informaci\u00f3n de inicio de sesi\u00f3n de Abode"
}
}
}

View File

@@ -1,13 +1,27 @@
{
"config": {
"abort": {
"reauth_successful": "\u00c5terautentisering lyckades",
"single_instance_allowed": "Endast en enda konfiguration av Abode \u00e4r till\u00e5ten."
},
"error": {
"cannot_connect": "Det gick inte att ansluta.",
"invalid_auth": "Ogiltig autentisering",
"invalid_mfa_code": "Ogiltig MFA-kod"
},
"step": {
"mfa": {
"data": {
"mfa_code": "MFA-kod (6 siffror)"
},
"title": "Ange din MFA-kod f\u00f6r Abode"
},
"reauth_confirm": {
"data": {
"password": "L\u00f6senord",
"username": "E-postadress"
}
},
"title": "Fyll i din Abode-inloggningsinformation"
},
"user": {
"data": {

View File

@@ -81,7 +81,6 @@ class AccuWeatherDataUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]):
"""Initialize."""
self.location_key = location_key
self.forecast = forecast
self.is_metric = hass.config.units.is_metric
self.accuweather = AccuWeather(api_key, session, location_key=location_key)
self.device_info = DeviceInfo(
entry_type=DeviceEntryType.SERVICE,
@@ -116,7 +115,9 @@ class AccuWeatherDataUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]):
async with timeout(10):
current = await self.accuweather.async_get_current_conditions()
forecast = (
await self.accuweather.async_get_forecast(metric=self.is_metric)
await self.accuweather.async_get_forecast(
metric=self.hass.config.units.is_metric
)
if self.forecast
else {}
)

View File

@@ -23,7 +23,13 @@ from homeassistant.components.weather import (
API_IMPERIAL: Final = "Imperial"
API_METRIC: Final = "Metric"
ATTRIBUTION: Final = "Data provided by AccuWeather"
ATTR_CATEGORY: Final = "Category"
ATTR_DIRECTION: Final = "Direction"
ATTR_ENGLISH: Final = "English"
ATTR_LEVEL: Final = "level"
ATTR_FORECAST: Final = "forecast"
ATTR_SPEED: Final = "Speed"
ATTR_VALUE: Final = "Value"
CONF_FORECAST: Final = "forecast"
DOMAIN: Final = "accuweather"
MANUFACTURER: Final = "AccuWeather, Inc."

View File

@@ -2,7 +2,7 @@
"domain": "accuweather",
"name": "AccuWeather",
"documentation": "https://www.home-assistant.io/integrations/accuweather/",
"requirements": ["accuweather==0.3.0"],
"requirements": ["accuweather==0.4.0"],
"codeowners": ["@bieniu"],
"config_flow": true,
"quality_scale": "platinum",

View File

@@ -1,6 +1,7 @@
"""Support for the AccuWeather service."""
from __future__ import annotations
from collections.abc import Callable
from dataclasses import dataclass
from typing import Any, cast
@@ -34,7 +35,13 @@ from . import AccuWeatherDataUpdateCoordinator
from .const import (
API_IMPERIAL,
API_METRIC,
ATTR_CATEGORY,
ATTR_DIRECTION,
ATTR_ENGLISH,
ATTR_FORECAST,
ATTR_LEVEL,
ATTR_SPEED,
ATTR_VALUE,
ATTRIBUTION,
DOMAIN,
MAX_FORECAST_DAYS,
@@ -44,11 +51,20 @@ PARALLEL_UPDATES = 1
@dataclass
class AccuWeatherSensorDescription(SensorEntityDescription):
class AccuWeatherSensorDescriptionMixin:
"""Mixin for AccuWeather sensor."""
value_fn: Callable[[dict[str, Any], str], StateType]
@dataclass
class AccuWeatherSensorDescription(
SensorEntityDescription, AccuWeatherSensorDescriptionMixin
):
"""Class describing AccuWeather sensor entities."""
unit_metric: str | None = None
unit_imperial: str | None = None
attr_fn: Callable[[dict[str, Any]], dict[str, StateType]] = lambda _: {}
unit_fn: Callable[[bool], str | None] = lambda _: None
FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
@@ -56,145 +72,162 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
key="CloudCoverDay",
icon="mdi:weather-cloudy",
name="Cloud cover day",
unit_metric=PERCENTAGE,
unit_imperial=PERCENTAGE,
entity_registry_enabled_default=False,
unit_fn=lambda _: PERCENTAGE,
value_fn=lambda data, _: cast(int, data),
),
AccuWeatherSensorDescription(
key="CloudCoverNight",
icon="mdi:weather-cloudy",
name="Cloud cover night",
unit_metric=PERCENTAGE,
unit_imperial=PERCENTAGE,
entity_registry_enabled_default=False,
unit_fn=lambda _: PERCENTAGE,
value_fn=lambda data, _: cast(int, data),
),
AccuWeatherSensorDescription(
key="Grass",
icon="mdi:grass",
name="Grass pollen",
unit_metric=CONCENTRATION_PARTS_PER_CUBIC_METER,
unit_imperial=CONCENTRATION_PARTS_PER_CUBIC_METER,
entity_registry_enabled_default=False,
unit_fn=lambda _: CONCENTRATION_PARTS_PER_CUBIC_METER,
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
),
AccuWeatherSensorDescription(
key="HoursOfSun",
icon="mdi:weather-partly-cloudy",
name="Hours of sun",
unit_metric=TIME_HOURS,
unit_imperial=TIME_HOURS,
unit_fn=lambda _: TIME_HOURS,
value_fn=lambda data, _: cast(float, data),
),
AccuWeatherSensorDescription(
key="Mold",
icon="mdi:blur",
name="Mold pollen",
unit_metric=CONCENTRATION_PARTS_PER_CUBIC_METER,
unit_imperial=CONCENTRATION_PARTS_PER_CUBIC_METER,
entity_registry_enabled_default=False,
unit_fn=lambda _: CONCENTRATION_PARTS_PER_CUBIC_METER,
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
),
AccuWeatherSensorDescription(
key="Ozone",
icon="mdi:vector-triangle",
name="Ozone",
unit_metric=None,
unit_imperial=None,
entity_registry_enabled_default=False,
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
),
AccuWeatherSensorDescription(
key="Ragweed",
icon="mdi:sprout",
name="Ragweed pollen",
unit_metric=CONCENTRATION_PARTS_PER_CUBIC_METER,
unit_imperial=CONCENTRATION_PARTS_PER_CUBIC_METER,
unit_fn=lambda _: CONCENTRATION_PARTS_PER_CUBIC_METER,
entity_registry_enabled_default=False,
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
),
AccuWeatherSensorDescription(
key="RealFeelTemperatureMax",
device_class=SensorDeviceClass.TEMPERATURE,
name="RealFeel temperature max",
unit_metric=TEMP_CELSIUS,
unit_imperial=TEMP_FAHRENHEIT,
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
value_fn=lambda data, _: cast(float, data[ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="RealFeelTemperatureMin",
device_class=SensorDeviceClass.TEMPERATURE,
name="RealFeel temperature min",
unit_metric=TEMP_CELSIUS,
unit_imperial=TEMP_FAHRENHEIT,
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
value_fn=lambda data, _: cast(float, data[ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="RealFeelTemperatureShadeMax",
device_class=SensorDeviceClass.TEMPERATURE,
name="RealFeel temperature shade max",
unit_metric=TEMP_CELSIUS,
unit_imperial=TEMP_FAHRENHEIT,
entity_registry_enabled_default=False,
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
value_fn=lambda data, _: cast(float, data[ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="RealFeelTemperatureShadeMin",
device_class=SensorDeviceClass.TEMPERATURE,
name="RealFeel temperature shade min",
unit_metric=TEMP_CELSIUS,
unit_imperial=TEMP_FAHRENHEIT,
entity_registry_enabled_default=False,
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
value_fn=lambda data, _: cast(float, data[ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="ThunderstormProbabilityDay",
icon="mdi:weather-lightning",
name="Thunderstorm probability day",
unit_metric=PERCENTAGE,
unit_imperial=PERCENTAGE,
unit_fn=lambda _: PERCENTAGE,
value_fn=lambda data, _: cast(int, data),
),
AccuWeatherSensorDescription(
key="ThunderstormProbabilityNight",
icon="mdi:weather-lightning",
name="Thunderstorm probability night",
unit_metric=PERCENTAGE,
unit_imperial=PERCENTAGE,
unit_fn=lambda _: PERCENTAGE,
value_fn=lambda data, _: cast(int, data),
),
AccuWeatherSensorDescription(
key="Tree",
icon="mdi:tree-outline",
name="Tree pollen",
unit_metric=CONCENTRATION_PARTS_PER_CUBIC_METER,
unit_imperial=CONCENTRATION_PARTS_PER_CUBIC_METER,
unit_fn=lambda _: CONCENTRATION_PARTS_PER_CUBIC_METER,
entity_registry_enabled_default=False,
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
),
AccuWeatherSensorDescription(
key="UVIndex",
icon="mdi:weather-sunny",
name="UV index",
unit_metric=UV_INDEX,
unit_imperial=UV_INDEX,
unit_fn=lambda _: UV_INDEX,
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
),
AccuWeatherSensorDescription(
key="WindGustDay",
icon="mdi:weather-windy",
name="Wind gust day",
unit_metric=SPEED_KILOMETERS_PER_HOUR,
unit_imperial=SPEED_MILES_PER_HOUR,
entity_registry_enabled_default=False,
unit_fn=lambda metric: SPEED_KILOMETERS_PER_HOUR
if metric
else SPEED_MILES_PER_HOUR,
value_fn=lambda data, _: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
),
AccuWeatherSensorDescription(
key="WindGustNight",
icon="mdi:weather-windy",
name="Wind gust night",
unit_metric=SPEED_KILOMETERS_PER_HOUR,
unit_imperial=SPEED_MILES_PER_HOUR,
entity_registry_enabled_default=False,
unit_fn=lambda metric: SPEED_KILOMETERS_PER_HOUR
if metric
else SPEED_MILES_PER_HOUR,
value_fn=lambda data, _: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
),
AccuWeatherSensorDescription(
key="WindDay",
icon="mdi:weather-windy",
name="Wind day",
unit_metric=SPEED_KILOMETERS_PER_HOUR,
unit_imperial=SPEED_MILES_PER_HOUR,
unit_fn=lambda metric: SPEED_KILOMETERS_PER_HOUR
if metric
else SPEED_MILES_PER_HOUR,
value_fn=lambda data, _: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
),
AccuWeatherSensorDescription(
key="WindNight",
icon="mdi:weather-windy",
name="Wind night",
unit_metric=SPEED_KILOMETERS_PER_HOUR,
unit_imperial=SPEED_MILES_PER_HOUR,
unit_fn=lambda metric: SPEED_KILOMETERS_PER_HOUR
if metric
else SPEED_MILES_PER_HOUR,
value_fn=lambda data, _: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
),
)
@@ -203,112 +236,117 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
key="ApparentTemperature",
device_class=SensorDeviceClass.TEMPERATURE,
name="Apparent temperature",
unit_metric=TEMP_CELSIUS,
unit_imperial=TEMP_FAHRENHEIT,
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="Ceiling",
icon="mdi:weather-fog",
name="Cloud ceiling",
unit_metric=LENGTH_METERS,
unit_imperial=LENGTH_FEET,
state_class=SensorStateClass.MEASUREMENT,
unit_fn=lambda metric: LENGTH_METERS if metric else LENGTH_FEET,
value_fn=lambda data, unit: round(data[unit][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="CloudCover",
icon="mdi:weather-cloudy",
name="Cloud cover",
unit_metric=PERCENTAGE,
unit_imperial=PERCENTAGE,
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
unit_fn=lambda _: PERCENTAGE,
value_fn=lambda data, _: cast(int, data),
),
AccuWeatherSensorDescription(
key="DewPoint",
device_class=SensorDeviceClass.TEMPERATURE,
name="Dew point",
unit_metric=TEMP_CELSIUS,
unit_imperial=TEMP_FAHRENHEIT,
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="RealFeelTemperature",
device_class=SensorDeviceClass.TEMPERATURE,
name="RealFeel temperature",
unit_metric=TEMP_CELSIUS,
unit_imperial=TEMP_FAHRENHEIT,
state_class=SensorStateClass.MEASUREMENT,
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="RealFeelTemperatureShade",
device_class=SensorDeviceClass.TEMPERATURE,
name="RealFeel temperature shade",
unit_metric=TEMP_CELSIUS,
unit_imperial=TEMP_FAHRENHEIT,
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="Precipitation",
icon="mdi:weather-rainy",
name="Precipitation",
unit_metric=LENGTH_MILLIMETERS,
unit_imperial=LENGTH_INCHES,
state_class=SensorStateClass.MEASUREMENT,
unit_fn=lambda metric: LENGTH_MILLIMETERS if metric else LENGTH_INCHES,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
attr_fn=lambda data: {"type": data["PrecipitationType"]},
),
AccuWeatherSensorDescription(
key="PressureTendency",
device_class="accuweather__pressure_tendency",
icon="mdi:gauge",
name="Pressure tendency",
unit_metric=None,
unit_imperial=None,
value_fn=lambda data, _: cast(str, data["LocalizedText"]).lower(),
),
AccuWeatherSensorDescription(
key="UVIndex",
icon="mdi:weather-sunny",
name="UV index",
unit_metric=UV_INDEX,
unit_imperial=UV_INDEX,
state_class=SensorStateClass.MEASUREMENT,
unit_fn=lambda _: UV_INDEX,
value_fn=lambda data, _: cast(int, data),
attr_fn=lambda data: {ATTR_LEVEL: data["UVIndexText"]},
),
AccuWeatherSensorDescription(
key="WetBulbTemperature",
device_class=SensorDeviceClass.TEMPERATURE,
name="Wet bulb temperature",
unit_metric=TEMP_CELSIUS,
unit_imperial=TEMP_FAHRENHEIT,
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="WindChillTemperature",
device_class=SensorDeviceClass.TEMPERATURE,
name="Wind chill temperature",
unit_metric=TEMP_CELSIUS,
unit_imperial=TEMP_FAHRENHEIT,
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="Wind",
icon="mdi:weather-windy",
name="Wind",
unit_metric=SPEED_KILOMETERS_PER_HOUR,
unit_imperial=SPEED_MILES_PER_HOUR,
state_class=SensorStateClass.MEASUREMENT,
unit_fn=lambda metric: SPEED_KILOMETERS_PER_HOUR
if metric
else SPEED_MILES_PER_HOUR,
value_fn=lambda data, unit: cast(float, data[ATTR_SPEED][unit][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="WindGust",
icon="mdi:weather-windy",
name="Wind gust",
unit_metric=SPEED_KILOMETERS_PER_HOUR,
unit_imperial=SPEED_MILES_PER_HOUR,
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
unit_fn=lambda metric: SPEED_KILOMETERS_PER_HOUR
if metric
else SPEED_MILES_PER_HOUR,
value_fn=lambda data, unit: cast(float, data[ATTR_SPEED][unit][ATTR_VALUE]),
),
)
@@ -320,19 +358,19 @@ async def async_setup_entry(
coordinator: AccuWeatherDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
sensors: list[AccuWeatherSensor] = []
for description in SENSOR_TYPES:
sensors.append(AccuWeatherSensor(coordinator, description))
sensors = [
AccuWeatherSensor(coordinator, description) for description in SENSOR_TYPES
]
if coordinator.forecast:
for description in FORECAST_SENSOR_TYPES:
for day in range(MAX_FORECAST_DAYS + 1):
# Some air quality/allergy sensors are only available for certain
# locations.
if description.key in coordinator.data[ATTR_FORECAST][0]:
sensors.append(
AccuWeatherSensor(coordinator, description, forecast_day=day)
)
# Some air quality/allergy sensors are only available for certain
# locations.
sensors.extend(
AccuWeatherForecastSensor(coordinator, description, forecast_day=day)
for day in range(MAX_FORECAST_DAYS + 1)
for description in FORECAST_SENSOR_TYPES
if description.key in coordinator.data[ATTR_FORECAST][0]
)
async_add_entities(sensors)
@@ -356,9 +394,8 @@ class AccuWeatherSensor(
super().__init__(coordinator)
self.entity_description = description
self._sensor_data = _get_sensor_data(
coordinator.data, forecast_day, description.key
coordinator.data, description.key, forecast_day
)
self._attrs: dict[str, Any] = {}
if forecast_day is not None:
self._attr_name = f"{description.name} {forecast_day}d"
self._attr_unique_id = (
@@ -368,82 +405,40 @@ class AccuWeatherSensor(
self._attr_unique_id = (
f"{coordinator.location_key}-{description.key}".lower()
)
if coordinator.is_metric:
if self.coordinator.hass.config.units.is_metric:
self._unit_system = API_METRIC
self._attr_native_unit_of_measurement = description.unit_metric
else:
self._unit_system = API_IMPERIAL
self._attr_native_unit_of_measurement = description.unit_imperial
self._attr_native_unit_of_measurement = self.entity_description.unit_fn(
self.coordinator.hass.config.units.is_metric
)
self._attr_device_info = coordinator.device_info
self.forecast_day = forecast_day
if forecast_day is not None:
self.forecast_day = forecast_day
@property
def native_value(self) -> StateType:
"""Return the state."""
if self.forecast_day is not None:
if self.entity_description.device_class == SensorDeviceClass.TEMPERATURE:
return cast(float, self._sensor_data["Value"])
if self.entity_description.key == "UVIndex":
return cast(int, self._sensor_data["Value"])
if self.entity_description.key in ("Grass", "Mold", "Ragweed", "Tree", "Ozone"):
return cast(int, self._sensor_data["Value"])
if self.entity_description.key == "Ceiling":
return round(self._sensor_data[self._unit_system]["Value"])
if self.entity_description.key == "PressureTendency":
return cast(str, self._sensor_data["LocalizedText"].lower())
if self.entity_description.device_class == SensorDeviceClass.TEMPERATURE:
return cast(float, self._sensor_data[self._unit_system]["Value"])
if self.entity_description.key == "Precipitation":
return cast(float, self._sensor_data[self._unit_system]["Value"])
if self.entity_description.key in ("Wind", "WindGust"):
return cast(float, self._sensor_data["Speed"][self._unit_system]["Value"])
if self.entity_description.key in (
"WindDay",
"WindNight",
"WindGustDay",
"WindGustNight",
):
return cast(StateType, self._sensor_data["Speed"]["Value"])
return cast(StateType, self._sensor_data)
return self.entity_description.value_fn(self._sensor_data, self._unit_system)
@property
def extra_state_attributes(self) -> dict[str, Any]:
"""Return the state attributes."""
if self.forecast_day is not None:
if self.entity_description.key in (
"WindDay",
"WindNight",
"WindGustDay",
"WindGustNight",
):
self._attrs["direction"] = self._sensor_data["Direction"]["English"]
elif self.entity_description.key in (
"Grass",
"Mold",
"Ozone",
"Ragweed",
"Tree",
"UVIndex",
):
self._attrs["level"] = self._sensor_data["Category"]
return self._attrs
if self.entity_description.key == "UVIndex":
self._attrs["level"] = self.coordinator.data["UVIndexText"]
elif self.entity_description.key == "Precipitation":
self._attrs["type"] = self.coordinator.data["PrecipitationType"]
return self._attrs
return self.entity_description.attr_fn(self.coordinator.data)
@callback
def _handle_coordinator_update(self) -> None:
"""Handle data update."""
self._sensor_data = _get_sensor_data(
self.coordinator.data, self.forecast_day, self.entity_description.key
self.coordinator.data, self.entity_description.key
)
self.async_write_ha_state()
def _get_sensor_data(
sensors: dict[str, Any], forecast_day: int | None, kind: str
sensors: dict[str, Any],
kind: str,
forecast_day: int | None = None,
) -> Any:
"""Get sensor data."""
if forecast_day is not None:
@@ -453,3 +448,20 @@ def _get_sensor_data(
return sensors["PrecipitationSummary"][kind]
return sensors[kind]
class AccuWeatherForecastSensor(AccuWeatherSensor):
"""Define an AccuWeather forecast entity."""
@property
def extra_state_attributes(self) -> dict[str, Any]:
"""Return the state attributes."""
return self.entity_description.attr_fn(self._sensor_data)
@callback
def _handle_coordinator_update(self) -> None:
"""Handle data update."""
self._sensor_data = _get_sensor_data(
self.coordinator.data, self.entity_description.key, self.forecast_day
)
self.async_write_ha_state()

View File

@@ -3,6 +3,9 @@
"abort": {
"single_instance_allowed": "Ya configurado. Solo es posible una \u00fanica configuraci\u00f3n."
},
"create_entry": {
"default": "Algunos sensores no est\u00e1n habilitados de forma predeterminada. Puede habilitarlos en el registro de la entidad despu\u00e9s de la configuraci\u00f3n de la integraci\u00f3n. \nEl pron\u00f3stico del tiempo no est\u00e1 habilitado de forma predeterminada. Puedes habilitarlo en las opciones de integraci\u00f3n."
},
"error": {
"cannot_connect": "No se pudo conectar",
"invalid_api_key": "Clave de API no v\u00e1lida",
@@ -21,6 +24,7 @@
},
"system_health": {
"info": {
"can_reach_server": "Llegar al servidor de AccuWeather",
"remaining_requests": "Solicitudes permitidas restantes"
}
}

View File

@@ -4,7 +4,7 @@
"single_instance_allowed": "Ya est\u00e1 configurado. Solo es posible una \u00fanica configuraci\u00f3n."
},
"create_entry": {
"default": "Algunos sensores no est\u00e1n habilitados de forma predeterminada. Puede habilitarlos en el registro de la entidad despu\u00e9s de la configuraci\u00f3n de la integraci\u00f3n.\n El pron\u00f3stico del tiempo no est\u00e1 habilitado de forma predeterminada. Puedes habilitarlo en las opciones de integraci\u00f3n."
"default": "Algunos sensores no est\u00e1n habilitados de forma predeterminada. Puedes habilitarlos en el registro de la entidad despu\u00e9s de la configuraci\u00f3n de la integraci\u00f3n.\nEl pron\u00f3stico del tiempo no est\u00e1 habilitado de forma predeterminada. Puedes habilitarlo en las opciones de integraci\u00f3n."
},
"error": {
"cannot_connect": "No se pudo conectar",
@@ -28,13 +28,13 @@
"data": {
"forecast": "Pron\u00f3stico del tiempo"
},
"description": "Debido a las limitaciones de la versi\u00f3n gratuita de la clave API de AccuWeather, cuando habilitas el pron\u00f3stico del tiempo, las actualizaciones de datos se realizar\u00e1n cada 64 minutos en lugar de cada 32 minutos."
"description": "Debido a las limitaciones de la versi\u00f3n gratuita de la clave API de AccuWeather, cuando habilitas el pron\u00f3stico del tiempo, las actualizaciones de datos se realizar\u00e1n cada 80 minutos en lugar de cada 40 minutos."
}
}
},
"system_health": {
"info": {
"can_reach_server": "Alcanzar el servidor AccuWeather",
"can_reach_server": "Se puede llegar al servidor AccuWeather",
"remaining_requests": "Solicitudes permitidas restantes"
}
}

View File

@@ -2,7 +2,8 @@
"state": {
"accuweather__pressure_tendency": {
"falling": "Fallande",
"rising": "Stigande"
"rising": "Stigande",
"steady": "Stadig"
}
}
}

View File

@@ -1,11 +1,41 @@
{
"config": {
"abort": {
"single_instance_allowed": "Redan konfigurerad. Endast en konfiguration m\u00f6jlig."
},
"create_entry": {
"default": "Vissa sensorer \u00e4r inte aktiverade som standard. Du kan aktivera dem i entitetsregistret efter integrationskonfigurationen.\n V\u00e4derprognos \u00e4r inte aktiverat som standard. Du kan aktivera det i integrationsalternativen."
},
"error": {
"cannot_connect": "Det gick inte att ansluta.",
"invalid_api_key": "Ogiltig API-nyckel",
"requests_exceeded": "Det till\u00e5tna antalet f\u00f6rfr\u00e5gningar till Accuweather API har \u00f6verskridits. Du m\u00e5ste v\u00e4nta eller \u00e4ndra API-nyckel."
},
"step": {
"user": {
"data": {
"api_key": "API-nyckel"
"api_key": "API-nyckel",
"latitude": "Latitud",
"longitude": "Longitud",
"name": "Namn"
}
}
}
},
"options": {
"step": {
"user": {
"data": {
"forecast": "V\u00e4derprognos"
},
"description": "P\u00e5 grund av begr\u00e4nsningarna f\u00f6r den kostnadsfria versionen av AccuWeather API-nyckeln, n\u00e4r du aktiverar v\u00e4derprognos, kommer datauppdateringar att utf\u00f6ras var 80:e minut ist\u00e4llet f\u00f6r var 40:e minut."
}
}
},
"system_health": {
"info": {
"can_reach_server": "N\u00e5 AccuWeather-servern",
"remaining_requests": "\u00c5terst\u00e5ende till\u00e5tna f\u00f6rfr\u00e5gningar"
}
}
}

View File

@@ -70,7 +70,7 @@ class AccuWeatherEntity(
# Coordinator data is used also for sensors which don't have units automatically
# converted, hence the weather entity's native units follow the configured unit
# system
if coordinator.is_metric:
if coordinator.hass.config.units.is_metric:
self._attr_native_precipitation_unit = LENGTH_MILLIMETERS
self._attr_native_pressure_unit = PRESSURE_HPA
self._attr_native_temperature_unit = TEMP_CELSIUS

View File

@@ -1,4 +1,6 @@
"""Base class for Acmeda Roller Blinds."""
from __future__ import annotations
import aiopulse
from homeassistant.core import callback
@@ -11,11 +13,13 @@ from .const import ACMEDA_ENTITY_REMOVE, DOMAIN, LOGGER
class AcmedaBase(entity.Entity):
"""Base representation of an Acmeda roller."""
_attr_should_poll = False
def __init__(self, roller: aiopulse.Roller) -> None:
"""Initialize the roller."""
self.roller = roller
async def async_remove_and_unregister(self):
async def async_remove_and_unregister(self) -> None:
"""Unregister from entity and device registry and call entity remove function."""
LOGGER.error("Removing %s %s", self.__class__.__name__, self.unique_id)
@@ -25,14 +29,18 @@ class AcmedaBase(entity.Entity):
dev_registry = dr.async_get(self.hass)
device = dev_registry.async_get_device(identifiers={(DOMAIN, self.unique_id)})
if device is not None:
if (
device is not None
and self.registry_entry is not None
and self.registry_entry.config_entry_id is not None
):
dev_registry.async_update_device(
device.id, remove_config_entry_id=self.registry_entry.config_entry_id
)
await self.async_remove(force_remove=True)
async def async_added_to_hass(self):
async def async_added_to_hass(self) -> None:
"""Entity has been added to hass."""
self.roller.callback_subscribe(self.notify_update)
@@ -44,33 +52,28 @@ class AcmedaBase(entity.Entity):
)
)
async def async_will_remove_from_hass(self):
async def async_will_remove_from_hass(self) -> None:
"""Entity being removed from hass."""
self.roller.callback_unsubscribe(self.notify_update)
@callback
def notify_update(self):
def notify_update(self) -> None:
"""Write updated device state information."""
LOGGER.debug("Device update notification received: %s", self.name)
self.async_write_ha_state()
@property
def should_poll(self):
"""Report that Acmeda entities do not need polling."""
return False
@property
def unique_id(self):
def unique_id(self) -> str:
"""Return the unique ID of this roller."""
return self.roller.id
@property
def device_id(self):
def device_id(self) -> str:
"""Return the ID of this roller."""
return self.roller.id
@property
def name(self):
def name(self) -> str | None:
"""Return the name of roller."""
return self.roller.name

View File

@@ -16,6 +16,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .base import AcmedaBase
from .const import ACMEDA_HUB_UPDATE, DOMAIN
from .helpers import async_add_acmeda_entities
from .hub import PulseHub
async def async_setup_entry(
@@ -24,7 +25,7 @@ async def async_setup_entry(
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Acmeda Rollers from a config entry."""
hub = hass.data[DOMAIN][config_entry.entry_id]
hub: PulseHub = hass.data[DOMAIN][config_entry.entry_id]
current: set[int] = set()
@@ -122,6 +123,6 @@ class AcmedaCover(AcmedaBase, CoverEntity):
"""Stop the roller."""
await self.roller.move_stop()
async def async_set_cover_tilt(self, **kwargs):
async def async_set_cover_tilt_position(self, **kwargs: Any) -> None:
"""Tilt the roller shutter to a specific position."""
await self.roller.move_to(100 - kwargs[ATTR_POSITION])

View File

@@ -11,6 +11,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .base import AcmedaBase
from .const import ACMEDA_HUB_UPDATE, DOMAIN
from .helpers import async_add_acmeda_entities
from .hub import PulseHub
async def async_setup_entry(
@@ -19,7 +20,7 @@ async def async_setup_entry(
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Acmeda Rollers from a config entry."""
hub = hass.data[DOMAIN][config_entry.entry_id]
hub: PulseHub = hass.data[DOMAIN][config_entry.entry_id]
current: set[int] = set()
@@ -41,15 +42,15 @@ async def async_setup_entry(
class AcmedaBattery(AcmedaBase, SensorEntity):
"""Representation of a Acmeda cover device."""
device_class = SensorDeviceClass.BATTERY
_attr_device_class = SensorDeviceClass.BATTERY
_attr_native_unit_of_measurement = PERCENTAGE
@property
def name(self):
def name(self) -> str:
"""Return the name of roller."""
return f"{super().name} Battery"
@property
def native_value(self):
def native_value(self) -> float | int | None:
"""Return the state of the device."""
return self.roller.battery

View File

@@ -8,7 +8,7 @@
"data": {
"id": "ID de host"
},
"title": "Elige un hub para a\u00f1adir"
"title": "Elige un concentrador para a\u00f1adir"
}
}
}

View File

@@ -0,0 +1,15 @@
{
"config": {
"abort": {
"no_devices_found": "Inga enheter hittades i n\u00e4tverket"
},
"step": {
"user": {
"data": {
"id": "V\u00e4rd-ID"
},
"title": "V\u00e4lj en hubb att l\u00e4gga till"
}
}
}
}

View File

@@ -80,7 +80,7 @@ class AdaxDevice(ClimateEntity):
manufacturer="Adax",
)
async def async_set_hvac_mode(self, hvac_mode: str) -> None:
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set hvac mode."""
if hvac_mode == HVACMode.HEAT:
temperature = max(self.min_temp, self.target_temperature or self.min_temp)
@@ -140,7 +140,7 @@ class LocalAdaxDevice(ClimateEntity):
manufacturer="Adax",
)
async def async_set_temperature(self, **kwargs):
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set new target temperature."""
if (temperature := kwargs.get(ATTR_TEMPERATURE)) is None:
return

View File

@@ -2,8 +2,8 @@
"config": {
"abort": {
"already_configured": "El dispositivo ya est\u00e1 configurado",
"heater_not_available": "Calentador no disponible. Intente restablecer el calentador pulsando + y OK durante algunos segundos.",
"heater_not_found": "No se encuentra el calefactor. Intente acercar el calefactor al ordenador del Asistente de Hogar.",
"heater_not_available": "Calefactor no disponible. Intenta reiniciar el calentador presionando + y OK durante unos segundos.",
"heater_not_found": "No se encontr\u00f3 el calentador. Intenta acercar el calentador al ordenador con Home Assistant.",
"invalid_auth": "Autenticaci\u00f3n no v\u00e1lida"
},
"error": {
@@ -21,13 +21,13 @@
"wifi_pswd": "Contrase\u00f1a Wi-Fi",
"wifi_ssid": "SSID Wi-Fi"
},
"description": "Reinicie el calentador presionando + y OK hasta que la pantalla muestre 'Reiniciar'. Luego presione y mantenga presionado el bot\u00f3n OK en el calentador hasta que el LED azul comience a parpadear antes de presionar Enviar. La configuraci\u00f3n del calentador puede llevar algunos minutos."
"description": "Reinicia el calentador pulsando + y OK hasta que la pantalla muestre 'Restablecer'. Luego mant\u00e9n pulsado el bot\u00f3n OK en el calentador hasta que el led azul comience a parpadear antes de pulsar Enviar. La configuraci\u00f3n del calentador puede tardar algunos minutos."
},
"user": {
"data": {
"connection_type": "Seleccione el tipo de conexi\u00f3n"
"connection_type": "Selecciona el tipo de conexi\u00f3n"
},
"description": "Seleccione el tipo de conexi\u00f3n. Local requiere calentadores con bluetooth"
"description": "Selecciona el tipo de conexi\u00f3n. Local requiere calefactores con bluetooth"
}
}
}

View File

@@ -0,0 +1,34 @@
{
"config": {
"abort": {
"already_configured": "Enheten \u00e4r redan konfigurerad",
"heater_not_available": "V\u00e4rmare inte tillg\u00e4nglig. F\u00f6rs\u00f6k att \u00e5terst\u00e4lla v\u00e4rmaren genom att trycka p\u00e5 + och OK i n\u00e5gra sekunder.",
"heater_not_found": "V\u00e4rmare hittades inte. F\u00f6rs\u00f6k att flytta v\u00e4rmaren n\u00e4rmare Home Assistant-datorn.",
"invalid_auth": "Ogiltig autentisering"
},
"error": {
"cannot_connect": "Det gick inte att ansluta."
},
"step": {
"cloud": {
"data": {
"account_id": "Konto-ID",
"password": "L\u00f6senord"
}
},
"local": {
"data": {
"wifi_pswd": "Wi-Fi l\u00f6senord",
"wifi_ssid": "Wi-Fi SSID"
},
"description": "\u00c5terst\u00e4ll v\u00e4rmaren genom att trycka p\u00e5 + och OK tills displayen visar 'Reset'. Tryck sedan och h\u00e5ll ner OK-knappen p\u00e5 v\u00e4rmaren tills den bl\u00e5 lysdioden b\u00f6rjar blinka innan du trycker p\u00e5 Skicka. Det kan ta n\u00e5gra minuter att konfigurera v\u00e4rmaren."
},
"user": {
"data": {
"connection_type": "V\u00e4lj anslutningstyp"
},
"description": "V\u00e4lj anslutningstyp. Lokalt kr\u00e4ver v\u00e4rmare med bluetooth"
}
}
}
}

View File

@@ -27,7 +27,7 @@
"data": {
"connection_type": "\u9078\u64c7\u9023\u7dda\u985e\u5225"
},
"description": "\u9078\u64c7\u9023\u7dda\u985e\u5225\u3002\u672c\u5730\u7aef\u5c07\u9700\u8981\u5177\u5099\u85cd\u82bd\u52a0\u71b1\u5668"
"description": "\u9078\u64c7\u9023\u7dda\u985e\u5225\u3002\u672c\u5730\u7aef\u5c07\u9700\u8981\u5177\u5099\u85cd\u7259\u52a0\u71b1\u5668"
}
}
}

View File

@@ -9,8 +9,8 @@
},
"step": {
"hassio_confirm": {
"description": "\u00bfDesea configurar Home Assistant para conectarse al AdGuard Home proporcionado por el complemento Supervisor: {addon} ?",
"title": "AdGuard Home v\u00eda complemento de Home Assistant"
"description": "\u00bfQuieres configurar Home Assistant para conectarse al AdGuard Home proporcionado por el complemento: {addon}?",
"title": "AdGuard Home a trav\u00e9s del complemento Home Assistant"
},
"user": {
"data": {
@@ -18,10 +18,10 @@
"password": "Contrase\u00f1a",
"port": "Puerto",
"ssl": "Utiliza un certificado SSL",
"username": "Usuario",
"verify_ssl": "Verificar certificado SSL"
"username": "Nombre de usuario",
"verify_ssl": "Verificar el certificado SSL"
},
"description": "Configure su instancia de AdGuard Home para permitir la supervisi\u00f3n y el control."
"description": "Configura tu instancia AdGuard Home para permitir la supervisi\u00f3n y el control."
}
}
}

View File

@@ -1,8 +1,12 @@
{
"config": {
"abort": {
"already_configured": "Tj\u00e4nsten \u00e4r redan konfigurerad",
"existing_instance_updated": "Uppdaterade existerande konfiguration."
},
"error": {
"cannot_connect": "Det gick inte att ansluta."
},
"step": {
"hassio_confirm": {
"description": "Vill du konfigurera Home Assistant f\u00f6r att ansluta till AdGuard Home som tillhandah\u00e5lls av Supervisor Add-on: {addon}?",
@@ -10,7 +14,9 @@
},
"user": {
"data": {
"host": "V\u00e4rd",
"password": "L\u00f6senord",
"port": "Port",
"ssl": "AdGuard Home anv\u00e4nder ett SSL-certifikat",
"username": "Anv\u00e4ndarnamn",
"verify_ssl": "AdGuard Home anv\u00e4nder ett korrekt certifikat"

View File

@@ -53,7 +53,7 @@ class AdsBinarySensor(AdsEntity, BinarySensorEntity):
super().__init__(ads_hub, name, ads_var)
self._attr_device_class = device_class or BinarySensorDeviceClass.MOVING
async def async_added_to_hass(self):
async def async_added_to_hass(self) -> None:
"""Register device notification."""
await self.async_initialize_device(self._ads_var, pyads.PLCTYPE_BOOL)

View File

@@ -1,6 +1,8 @@
"""Support for ADS light sources."""
from __future__ import annotations
from typing import Any
import pyads
import voluptuous as vol
@@ -66,7 +68,7 @@ class AdsLight(AdsEntity, LightEntity):
self._attr_color_mode = ColorMode.ONOFF
self._attr_supported_color_modes = {ColorMode.ONOFF}
async def async_added_to_hass(self):
async def async_added_to_hass(self) -> None:
"""Register device notification."""
await self.async_initialize_device(self._ads_var, pyads.PLCTYPE_BOOL)
@@ -87,7 +89,7 @@ class AdsLight(AdsEntity, LightEntity):
"""Return True if the entity is on."""
return self._state_dict[STATE_KEY_STATE]
def turn_on(self, **kwargs):
def turn_on(self, **kwargs: Any) -> None:
"""Turn the light on or set a specific dimmer value."""
brightness = kwargs.get(ATTR_BRIGHTNESS)
self._ads_hub.write_by_name(self._ads_var, True, pyads.PLCTYPE_BOOL)
@@ -97,6 +99,6 @@ class AdsLight(AdsEntity, LightEntity):
self._ads_var_brightness, brightness, pyads.PLCTYPE_UINT
)
def turn_off(self, **kwargs):
def turn_off(self, **kwargs: Any) -> None:
"""Turn the light off."""
self._ads_hub.write_by_name(self._ads_var, False, pyads.PLCTYPE_BOOL)

View File

@@ -3,7 +3,6 @@ from __future__ import annotations
import voluptuous as vol
from homeassistant.components import ads
from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity
from homeassistant.const import CONF_NAME, CONF_UNIT_OF_MEASUREMENT
from homeassistant.core import HomeAssistant
@@ -19,6 +18,7 @@ from . import (
STATE_KEY_STATE,
AdsEntity,
)
from .. import ads
DEFAULT_NAME = "ADS sensor"
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
@@ -70,7 +70,7 @@ class AdsSensor(AdsEntity, SensorEntity):
self._ads_type = ads_type
self._factor = factor
async def async_added_to_hass(self):
async def async_added_to_hass(self) -> None:
"""Register device notification."""
await self.async_initialize_device(
self._ads_var,

View File

@@ -1,6 +1,8 @@
"""Support for ADS switch platform."""
from __future__ import annotations
from typing import Any
import pyads
import voluptuous as vol
@@ -41,7 +43,7 @@ def setup_platform(
class AdsSwitch(AdsEntity, SwitchEntity):
"""Representation of an ADS switch device."""
async def async_added_to_hass(self):
async def async_added_to_hass(self) -> None:
"""Register device notification."""
await self.async_initialize_device(self._ads_var, pyads.PLCTYPE_BOOL)
@@ -50,10 +52,10 @@ class AdsSwitch(AdsEntity, SwitchEntity):
"""Return True if the entity is on."""
return self._state_dict[STATE_KEY_STATE]
def turn_on(self, **kwargs):
def turn_on(self, **kwargs: Any) -> None:
"""Turn the switch on."""
self._ads_hub.write_by_name(self._ads_var, True, pyads.PLCTYPE_BOOL)
def turn_off(self, **kwargs):
def turn_off(self, **kwargs: Any) -> None:
"""Turn the switch off."""
self._ads_hub.write_by_name(self._ads_var, False, pyads.PLCTYPE_BOOL)

View File

@@ -20,6 +20,8 @@ PLATFORMS = [
Platform.SELECT,
Platform.SENSOR,
Platform.SWITCH,
Platform.UPDATE,
Platform.LIGHT,
]
_LOGGER = logging.getLogger(__name__)
@@ -50,19 +52,25 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
update_interval=timedelta(seconds=ADVANTAGE_AIR_SYNC_INTERVAL),
)
async def async_change(change):
try:
if await api.async_change(change):
await coordinator.async_refresh()
except ApiError as err:
_LOGGER.warning(err)
def error_handle_factory(func):
"""Return the provided API function wrapped in an error handler and coordinator refresh."""
async def error_handle(param):
try:
if await func(param):
await coordinator.async_refresh()
except ApiError as err:
_LOGGER.warning(err)
return error_handle
await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = {
"coordinator": coordinator,
"async_change": async_change,
"async_change": error_handle_factory(api.aircon.async_set),
"async_set_light": error_handle_factory(api.lights.async_set),
}
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

View File

@@ -2,6 +2,7 @@
from __future__ import annotations
import logging
from typing import Any
from homeassistant.components.climate import ClimateEntity
from homeassistant.components.climate.const import (
@@ -44,7 +45,7 @@ AC_HVAC_MODES = [
]
ADVANTAGE_AIR_FAN_MODES = {
"auto": FAN_AUTO,
"autoAA": FAN_AUTO,
"low": FAN_LOW,
"medium": FAN_MEDIUM,
"high": FAN_HIGH,
@@ -114,7 +115,7 @@ class AdvantageAirAC(AdvantageAirAcEntity, ClimateEntity):
"""Return the current fan modes."""
return ADVANTAGE_AIR_FAN_MODES.get(self._ac["fan"])
async def async_set_hvac_mode(self, hvac_mode):
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set the HVAC Mode and State."""
if hvac_mode == HVACMode.OFF:
await self.async_change(
@@ -132,13 +133,13 @@ class AdvantageAirAC(AdvantageAirAcEntity, ClimateEntity):
}
)
async def async_set_fan_mode(self, fan_mode):
async def async_set_fan_mode(self, fan_mode: str) -> None:
"""Set the Fan Mode."""
await self.async_change(
{self.ac_key: {"info": {"fan": HASS_FAN_MODES.get(fan_mode)}}}
)
async def async_set_temperature(self, **kwargs):
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set the Temperature."""
temp = kwargs.get(ATTR_TEMPERATURE)
await self.async_change({self.ac_key: {"info": {"setTemp": temp}}})
@@ -179,7 +180,7 @@ class AdvantageAirZone(AdvantageAirZoneEntity, ClimateEntity):
"""Return the target temperature."""
return self._zone["setTemp"]
async def async_set_hvac_mode(self, hvac_mode):
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set the HVAC Mode and State."""
if hvac_mode == HVACMode.OFF:
await self.async_change(
@@ -198,7 +199,7 @@ class AdvantageAirZone(AdvantageAirZoneEntity, ClimateEntity):
}
)
async def async_set_temperature(self, **kwargs):
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set the Temperature."""
temp = kwargs.get(ATTR_TEMPERATURE)
await self.async_change(

View File

@@ -0,0 +1,90 @@
"""Light platform for Advantage Air integration."""
from typing import Any
from homeassistant.components.light import ATTR_BRIGHTNESS, ColorMode, LightEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import (
ADVANTAGE_AIR_STATE_OFF,
ADVANTAGE_AIR_STATE_ON,
DOMAIN as ADVANTAGE_AIR_DOMAIN,
)
from .entity import AdvantageAirEntity
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up AdvantageAir light platform."""
instance = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
entities = []
if "myLights" in instance["coordinator"].data:
for light in instance["coordinator"].data["myLights"]["lights"].values():
if light.get("relay"):
entities.append(AdvantageAirLight(instance, light))
else:
entities.append(AdvantageAirLightDimmable(instance, light))
async_add_entities(entities)
class AdvantageAirLight(AdvantageAirEntity, LightEntity):
"""Representation of Advantage Air Light."""
_attr_supported_color_modes = {ColorMode.ONOFF}
def __init__(self, instance, light):
"""Initialize an Advantage Air Light."""
super().__init__(instance)
self.async_set_light = instance["async_set_light"]
self._id = light["id"]
self._attr_unique_id += f"-{self._id}"
self._attr_device_info = DeviceInfo(
identifiers={(ADVANTAGE_AIR_DOMAIN, self._attr_unique_id)},
via_device=(ADVANTAGE_AIR_DOMAIN, self.coordinator.data["system"]["rid"]),
manufacturer="Advantage Air",
model=light.get("moduleType"),
name=light["name"],
)
@property
def _light(self):
"""Return the light object."""
return self.coordinator.data["myLights"]["lights"][self._id]
@property
def is_on(self) -> bool:
"""Return if the light is on."""
return self._light["state"] == ADVANTAGE_AIR_STATE_ON
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the light on."""
await self.async_set_light({"id": self._id, "state": ADVANTAGE_AIR_STATE_ON})
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn the light off."""
await self.async_set_light({"id": self._id, "state": ADVANTAGE_AIR_STATE_OFF})
class AdvantageAirLightDimmable(AdvantageAirLight):
"""Representation of Advantage Air Dimmable Light."""
_attr_supported_color_modes = {ColorMode.ONOFF, ColorMode.BRIGHTNESS}
@property
def brightness(self) -> int:
"""Return the brightness of this light between 0..255."""
return round(self._light["value"] * 255 / 100)
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the light on and optionally set the brightness."""
data = {"id": self._id, "state": ADVANTAGE_AIR_STATE_ON}
if ATTR_BRIGHTNESS in kwargs:
data["value"] = round(kwargs[ATTR_BRIGHTNESS] * 100 / 255)
await self.async_set_light(data)

View File

@@ -4,7 +4,7 @@
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/advantage_air",
"codeowners": ["@Bre77"],
"requirements": ["advantage_air==0.3.1"],
"requirements": ["advantage_air==0.4.1"],
"quality_scale": "platinum",
"iot_class": "local_polling",
"loggers": ["advantage_air"]

View File

@@ -29,15 +29,15 @@ class AdvantageAirMyZone(AdvantageAirAcEntity, 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}
_attr_name = "MyZone"
def __init__(self, instance, ac_key):
"""Initialize an Advantage Air MyZone control."""
super().__init__(instance, ac_key)
self._attr_unique_id += "-myzone"
self._attr_options = [ADVANTAGE_AIR_INACTIVE]
self._number_to_name = {0: ADVANTAGE_AIR_INACTIVE}
self._name_to_number = {ADVANTAGE_AIR_INACTIVE: 0}
for zone in instance["coordinator"].data["aircons"][ac_key]["zones"].values():
if zone["type"] > 0:
@@ -46,11 +46,11 @@ class AdvantageAirMyZone(AdvantageAirAcEntity, SelectEntity):
self._attr_options.append(zone["name"])
@property
def current_option(self):
def current_option(self) -> str:
"""Return the current MyZone."""
return self._number_to_name[self._ac["myZone"]]
async def async_select_option(self, option):
async def async_select_option(self, option: str) -> None:
"""Set the MyZone."""
await self.async_change(
{self.ac_key: {"info": {"myZone": self._name_to_number[option]}}}

View File

@@ -1,4 +1,6 @@
"""Switch platform for Advantage Air integration."""
from typing import Any
from homeassistant.components.switch import SwitchEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
@@ -44,13 +46,13 @@ class AdvantageAirFreshAir(AdvantageAirAcEntity, SwitchEntity):
"""Return the fresh air status."""
return self._ac["freshAirStatus"] == ADVANTAGE_AIR_STATE_ON
async def async_turn_on(self, **kwargs):
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn fresh air on."""
await self.async_change(
{self.ac_key: {"info": {"freshAirStatus": ADVANTAGE_AIR_STATE_ON}}}
)
async def async_turn_off(self, **kwargs):
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn fresh air off."""
await self.async_change(
{self.ac_key: {"info": {"freshAirStatus": ADVANTAGE_AIR_STATE_OFF}}}

View File

@@ -0,0 +1,20 @@
{
"config": {
"abort": {
"already_configured": "Enheten \u00e4r redan konfigurerad"
},
"error": {
"cannot_connect": "Det gick inte att ansluta."
},
"step": {
"user": {
"data": {
"ip_address": "IP-adress",
"port": "Port"
},
"description": "Anslut till API:et f\u00f6r din Advantage Air v\u00e4ggmonterade surfplatta.",
"title": "Anslut"
}
}
}
}

View File

@@ -0,0 +1,52 @@
"""Advantage Air Update platform."""
from homeassistant.components.update import UpdateEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN as ADVANTAGE_AIR_DOMAIN
from .entity import AdvantageAirEntity
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up AdvantageAir update platform."""
instance = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
async_add_entities([AdvantageAirApp(instance)])
class AdvantageAirApp(AdvantageAirEntity, UpdateEntity):
"""Representation of Advantage Air App."""
_attr_name = "App"
def __init__(self, instance):
"""Initialize the Advantage Air App."""
super().__init__(instance)
self._attr_device_info = DeviceInfo(
identifiers={
(ADVANTAGE_AIR_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 installed_version(self):
"""Return the current app version."""
return self.coordinator.data["system"]["myAppRev"]
@property
def latest_version(self):
"""Return if there is an update."""
if self.coordinator.data["system"]["needsUpdate"]:
return "Needs Update"
return self.installed_version

View File

@@ -3,7 +3,6 @@ from __future__ import annotations
from homeassistant.components.sensor import SensorEntity, SensorEntityDescription
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
@@ -63,7 +62,7 @@ async def async_setup_entry(
class AbstractAemetSensor(CoordinatorEntity[WeatherUpdateCoordinator], SensorEntity):
"""Abstract class for an AEMET OpenData sensor."""
_attr_extra_state_attributes = {ATTR_ATTRIBUTION: ATTRIBUTION}
_attr_attribution = ATTRIBUTION
def __init__(
self,

View File

@@ -14,7 +14,7 @@
"longitude": "Longitud",
"name": "Nombre de la integraci\u00f3n"
},
"description": "Configurar la integraci\u00f3n de AEMET OpenData. Para generar la clave API, ve a https://opendata.aemet.es/centrodedescargas/altaUsuario"
"description": "Para generar la clave API, ve a https://opendata.aemet.es/centrodedescargas/altaUsuario"
}
}
},

View File

@@ -1,9 +1,28 @@
{
"config": {
"abort": {
"already_configured": "Platsen \u00e4r redan konfigurerad"
},
"error": {
"invalid_api_key": "Ogiltig API-nyckel"
},
"step": {
"user": {
"data": {
"api_key": "API-nyckel"
"api_key": "API-nyckel",
"latitude": "Latitud",
"longitude": "Longitud",
"name": "Integrationens namn"
},
"description": "F\u00f6r att generera API-nyckel g\u00e5 till https://opendata.aemet.es/centrodedescargas/altaUsuario"
}
}
},
"options": {
"step": {
"init": {
"data": {
"station_updates": "Samla data fr\u00e5n AEMET v\u00e4derstationer"
}
}
}

View File

@@ -7,7 +7,6 @@ from agent import AgentError
from homeassistant.components.camera import CameraEntityFeature
from homeassistant.components.mjpeg import MjpegCamera, filter_urllib3_logging
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_ATTRIBUTION
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import (
@@ -70,6 +69,8 @@ async def async_setup_entry(
class AgentCamera(MjpegCamera):
"""Representation of an Agent Device Stream."""
_attr_attribution = ATTRIBUTION
_attr_should_poll = True # Cameras default to False
_attr_supported_features = CameraEntityFeature.ON_OFF
def __init__(self, device):
@@ -91,7 +92,7 @@ class AgentCamera(MjpegCamera):
sw_version=device.client.version,
)
async def async_update(self):
async def async_update(self) -> None:
"""Update our state from the Agent API."""
try:
await self.device.update()
@@ -108,7 +109,6 @@ class AgentCamera(MjpegCamera):
self._attr_icon = "mdi:camcorder"
self._attr_available = self.device.client.is_available
self._attr_extra_state_attributes = {
ATTR_ATTRIBUTION: ATTRIBUTION,
"editable": False,
"enabled": self.is_on,
"connected": self.connected,
@@ -118,11 +118,6 @@ class AgentCamera(MjpegCamera):
"alerts_enabled": self.device.alerts_active,
}
@property
def should_poll(self) -> bool:
"""Update the state periodically."""
return True
@property
def is_recording(self) -> bool:
"""Return whether the monitor is recording."""
@@ -149,7 +144,7 @@ class AgentCamera(MjpegCamera):
return self.device.online
@property
def motion_detection_enabled(self):
def motion_detection_enabled(self) -> bool:
"""Return the camera motion detection status."""
return self.device.detector_active
@@ -161,11 +156,11 @@ class AgentCamera(MjpegCamera):
"""Disable alerts."""
await self.device.alerts_off()
async def async_enable_motion_detection(self):
async def async_enable_motion_detection(self) -> None:
"""Enable motion detection."""
await self.device.detector_on()
async def async_disable_motion_detection(self):
async def async_disable_motion_detection(self) -> None:
"""Disable motion detection."""
await self.device.detector_off()
@@ -177,7 +172,7 @@ class AgentCamera(MjpegCamera):
"""Stop recording."""
await self.device.record_stop()
async def async_turn_on(self):
async def async_turn_on(self) -> None:
"""Enable the camera."""
await self.device.enable()
@@ -185,6 +180,6 @@ class AgentCamera(MjpegCamera):
"""Take a snapshot."""
await self.device.snapshot()
async def async_turn_off(self):
async def async_turn_off(self) -> None:
"""Disable the camera."""
await self.device.disable()

View File

@@ -4,7 +4,7 @@
"already_configured": "El dispositivo ya est\u00e1 configurado"
},
"error": {
"already_in_progress": "El flujo de configuraci\u00f3n ya est\u00e1 en proceso",
"already_in_progress": "El flujo de configuraci\u00f3n ya est\u00e1 en curso",
"cannot_connect": "No se pudo conectar"
},
"step": {
@@ -13,7 +13,7 @@
"host": "Host",
"port": "Puerto"
},
"title": "Configurar el Agente de DVR"
"title": "Configurar Agent DVR"
}
}
}

View File

@@ -11,7 +11,7 @@
"user": {
"data": {
"host": "\u05de\u05d0\u05e8\u05d7",
"port": "\u05e4\u05d5\u05e8\u05d8"
"port": "\u05e4\u05ea\u05d7\u05d4"
}
}
}

View File

@@ -4,7 +4,8 @@
"already_configured": "Enheten \u00e4r redan konfigurerad"
},
"error": {
"already_in_progress": "Konfigurationsfl\u00f6de f\u00f6r enhet p\u00e5g\u00e5r redan."
"already_in_progress": "Konfigurationsfl\u00f6de f\u00f6r enhet p\u00e5g\u00e5r redan.",
"cannot_connect": "Det gick inte att ansluta."
},
"step": {
"user": {

View File

@@ -13,7 +13,6 @@ from homeassistant.components.sensor import (
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
ATTR_ATTRIBUTION,
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
CONF_NAME,
PERCENTAGE,
@@ -136,6 +135,7 @@ async def async_setup_entry(
class AirlySensor(CoordinatorEntity[AirlyDataUpdateCoordinator], SensorEntity):
"""Define an Airly sensor."""
_attr_attribution = ATTRIBUTION
_attr_has_entity_name = True
entity_description: AirlySensorEntityDescription
@@ -159,7 +159,7 @@ class AirlySensor(CoordinatorEntity[AirlyDataUpdateCoordinator], SensorEntity):
self._attr_unique_id = (
f"{coordinator.latitude}-{coordinator.longitude}-{description.key}".lower()
)
self._attrs: dict[str, Any] = {ATTR_ATTRIBUTION: ATTRIBUTION}
self._attrs: dict[str, Any] = {}
self.entity_description = description
@property

View File

@@ -20,6 +20,7 @@
},
"system_health": {
"info": {
"can_reach_server": "Llegar al servidor de Airly",
"requests_per_day": "Solicitudes permitidas por d\u00eda",
"requests_remaining": "Solicitudes permitidas restantes"
}

View File

@@ -5,7 +5,7 @@
},
"error": {
"invalid_api_key": "Clave API no v\u00e1lida",
"wrong_location": "No hay estaciones de medici\u00f3n Airly en esta zona."
"wrong_location": "No hay estaciones de medici\u00f3n Airly en esta \u00e1rea."
},
"step": {
"user": {
@@ -15,13 +15,13 @@
"longitude": "Longitud",
"name": "Nombre"
},
"description": "Establecer la integraci\u00f3n de la calidad del aire de Airly. Para generar la clave de la API vaya a https://developer.airly.eu/register"
"description": "Para generar la clave API, ve a https://developer.airly.eu/register"
}
}
},
"system_health": {
"info": {
"can_reach_server": "Alcanzar el servidor Airly",
"can_reach_server": "Se puede llegar al servidor Airly",
"requests_per_day": "Solicitudes permitidas por d\u00eda",
"requests_remaining": "Solicitudes permitidas restantes"
}

View File

@@ -18,5 +18,12 @@
"description": "Konfigurera integration av luftkvalitet. F\u00f6r att skapa API-nyckel, g\u00e5 till https://developer.airly.eu/register"
}
}
},
"system_health": {
"info": {
"can_reach_server": "N\u00e5 Airly-servern",
"requests_per_day": "Till\u00e5tna f\u00f6rfr\u00e5gningar per dag",
"requests_remaining": "\u00c5terst\u00e5ende till\u00e5tna f\u00f6rfr\u00e5gningar"
}
}
}

View File

@@ -8,7 +8,6 @@ from homeassistant.components.sensor import (
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
ATTR_ATTRIBUTION,
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
CONCENTRATION_PARTS_PER_MILLION,
)
@@ -73,6 +72,8 @@ async def async_setup_entry(
class AirNowSensor(CoordinatorEntity[AirNowDataUpdateCoordinator], SensorEntity):
"""Define an AirNow sensor."""
_attr_attribution = ATTRIBUTION
def __init__(
self,
coordinator: AirNowDataUpdateCoordinator,
@@ -82,7 +83,7 @@ class AirNowSensor(CoordinatorEntity[AirNowDataUpdateCoordinator], SensorEntity)
super().__init__(coordinator)
self.entity_description = description
self._state = None
self._attrs = {ATTR_ATTRIBUTION: ATTRIBUTION}
self._attrs: dict[str, str] = {}
self._attr_name = f"AirNow {description.name}"
self._attr_unique_id = (
f"{coordinator.latitude}-{coordinator.longitude}-{description.key.lower()}"

View File

@@ -17,7 +17,7 @@
"longitude": "Longitud",
"radius": "Radio de la estaci\u00f3n (millas; opcional)"
},
"description": "Configurar la integraci\u00f3n de calidad del aire de AirNow. Para generar una clave API, ve a https://docs.airnowapi.org/account/request/"
"description": "Para generar la clave API, ve a https://docs.airnowapi.org/account/request/"
}
}
}

View File

@@ -1,10 +1,23 @@
{
"config": {
"abort": {
"already_configured": "Enheten \u00e4r redan konfigurerad"
},
"error": {
"cannot_connect": "Det gick inte att ansluta.",
"invalid_auth": "Ogiltig autentisering",
"invalid_location": "Inga resultat hittades f\u00f6r den platsen",
"unknown": "Ov\u00e4ntat fel"
},
"step": {
"user": {
"data": {
"api_key": "API-nyckel"
}
"api_key": "API-nyckel",
"latitude": "Latitud",
"longitude": "Longitud",
"radius": "Stationsradie (miles; valfritt)"
},
"description": "F\u00f6r att generera API-nyckel g\u00e5 till https://docs.airnowapi.org/account/request/"
}
}
}

View File

@@ -11,7 +11,7 @@
"step": {
"user": {
"data": {
"description": "Inicie sesi\u00f3n en {url} para encontrar sus credenciales",
"description": "Inicia sesi\u00f3n en {url} para encontrar tus credenciales",
"id": "ID",
"secret": "Secreto"
}

View File

@@ -0,0 +1,21 @@
{
"config": {
"abort": {
"already_configured": "Konto har redan konfigurerats"
},
"error": {
"cannot_connect": "Det gick inte att ansluta.",
"invalid_auth": "Ogiltig autentisering",
"unknown": "Ov\u00e4ntat fel"
},
"step": {
"user": {
"data": {
"description": "Logga in p\u00e5 {url} f\u00f6r att hitta dina autentiseringsuppgifter",
"id": "ID",
"secret": "Hemlighet"
}
}
}
}
}

View File

@@ -2,6 +2,7 @@
from __future__ import annotations
import logging
from typing import Any
from homeassistant.components.climate import ClimateEntity
from homeassistant.components.climate.const import (
@@ -154,7 +155,7 @@ class AirtouchAC(CoordinatorEntity, ClimateEntity):
modes.append(HVACMode.OFF)
return modes
async def async_set_hvac_mode(self, hvac_mode):
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set new operation mode."""
if hvac_mode not in HA_STATE_TO_AT:
raise ValueError(f"Unsupported HVAC mode: {hvac_mode}")
@@ -170,7 +171,7 @@ class AirtouchAC(CoordinatorEntity, ClimateEntity):
_LOGGER.debug("Setting operation mode of %s to %s", self._ac_number, hvac_mode)
self.async_write_ha_state()
async def async_set_fan_mode(self, fan_mode):
async def async_set_fan_mode(self, fan_mode: str) -> None:
"""Set new fan mode."""
if fan_mode not in self.fan_modes:
raise ValueError(f"Unsupported fan mode: {fan_mode}")
@@ -182,14 +183,14 @@ class AirtouchAC(CoordinatorEntity, ClimateEntity):
self._unit = self._airtouch.GetAcs()[self._ac_number]
self.async_write_ha_state()
async def async_turn_on(self):
async def async_turn_on(self) -> None:
"""Turn on."""
_LOGGER.debug("Turning %s on", self.unique_id)
# in case ac is not on. Airtouch turns itself off if no groups are turned on
# (even if groups turned back on)
await self._airtouch.TurnAcOn(self._ac_number)
async def async_turn_off(self):
async def async_turn_off(self) -> None:
"""Turn off."""
_LOGGER.debug("Turning %s off", self.unique_id)
await self._airtouch.TurnAcOff(self._ac_number)
@@ -266,7 +267,7 @@ class AirtouchGroup(CoordinatorEntity, ClimateEntity):
return HVACMode.FAN_ONLY
async def async_set_hvac_mode(self, hvac_mode):
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set new operation mode."""
if hvac_mode not in HA_STATE_TO_AT:
raise ValueError(f"Unsupported HVAC mode: {hvac_mode}")
@@ -294,9 +295,11 @@ class AirtouchGroup(CoordinatorEntity, ClimateEntity):
)
return [AT_TO_HA_FAN_SPEED[speed] for speed in airtouch_fan_speeds]
async def async_set_temperature(self, **kwargs):
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set new target temperatures."""
temp = kwargs.get(ATTR_TEMPERATURE)
if (temp := kwargs.get(ATTR_TEMPERATURE)) is None:
_LOGGER.debug("Argument `temperature` is missing in set_temperature")
return
_LOGGER.debug("Setting temp of %s to %s", self._group_number, str(temp))
self._unit = await self._airtouch.SetGroupToTemperature(
@@ -304,7 +307,7 @@ class AirtouchGroup(CoordinatorEntity, ClimateEntity):
)
self.async_write_ha_state()
async def async_set_fan_mode(self, fan_mode):
async def async_set_fan_mode(self, fan_mode: str) -> None:
"""Set new fan mode."""
if fan_mode not in self.fan_modes:
raise ValueError(f"Unsupported fan mode: {fan_mode}")
@@ -315,7 +318,7 @@ class AirtouchGroup(CoordinatorEntity, ClimateEntity):
)
self.async_write_ha_state()
async def async_turn_on(self):
async def async_turn_on(self) -> None:
"""Turn on."""
_LOGGER.debug("Turning %s on", self.unique_id)
await self._airtouch.TurnGroupOn(self._group_number)
@@ -330,7 +333,7 @@ class AirtouchGroup(CoordinatorEntity, ClimateEntity):
await self.coordinator.async_request_refresh()
self.async_write_ha_state()
async def async_turn_off(self):
async def async_turn_off(self) -> None:
"""Turn off."""
_LOGGER.debug("Turning %s off", self.unique_id)
await self._airtouch.TurnGroupOff(self._group_number)

View File

@@ -12,7 +12,7 @@
"data": {
"host": "Host"
},
"title": "Configura los detalles de conexi\u00f3n de tu AirTouch 4."
"title": "Configurar los detalles de conexi\u00f3n de tu AirTouch 4."
}
}
}

View File

@@ -0,0 +1,19 @@
{
"config": {
"abort": {
"already_configured": "Enheten \u00e4r redan konfigurerad"
},
"error": {
"cannot_connect": "Det gick inte att ansluta.",
"no_units": "Det gick inte att hitta n\u00e5gra AirTouch 4-grupper."
},
"step": {
"user": {
"data": {
"host": "V\u00e4rd"
},
"title": "St\u00e4ll in dina AirTouch 4-anslutningsdetaljer."
}
}
}
}

View File

@@ -6,7 +6,7 @@
},
"error": {
"cannot_connect": "No se pudo conectar",
"general_error": "Se ha producido un error desconocido.",
"general_error": "Error inesperado",
"invalid_api_key": "Clave API no v\u00e1lida",
"location_not_found": "Ubicaci\u00f3n no encontrada"
},
@@ -17,7 +17,7 @@
"latitude": "Latitud",
"longitude": "Longitud"
},
"description": "Utilice la API de la nube de AirVisual para supervisar una latitud/longitud.",
"description": "Usar la API de la nube de AirVisual para supervisar una latitud/longitud.",
"title": "Configurar una geograf\u00eda"
},
"geography_by_name": {
@@ -27,7 +27,7 @@
"country": "Pa\u00eds",
"state": "estado"
},
"description": "Utilice la API de la nube de AirVisual para supervisar una ciudad/estado/pa\u00eds.",
"description": "Usar la API de la nube de AirVisual para supervisar una ciudad/estado/pa\u00eds.",
"title": "Configurar una geograf\u00eda"
},
"node_pro": {
@@ -35,7 +35,7 @@
"ip_address": "Host",
"password": "Contrase\u00f1a"
},
"description": "Monitorizar una unidad personal AirVisual. La contrase\u00f1a puede ser recuperada desde la interfaz de la unidad.",
"description": "Supervisar una unidad AirVisual personal. La contrase\u00f1a se puede recuperar desde la IU de la unidad.",
"title": "Configurar un AirVisual Node/Pro"
},
"reauth_confirm": {
@@ -45,7 +45,7 @@
"title": "Volver a autenticar AirVisual"
},
"user": {
"description": "Elige qu\u00e9 tipo de datos de AirVisual quieres monitorizar.",
"description": "Elige qu\u00e9 tipo de datos de AirVisual quieres supervisar.",
"title": "Configurar AirVisual"
}
}
@@ -54,7 +54,7 @@
"step": {
"init": {
"data": {
"show_on_map": "Mostrar geograf\u00eda monitorizada en el mapa"
"show_on_map": "Mostrar geograf\u00eda supervisada en el mapa"
},
"title": "Configurar AirVisual"
}

View File

@@ -12,8 +12,8 @@
"good": "Bueno",
"hazardous": "Da\u00f1ino",
"moderate": "Moderado",
"unhealthy": "Insalubre",
"unhealthy_sensitive": "Insalubre para grupos sensibles",
"unhealthy": "Poco saludable",
"unhealthy_sensitive": "Poco saludable para grupos sensibles",
"very_unhealthy": "Muy poco saludable"
}
}

View File

@@ -1,7 +1,20 @@
{
"state": {
"airvisual__pollutant_label": {
"co": "Kolmonoxid"
"co": "Kolmonoxid",
"n2": "Kv\u00e4vedioxid",
"o3": "Ozon",
"p1": "PM10",
"p2": "PM2,5",
"s2": "Svaveldioxid"
},
"airvisual__pollutant_level": {
"good": "Bra",
"hazardous": "Farlig",
"moderate": "M\u00e5ttlig",
"unhealthy": "Oh\u00e4lsosam",
"unhealthy_sensitive": "Oh\u00e4lsosamt f\u00f6r k\u00e4nsliga grupper",
"very_unhealthy": "Mycket oh\u00e4lsosamt"
}
}
}

View File

@@ -1,22 +1,61 @@
{
"config": {
"abort": {
"already_configured": "Platsen \u00e4r redan konfigurerad eller Node/Pro ID \u00e4r redan regristrerat.",
"reauth_successful": "\u00c5terautentisering lyckades"
},
"error": {
"cannot_connect": "Det gick inte att ansluta.",
"general_error": "Ett ok\u00e4nt fel intr\u00e4ffade.",
"invalid_api_key": "Ogiltig API-nyckel"
"invalid_api_key": "Ogiltig API-nyckel",
"location_not_found": "Platsen hittades inte"
},
"step": {
"geography_by_coords": {
"data": {
"api_key": "API-nyckel",
"latitude": "Latitud",
"longitude": "Longitud"
},
"description": "Anv\u00e4nd AirVisuals moln-API f\u00f6r att \u00f6vervaka en latitud/longitud.",
"title": "Konfigurera en geografi"
},
"geography_by_name": {
"data": {
"api_key": "API-nyckel"
}
"api_key": "API-nyckel",
"city": "Stad",
"country": "Land",
"state": "stat"
},
"description": "Anv\u00e4nd AirVisuals moln-API f\u00f6r att \u00f6vervaka en stad/stat/land.",
"title": "Konfigurera en geografi"
},
"node_pro": {
"data": {
"ip_address": "Enhets IP-adress / v\u00e4rdnamn",
"password": "Enhetsl\u00f6senord"
}
},
"description": "\u00d6vervaka en personlig AirVisual-enhet. L\u00f6senordet kan h\u00e4mtas fr\u00e5n enhetens anv\u00e4ndargr\u00e4nssnitt.",
"title": "Konfigurera en AirVisual Node/Pro"
},
"reauth_confirm": {
"data": {
"api_key": "API-nyckel"
},
"title": "Autentisera AirVisual igen"
},
"user": {
"description": "V\u00e4lj typ av AirVisual data att \u00f6vervaka.",
"title": "Konfigurera AirVisual"
}
}
},
"options": {
"step": {
"init": {
"data": {
"show_on_map": "Visa \u00f6vervakad geografi p\u00e5 kartan"
},
"title": "Konfigurera AirVisual"
}
}

View File

@@ -3,7 +3,7 @@
"name": "Airzone",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/airzone",
"requirements": ["aioairzone==0.4.6"],
"requirements": ["aioairzone==0.4.8"],
"codeowners": ["@Noltari"],
"iot_class": "local_polling",
"loggers": ["aioairzone"]

View File

@@ -0,0 +1,12 @@
{
"config": {
"error": {
"invalid_system_id": "ID del sistema Airzone no v\u00e1lido"
},
"step": {
"user": {
"description": "Configurar la integraci\u00f3n de Airzone."
}
}
}
}

View File

@@ -4,8 +4,8 @@
"already_configured": "El dispositivo ya est\u00e1 configurado"
},
"error": {
"cannot_connect": "Fall\u00f3 la conexi\u00f3n",
"invalid_system_id": "ID de sistema Airzone inv\u00e1lido"
"cannot_connect": "No se pudo conectar",
"invalid_system_id": "ID del sistema Airzone no v\u00e1lido"
},
"step": {
"user": {

View File

@@ -0,0 +1,20 @@
{
"config": {
"abort": {
"already_configured": "Enheten \u00e4r redan konfigurerad"
},
"error": {
"cannot_connect": "Det gick inte att ansluta.",
"invalid_system_id": "Ogiltigt Airzone System ID"
},
"step": {
"user": {
"data": {
"host": "V\u00e4rd",
"port": "Port"
},
"description": "St\u00e4ll in Airzone-integration."
}
}
}
}

View File

@@ -44,7 +44,6 @@ async def validate_input(hass: HomeAssistant, data: dict[str, Any]) -> None:
CLIENT_ID,
)
login = await acc.login()
await acc.close()
if not login:
raise InvalidAuth

View File

@@ -90,6 +90,7 @@ class AladdinDevice(CoverEntity):
self._number = device["door_number"]
self._name = device["name"]
self._serial = device["serial"]
self._model = device["model"]
self._attr_unique_id = f"{self._device_id}-{self._number}"
self._attr_has_entity_name = True
@@ -97,9 +98,10 @@ class AladdinDevice(CoverEntity):
def device_info(self) -> DeviceInfo | None:
"""Device information for Aladdin Connect cover."""
return DeviceInfo(
identifiers={(DOMAIN, self._device_id)},
identifiers={(DOMAIN, f"{self._device_id}-{self._number}")},
name=self._name,
manufacturer="Overhead Door",
model=self._model,
)
async def async_added_to_hass(self) -> None:
@@ -109,7 +111,7 @@ class AladdinDevice(CoverEntity):
"""Schedule a state update."""
self.async_write_ha_state()
self._acc.register_callback(update_callback, self._serial)
self._acc.register_callback(update_callback, self._serial, self._number)
await self._acc.get_doors(self._serial)
async def async_will_remove_from_hass(self) -> None:

View File

@@ -2,7 +2,7 @@
"domain": "aladdin_connect",
"name": "Aladdin Connect",
"documentation": "https://www.home-assistant.io/integrations/aladdin_connect",
"requirements": ["AIOAladdinConnect==0.1.41"],
"requirements": ["AIOAladdinConnect==0.1.44"],
"codeowners": ["@mkmer"],
"iot_class": "cloud_polling",
"loggers": ["aladdin_connect"],

View File

@@ -12,3 +12,4 @@ class DoorDevice(TypedDict):
name: str
status: str
serial: str
model: str

View File

@@ -56,6 +56,15 @@ SENSORS: tuple[AccSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT,
value_fn=AladdinConnectClient.get_rssi_status,
),
AccSensorEntityDescription(
key="ble_strength",
name="BLE Strength",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
entity_registry_enabled_default=False,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
state_class=SensorStateClass.MEASUREMENT,
value_fn=AladdinConnectClient.get_ble_strength,
),
)
@@ -74,7 +83,7 @@ async def async_setup_entry(
[AladdinConnectSensor(acc, door, description) for description in SENSORS]
)
async_add_entities(entities)
async_add_entities(entities)
class AladdinConnectSensor(SensorEntity):
@@ -89,22 +98,26 @@ class AladdinConnectSensor(SensorEntity):
device: DoorDevice,
description: AccSensorEntityDescription,
) -> None:
"""Initialize a sensor for an Abode device."""
"""Initialize a sensor for an Aladdin Connect device."""
self._device_id = device["device_id"]
self._number = device["door_number"]
self._name = device["name"]
self._model = device["model"]
self._acc = acc
self.entity_description = description
self._attr_unique_id = f"{self._device_id}-{self._number}-{description.key}"
self._attr_has_entity_name = True
if self._model == "01" and description.key in ("battery_level", "ble_strength"):
self._attr_entity_registry_enabled_default = True
@property
def device_info(self) -> DeviceInfo | None:
"""Device information for Aladdin Connect sensors."""
return DeviceInfo(
identifiers={(DOMAIN, self._device_id)},
identifiers={(DOMAIN, f"{self._device_id}-{self._number}")},
name=self._name,
manufacturer="Overhead Door",
model=self._model,
)
@property

View File

@@ -2,10 +2,10 @@
"config": {
"abort": {
"already_configured": "El dispositivo ya est\u00e1 configurado",
"reauth_successful": "La reautenticaci\u00f3n fue exitosa"
"reauth_successful": "La reautenticaci\u00f3n se realiz\u00f3 correctamente"
},
"error": {
"cannot_connect": "Error al conectar",
"cannot_connect": "No se pudo conectar",
"invalid_auth": "Autenticaci\u00f3n no v\u00e1lida"
},
"step": {
@@ -13,8 +13,8 @@
"data": {
"password": "Contrase\u00f1a"
},
"description": "La integraci\u00f3n de Aladdin Connect necesita volver a autenticar su cuenta",
"title": "Reautenticaci\u00f3n de la integraci\u00f3n"
"description": "La integraci\u00f3n Aladdin Connect necesita volver a autenticar tu cuenta",
"title": "Volver a autenticar la integraci\u00f3n"
},
"user": {
"data": {

View File

@@ -13,6 +13,7 @@
"data": {
"password": "L\u00f6senord"
},
"description": "Aladdin Connect-integrationen m\u00e5ste autentisera ditt konto igen",
"title": "\u00c5terautenticera integration"
},
"user": {

View File

@@ -5,10 +5,6 @@ from typing import Final
import voluptuous as vol
from homeassistant.components.automation import (
AutomationActionType,
AutomationTriggerInfo,
)
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
from homeassistant.components.homeassistant.triggers import state as state_trigger
from homeassistant.const import (
@@ -29,6 +25,7 @@ from homeassistant.const import (
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
from homeassistant.helpers import config_validation as cv, entity_registry
from homeassistant.helpers.entity import get_supported_features
from homeassistant.helpers.trigger import TriggerActionType, TriggerInfo
from homeassistant.helpers.typing import ConfigType
from . import DOMAIN
@@ -131,8 +128,8 @@ async def async_get_trigger_capabilities(
async def async_attach_trigger(
hass: HomeAssistant,
config: ConfigType,
action: AutomationActionType,
automation_info: AutomationTriggerInfo,
action: TriggerActionType,
trigger_info: TriggerInfo,
) -> CALLBACK_TYPE:
"""Attach a trigger."""
if config[CONF_TYPE] == "triggered":
@@ -159,5 +156,5 @@ async def async_attach_trigger(
state_config[CONF_FOR] = config[CONF_FOR]
state_config = await state_trigger.async_validate_trigger_config(hass, state_config)
return await state_trigger.async_attach_trigger(
hass, state_config, action, automation_info, platform_type="device"
hass, state_config, action, trigger_info, platform_type="device"
)

View File

@@ -1,18 +1,18 @@
{
"device_automation": {
"action_type": {
"arm_away": "Armar {entity_name} exterior",
"arm_home": "Armar {entity_name} modo casa",
"arm_night": "Armar {entity_name} por la noche",
"arm_vacation": "Armar las vacaciones de {entity_name}",
"arm_away": "Armar ausente en {entity_name}",
"arm_home": "Armar en casa en {entity_name}",
"arm_night": "Armar noche en {entity_name}",
"arm_vacation": "Armar de vacaciones {entity_name}",
"disarm": "Desarmar {entity_name}",
"trigger": "Lanzar {entity_name}"
"trigger": "Disparar {entity_name}"
},
"condition_type": {
"is_armed_away": "{entity_name} est\u00e1 armada ausente",
"is_armed_home": "{entity_name} est\u00e1 armada en casa",
"is_armed_night": "{entity_name} est\u00e1 armada noche",
"is_armed_vacation": "{entity_name} est\u00e1 armado de vacaciones",
"is_armed_vacation": "{entity_name} est\u00e1 armada de vacaciones",
"is_disarmed": "{entity_name} est\u00e1 desarmada",
"is_triggered": "{entity_name} est\u00e1 disparada"
},
@@ -20,9 +20,9 @@
"armed_away": "{entity_name} armada ausente",
"armed_home": "{entity_name} armada en casa",
"armed_night": "{entity_name} armada noche",
"armed_vacation": "Vacaciones armadas de {entity_name}",
"armed_vacation": "{entity_name} en armada de vacaciones",
"disarmed": "{entity_name} desarmada",
"triggered": "{entity_name} activado"
"triggered": "{entity_name} disparada"
}
},
"state": {
@@ -32,7 +32,7 @@
"armed_custom_bypass": "Armada personalizada",
"armed_home": "Armada en casa",
"armed_night": "Armada noche",
"armed_vacation": "Vacaciones armadas",
"armed_vacation": "Armada de vacaciones",
"arming": "Armando",
"disarmed": "Desarmada",
"disarming": "Desarmando",

View File

@@ -4,16 +4,23 @@
"arm_away": "Larma {entity_name} borta",
"arm_home": "Larma {entity_name} hemma",
"arm_night": "Larma {entity_name} natt",
"arm_vacation": "Larma semesterl\u00e4ge {entity_name}",
"disarm": "Avlarma {entity_name}",
"trigger": "Utl\u00f6sare {entity_name}"
},
"condition_type": {
"is_armed_away": "{entity_name} \u00e4r bortalarmat",
"is_armed_home": "{entity_name} \u00e4r hemmalarmat",
"is_armed_night": "{entity_name} \u00e4r nattlarmat",
"is_armed_vacation": "{entity_name} \u00e4r larmad i semesterl\u00e4ge",
"is_disarmed": "{entity_name} \u00e4r bortkopplad",
"is_triggered": "har utl\u00f6sts"
},
"trigger_type": {
"armed_away": "{entity_name} larmad borta",
"armed_home": "{entity_name} larmad hemma",
"armed_night": "{entity_name} larmad natt",
"armed_vacation": "{entity_name} larmad i semesterl\u00e4ge",
"disarmed": "{entity_name} bortkopplad",
"triggered": "{entity_name} utl\u00f6st"
}
@@ -25,6 +32,7 @@
"armed_custom_bypass": "Larm f\u00f6rbikopplat",
"armed_home": "Hemmalarmat",
"armed_night": "Nattlarmat",
"armed_vacation": "Larmad semesterl\u00e4ge",
"arming": "Tillkopplar",
"disarmed": "Avlarmat",
"disarming": "Fr\u00e5nkopplar",

View File

@@ -29,6 +29,7 @@
"armed_custom_bypass": "\u041e\u0445\u043e\u0440\u043e\u043d\u0430 \u0437 \u0432\u0438\u043d\u044f\u0442\u043a\u0430\u043c\u0438",
"armed_home": "\u041e\u0445\u043e\u0440\u043e\u043d\u0430 (\u0412\u0434\u043e\u043c\u0430)",
"armed_night": "\u041d\u0456\u0447\u043d\u0430 \u043e\u0445\u043e\u0440\u043e\u043d\u0430",
"armed_vacation": "\u041e\u0445\u043e\u0440\u043e\u043d\u0430 (\u0432\u0456\u0434\u043f\u0443\u0441\u0442\u043a\u0430)",
"arming": "\u0421\u0442\u0430\u0432\u043b\u044e \u043d\u0430 \u043e\u0445\u043e\u0440\u043e\u043d\u0443",
"disarmed": "\u0417\u043d\u044f\u0442\u043e \u0437 \u043e\u0445\u043e\u0440\u043e\u043d\u0438",
"disarming": "\u0417\u043d\u044f\u0442\u0442\u044f",

View File

@@ -88,7 +88,7 @@ class AlarmDecoderBinarySensor(BinarySensorEntity):
CONF_ZONE_NUMBER: self._zone_number,
}
async def async_added_to_hass(self):
async def async_added_to_hass(self) -> None:
"""Register callbacks."""
self.async_on_remove(
async_dispatcher_connect(self.hass, SIGNAL_ZONE_FAULT, self._fault_callback)

View File

@@ -24,7 +24,7 @@ class AlarmDecoderSensor(SensorEntity):
_attr_name = "Alarm Panel Display"
_attr_should_poll = False
async def async_added_to_hass(self):
async def async_added_to_hass(self) -> None:
"""Register callbacks."""
self.async_on_remove(
async_dispatcher_connect(

View File

@@ -23,23 +23,23 @@
"data": {
"protocol": "Protocolo"
},
"title": "Elige el protocolo del AlarmDecoder"
"title": "Elige el protocolo AlarmDecoder"
}
}
},
"options": {
"error": {
"int": "El campo siguiente debe ser un n\u00famero entero.",
"loop_range": "El bucle RF debe ser un n\u00famero entero entre 1 y 4.",
"loop_rfid": "El bucle de RF no puede utilizarse sin el serie RF.",
"relay_inclusive": "La direcci\u00f3n de retransmisi\u00f3n y el canal de retransmisi\u00f3n son codependientes y deben incluirse a la vez."
"int": "El siguiente campo debe ser un n\u00famero entero.",
"loop_range": "RF Loop debe ser un n\u00famero entero entre 1 y 4.",
"loop_rfid": "RF Loop no se puede utilizar sin RF Serial.",
"relay_inclusive": "La direcci\u00f3n de retransmisi\u00f3n y el canal de retransmisi\u00f3n son c\u00f3digopendientes y deben incluirse a la vez."
},
"step": {
"arm_settings": {
"data": {
"alt_night_mode": "Modo noche alternativo",
"auto_bypass": "Desv\u00edo autom\u00e1tico al armar",
"code_arm_required": "C\u00f3digo requerido para el armado"
"alt_night_mode": "Modo nocturno alternativo",
"auto_bypass": "Anulaci\u00f3n autom\u00e1tica en armado",
"code_arm_required": "C\u00f3digo Requerido para Armar"
},
"title": "Configurar AlarmDecoder"
},
@@ -52,14 +52,14 @@
},
"zone_details": {
"data": {
"zone_loop": "Bucle RF",
"zone_loop": "RF Loop",
"zone_name": "Nombre de zona",
"zone_relayaddr": "Direcci\u00f3n de retransmisi\u00f3n",
"zone_relaychan": "Canal de retransmisi\u00f3n",
"zone_rfid": "Serie RF",
"zone_rfid": "RF Serial",
"zone_type": "Tipo de zona"
},
"description": "Introduce los detalles para la zona {zona_number}. Para borrar la zona {zone_number}, deja el nombre de la zona en blanco.",
"description": "Introduce los detalles para la zona {zone_number}. Para eliminar la zona {zone_number}, deja el nombre de la zona en blanco.",
"title": "Configurar AlarmDecoder"
},
"zone_select": {

View File

@@ -1,26 +1,73 @@
{
"config": {
"abort": {
"already_configured": "Enheten \u00e4r redan konfigurerad"
},
"create_entry": {
"default": "Ansluten till AlarmDecoder."
},
"error": {
"cannot_connect": "Det gick inte att ansluta."
},
"step": {
"protocol": {
"data": {
"device_path": "Enhetsv\u00e4g"
"device_baudrate": "Enhetens Baud Rate",
"device_path": "Enhetsv\u00e4g",
"host": "V\u00e4rd",
"port": "Port"
},
"title": "Konfigurera anslutningsinst\u00e4llningar"
},
"user": {
"data": {
"protocol": "Protokoll"
}
},
"title": "V\u00e4lj AlarmDecoder Protocol"
}
}
},
"options": {
"error": {
"int": "F\u00e4ltet nedan m\u00e5ste vara ett heltal.",
"loop_range": "RF Loop m\u00e5ste vara ett heltal mellan 1 och 4.",
"loop_rfid": "RF Loop kan inte anv\u00e4ndas utan RF Serial.",
"relay_inclusive": "Rel\u00e4adress och rel\u00e4kanal \u00e4r beroende av varandra och m\u00e5ste inkluderas tillsammans."
},
"step": {
"arm_settings": {
"data": {
"alt_night_mode": "Alternativt nattl\u00e4ge",
"auto_bypass": "Automatisk f\u00f6rbikoppling p\u00e5 arm",
"code_arm_required": "Kod kr\u00e4vs f\u00f6r tillkoppling"
},
"title": "Konfigurera AlarmDecoder"
},
"init": {
"data": {
"edit_select": "Redigera"
},
"description": "Vad vill du redigera?"
"description": "Vad vill du redigera?",
"title": "Konfigurera AlarmDecoder"
},
"zone_details": {
"data": {
"zone_loop": "RF loop",
"zone_name": "Zonnamn",
"zone_relayaddr": "Rel\u00e4adress",
"zone_relaychan": "Rel\u00e4kanal",
"zone_rfid": "RF seriell",
"zone_type": "Zontyp"
},
"description": "Ange detaljer f\u00f6r zon {zone_number} . F\u00f6r att ta bort zon {zone_number} l\u00e4mnar du Zonnamn tomt.",
"title": "Konfigurera AlarmDecoder"
},
"zone_select": {
"data": {
"zone_number": "Zonnummer"
},
"description": "Ange zonnumret du vill l\u00e4gga till, redigera eller ta bort.",
"title": "Konfigurera AlarmDecoder"
}
}
}

View File

@@ -269,6 +269,7 @@ class Alexa(AlexaCapability):
"""
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
@@ -277,10 +278,13 @@ class Alexa(AlexaCapability):
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def name(self):
@@ -295,6 +299,7 @@ class AlexaEndpointHealth(AlexaCapability):
"""
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
@@ -302,9 +307,14 @@ class AlexaEndpointHealth(AlexaCapability):
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def __init__(self, hass, entity):
@@ -345,6 +355,7 @@ class AlexaPowerController(AlexaCapability):
"""
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
@@ -352,9 +363,14 @@ class AlexaPowerController(AlexaCapability):
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def name(self):
@@ -379,7 +395,7 @@ class AlexaPowerController(AlexaCapability):
raise UnsupportedProperty(name)
if self.entity.domain == climate.DOMAIN:
is_on = self.entity.state != climate.HVAC_MODE_OFF
is_on = self.entity.state != climate.HVACMode.OFF
elif self.entity.domain == fan.DOMAIN:
is_on = self.entity.state == fan.STATE_ON
elif self.entity.domain == vacuum.DOMAIN:
@@ -400,6 +416,7 @@ class AlexaLockController(AlexaCapability):
"""
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
@@ -461,9 +478,14 @@ class AlexaSceneController(AlexaCapability):
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def __init__(self, entity, supports_deactivation):
@@ -483,6 +505,7 @@ class AlexaBrightnessController(AlexaCapability):
"""
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
@@ -490,6 +513,9 @@ class AlexaBrightnessController(AlexaCapability):
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
@@ -536,6 +562,9 @@ class AlexaColorController(AlexaCapability):
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
@@ -587,6 +616,9 @@ class AlexaColorTemperatureController(AlexaCapability):
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
@@ -635,9 +667,13 @@ class AlexaPercentageController(AlexaCapability):
"en-IN",
"en-US",
"es-ES",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def name(self):
@@ -758,7 +794,24 @@ class AlexaPlaybackController(AlexaCapability):
https://developer.amazon.com/docs/device-apis/alexa-playbackcontroller.html
"""
supported_locales = {"de-DE", "en-AU", "en-CA", "en-GB", "en-IN", "en-US", "fr-FR"}
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
"en-GB",
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def name(self):
"""Return the Alexa API name of this interface."""
@@ -792,7 +845,24 @@ class AlexaInputController(AlexaCapability):
https://developer.amazon.com/docs/device-apis/alexa-inputcontroller.html
"""
supported_locales = {"de-DE", "en-AU", "en-CA", "en-GB", "en-IN", "en-US"}
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
"en-GB",
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def name(self):
"""Return the Alexa API name of this interface."""
@@ -830,6 +900,7 @@ class AlexaTemperatureSensor(AlexaCapability):
"""
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
@@ -837,9 +908,14 @@ class AlexaTemperatureSensor(AlexaCapability):
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def __init__(self, hass, entity):
@@ -901,12 +977,18 @@ class AlexaContactSensor(AlexaCapability):
"de-DE",
"en-AU",
"en-CA",
"en-GB",
"en-IN",
"en-US",
"en-GB",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def __init__(self, hass, entity):
@@ -950,10 +1032,15 @@ class AlexaMotionSensor(AlexaCapability):
"de-DE",
"en-AU",
"en-CA",
"en-GB",
"en-IN",
"en-US",
"en-GB",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
@@ -997,6 +1084,7 @@ class AlexaThermostatController(AlexaCapability):
"""
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
@@ -1004,7 +1092,11 @@ class AlexaThermostatController(AlexaCapability):
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
@@ -1127,6 +1219,8 @@ class AlexaPowerLevelController(AlexaCapability):
"en-IN",
"en-US",
"es-ES",
"es-MX",
"fr-CA",
"fr-FR",
"it-IT",
"ja-JP",
@@ -1260,10 +1354,13 @@ class AlexaModeController(AlexaCapability):
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def __init__(self, entity, instance, non_controllable=False):
@@ -1446,10 +1543,13 @@ class AlexaRangeController(AlexaCapability):
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def __init__(self, entity, instance, non_controllable=False):
@@ -1691,8 +1791,10 @@ class AlexaToggleController(AlexaCapability):
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
@@ -1753,6 +1855,7 @@ class AlexaChannelController(AlexaCapability):
"""
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
@@ -1761,6 +1864,8 @@ class AlexaChannelController(AlexaCapability):
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
@@ -1780,6 +1885,7 @@ class AlexaDoorbellEventSource(AlexaCapability):
"""
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
@@ -1794,6 +1900,7 @@ class AlexaDoorbellEventSource(AlexaCapability):
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def name(self):
@@ -1811,7 +1918,24 @@ class AlexaPlaybackStateReporter(AlexaCapability):
https://developer.amazon.com/docs/device-apis/alexa-playbackstatereporter.html
"""
supported_locales = {"de-DE", "en-GB", "en-US", "es-MX", "fr-FR"}
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
"en-GB",
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def name(self):
"""Return the Alexa API name of this interface."""
@@ -1849,7 +1973,24 @@ class AlexaSeekController(AlexaCapability):
https://developer.amazon.com/docs/device-apis/alexa-seekcontroller.html
"""
supported_locales = {"de-DE", "en-GB", "en-US", "es-MX"}
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
"en-GB",
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
def name(self):
"""Return the Alexa API name of this interface."""
@@ -1925,7 +2066,24 @@ class AlexaEqualizerController(AlexaCapability):
https://developer.amazon.com/en-US/docs/alexa/device-apis/alexa-equalizercontroller.html
"""
supported_locales = {"de-DE", "en-IN", "en-US", "es-ES", "it-IT", "ja-JP", "pt-BR"}
supported_locales = {
"de-DE",
"en-AU",
"en-CA",
"en-GB",
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",
"ja-JP",
"pt-BR",
}
VALID_SOUND_MODES = {
"MOVIE",
"MUSIC",
@@ -2017,6 +2175,7 @@ class AlexaCameraStreamController(AlexaCapability):
"""
supported_locales = {
"ar-SA",
"de-DE",
"en-AU",
"en-CA",
@@ -2024,6 +2183,9 @@ class AlexaCameraStreamController(AlexaCapability):
"en-IN",
"en-US",
"es-ES",
"es-MX",
"es-US",
"fr-CA",
"fr-FR",
"hi-IN",
"it-IT",

View File

@@ -460,7 +460,7 @@ class ClimateCapabilities(AlexaEntity):
def interfaces(self):
"""Yield the supported interfaces."""
# If we support two modes, one being off, we allow turning on too.
if climate.HVAC_MODE_OFF in self.entity.attributes.get(
if climate.HVACMode.OFF in self.entity.attributes.get(
climate.ATTR_HVAC_MODES, []
):
yield AlexaPowerController(self.entity)

View File

@@ -1,6 +1,10 @@
"""Alexa message handlers."""
from __future__ import annotations
from collections.abc import Callable, Coroutine
import logging
import math
from typing import Any
from homeassistant import core as ha
from homeassistant.components import (
@@ -51,6 +55,7 @@ from homeassistant.util.decorator import Registry
import homeassistant.util.dt as dt_util
from homeassistant.util.temperature import convert as convert_temperature
from .config import AbstractConfig
from .const import (
API_TEMP_UNITS,
API_THERMOSTAT_MODES,
@@ -70,14 +75,27 @@ from .errors import (
AlexaUnsupportedThermostatModeError,
AlexaVideoActionNotPermittedForContentError,
)
from .messages import AlexaDirective, AlexaResponse
from .state_report import async_enable_proactive_mode
_LOGGER = logging.getLogger(__name__)
HANDLERS = Registry() # type: ignore[var-annotated]
DIRECTIVE_NOT_SUPPORTED = "Entity does not support directive"
HANDLERS: Registry[
tuple[str, str],
Callable[
[ha.HomeAssistant, AbstractConfig, AlexaDirective, ha.Context],
Coroutine[Any, Any, AlexaResponse],
],
] = Registry()
@HANDLERS.register(("Alexa.Discovery", "Discover"))
async def async_api_discovery(hass, config, directive, context):
async def async_api_discovery(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Create a API formatted discovery response.
Async friendly.
@@ -96,7 +114,12 @@ async def async_api_discovery(hass, config, directive, context):
@HANDLERS.register(("Alexa.Authorization", "AcceptGrant"))
async def async_api_accept_grant(hass, config, directive, context):
async def async_api_accept_grant(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Create a API formatted AcceptGrant response.
Async friendly.
@@ -116,7 +139,12 @@ async def async_api_accept_grant(hass, config, directive, context):
@HANDLERS.register(("Alexa.PowerController", "TurnOn"))
async def async_api_turn_on(hass, config, directive, context):
async def async_api_turn_on(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a turn on request."""
entity = directive.entity
if (domain := entity.domain) == group.DOMAIN:
@@ -157,7 +185,12 @@ async def async_api_turn_on(hass, config, directive, context):
@HANDLERS.register(("Alexa.PowerController", "TurnOff"))
async def async_api_turn_off(hass, config, directive, context):
async def async_api_turn_off(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a turn off request."""
entity = directive.entity
domain = entity.domain
@@ -199,7 +232,12 @@ async def async_api_turn_off(hass, config, directive, context):
@HANDLERS.register(("Alexa.BrightnessController", "SetBrightness"))
async def async_api_set_brightness(hass, config, directive, context):
async def async_api_set_brightness(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a set brightness request."""
entity = directive.entity
brightness = int(directive.payload["brightness"])
@@ -216,7 +254,12 @@ async def async_api_set_brightness(hass, config, directive, context):
@HANDLERS.register(("Alexa.BrightnessController", "AdjustBrightness"))
async def async_api_adjust_brightness(hass, config, directive, context):
async def async_api_adjust_brightness(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process an adjust brightness request."""
entity = directive.entity
brightness_delta = int(directive.payload["brightnessDelta"])
@@ -237,7 +280,12 @@ async def async_api_adjust_brightness(hass, config, directive, context):
@HANDLERS.register(("Alexa.ColorController", "SetColor"))
async def async_api_set_color(hass, config, directive, context):
async def async_api_set_color(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a set color request."""
entity = directive.entity
rgb = color_util.color_hsb_to_RGB(
@@ -258,7 +306,12 @@ async def async_api_set_color(hass, config, directive, context):
@HANDLERS.register(("Alexa.ColorTemperatureController", "SetColorTemperature"))
async def async_api_set_color_temperature(hass, config, directive, context):
async def async_api_set_color_temperature(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a set color temperature request."""
entity = directive.entity
kelvin = int(directive.payload["colorTemperatureInKelvin"])
@@ -275,7 +328,12 @@ async def async_api_set_color_temperature(hass, config, directive, context):
@HANDLERS.register(("Alexa.ColorTemperatureController", "DecreaseColorTemperature"))
async def async_api_decrease_color_temp(hass, config, directive, context):
async def async_api_decrease_color_temp(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a decrease color temperature request."""
entity = directive.entity
current = int(entity.attributes.get(light.ATTR_COLOR_TEMP))
@@ -294,7 +352,12 @@ async def async_api_decrease_color_temp(hass, config, directive, context):
@HANDLERS.register(("Alexa.ColorTemperatureController", "IncreaseColorTemperature"))
async def async_api_increase_color_temp(hass, config, directive, context):
async def async_api_increase_color_temp(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process an increase color temperature request."""
entity = directive.entity
current = int(entity.attributes.get(light.ATTR_COLOR_TEMP))
@@ -313,7 +376,12 @@ async def async_api_increase_color_temp(hass, config, directive, context):
@HANDLERS.register(("Alexa.SceneController", "Activate"))
async def async_api_activate(hass, config, directive, context):
async def async_api_activate(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process an activate request."""
entity = directive.entity
domain = entity.domain
@@ -343,7 +411,12 @@ async def async_api_activate(hass, config, directive, context):
@HANDLERS.register(("Alexa.SceneController", "Deactivate"))
async def async_api_deactivate(hass, config, directive, context):
async def async_api_deactivate(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a deactivate request."""
entity = directive.entity
domain = entity.domain
@@ -367,16 +440,24 @@ async def async_api_deactivate(hass, config, directive, context):
@HANDLERS.register(("Alexa.PercentageController", "SetPercentage"))
async def async_api_set_percentage(hass, config, directive, context):
async def async_api_set_percentage(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a set percentage request."""
entity = directive.entity
service = None
data = {ATTR_ENTITY_ID: entity.entity_id}
if entity.domain == fan.DOMAIN:
service = fan.SERVICE_SET_PERCENTAGE
percentage = int(directive.payload["percentage"])
data[fan.ATTR_PERCENTAGE] = percentage
if entity.domain != fan.DOMAIN:
raise AlexaInvalidDirectiveError(DIRECTIVE_NOT_SUPPORTED)
percentage = int(directive.payload["percentage"])
service = fan.SERVICE_SET_PERCENTAGE
data = {
ATTR_ENTITY_ID: entity.entity_id,
fan.ATTR_PERCENTAGE: percentage,
}
await hass.services.async_call(
entity.domain, service, data, blocking=False, context=context
@@ -386,20 +467,27 @@ async def async_api_set_percentage(hass, config, directive, context):
@HANDLERS.register(("Alexa.PercentageController", "AdjustPercentage"))
async def async_api_adjust_percentage(hass, config, directive, context):
async def async_api_adjust_percentage(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process an adjust percentage request."""
entity = directive.entity
if entity.domain != fan.DOMAIN:
raise AlexaInvalidDirectiveError(DIRECTIVE_NOT_SUPPORTED)
percentage_delta = int(directive.payload["percentageDelta"])
service = None
data = {ATTR_ENTITY_ID: entity.entity_id}
if entity.domain == fan.DOMAIN:
service = fan.SERVICE_SET_PERCENTAGE
current = entity.attributes.get(fan.ATTR_PERCENTAGE) or 0
# set percentage
percentage = min(100, max(0, percentage_delta + current))
data[fan.ATTR_PERCENTAGE] = percentage
current = entity.attributes.get(fan.ATTR_PERCENTAGE) or 0
# set percentage
percentage = min(100, max(0, percentage_delta + current))
service = fan.SERVICE_SET_PERCENTAGE
data = {
ATTR_ENTITY_ID: entity.entity_id,
fan.ATTR_PERCENTAGE: percentage,
}
await hass.services.async_call(
entity.domain, service, data, blocking=False, context=context
@@ -409,7 +497,12 @@ async def async_api_adjust_percentage(hass, config, directive, context):
@HANDLERS.register(("Alexa.LockController", "Lock"))
async def async_api_lock(hass, config, directive, context):
async def async_api_lock(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a lock request."""
entity = directive.entity
await hass.services.async_call(
@@ -428,7 +521,12 @@ async def async_api_lock(hass, config, directive, context):
@HANDLERS.register(("Alexa.LockController", "Unlock"))
async def async_api_unlock(hass, config, directive, context):
async def async_api_unlock(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process an unlock request."""
if config.locale not in {"de-DE", "en-US", "ja-JP"}:
msg = f"The unlock directive is not supported for the following locales: {config.locale}"
@@ -452,7 +550,12 @@ async def async_api_unlock(hass, config, directive, context):
@HANDLERS.register(("Alexa.Speaker", "SetVolume"))
async def async_api_set_volume(hass, config, directive, context):
async def async_api_set_volume(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a set volume request."""
volume = round(float(directive.payload["volume"] / 100), 2)
entity = directive.entity
@@ -470,7 +573,12 @@ async def async_api_set_volume(hass, config, directive, context):
@HANDLERS.register(("Alexa.InputController", "SelectInput"))
async def async_api_select_input(hass, config, directive, context):
async def async_api_select_input(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a set input request."""
media_input = directive.payload["input"]
entity = directive.entity
@@ -514,7 +622,12 @@ async def async_api_select_input(hass, config, directive, context):
@HANDLERS.register(("Alexa.Speaker", "AdjustVolume"))
async def async_api_adjust_volume(hass, config, directive, context):
async def async_api_adjust_volume(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process an adjust volume request."""
volume_delta = int(directive.payload["volume"])
@@ -542,7 +655,12 @@ async def async_api_adjust_volume(hass, config, directive, context):
@HANDLERS.register(("Alexa.StepSpeaker", "AdjustVolume"))
async def async_api_adjust_volume_step(hass, config, directive, context):
async def async_api_adjust_volume_step(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process an adjust volume step request."""
# media_player volume up/down service does not support specifying steps
# each component handles it differently e.g. via config.
@@ -575,7 +693,12 @@ async def async_api_adjust_volume_step(hass, config, directive, context):
@HANDLERS.register(("Alexa.StepSpeaker", "SetMute"))
@HANDLERS.register(("Alexa.Speaker", "SetMute"))
async def async_api_set_mute(hass, config, directive, context):
async def async_api_set_mute(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a set mute request."""
mute = bool(directive.payload["mute"])
entity = directive.entity
@@ -592,7 +715,12 @@ async def async_api_set_mute(hass, config, directive, context):
@HANDLERS.register(("Alexa.PlaybackController", "Play"))
async def async_api_play(hass, config, directive, context):
async def async_api_play(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a play request."""
entity = directive.entity
data = {ATTR_ENTITY_ID: entity.entity_id}
@@ -605,7 +733,12 @@ async def async_api_play(hass, config, directive, context):
@HANDLERS.register(("Alexa.PlaybackController", "Pause"))
async def async_api_pause(hass, config, directive, context):
async def async_api_pause(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a pause request."""
entity = directive.entity
data = {ATTR_ENTITY_ID: entity.entity_id}
@@ -618,7 +751,12 @@ async def async_api_pause(hass, config, directive, context):
@HANDLERS.register(("Alexa.PlaybackController", "Stop"))
async def async_api_stop(hass, config, directive, context):
async def async_api_stop(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a stop request."""
entity = directive.entity
data = {ATTR_ENTITY_ID: entity.entity_id}
@@ -631,7 +769,12 @@ async def async_api_stop(hass, config, directive, context):
@HANDLERS.register(("Alexa.PlaybackController", "Next"))
async def async_api_next(hass, config, directive, context):
async def async_api_next(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a next request."""
entity = directive.entity
data = {ATTR_ENTITY_ID: entity.entity_id}
@@ -644,7 +787,12 @@ async def async_api_next(hass, config, directive, context):
@HANDLERS.register(("Alexa.PlaybackController", "Previous"))
async def async_api_previous(hass, config, directive, context):
async def async_api_previous(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a previous request."""
entity = directive.entity
data = {ATTR_ENTITY_ID: entity.entity_id}
@@ -676,7 +824,12 @@ def temperature_from_object(hass, temp_obj, interval=False):
@HANDLERS.register(("Alexa.ThermostatController", "SetTargetTemperature"))
async def async_api_set_target_temp(hass, config, directive, context):
async def async_api_set_target_temp(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a set target temperature request."""
entity = directive.entity
min_temp = entity.attributes.get(climate.ATTR_MIN_TEMP)
@@ -736,7 +889,12 @@ async def async_api_set_target_temp(hass, config, directive, context):
@HANDLERS.register(("Alexa.ThermostatController", "AdjustTargetTemperature"))
async def async_api_adjust_target_temp(hass, config, directive, context):
async def async_api_adjust_target_temp(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process an adjust target temperature request."""
entity = directive.entity
min_temp = entity.attributes.get(climate.ATTR_MIN_TEMP)
@@ -773,7 +931,12 @@ async def async_api_adjust_target_temp(hass, config, directive, context):
@HANDLERS.register(("Alexa.ThermostatController", "SetThermostatMode"))
async def async_api_set_thermostat_mode(hass, config, directive, context):
async def async_api_set_thermostat_mode(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a set thermostat mode request."""
entity = directive.entity
mode = directive.payload["thermostatMode"]
@@ -836,13 +999,23 @@ async def async_api_set_thermostat_mode(hass, config, directive, context):
@HANDLERS.register(("Alexa", "ReportState"))
async def async_api_reportstate(hass, config, directive, context):
async def async_api_reportstate(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a ReportState request."""
return directive.response(name="StateReport")
@HANDLERS.register(("Alexa.SecurityPanelController", "Arm"))
async def async_api_arm(hass, config, directive, context):
async def async_api_arm(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a Security Panel Arm request."""
entity = directive.entity
service = None
@@ -859,6 +1032,8 @@ async def async_api_arm(hass, config, directive, context):
service = SERVICE_ALARM_ARM_NIGHT
elif arm_state == "ARMED_STAY":
service = SERVICE_ALARM_ARM_HOME
else:
raise AlexaInvalidDirectiveError(DIRECTIVE_NOT_SUPPORTED)
await hass.services.async_call(
entity.domain, service, data, blocking=False, context=context
@@ -883,7 +1058,12 @@ async def async_api_arm(hass, config, directive, context):
@HANDLERS.register(("Alexa.SecurityPanelController", "Disarm"))
async def async_api_disarm(hass, config, directive, context):
async def async_api_disarm(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a Security Panel Disarm request."""
entity = directive.entity
data = {ATTR_ENTITY_ID: entity.entity_id}
@@ -916,7 +1096,12 @@ async def async_api_disarm(hass, config, directive, context):
@HANDLERS.register(("Alexa.ModeController", "SetMode"))
async def async_api_set_mode(hass, config, directive, context):
async def async_api_set_mode(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a SetMode directive."""
entity = directive.entity
instance = directive.instance
@@ -955,9 +1140,8 @@ async def async_api_set_mode(hass, config, directive, context):
elif position == "custom":
service = cover.SERVICE_STOP_COVER
else:
msg = "Entity does not support directive"
raise AlexaInvalidDirectiveError(msg)
if not service:
raise AlexaInvalidDirectiveError(DIRECTIVE_NOT_SUPPORTED)
await hass.services.async_call(
domain, service, data, blocking=False, context=context
@@ -977,7 +1161,12 @@ async def async_api_set_mode(hass, config, directive, context):
@HANDLERS.register(("Alexa.ModeController", "AdjustMode"))
async def async_api_adjust_mode(hass, config, directive, context):
async def async_api_adjust_mode(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a AdjustMode request.
Requires capabilityResources supportedModes to be ordered.
@@ -985,26 +1174,30 @@ async def async_api_adjust_mode(hass, config, directive, context):
"""
# Currently no supportedModes are configured with ordered=True to support this request.
msg = "Entity does not support directive"
raise AlexaInvalidDirectiveError(msg)
raise AlexaInvalidDirectiveError(DIRECTIVE_NOT_SUPPORTED)
@HANDLERS.register(("Alexa.ToggleController", "TurnOn"))
async def async_api_toggle_on(hass, config, directive, context):
async def async_api_toggle_on(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a toggle on request."""
entity = directive.entity
instance = directive.instance
domain = entity.domain
service = None
data = {ATTR_ENTITY_ID: entity.entity_id}
# Fan Oscillating
if instance == f"{fan.DOMAIN}.{fan.ATTR_OSCILLATING}":
service = fan.SERVICE_OSCILLATE
data[fan.ATTR_OSCILLATING] = True
else:
msg = "Entity does not support directive"
raise AlexaInvalidDirectiveError(msg)
if instance != f"{fan.DOMAIN}.{fan.ATTR_OSCILLATING}":
raise AlexaInvalidDirectiveError(DIRECTIVE_NOT_SUPPORTED)
service = fan.SERVICE_OSCILLATE
data = {
ATTR_ENTITY_ID: entity.entity_id,
fan.ATTR_OSCILLATING: True,
}
await hass.services.async_call(
domain, service, data, blocking=False, context=context
@@ -1024,21 +1217,26 @@ async def async_api_toggle_on(hass, config, directive, context):
@HANDLERS.register(("Alexa.ToggleController", "TurnOff"))
async def async_api_toggle_off(hass, config, directive, context):
async def async_api_toggle_off(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a toggle off request."""
entity = directive.entity
instance = directive.instance
domain = entity.domain
service = None
data = {ATTR_ENTITY_ID: entity.entity_id}
# Fan Oscillating
if instance == f"{fan.DOMAIN}.{fan.ATTR_OSCILLATING}":
service = fan.SERVICE_OSCILLATE
data[fan.ATTR_OSCILLATING] = False
else:
msg = "Entity does not support directive"
raise AlexaInvalidDirectiveError(msg)
if instance != f"{fan.DOMAIN}.{fan.ATTR_OSCILLATING}":
raise AlexaInvalidDirectiveError(DIRECTIVE_NOT_SUPPORTED)
service = fan.SERVICE_OSCILLATE
data = {
ATTR_ENTITY_ID: entity.entity_id,
fan.ATTR_OSCILLATING: False,
}
await hass.services.async_call(
domain, service, data, blocking=False, context=context
@@ -1058,7 +1256,12 @@ async def async_api_toggle_off(hass, config, directive, context):
@HANDLERS.register(("Alexa.RangeController", "SetRangeValue"))
async def async_api_set_range(hass, config, directive, context):
async def async_api_set_range(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a next request."""
entity = directive.entity
instance = directive.instance
@@ -1125,8 +1328,7 @@ async def async_api_set_range(hass, config, directive, context):
data[vacuum.ATTR_FAN_SPEED] = speed
else:
msg = "Entity does not support directive"
raise AlexaInvalidDirectiveError(msg)
raise AlexaInvalidDirectiveError(DIRECTIVE_NOT_SUPPORTED)
await hass.services.async_call(
domain, service, data, blocking=False, context=context
@@ -1146,16 +1348,21 @@ async def async_api_set_range(hass, config, directive, context):
@HANDLERS.register(("Alexa.RangeController", "AdjustRangeValue"))
async def async_api_adjust_range(hass, config, directive, context):
async def async_api_adjust_range(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a next request."""
entity = directive.entity
instance = directive.instance
domain = entity.domain
service = None
data = {ATTR_ENTITY_ID: entity.entity_id}
data: dict[str, Any] = {ATTR_ENTITY_ID: entity.entity_id}
range_delta = directive.payload["rangeValueDelta"]
range_delta_default = bool(directive.payload["rangeValueDeltaDefault"])
response_value = 0
response_value: int | None = 0
# Cover Position
if instance == f"{cover.DOMAIN}.{cover.ATTR_POSITION}":
@@ -1232,12 +1439,10 @@ async def async_api_adjust_range(hass, config, directive, context):
speed = next(
(v for i, v in enumerate(speed_list) if i == new_speed_index), None
)
data[vacuum.ATTR_FAN_SPEED] = response_value = speed
else:
msg = "Entity does not support directive"
raise AlexaInvalidDirectiveError(msg)
raise AlexaInvalidDirectiveError(DIRECTIVE_NOT_SUPPORTED)
await hass.services.async_call(
domain, service, data, blocking=False, context=context
@@ -1257,7 +1462,12 @@ async def async_api_adjust_range(hass, config, directive, context):
@HANDLERS.register(("Alexa.ChannelController", "ChangeChannel"))
async def async_api_changechannel(hass, config, directive, context):
async def async_api_changechannel(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a change channel request."""
channel = "0"
entity = directive.entity
@@ -1309,7 +1519,12 @@ async def async_api_changechannel(hass, config, directive, context):
@HANDLERS.register(("Alexa.ChannelController", "SkipChannels"))
async def async_api_skipchannel(hass, config, directive, context):
async def async_api_skipchannel(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a skipchannel request."""
channel = int(directive.payload["channelCount"])
entity = directive.entity
@@ -1340,7 +1555,12 @@ async def async_api_skipchannel(hass, config, directive, context):
@HANDLERS.register(("Alexa.SeekController", "AdjustSeekPosition"))
async def async_api_seek(hass, config, directive, context):
async def async_api_seek(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a seek request."""
entity = directive.entity
position_delta = int(directive.payload["deltaPositionMilliseconds"])
@@ -1379,7 +1599,12 @@ async def async_api_seek(hass, config, directive, context):
@HANDLERS.register(("Alexa.EqualizerController", "SetMode"))
async def async_api_set_eq_mode(hass, config, directive, context):
async def async_api_set_eq_mode(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a SetMode request for EqualizerController."""
mode = directive.payload["mode"]
entity = directive.entity
@@ -1406,18 +1631,27 @@ async def async_api_set_eq_mode(hass, config, directive, context):
@HANDLERS.register(("Alexa.EqualizerController", "AdjustBands"))
@HANDLERS.register(("Alexa.EqualizerController", "ResetBands"))
@HANDLERS.register(("Alexa.EqualizerController", "SetBands"))
async def async_api_bands_directive(hass, config, directive, context):
async def async_api_bands_directive(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Handle an AdjustBands, ResetBands, SetBands request.
Only mode directives are currently supported for the EqualizerController.
"""
# Currently bands directives are not supported.
msg = "Entity does not support directive"
raise AlexaInvalidDirectiveError(msg)
raise AlexaInvalidDirectiveError(DIRECTIVE_NOT_SUPPORTED)
@HANDLERS.register(("Alexa.TimeHoldController", "Hold"))
async def async_api_hold(hass, config, directive, context):
async def async_api_hold(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a TimeHoldController Hold request."""
entity = directive.entity
data = {ATTR_ENTITY_ID: entity.entity_id}
@@ -1429,8 +1663,7 @@ async def async_api_hold(hass, config, directive, context):
service = vacuum.SERVICE_START_PAUSE
else:
msg = "Entity does not support directive"
raise AlexaInvalidDirectiveError(msg)
raise AlexaInvalidDirectiveError(DIRECTIVE_NOT_SUPPORTED)
await hass.services.async_call(
entity.domain, service, data, blocking=False, context=context
@@ -1440,7 +1673,12 @@ async def async_api_hold(hass, config, directive, context):
@HANDLERS.register(("Alexa.TimeHoldController", "Resume"))
async def async_api_resume(hass, config, directive, context):
async def async_api_resume(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a TimeHoldController Resume request."""
entity = directive.entity
data = {ATTR_ENTITY_ID: entity.entity_id}
@@ -1452,8 +1690,7 @@ async def async_api_resume(hass, config, directive, context):
service = vacuum.SERVICE_START_PAUSE
else:
msg = "Entity does not support directive"
raise AlexaInvalidDirectiveError(msg)
raise AlexaInvalidDirectiveError(DIRECTIVE_NOT_SUPPORTED)
await hass.services.async_call(
entity.domain, service, data, blocking=False, context=context
@@ -1463,11 +1700,18 @@ async def async_api_resume(hass, config, directive, context):
@HANDLERS.register(("Alexa.CameraStreamController", "InitializeCameraStreams"))
async def async_api_initialize_camera_stream(hass, config, directive, context):
async def async_api_initialize_camera_stream(
hass: ha.HomeAssistant,
config: AbstractConfig,
directive: AlexaDirective,
context: ha.Context,
) -> AlexaResponse:
"""Process a InitializeCameraStreams request."""
entity = directive.entity
stream_source = await camera.async_request_stream(hass, entity.entity_id, fmt="hls")
camera_image = hass.states.get(entity.entity_id).attributes[ATTR_ENTITY_PICTURE]
state = hass.states.get(entity.entity_id)
assert state
camera_image = state.attributes[ATTR_ENTITY_PICTURE]
try:
external_url = network.get_url(

View File

@@ -2,17 +2,17 @@
"config": {
"abort": {
"cannot_connect": "No se pudo conectar",
"missing_configuration": "El componente no est\u00e1 configurado. Mira su documentaci\u00f3n.",
"no_url_available": "No hay URL disponible. Para obtener informaci\u00f3n sobre este error, [consulta la secci\u00f3n de ayuda]({docs_url})",
"missing_configuration": "El componente no est\u00e1 configurado. Por favor, sigue la documentaci\u00f3n.",
"no_url_available": "No hay URL disponible. Para obtener informaci\u00f3n sobre este error, [revisa la secci\u00f3n de ayuda]({docs_url})",
"single_instance_allowed": "Ya est\u00e1 configurado. Solo es posible una \u00fanica configuraci\u00f3n."
},
"step": {
"hassio_confirm": {
"description": "\u00bfDesea configurar Home Assistant para conectarse a Almond proporcionado por el complemento Supervisor: {addon} ?",
"title": "Almond a trav\u00e9s del complemento Supervisor"
"description": "\u00bfQuieres configurar Home Assistant para conectarse a Almond proporcionado por el complemento: {addon}?",
"title": "Almond a trav\u00e9s del complemento Home Assistant"
},
"pick_implementation": {
"title": "Seleccione el m\u00e9todo de autenticaci\u00f3n"
"title": "Selecciona el m\u00e9todo de autenticaci\u00f3n"
}
}
}

View File

@@ -2,7 +2,9 @@
"config": {
"abort": {
"cannot_connect": "Det g\u00e5r inte att ansluta till Almond-servern.",
"missing_configuration": "Kontrollera dokumentationen f\u00f6r hur du st\u00e4ller in Almond."
"missing_configuration": "Kontrollera dokumentationen f\u00f6r hur du st\u00e4ller in Almond.",
"no_url_available": "Ingen webbadress tillg\u00e4nglig. F\u00f6r information om detta fel, [kolla hj\u00e4lpavsnittet]({docs_url})",
"single_instance_allowed": "Redan konfigurerad. Endast en konfiguration m\u00f6jlig."
},
"step": {
"hassio_confirm": {

View File

@@ -10,7 +10,7 @@ import voluptuous as vol
from homeassistant.components import persistent_notification
from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity
from homeassistant.const import ATTR_ATTRIBUTION, CONF_API_KEY, CONF_CURRENCY, CONF_NAME
from homeassistant.const import CONF_API_KEY, CONF_CURRENCY, CONF_NAME
from homeassistant.core import HomeAssistant
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@@ -118,6 +118,8 @@ def setup_platform(
class AlphaVantageSensor(SensorEntity):
"""Representation of a Alpha Vantage sensor."""
_attr_attribution = ATTRIBUTION
def __init__(self, timeseries, symbol):
"""Initialize the sensor."""
self._symbol = symbol[CONF_SYMBOL]
@@ -126,7 +128,7 @@ class AlphaVantageSensor(SensorEntity):
self._attr_native_unit_of_measurement = symbol.get(CONF_CURRENCY, self._symbol)
self._attr_icon = ICONS.get(symbol.get(CONF_CURRENCY, "USD"))
def update(self):
def update(self) -> None:
"""Get the latest data and updates the states."""
_LOGGER.debug("Requesting new data for symbol %s", self._symbol)
all_values, _ = self._timeseries.get_intraday(self._symbol)
@@ -137,13 +139,12 @@ class AlphaVantageSensor(SensorEntity):
self._attr_native_value = None
self._attr_extra_state_attributes = (
{
ATTR_ATTRIBUTION: ATTRIBUTION,
ATTR_CLOSE: values["4. close"],
ATTR_HIGH: values["2. high"],
ATTR_LOW: values["3. low"],
}
if isinstance(values, dict)
else None
else {}
)
_LOGGER.debug("Received new values for symbol %s", self._symbol)
@@ -151,6 +152,8 @@ class AlphaVantageSensor(SensorEntity):
class AlphaVantageForeignExchange(SensorEntity):
"""Sensor for foreign exchange rates."""
_attr_attribution = ATTRIBUTION
def __init__(self, foreign_exchange, config):
"""Initialize the sensor."""
self._foreign_exchange = foreign_exchange
@@ -164,7 +167,7 @@ class AlphaVantageForeignExchange(SensorEntity):
self._attr_icon = ICONS.get(self._from_currency, "USD")
self._attr_native_unit_of_measurement = self._to_currency
def update(self):
def update(self) -> None:
"""Get the latest data and updates the states."""
_LOGGER.debug(
"Requesting new data for forex %s - %s",
@@ -180,12 +183,11 @@ class AlphaVantageForeignExchange(SensorEntity):
self._attr_native_value = None
self._attr_extra_state_attributes = (
{
ATTR_ATTRIBUTION: ATTRIBUTION,
CONF_FROM: self._from_currency,
CONF_TO: self._to_currency,
}
if values is not None
else None
else {}
)
_LOGGER.debug(

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