Compare commits

...

632 Commits

Author SHA1 Message Date
Erik
18dae08244 Set unique_id to DOMAIN 2023-01-17 19:03:17 +01:00
Erik
5d21b6e7a7 Validate URL 2023-01-17 16:33:19 +01:00
Erik
eea98b22e0 Allow manually setting up the Thread integration 2023-01-17 16:01:02 +01:00
Marcel van der Veldt
072517f17e Fix Matter unique_id generation (#86046)
* bae entity unique id on Operational Instance Name standard

* Update homeassistant/components/matter/entity.py

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

* also adjust unique id for devices

* final adjustment

* remove assert on server_info

* move device info to init

* fabric_id_hex

* use DeviceInfo instead of dict

* fix test

Co-authored-by: Stefan Agner <stefan@agner.ch>
2023-01-17 15:39:42 +01:00
Erik Montnemery
3cd6bd87a7 Remove config entry specifics from FlowManager (#85565) 2023-01-17 15:26:17 +01:00
Duco Sebel
0f3221eac7 Add Enum device class for HomeWizard active tariff (#86078)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-01-17 14:46:08 +01:00
lunmay
8485588aca Fix typo in energy: misplaced closing brace (#86027) 2023-01-17 14:34:27 +01:00
Erik Montnemery
11b9a0b383 Add Thread integration (#85002)
* Add Thread integration

* Add get/set operational dataset as TLVS

* Add create operational dataset

* Add set thread state

* Adjust after rebase

* Improve HTTP status handling

* Improve test coverage

* Change domains from thread to otbr

* Setup otbr from a config entry

* Add files

* Store URL in config entry data

* Make sure manifest is not sorted

* Remove useless async

* Call the JSON parser more

* Don't raise exceptions without messages

* Remove stuff which will be needed in the future

* Remove more future stuff

* Use API library

* Bump library to 1.0.1
2023-01-17 14:01:36 +01:00
Tiit Rätsep
9b835f88c7 Soma connect update (#85682)
* Add support for Connect U1

* update pysoma to latest version

* Changes requested by epenet

* Extend exeption handling to pass all tests
2023-01-17 13:17:59 +01:00
Guido Schmitz
cb36905ce5 Add diagnostics to devolo Home Network (#86022) 2023-01-17 12:59:02 +01:00
epenet
8e7e210693 Fix invalid constant in vicare (#86079) 2023-01-17 12:29:32 +01:00
epenet
b7f484a84f Set renault quality scale to platinum (#85753)
* Set renault quality scale to platinum

* Ensure coordinators do not run at the same time

* Add comment
2023-01-17 11:50:17 +01:00
epenet
1918f21fb1 Raise HomeAssistantError in Renault (#86071) 2023-01-17 11:44:18 +01:00
hpirila
6c5f9c6fcb Add sous vide start functionality (#84447) 2023-01-17 11:42:04 +01:00
Hans Oischinger
1e9de194d3 Add vicare buffer top/main temperature sensors (#79466)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
fixes undefined
2023-01-17 11:34:38 +01:00
Franck Nijhof
566c0f63bd Removes OpenALPR Local integration (#85544) 2023-01-17 10:43:14 +01:00
epenet
f7d69ee325 Remove deprecated Renault service (#86070) 2023-01-17 10:28:33 +01:00
J. Nick Koston
551e098177 Make event.time_tracker_utcnow patchable with freezegun (#86051) 2023-01-17 09:47:31 +01:00
Erik Montnemery
14a32cd63b Allow converting units of additional sensor device classes (#86072) 2023-01-17 09:35:53 +01:00
Jack Boswell
ec1b4d5651 Address Starlink code quality and add update sensor (#86066)
* Use dt.now

* Bring back update binary sensor

* Don't patch coordinator

* Add silver quality scale
2023-01-17 09:10:40 +01:00
Franck Nijhof
4aba3fdad6 Code styling tweaks to the zeroconf integration (#86048) 2023-01-16 18:35:23 -10:00
Brandon Rothweiler
2ed6df9003 Add EufyLife Bluetooth integration (#85907)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-16 18:29:50 -10:00
Luke
8b3a6514a3 oralb async_poll doc comment typo (#86049) 2023-01-16 14:26:54 -10:00
GitHub Action
d2e11797f8 [ci skip] Translation update 2023-01-17 00:24:30 +00:00
Aidan Timson
26c419705e Add typings to OVO Energy integration (#75944)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-01-16 23:26:40 +01:00
Ville Skyttä
f0e6f45e43 Remove signal strength state class from Huawei LTE transmit power sensor (#85973)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-01-16 23:24:50 +01:00
Andre Basche
abc8b891be Add some sensors and controls to tuya dehumidifier (#85380)
fixes undefined
2023-01-16 22:58:01 +01:00
Franck Nijhof
851eef1144 Update whois to 0.9.23 (#86042) 2023-01-16 22:31:43 +01:00
Mick Vleeshouwer
15db63bb3b Add SSHd and GH CLI to devcontainer to support gh net (#81623) 2023-01-16 22:28:18 +01:00
J. Nick Koston
d949f51f10 Handle ignored shelly entries when discovering via zeroconf (#86039)
fixes https://github.com/home-assistant/core/issues/85879
2023-01-16 11:21:49 -10:00
Franck Nijhof
b85d6e6ede Update orjson to 3.8.5 (#86043) 2023-01-16 22:20:12 +01:00
Sean Chen
c3c9ed6835 Improve type hints in nws (#83173) 2023-01-16 22:19:11 +01:00
Daniel Hjelseth Høyer
a818ef6411 Update pyTibber to 0.26.8 (#86044) 2023-01-16 22:16:34 +01:00
Erik Montnemery
788edc21fb Deduplicate some entity registry code (#85541) 2023-01-16 22:06:52 +01:00
Rodrigo Matias
612f93d636 Add switch to Tuya product category wsdcg (#85762) 2023-01-16 22:05:53 +01:00
Thierry Ygé
b5956eb8dd Add Tuya sensor for Smart IR remote device (#85955) 2023-01-16 22:04:26 +01:00
epenet
2087c53fa5 Set onewire quality scale to gold (#85748) 2023-01-16 22:00:58 +01:00
Matteo Corti
c1f08256e2 Bump openerz-api to 0.2.0 (#86013)
Co-authored-by: Franck Nijhof <git@frenck.dev>
fixes undefined
2023-01-16 21:52:39 +01:00
Karlie Meads
156307f3f2 Fix logic of disabled condition for "OR" (#79718) 2023-01-16 21:08:09 +01:00
Nathan Spencer
c6f60bf45d Code cleanup in litterrobot (#86037) 2023-01-16 20:58:30 +01:00
Michael
5fbc005224 Make central AvmWrapper class fully async in Fritz!Tools (#83768) 2023-01-16 20:54:32 +01:00
Max R
156c815499 Run flake8 on more files (#85333)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
Co-authored-by: Dave T <17680170+davet2001@users.noreply.github.com>
2023-01-16 20:53:14 +01:00
shbatm
3aad153913 Add enable/disable config switch for ISY994 devices (#85975)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-16 09:33:55 -10:00
Michel van de Wetering
b087c1e734 Set deviceclass to speaker for Sonos media_player (#80694) 2023-01-16 20:20:37 +01:00
shbatm
7636477760 Add Insteon backlight control support to ISY994, bump PyISY to 3.1.8 (#85981)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-16 09:15:41 -10:00
Jan Rieger
89d085a69c Add Fire TV virtual integration (#85741) 2023-01-16 20:12:31 +01:00
Michael
d8c3b87d44 Replace deprecated constants and utils by their successors in NWS tests (#85926) 2023-01-16 20:02:26 +01:00
shbatm
1945ba06ba Deprecate ISY994 custom reload service (#86019) 2023-01-16 09:01:59 -10:00
Michael
3d4b1fb689 Remove the usage of HA core unit constant in withings own unit definitions (#85942) 2023-01-16 20:00:58 +01:00
Jan Stienstra
a35a4efaaa Add Jellyfin media source support for tvshows (#85953) 2023-01-16 19:59:51 +01:00
Marcel van der Veldt
fe583b7c4a Remove SSDP discovery from Hue (#85506)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-01-16 19:56:46 +01:00
Allen Porter
1afb4897a8 Add a timeout during OAuth token exchange and additional debug logging (#85911) 2023-01-16 19:52:43 +01:00
Franck Nijhof
c5dedb7a79 Code styling tweaks to the recorder integration (#86030) 2023-01-16 19:51:11 +01:00
Shay Levy
5b2c1d701a Bump aiowebostv to 0.3.2 (#86031)
fixes undefined
2023-01-16 19:51:00 +01:00
shbatm
b229347625 Fix entity cleanup and naming bugs in ISY994 (#86023) 2023-01-16 19:43:42 +01:00
Franck Nijhof
6a89b3a135 Small refactor to HomeWizard config flow (#86020)
* Small refactor to HomeWizard config flow

* Update homeassistant/components/homewizard/config_flow.py

Co-authored-by: Duco Sebel <74970928+DCSBL@users.noreply.github.com>

* Process review comments

Co-authored-by: Duco Sebel <74970928+DCSBL@users.noreply.github.com>
2023-01-16 17:03:00 +01:00
epenet
9205020fa4 Avoid import homeassistant.const as a module (#85991) 2023-01-16 16:49:49 +01:00
TheJulianJES
9f0bed0f0c Implement "group members assume state" option for ZHA (#84938)
* Initial "group members assume state" implementation for ZHA

* Remove left-over debug flag (where polling was disabled)

* Implement _send_member_assume_state_event() method and also use after turn_off

* Only assume updated arguments from service call to group

* Make code more readable and change checks slightly

* Move "send member assume state" events to LightGroup on/off calls

* Include new config option in tests

* Check that member is available before updating to assumed state

* Lower "update group from child delay" for debouncer to basically 0 when using assumed member state

* Allow "child to group" updates regardless of config option

This is not needed, as group members will not update their state, as long as they're transitioning. (If a group transitions, it also sets its members to transitioning mode)

This fixes multiple issues. Previously, the state of a group was completely wrong when:
- turn on group with 10 second transition
- turn on members individually
- turn off members individually
- group state would not update correctly

* Move "default update group from child delay" constant

* Change to new constant name in test

* Also update fan test to new constant name

* Decrease "update group from child delay" to 10ms

In my testing, 0.0 also works without any issues and correctly de-bounces child updates when using the "assume state option".
This is just for avoiding multiple state changes when changing the group -> children issue individual updates.
With 2 children in a group and delay 0, both child updates only cause one group re-calculation and state change.

0.01 (10ms) should be plenty for very slow systems to de-bounce the update (and in the worst case, it'll cause just another state change but nothing breaks)

* Also implement "assuming state" for effect

Not sure if anybody even uses this, but this one is a bit special because the effect is always deactivated if it's not provided in the light.turn_on call.

* Move shortened delay for "assuming members" to a constant

* Add basic test to verify that group members assume on/off state

* Move _assume_group_state function declaration out of async_added_to_hass

* Fix rare edge-case when rapidly toggling lights and light groups at the same time

This prevents an issue where either the group transition would unset the transition flag or the single light would unset the group transition status midst-transition.

Note: When a new individual transition is started, we want to unset the group flag, as we actually cancel that transition.

* Check that effect list exists, add return type

* Re-trigger CI due to timeout

* Increase ASSUME_UPDATE_GROUP_FROM_CHILD_DELAY slightly

The debouncer is used when updating group member states either by assuming them (in which case we want to barely have any delay), or between the time we get the results back from polling (where we want a slightly longer time).
As it's not easily possible to distinguish if a group member was updated via assuming the state of the group or by the polling that follows, 50 ms seems to be a good middle point.

* Add debug print for when updating group state

* Fix issues with "off brightness" when switching between group/members

This fixes a bunch of issues with "off brightness" and passes it down to the members correctly.
For example, if a light group is turned off with a transition (so bulbs get their level set to 1), this will also set the "off brightness" of all individual bulbs to the last level that they were at.

(It really fixes a lot of issues when using the "member assume group state" option. It's not really possible to fix them without that.)

Furthermore, issues where polling was previously needed to get the correct state after "playing with transitions", should now get be resolved and get correct state when using the "members assume group state" option.

Note: The only case which still can't be fixed is the following:
If individual lights have off_with_transition set, but not the group, and the group is then turned on without a level, individual lights might fall back to brightness level 1 (<- at least now shows correctly in UI even before polling).
Since all lights might need different brightness levels to be turned on, we can't use one group call. But making individual calls when turning on a ZHA group would cause a lot of traffic and thereby be counter-productive.
In this case, light.turn_on should just be called with a level (or individual calls to the lights should be made).

Another thing that was changed is to reset off_with_transition/off_brightness for a LightGroup when a member is turned on (even if the LightGroup wasn't turned on using its turn_on method).
off_with_transition/off_brightness for individual bulbs is now also turned off when a light is detected to be on during polling.

Lastly, the waiting for polled attributes could previously cause "invalid state" to be set (so mid-transition levels).
This could happen when group and members are repeatedly toggled at similar times. These "invalid states" could cause wrong "off brightness" levels if transitions are also used.
To fix this, we check after waiting for the polled attributes in async_get_state to see if a transition has started in the meanwhile. If so, the values can be discarded. A new poll will happen later and if using the "members assume group state" config option, the values should already be correct before the polling.

* Enable "group members assume state" config option by default

The config tests are also updated to expect the config option be enabled by default.

For all tests, the config option is generally disabled though:
There are only two group related tests. The one that tests this new feature overrides the config option to be enabled anyway.
The other tests works in a similar way but also "sends" attribute reports, so we want to disable the feature for that test.
(It would also run with it enabled (if the correct CHILD_UPDATE value is patched), but then it would test the same stuff as the other test, hence we're disabling the config option for that test.)
2023-01-16 10:48:18 -05:00
Paul Bottein
c3e27f6812 Add tier summation delivered for Lixee Zlinky TIC (#82602)
* Add tier summation delivered for zlinky

* Improve name case

* Add other tiers and register tier

* Fix smartenergy sensor update

* Account for new reporting configuration in unit tests

* Use cluster ID attributes instead of hardcoding the values

* Use tier names instead of the numeric constants for formatter

* Revert active register tier delivered

* Fix tests

Co-authored-by: puddly <32534428+puddly@users.noreply.github.com>
2023-01-16 10:33:18 -05:00
epenet
83591704b5 Adjust sensor validation warning (#86017) 2023-01-16 15:48:00 +01:00
jan iversen
ee85a23d19 Bring modbus back to 100% test coverage (#85972)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-01-16 15:44:11 +01:00
epenet
bcef0d66ac Remove invalid uom from mqtt tests (#86004) 2023-01-16 14:51:35 +01:00
epenet
1a8933d59d Adjust invalid test values in template (#86008) 2023-01-16 14:42:47 +01:00
epenet
0328e8954d Adjust invalid test values in tcp (#86007) 2023-01-16 14:32:01 +01:00
Franck Nijhof
0a367359f4 Add sensor state class validation for device classes (#84402)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-01-16 14:31:24 +01:00
epenet
8165f487c7 Adjust invalid test values in snmp (#86006) 2023-01-16 14:00:37 +01:00
epenet
c1589d3c89 Adjust invalid test values in rest (#86009) 2023-01-16 13:37:38 +01:00
epenet
6859a9ebdd Add missing mock in fritzbox (#86005) 2023-01-16 13:05:22 +01:00
Jussi Rosenberg
54d570a9cf Bump pykoplenti to 1.0.0 (#83251)
* Update Kostal integration to use maintained lib

* Update Kostal integration to use pykoplenti

* Update kostal_plenticore tests for new lib

* Fix tests config_flow & diagnostics after changes
2023-01-16 12:54:29 +01:00
Franck Nijhof
c26d620ab1 Clean up unused import steps from HomeWizard config flow (#86002) 2023-01-16 12:24:23 +01:00
Shay Levy
dd18708b63 Remove WebOS TV client wrapper (#86001) 2023-01-16 12:03:57 +01:00
Franck Nijhof
2b037efee2 Cleanup of HomeWizard button platform (#85999) 2023-01-16 11:57:08 +01:00
epenet
13cfd60019 Allow None in add_suggested_values_to_schema (#85763) 2023-01-16 11:36:21 +01:00
Franck Nijhof
11a81dc485 Improve typing of HomeWizard sensors (#85997)
* Improve typing of HomeWizard sensors

* Fix typo when tried to fix a typo :)
2023-01-16 11:22:46 +01:00
Erik Montnemery
f9662e0af0 Make the kitchen_sink integration set up a config entry (#85680)
* Make the kitchen_sink integration set up a config entry

* Update homeassistant/components/kitchen_sink/config_flow.py

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

* Add singleton check in import step + add test

* Fix tests

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-01-16 11:03:44 +01:00
epenet
3179101fbc Warn if numeric sensors have an invalid value (#85863)
Co-authored-by: mib1185 <mail@mib85.de>
2023-01-16 11:00:07 +01:00
Duco Sebel
ccd8bc14e0 Add sensors for new P1 datapoints in HomeWizard (#85198)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
Co-authored-by: Franck Nijhof <git@frenck.dev>
fixes undefined
2023-01-16 09:59:07 +01:00
Franck Nijhof
ce43a53585 Update pytest to 7.2.1 (#85990) 2023-01-16 09:48:39 +01:00
Erik Montnemery
affea9a305 Remove sky connect config entry if USB stick is not plugged in (#85765)
* Remove sky connect config entry if USB stick is not plugged in

* Tweak cleanup

* Give some stuff more cromulent names

* Do the needful

* Add tests

* Tweak
2023-01-16 09:25:06 +01:00
Franck Nijhof
fa0d653216 Update python-homewizard-energy to 1.5.0 (#85966)
* Update python-homewizard-energy to 1.5.0

* Remove strict typing for now

* Revert "Remove strict typing for now"

This reverts commit ebcd327fdf.

* Adjust typing to resolve upstream changes
2023-01-16 09:23:03 +01:00
Jorie Teunissen
719f2e650c Add state_class to mill Estimated CO2 sensor (#85894) 2023-01-16 09:02:15 +01:00
J. Nick Koston
233332c3a0 Fix fetching history include_start_time_state when timezone is not UTC (#85983) 2023-01-16 09:01:32 +01:00
Michael
9709391b52 Replace the usage of unit constants by enumerations in Tests [s-u] (#85937) 2023-01-16 09:00:27 +01:00
Patrick ZAJDA
0b02abf708 Add locking and unlocking to MQTT lock (#85779)
* Implement locking, unlocking and jammed on MQTT lock

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Add tests

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Refactor condition

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Parametrize tests

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Manage only locking and unlocking

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Remove jammed from abbreviations

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

* set valid states in self._valid_states

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>
Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com>
2023-01-16 08:42:43 +01:00
Jesse Hills
d3c41bc31c Add friendly name support for ESPHome (#85976)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-15 21:33:44 -10:00
Jack Boswell
8c235357a4 Add Starlink reboot button (#85729) 2023-01-15 21:22:19 -10:00
shbatm
176eb01016 Deprecate ISY994 custom cleanup entities service (#85931) 2023-01-15 21:14:41 -10:00
shbatm
dfc33f858a Support availability for ISY994 devices (#85928) 2023-01-15 19:18:51 -10:00
GitHub Action
b81453cb6b [ci skip] Translation update 2023-01-16 00:24:22 +00:00
Michael
a7ebec4d02 Make Synology DSM integration fully async (#85904) 2023-01-15 13:19:08 -10:00
J. Nick Koston
65ca62c991 Ensure remote bluetooth adapters are loaded before integrations that need them (#85723) 2023-01-15 13:17:17 -10:00
shbatm
cd31624768 Bump PyISY to 3.1.6 (#85974)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-15 13:02:30 -10:00
jan iversen
05c1aff0f6 Bump pymodbus library to V3.1.0 (#85961)
fixes undefined
2023-01-15 23:30:26 +01:00
Franck Nijhof
64c2340fab Core code styling improvements (#85963) 2023-01-15 23:00:51 +01:00
Duco Sebel
8e5236528f Upgrade HomeWizard to platinum quality (#82580) 2023-01-15 23:00:20 +01:00
Jan Bouwhuis
01e1e254e2 Use value of enum (#85944) 2023-01-15 19:30:29 +01:00
Shay Levy
28804b7ecc Update webOS TV codeowners (#85959) 2023-01-15 20:14:36 +02:00
Franck Nijhof
91ac6400b9 Clean up legacy import from HomeWizard (#85960) 2023-01-15 20:14:19 +02:00
Michael
9828b2d13f Replace the usage of unit constants by enumerations in Tests [v-z] (#85938)
replace unit conts by enums v-z
2023-01-15 20:14:02 +02:00
Shay Levy
03d9d30eca Cleanup webOS TV YAML import leftovers (#85957) 2023-01-15 20:07:15 +02:00
Franck Nijhof
3cb56211f8 Make translations keys check hassfest more strict (#85221) 2023-01-15 17:43:34 +01:00
Duco Sebel
209c47383d Implement state error handling in HomeWizard (#84991)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-01-15 17:30:27 +01:00
mkmer
1a0bce715a Address invalid keys in translation for whirlpool (#85849) 2023-01-15 17:09:14 +01:00
Michael
104f74054b Replace the usage of unit constants by enumerations in Tests [m-n] (#85935)
* replace unit conts by enums m-n

* fix mqtt
2023-01-15 15:45:00 +01:00
Michael
e35ab75c0b Replace the usage of unit constants by enumerations in Tests [h-l] (#85934) 2023-01-15 14:52:55 +01:00
Michael
72d3fa6d89 Replace the usage of unit constants by enumerations in Tests [o-r] (#85936) 2023-01-15 14:50:24 +01:00
Michael
e5f67c9119 Replace the usage of unit constants by enumerations in Tests [f-g] (#85933) 2023-01-15 14:46:45 +01:00
ondras12345
cef1809536 Fix apcupsd spamming logs when host is unavailable (#85920)
fixes undefined
2023-01-15 14:45:05 +01:00
Michael
2850583085 Replace the usage of unit constants by enumerations in Tests [a-e] (#85932) 2023-01-15 14:44:01 +01:00
Michael
b20eb54800 Replace deprecated unit converter utils (#85927) 2023-01-15 14:41:59 +01:00
Paulus Schoutsen
d92b423127 Add conversation to default config (#85877)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-01-15 13:21:16 +01:00
Dermot Duffy
10829fdadb Allow empty motionEye passwords (#85407) 2023-01-15 13:20:25 +01:00
starkillerOG
476de319ea Bump reolink-aio to 0.2.3 (#85871) 2023-01-15 13:07:15 +01:00
Franck Nijhof
314576048d Fix conflict between stale bot rules (#85923) 2023-01-15 13:01:20 +01:00
Shay Levy
508b93c17f Fix webOS TV SSDP discovery missing friendly name (#85917) 2023-01-15 12:29:11 +01:00
Shay Levy
64ee0cf627 Bump aiowebostv to 0.3.1 to fix support for older devices (#85916)
Bump aiowebostv to 0.3.1
2023-01-15 12:26:28 +01:00
Jan Stienstra
ef4b7c8a22 Skip over files without mime type in Jellyfin (#85874)
* Skip over files without mime type

* Skip over tracks without mime type
2023-01-15 12:12:27 +01:00
Ville Skyttä
19426ec18a Startup error message improvements (#85860)
* Output config and lib dir create failure reasons

* Output to stderr

* Fix error message when specified config directory is not a directory
2023-01-15 05:19:01 +01:00
Matthias Lohr
3ae4e98204 Bump tololib to v0.1.0b4 (#85866)
updated tololib to v0.1.0b4
2023-01-15 04:38:51 +01:00
shbatm
a81045653d Add Insteon ramp rate select entities to ISY994 (#85895)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-14 17:37:07 -10:00
Allen Porter
a653ea30bd Bump google-nest-sdm to 2.2.2 (#85899)
* Bump google-nest-sdm to 2.2.0

* Bump nest to 2.2.1

* Bump google-nest-sdm to 2.2.2
2023-01-15 04:30:21 +01:00
Robert Svensson
8117f4af3a Use parametrize to modify Axis test fixtures (#85884) 2023-01-15 04:12:03 +01:00
Robert Hillis
3627a98602 Add dhcp discovery to D-Link (#85661)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-14 15:58:04 -10:00
GitHub Action
77f9548e51 [ci skip] Translation update 2023-01-15 00:25:52 +00:00
shbatm
913bc827ba Bump PyISY to 3.1.5 and fix bad Z-Wave properties from eisy (#85900) 2023-01-14 12:28:57 -10:00
Austin Mroczek
c478e503e5 Bump total_connect_client to 2023.1 (#85882)
bump total_connect_client to 2023.1
2023-01-14 20:15:13 +02:00
Shay Levy
6938f791f9 Downgrade MQTT logging (#85867) 2023-01-14 13:28:41 +01:00
J. Nick Koston
43fb68ed79 Avoid linear searches for excluded events (#85851)
If the there are a lot of excluded events for the recorder, it
can have a performance impact as the list has to be searched
every time an event fires in HA
2023-01-14 14:25:03 +02:00
Robert Svensson
768c3e163d Create and use config_entry fixture for Axis integration tests (#85865) 2023-01-14 14:18:18 +02:00
epenet
8fbcb93ab4 Use IntEnum for hassfest quality scale (#85817) 2023-01-14 10:19:18 +01:00
shbatm
1fcd25130f Add On Level number entities to ISY994 Insteon Devices (#85798)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-13 16:01:41 -10:00
starkillerOG
5f67e79ad9 Bump reolink-aio to 0.2.2 (#85848) 2023-01-14 02:25:22 +01:00
Martin Hjelmare
bca462401c Bump python-matter-server to 1.1.0 (#85840) 2023-01-14 02:20:10 +01:00
J. Nick Koston
8b893b7062 Bump cryptography to 39.0.0 (#85846)
* Bump cryptography to 39.0.0

changelog: https://github.com/pyca/cryptography/compare/38.0.3...39.0.0

The change that is significant is https://github.com/pyca/cryptography/pull/7601 which
should help with esphome noise encryption performance

* constraints

* fix botocore not loading
2023-01-13 19:58:01 -05:00
GitHub Action
dffc913f9e [ci skip] Translation update 2023-01-14 00:22:57 +00:00
J. Nick Koston
ec61f5f998 Bump aiohomekit to 2.4.4 (#85853)
fixes https://github.com/home-assistant/core/issues/85400
fixes https://github.com/home-assistant/core/issues/84023
2023-01-13 14:03:16 -10:00
Shay Levy
9b5ac5b173 Fix WebOS TV image fetch SSL verify failure (#85841) 2023-01-13 23:50:02 +02:00
Robert Svensson
be899b6ab6 Store Axis device with entry_id key rather than unique_id (#85673)
* Store Axis device with entry_id key rather than unique_id

* Fix review comments
2023-01-13 22:21:40 +01:00
Guido Schmitz
c191daedc3 Remove dead code path in devolo Home Network (#85790)
Remove dead code path
2023-01-13 21:15:50 +01:00
Luke
67716edb0c Update oralb to show battery percentage (#85800)
Co-authored-by: J. Nick Koston <nick@koston.org>
fixes undefined
2023-01-13 10:11:01 -10:00
Kevin Worrel
21cdb6ece3 Bump screenlogicpy to 0.6.3 (#85799)
Co-authored-by: J. Nick Koston <nick@koston.org>
fixes undefined
2023-01-13 09:58:23 -10:00
dependabot[bot]
bce7bd771e Bump actions/setup-python from 4.4.0 to 4.5.0 (#85801)
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.4.0 to 4.5.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v4.4.0...v4.5.0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-13 21:07:52 +02:00
starkillerOG
b2b6ae417d Reolink check for admin (#85570)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
fixes undefined
2023-01-13 20:07:09 +01:00
shbatm
d35c4f8d82 Deprecate YAML configuration for ISY994 (#85797) 2023-01-13 08:48:44 -10:00
shbatm
8dadbe45fa Bump PyISY to 3.1.4 to fix dependency issues (#85825) 2023-01-13 18:33:21 +01:00
Ville Skyttä
a5a079fb06 Huawei LTE sensor improvements (#84019)
* Use `None` for unknown states consistently

* Use huawei_lte_api NetworkModeEnum instead of magic strings

* Recognize some new sensor items

* Exclude current day duration sensor

* Fix current month upload/download types

* Add current day transfer

* Extract lambdas used in multiple spots to named functions

* Formatter naming consistency improvements
2023-01-13 18:27:57 +01:00
Robert Svensson
7953c4a6d5 Clean up old config migration of Axis config (#85671)
* Revert Axis config flow version to 1

* Set up using hass.config_entries.async_setup

* Fix review comment

* Update homeassistant/components/axis/__init__.py

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

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-01-13 17:12:51 +01:00
Franck Nijhof
4c2b20db68 Collection of typing improvements in common test helpers (#85509)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-01-13 15:12:11 +01:00
Maciej Bieniek
6baa905448 Abort config flow if Airly measuring station does not exist (#85652)
* Abort if there is no sensor in the area

* Add test

* Increase test coverage
2023-01-13 14:35:52 +01:00
Mike Degatano
87aacf9fbe Increase max line size for ingress addons (#85775) 2023-01-13 13:30:28 +01:00
Eugenio Panadero
d748894b88 Remove 'tariff' edition from options-flow (#85703)
* 🎨 Add missing typing for config-flow

* 🐛 Remove 'tariff' edition from options-flow

The `entry.data["tariff"]` is what makes the `entry.unique_id`,
so it's an incoherence to be able to change it in the Options flow

* 🌐 Update generated EN translation

* 🎨 Link translations of option-flow to those of config-flow
2023-01-13 13:27:11 +01:00
Ville Skyttä
ae302bbec0 Make use of str.removeprefix and .removesuffix (#85584) 2023-01-13 12:19:38 +01:00
Franck Nijhof
d44210e573 Fix nightly intents in nightly builds (part2) (#85818) 2023-01-13 12:14:25 +01:00
epenet
e75c85f679 Downgrade integrations without code owner (#85752) 2023-01-13 10:08:15 +01:00
Franck Nijhof
80714c544a Fix nightly intents in nightly builds (#85806) 2023-01-13 09:56:29 +01:00
Ville Skyttä
4c31317c06 Key Huawei LTE routers in hass.data by config entry rather than unique id (#85788)
Key routers in hass.data by config entry rather than unique id

There's no particular reason to key them by the unique id; the config
entry id is a stronger, always available guarantee, and a much more
common convention across the HA codebase.

At some point, we might conceivably support devices we can't find a
proper unique id for; this would work for that purpose as well.
2023-01-13 09:20:24 +01:00
epenet
1deb4c68f3 Adjust diagnostics return types (#85525)
* Adjust diagnostics return types

* Replace dict with Mapping
2023-01-13 09:17:54 +01:00
Malte Franken
9927bb3330 Bump georss_ign_sismologia_client to 0.6 (#85784)
bump georss_ign_sismologia_client to 0.6
2023-01-13 08:58:28 +01:00
tronikos
8e26c048a7 Remove oauth2client dependency in Google Assistant SDK (#85785)
Remove import oauth2client, inline 2 constants
2023-01-13 00:20:16 +01:00
shbatm
28bea53afe Move ISY994 data to dataclass and remove bad entities (#85744) 2023-01-12 13:09:04 -10:00
J. Nick Koston
f941864308 Bump pySwitchbot to 0.36.4 (#85777) 2023-01-12 23:17:00 +01:00
Franck Nijhof
2ca73be9d0 Update sentry-sdk to 1.13.0 (#85772) 2023-01-12 23:04:49 +01:00
Franck Nijhof
9415e7e51b Address small review comments in ESPHome (#85770) 2023-01-12 22:55:18 +01:00
Franck Nijhof
686258acd5 Add nightly intents to nightly build (#85760)
* Add nightly intents to nightly build

* Use main branch
2023-01-12 16:31:14 -05:00
Jovan Gerodetti
49031b8fa7 Implement sync time button for moehlenhoff_alpha2 (#85676)
* Implement sync time button for moehlenhoff_alpha2

* fix outdated doc comment

Co-authored-by: j-a-n <oss@janschneider.net>

* address review comments

Co-authored-by: j-a-n <oss@janschneider.net>
2023-01-12 22:09:14 +01:00
Teju Nareddy
cb04a52220 Fix IoT Class for Torque integration (#85667)
* Fix IoT Class for Torque plugin

This is currently misclassified:
- There is no "Torque" server, the Torque plugin is the server that receives data directly from the client. It should be `local` instead of `cloud`.
- The client sends data to the server as needed. This plugin will NOT poll for data. It should be `push` instead of `poll`.

* Run hassfest

Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-01-12 21:52:39 +01:00
Franck Nijhof
db5edfcf64 Update coverage to 7.0.5 (#85774) 2023-01-12 21:40:59 +01:00
Yuval Aboulafia
578a1cdc02 Add statistics support to iperf3 (#85771) 2023-01-12 12:02:56 -08:00
Yuval Aboulafia
1f6efe8c3e Remove WAQI unsupported UOM (#85768)
fixes undefined
2023-01-12 20:10:45 +01:00
Aaron Bach
107461df0d Follow-up on ReCollect Waste calendar entity (#85766) 2023-01-12 11:56:06 -07:00
Kevin Worrel
4f20b15742 Bump screenlogicpy to 0.6.2 (#85725)
fixes undefined
2023-01-12 19:41:07 +01:00
Shay Levy
596f779254 Bump aiowebostv to 0.3.0 (#85756) 2023-01-12 19:11:27 +01:00
epenet
e18117fd63 Bump sfrbox-api to 0.0.4 (#85742)
* Bump sfrbox-api to 0.0.3

* Bump sfrbox-api to 0.0.4
2023-01-12 18:17:31 +02:00
epenet
b5a9e682be Add missing enum item in SFR Box (#85746)
* Add missing enum item in SFR Box

* Adjust tests
2023-01-12 18:15:09 +02:00
Maciej Bieniek
cc016c9bba Pass language to the Airly API (#85655)
* Pass language to the API

* Pass only pl or en

* Add comment
2023-01-12 16:15:00 +01:00
Martin Hjelmare
4895f2e7c2 Fix gen_requirements_all script permissions (#85745) 2023-01-12 15:46:36 +01:00
Erik Montnemery
8418a30cc0 Refactor energy validation issue reporting (#85523)
* Refactor energy validation issue reporting

* Update English translations

* Adjust translations
2023-01-12 12:50:43 +01:00
Erik Montnemery
e4e96d3394 Fix sensor test (#85740) 2023-01-12 12:21:19 +01:00
Franck Nijhof
e18a6e376c Use jemalloc in Docker builds (#85738) 2023-01-12 11:59:44 +01:00
Osma Ahvenlampi
45a41421b6 Change Ruuvi movement counter to correct state class (#85677)
change Ruuvi movement counter to correct class

The counter's values are 0 to 255 increasing value, so the correct state class as per https://developers.home-assistant.io/docs/core/entity/sensor/#entities-representing-a-total-amount is TOTAL_INCREASING.
2023-01-12 10:29:54 +01:00
epenet
5a4df9d870 Add binary sensor platform to SFR Box (#85508)
* Add binary sensor platform to SFR Box

* Simplify
2023-01-12 10:06:09 +01:00
Jan Bouwhuis
64e235285d Deprecate power_command_topic for MQTT climate (#85229)
* Deprecate mode_command_topic for MQTT climate

* Correct deprecation and remove support release inf

* Do not use future tense for comment

* Extend deprecation period to 6 months
2023-01-12 09:49:14 +01:00
Erik Montnemery
a7fb3c82fb Add WS command number/device_class_convertible_units (#85598)
* Add WS command number/device_class_convertible_units

* Add websocket_api

* Update tests
2023-01-12 09:34:10 +01:00
Erik Montnemery
305fb86d50 Add WS command sensor/device_class_convertible_units (#85213)
* Add WS command sensor/device_class_units

* Rename new command to device_class_convertible_units
2023-01-12 09:31:06 +01:00
epenet
679e971131 Add system diagnostic sensors to SFR Box (#85184)
* Add system diagnostic sensor

* Add tests
2023-01-12 09:29:12 +01:00
Erik Montnemery
b0d4b73874 Add unitless unit converter (#85694)
* Add unitless unit converter

* Adjust type hints

* Adjust tests

* Rename to UnitlessRatioConverter
2023-01-12 09:20:00 +01:00
Maciej Bieniek
a176de6d4b Add RPC smoke binary sensor to Shelly integration (#85697)
* Add RPS smoke binary sensor

* Remove index

* Remove the unnecessary attribute
2023-01-12 08:42:40 +01:00
Shay Levy
b71d332a10 Cleanup Shelly sensor description (#85732) 2023-01-11 21:39:49 -10:00
Ville Skyttä
c625051665 Improve Huawei LTE SSDP inclusion (#85572)
* Probe Huawei LTE API for device support on SSDP match

More or less as expected, the loosening of SSDP/UPnP data matches done
in #81643 started to yield false positives, as in #85402.

Coming up with robust matches solely based on the SSDP/UPnP data still
does not seem possible, so keep the matches as loose as they were made,
but additionally invoke a probe request on the API to determine if the
device looks like a supported one.

* Probe only after unique id checks

Prevents throwaway probes for discoveries already in progress.

* Fix SSDP result URL test, add missing assert on it
2023-01-12 06:47:38 +01:00
shbatm
255a8362a1 Consolidate device info and clean-up ISY994 code base (#85657)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-11 18:07:44 -10:00
Jack Boswell
43cc8a1ebf Add binary_sensor to Starlink (#85409)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-11 17:18:54 -10:00
Robert Hillis
ae9a57b2a8 Remove oauth2client dependency in Google Sheets (#85637)
Remove oauth2client dependency
2023-01-12 04:02:02 +01:00
Nathan Spencer
0ae855d345 Fix Litter-Robot 4 firmware versions reported while updating (#85710) 2023-01-12 03:53:06 +01:00
Robert Hillis
b14c141fe3 Address review comments for D-Link config flow (#85712)
* Address review comments for D-Link config flow

* uno mas

* uno mas

* uno mas
2023-01-12 03:46:51 +01:00
Eugenio Panadero
05590f63c9 Clean attributes in pvpc hourly pricing ElecPriceSensor (#85688)
♻️ Remove unnecessary private attrs and fix typing for sensor entity
2023-01-12 03:21:16 +01:00
Daniel Hjelseth Høyer
2757f97114 Update pyTibber to 0.26.8 (#85702)
* Tibber, update pyTibber

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

* Tibber, update pyTibber

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

Signed-off-by: Daniel Hjelseth Høyer <github@dahoiv.net>
2023-01-12 03:15:28 +01:00
Klaas Schoute
6f92c5381d Add Energie VanOns virtual integration (#85704) 2023-01-12 01:14:36 +01:00
Eugenio Panadero
77feaecbfa Remove unreachable config entry migration in pvpc hourly pricing (#85700)
* 🔥 Remove old config entry migration logic

introduced for a breaking change in 2021-06, now unreachable after
completely disabling the YAML config for the integration

*  Remove test for old config entry migration logic

and adjust existent one for config-flow to do not lose coverage
2023-01-12 01:07:11 +01:00
Jovan Gerodetti
3ee73f0fea Bump moehlenhoff-alpha2 to 1.3.0 (#85720)
bump moehlenhoff_alpha2 to v1.3.0
2023-01-12 00:52:32 +01:00
Milan Meulemans
e603645b90 Upgrade aionanoleaf to 0.2.1 (#83669) 2023-01-12 00:43:04 +01:00
Felix T
42a4dd98f1 Use fallback advertising interval for non-connectable Bluetooth devices (#85701)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-11 12:11:25 -10:00
Paulus Schoutsen
c8cd41b5d4 Add ESPHome update entities (#85717) 2023-01-11 16:26:13 -05:00
Paulus Schoutsen
06bc9c7b22 Automatically fetch the encryption key from the ESPHome dashboard (#85709)
* Automatically fetch the encryption key from the ESPHome dashboard

* Also use encryption key during reauth

* Typo

* Clean up tests
2023-01-11 15:28:31 -05:00
epenet
a2f6299fc1 Remove invalid device class in energyzero (#85690)
* Remove invalid device class in energyzero

* Adjust tests
2023-01-11 20:49:14 +01:00
Ernst Klamer
a575dfb5c3 Bump bthome-ble to 2.5.0 (#85670)
Bump bthome-ble
2023-01-11 19:30:39 +02:00
Ville Skyttä
ccd7f09de6 Upgrade huawei-lte-api to 1.6.11 (#85669) 2023-01-11 17:44:55 +01:00
mkmer
f9dcb2ea84 Bump whirlpool-sixth-sense to 0.18.2 (#85679) 2023-01-11 14:54:41 +01:00
Eugenio Panadero
2286029b5d Bump aiopvpc to 4.0.1 (#85612)
* 📦️ Bump aiopvpc version

* ♻️ Evolve DataUpdateCoordinator and PVPC sensor for new aiopvpc

setting `SensorDeviceClass.MONETARY` for the price sensor

* 🍱 tests: Update tests fixtures with new sensor data

for aiopvpc v4 with 'esios_public' as data-source

*  tests: Adapt test suite for new default data-source

* 📦️ Bump aiopvpc version for latest patch 4.0.1

* ️ Revert changes unrelated to library bump

* ️ Revert tests changes unrelated to library bump
2023-01-11 14:49:42 +01:00
Paulus Schoutsen
82ec769ec5 Handle ESPHome dashboard discovery (#85662) 2023-01-11 08:30:52 -05:00
Jan Bouwhuis
1a4cac95a1 Revert "Bump steamodd to 4.23" (#85651) 2023-01-11 13:13:19 +01:00
Erik Montnemery
0200327fa8 Make the kitchen_sink integration trigger statistics issues (#79742)
* Make the kitchen_sink integration trigger statistics issues

* Remove dead code
2023-01-11 08:14:11 +01:00
GitHub Action
941f82b60c [ci skip] Translation update 2023-01-11 00:23:37 +00:00
Robert Hillis
3d7c61bbed Add D-Link config flow (#84927) 2023-01-10 14:10:56 -10:00
rikroe
1afb30344a Add diagnostics to bmw_connected_drive (#74871)
* Add diagnostics to bmw_connected_drive

* Add tests for diagnostics

* Move get_fingerprints to library, bump bimmer_connected to 0.10.4

* Update bimmer_connected to 0.11.0

* Fix pytest

* Mock actual diagnostics HTTP calls

* Update tests for bimmer_connected 0.12.0

* Don't raise errors if vehicle is not found

Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2023-01-11 01:09:45 +01:00
Matthias Alphart
db428f2141 Update xknx to 2.3.0 - add some DPTs, Routing security (#85658)
Update xknx to 2.3.0
2023-01-11 00:24:56 +01:00
shbatm
856895ddf5 Remove old migrate unique ID code from ISY994 (#85641)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-10 12:42:31 -10:00
shbatm
d3249432c9 Add ISY994 variables as number entities (#85511)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-10 12:29:11 -10:00
Ernst Klamer
7af23698bc Bump bluemaestro-ble to 0.2.1 (#85648) 2023-01-10 11:40:18 -10:00
epenet
6e3cf896f7 Remove invalid device class in gios (#85611) 2023-01-10 22:08:13 +01:00
Eugenio Panadero
caa8fc4d10 Remove deprecated YAML manual config for PVPC Hourly Pricing (#85614) 2023-01-10 20:49:54 +01:00
Paul Bottein
67b238c8d1 Update frontend to 20230110.0 (#85640) 2023-01-10 14:28:12 -05:00
Erik Montnemery
85ba8a6cde Bump hatasmota to 0.6.3 (#85633) 2023-01-10 20:48:06 +02:00
tronikos
667fde997d Google Assistant SDK: Fix broadcast command in Japanese (#85636)
Fix broadcast command in Japanese
2023-01-10 20:20:28 +02:00
epenet
de2588f6e0 Add diagnostics platform to SFR Box (#85500) 2023-01-10 20:17:14 +02:00
Allen Porter
02357193ad Bump gcal-sync to 4.1.2 (#85631) 2023-01-10 20:15:55 +02:00
Bouwe Westerdijk
4889373819 Bump plugwise to v0.27.1 (#85630) 2023-01-10 19:47:48 +02:00
mkmer
d01a62fec5 Bump AIOAladdinConnect to 0.1.52 (#85632) 2023-01-10 19:44:57 +02:00
epenet
a7647fee28 Fix unknown data in homematicip_cloud (#85618) 2023-01-10 12:26:49 -05:00
Erik Montnemery
7621c450c7 Add kitchen_sink integration (#85592) 2023-01-10 17:31:47 +01:00
epenet
3d02b5af21 Fix unknown data in vultr (#85627) 2023-01-10 17:29:17 +01:00
epenet
67f8d82818 Remove invalid state class in deconz (#85615) 2023-01-10 17:28:35 +01:00
epenet
2ae986d45b Remove invalid state class in tado (#85624) 2023-01-10 16:55:34 +01:00
epenet
4eddd8b75a Remove invalid unit of measurement in mfi (#85620) 2023-01-10 16:45:59 +01:00
epenet
298d7504fd Fix unknown data in qwikswitch (#85621) 2023-01-10 16:42:28 +01:00
epenet
d313d82eb7 Fix unknown data in influxdb (#85619) 2023-01-10 16:41:16 +01:00
epenet
65750fec9b Remove invalid state class in hue (#85617) 2023-01-10 16:37:35 +01:00
epenet
4d660f926d Fix unknown data in google wifi (#85616) 2023-01-10 16:37:04 +01:00
starkillerOG
105b34bd77 Reolink add support for flv protocol (#85576) 2023-01-10 12:16:48 +01:00
Aaron Bach
5d7f33ad76 Further generalize base Ridwell entity (#85486) 2023-01-10 12:15:28 +01:00
Erik Montnemery
5fdf78ed30 Drop title from repairs flows (2) (#85597) 2023-01-10 12:11:30 +01:00
epenet
fa7d7415d7 Adjust diagnostic return type in Sonos (#85585) 2023-01-10 12:07:14 +01:00
Dermot Duffy
b64d14004a Bump motionEye client version to v0.3.14 (#85408) 2023-01-10 12:01:42 +01:00
Franck Nijhof
0a8380cbe1 Deprecate Magicseaweed (#85527) 2023-01-10 11:54:49 +01:00
epenet
9eb06fd59d Simplify sensor state validation (#85513) 2023-01-10 11:52:29 +01:00
mkmer
b86c58b0ea Bump whirlpool-sixth-sense to 0.18.1 (#85521)
* Bump whirlpool to 0.18.1
Add HASS AIOsession
Add unregister to remove_from_hass

* remove session from WhirlpoolData class
2023-01-10 10:41:35 +01:00
Franck Nijhof
bba9ad3243 Revert "Adapt tplink to use has_entity_name" (#85595)
Revert "Adapt tplink to use has_entity_name (#85577)"

This reverts commit ca0fe488ba.
2023-01-10 10:06:58 +01:00
Guido Schmitz
d40a4aa970 Add switch platform to devolo_home_network (#72494) 2023-01-10 10:05:59 +01:00
Franck Nijhof
05c32c51fd Code styling tweaks to the Cast integration (#85560) 2023-01-10 09:57:13 +01:00
J. Nick Koston
6aa44d5b82 Bump bleak to 0.19.5 (#85567)
changelog: https://github.com/hbldh/bleak/compare/v0.19.2...v0.19.5
2023-01-10 09:56:24 +01:00
J. Nick Koston
f9dbce8bf4 Bump dbus-fast to 1.84.0 (#85568)
changelog: https://github.com/Bluetooth-Devices/dbus-fast/compare/v1.82.0...v1.84.0
2023-01-10 09:55:37 +01:00
Aaron Bach
6a801fc058 Remove no-longer-needed invalid API key monitor for OpenUV (#85573)
* Remove no-longer-needed invalid API key monitor for OpenUV

* Handle re-auth cancellation

* Use automatic API status check
2023-01-10 09:48:39 +01:00
Shay Levy
bf67458d83 Bump aioshelly to 5.2.1 to fix Task exception was never retrieved (#85575)
Bump aioshelly to 5.2.1
2023-01-10 09:46:36 +01:00
starkillerOG
db8a94d5e2 bump reolink-aio to 0.2.1 (#85571) 2023-01-10 09:44:53 +01:00
Teemu R
ca0fe488ba Adapt tplink to use has_entity_name (#85577)
* Adapt tplink to use has_entity_name

* Set the name for individual smartstrip sockets

* Fix tests
2023-01-10 09:40:29 +01:00
Bouwe Westerdijk
4a22b463d1 Plugwise: add missing P1v2 sensors (#85589)
Add missing P1v2 sensors
2023-01-10 09:36:18 +01:00
tronikos
e24989b446 Google Assistant SDK conversation agent (#85499)
* Google Assistant SDK conversation agent

* refresh token

* fix session

* Add tests

* Add option to enable conversation agent
2023-01-09 20:53:41 -05:00
GitHub Action
f2df72e014 [ci skip] Translation update 2023-01-10 00:25:07 +00:00
starkillerOG
77542fc842 Netgear fix missing await (#85574)
fix missing await
2023-01-10 01:02:31 +02:00
epenet
069d8024a4 Remove invalid state class in Subaru sensor (#85520) 2023-01-09 15:59:17 -07:00
Michael Hansen
07bd208c7d Load custom sentences from config directory (#85558)
* Load custom sentences from config directory

* Load custom sentences from config directory

* Custom sentences in custom_sentences/<language>/

* Load custom sentences from config directory

* Custom sentences in custom_sentences/<language>/

* Add custom_sentences test
2023-01-09 16:48:59 -06:00
Jeef
6970a8a87a Add IntelliFire lights (#79816) 2023-01-09 12:16:39 -10:00
J. Nick Koston
2c95c0b3a1 Do not check ble scanner state for sleepy shelly devices (#85566)
fixes #85563
2023-01-10 00:16:14 +02:00
Christopher Bailey
02897fb9a3 Add UniFi Protect Chime Duration entity (#85538) 2023-01-09 12:09:41 -10:00
J. Nick Koston
57239769ba Only build compressed states once (#85561) 2023-01-09 12:07:32 -10:00
Christopher Bailey
818253ced4 Bump pyunifiprotect to 4.6.1 (#85547) 2023-01-09 12:00:21 -10:00
Franck Nijhof
b6316b4904 Split wheels building of all requirements (#85564) 2023-01-09 22:16:59 +01:00
Erik Montnemery
8983f665cf Refactor device registry JSON cache (#85539) 2023-01-09 09:50:27 -10:00
Jafar Atili
a8f95c36a6 Bump pySwitchbee to 1.7.19 (#84442)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-09 09:23:49 -10:00
Franck Nijhof
3bb435c292 Pin matplotlib to 3.6.1 (#85540) 2023-01-09 18:34:10 +01:00
Aaron Bach
e35b21823e Add a calendar entity to ReCollect Waste (#85347)
* Add a calendar entity to ReCollect Waste

* Simplify and ensure return None

* Ensure end date is after start date
2023-01-09 09:50:42 -07:00
Keilin Bickar
9491de2bd1 Bump sense_energy to 0.11.1 (#85533)
fixes undefined
2023-01-09 17:35:15 +01:00
Erik Montnemery
b933a53aa3 Refactor entity registry JSON cache (#85085)
* Refactor entity registry JSON cache

* Fix generator

* Tweak

* Improve string building

* Improve test coverage

* Override EntityRegistryItems.values to avoid __iter__ overhead
2023-01-09 16:52:52 +01:00
Scott Colby
174cc23309 Add "Schedule Part" enum sensor to Venstar thermostat (#84332) 2023-01-09 16:41:17 +01:00
Marcel van der Veldt
c181fb6de0 Bump aiohue library to 4.6.1 (#85504)
* Bump aiohue to 4.6.0

* fix device name for lights

* fix name for groups too

* ignore smart scenes

* bump to 4.6.1 instead

* fix test fixture

* update tests

* fix scene test
2023-01-09 10:37:03 -05:00
mkmer
86ab5f76e0 Whirlpool general code cleanup (#85387) 2023-01-09 16:16:05 +01:00
Franck Nijhof
8747d01e7b Fix translation keys for Yamaha MusicCast selectors (#85292)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-01-09 16:03:29 +01:00
epenet
1766df3faa Improve integration type hints for diagnostics (#85526) 2023-01-09 15:17:48 +01:00
epenet
aa5b29c560 Adjust zwave_js diagnostics (#85524) 2023-01-09 14:33:09 +01:00
Erik Montnemery
72c9ca2567 Update sensor test (#85522) 2023-01-09 14:26:52 +01:00
Robert Svensson
1cdd535f21 Bump axis to v46 (#85431) 2023-01-09 12:43:40 +01:00
Erik Montnemery
54168c9bdb Allow converting units of energy sensors (#85497) 2023-01-09 12:26:35 +01:00
starkillerOG
a332cd8aba Restore Netgear signal strength icon (#85512) 2023-01-09 12:15:36 +01:00
Tom
60604f7905 Default disable voltage sensors in Plugwise (#85451) 2023-01-09 12:09:32 +01:00
Nathan Spencer
02f1dce137 Bump pylitterbot to 2023.1.0 (#85484) 2023-01-09 11:58:06 +01:00
Rami Mosleh
a0e18051c7 Add config flow to imap (#74623)
* Add config flow to imap

fix coverage

fix config_flows.py

* move coordinator to seperate file, remove name key

* update intrgations.json

* update requirements_all.txt

* fix importing issue_registry

* Address comments

* Improve handling exceptions on intial connection

* exit loop tasks properly

* fix timeout

* revert async_timeout

* Improve entity update handling

* ensure we wait for idle to finish

* fix typing

* Update deprecation period

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-01-09 11:41:47 +01:00
Franck Nijhof
c225ed0a1a Remove invalid Signal Strength device class from NETGEAR (#85510) 2023-01-09 11:39:20 +01:00
dependabot[bot]
f1895fa826 Bump actions/cache from 3.2.2 to 3.2.3 (#85488)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-09 11:28:36 +01:00
Matthias Alphart
88356a95e6 Use power factor device class in Fronius integration again (#85495) 2023-01-09 10:42:49 +01:00
dependabot[bot]
186151008f Bump actions/upload-artifact from 3.1.1 to 3.1.2 (#85489)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-09 10:30:14 +01:00
Franck Nijhof
7adb8d5ddc Code styling tweaks to core utils & YAML loader (#85433)
Code styling tweaks to core utils
2023-01-08 22:01:55 -08:00
Christopher Bailey
aa1c539683 Bump pyunifiprotect to 4.6.0 (#85483) 2023-01-08 16:59:21 -10:00
shbatm
a8cdb86b23 Add network resource button entities to ISY994 and bump PyISY to 3.0.12 (#85429)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-08 16:45:54 -10:00
Poltorak Serguei
cdafd94550 Z-Wave.Me integration: Add code owners to receive notifications on github (#85476)
* Add code owners to receive notifications on github

* fixup! Add code owners to receive notifications on github
2023-01-08 20:19:04 -05:00
Poltorak Serguei
1f86a0a76f Z-Wave.Me: Cover: Fixed calibration errors and add missing is_closed (#85452)
* Cover: Fixed calibration errors and add missing is_closed

* Style

* Style

* whitespace
2023-01-08 20:18:36 -05:00
Ville Skyttä
dfa9f0e11d Upgrade RestrictedPython to 6.0 (#85426)
Required for Python 3.11.

https://github.com/zopefoundation/RestrictedPython/blob/6.0/CHANGES.rst#60-2022-11-03
2023-01-08 20:17:39 -05:00
tronikos
05187d7bf4 Google Assistant SDK: support Korean and Japanese (#85419)
* Google Assistant SDK: support Korean and Japanese

* Fix Korean and Japanese broadcast commands
2023-01-08 20:16:00 -05:00
J. Nick Koston
7bdfa7b9ec Bump aioesphomeapi to 13.0.4 (#85406)
bugfix for protobuf not accepting bytearray

changelog: https://github.com/esphome/aioesphomeapi/compare/v13.0.3...v13.0.4
2023-01-08 20:09:49 -05:00
eMerzh
c4c64a8bed Add missing context in homewizard assistant error (#85397) 2023-01-08 20:09:37 -05:00
GitHub Action
6ce88cd5af [ci skip] Translation update 2023-01-09 00:23:57 +00:00
David Buezas
112b2c22f7 Expose async_scanner_devices_by_address from the bluetooth api (#83733)
Co-authored-by: J. Nick Koston <nick@koston.org>
fixes undefined
2023-01-08 14:06:32 -10:00
Franck Nijhof
06a35fb7db Code styling tweaks to core helpers (#85441) 2023-01-08 13:44:09 -10:00
Franck Nijhof
cf5fca0464 Code styling tweaks to core entity components (#85460) 2023-01-08 13:40:08 -10:00
jjlawren
9d7e99eeb7 Handle timeouts in Sonos, reduce logging noise (#85461) 2023-01-08 13:39:26 -10:00
Franck Nijhof
318871f8a9 Code styling tweaks to the LaMetric integration (#85469) 2023-01-09 01:36:54 +02:00
Allen Porter
4162dfdc4e Bump gcal_sync to 4.1.1 (#85453) 2023-01-09 01:35:23 +02:00
Franck Nijhof
36f16b0ff2 Code styling tweaks to the WLED integration (#85466) 2023-01-09 01:03:05 +02:00
Marc Mueller
8f7aca7b69 Update pydocstyle to 6.2.3 (#85449) 2023-01-09 00:59:07 +02:00
starkillerOG
b0270f1ab7 Fix fetching of initial data of Netgear sensors (#85450)
fix fetching of initial data
2023-01-09 00:57:44 +02:00
Franck Nijhof
2511402400 Code styling tweaks to the AdGuard Home integration (#85468) 2023-01-09 00:53:17 +02:00
jjlawren
90e55cd711 Bump soco to 0.29.0 (#85473) 2023-01-09 00:52:22 +02:00
Ville Skyttä
7eb1b8c2fe Address a few deprecation warnings in tests (#85472) 2023-01-09 00:52:05 +02:00
Franck Nijhof
487782a6d1 Code styling tweaks to Bluetooth (#85448)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-08 11:20:02 -10:00
Franck Nijhof
800b8abe39 Code styling tweaks to the MQTT integration (#85463) 2023-01-08 22:07:10 +01:00
jjlawren
1b592e6885 Use subscription callbacks to discover Sonos speakers (#85411)
fixes undefined
2023-01-08 09:50:18 -10:00
J. Nick Koston
d81febd3f4 Small speed up to frequently called datetime functions (#85399) 2023-01-08 09:42:29 -10:00
mkmer
45eb1efc6f Limit Whirlpool timestamp changes to +/- 60 seconds (#85368)
* Limit timestamp changes to +/- 60 seconds

* Add timestamp callback tests
2023-01-08 18:57:46 +01:00
Xavier Decuyper
fc00c6d885 Add Nuki battery percentage sensor (#84968)
* Nuki: add battery percentage + add to device registry

* Remove unused import

* Fixing linting and sorting issues

* Update homeassistant/components/nuki/sensor.py

Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>

* Shorthand for adding entities

* Use _attr_has_entity_name for battery sensor

* Fix linting issue

* Remove device registry changes

* Exclude from coverage

* Use _attr_ instead of properties

* Clean up

Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-01-08 14:24:20 +01:00
Michael
30c9f4f926 Remove obsolete "Domains blocked" extra attribute from PI-Hole sensors (#85424)
remove obsolete "domains blocked" extra attribute
2023-01-08 13:25:37 +01:00
Lutz Lengemann
5d6634906d Increase Hydrawise default scan interval (#85398)
Increasing default scan interval

Fixes #83540
2023-01-08 13:23:33 +01:00
Bouwe Westerdijk
5eb7aed0ca Plugwise: add support for 3-phase DSMR's (#85421)
* Bump plugwise to v0.27.0

* Add p1-3phase test-fixture

* Add the new 3ph P1 DSMR sensors

* Add p1 3ph test-case
2023-01-08 13:11:29 +01:00
G Johansson
2a965a6e44 SQL reintroduce yaml support (#75205)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-07 18:14:36 -10:00
Dave T
d2c733628f Update copyright year to 2023 (#85396)
* Update copyright year

* Remove year from copyright string
2023-01-07 20:05:27 -05:00
J. Nick Koston
a18a629c19 Avoid pattern search entry when there are no patterns in the entity filter (#85404) 2023-01-07 14:40:58 -10:00
GitHub Action
0b163aac7d [ci skip] Translation update 2023-01-08 00:26:22 +00:00
Allen Porter
07fa7504fb Bump ical to 4.2.9 (#85401) 2023-01-07 15:28:37 -08:00
Joakim Plate
8b6e54a01b Switch play pause method in philips js (#85343)
fixes undefined
2023-01-08 00:14:25 +01:00
RoboMagus
dc000d2289 Mark repo as safe directory to git config (#83755)
Fixes https://github.com/home-assistant/core/issues/83753
fixes undefined
2023-01-08 00:11:12 +01:00
Bouwe Westerdijk
da51765f5c Fix unit of illuminance in Plugwise illuminance sensor (#85392) 2023-01-08 00:01:53 +01:00
Michael Hansen
ecaec0332d Hassil intents (#85156)
* Add hassil to requirements

* Add intent sentences

* Update sentences

* Use hassil to recognize intents in conversation

* Fix tests

* Bump hassil due to dependency conflict

* Add dataclasses-json package contraints

* Bump hassil (removes dataclasses-json dependency)

* Remove climate sentences until intents are supported

* Move I/O outside event loop

* Bump hassil to 0.2.3

* Fix light tests

* Handle areas in intents

* Clean up code according to suggestions

* Remove sentences from repo

* Use home-assistant-intents package

* Apply suggestions from code review

* Flake8

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-01-07 16:20:21 -05:00
Álvaro Fernández Rojas
3a905f80df Add QNAP QSW sensors for each port (#76811)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-07 10:25:38 -10:00
Jack Boswell
3ad4caa3d7 Add Starlink Integration (#77091)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-07 10:13:37 -10:00
Robert Hillis
ad65fc27bc Add Google Mail integration (#82637)
* Add Google Mail integration

* oops

* prettier

* Add email service

* adjustments

* update

* move email to notify

* break out services

* tweaks

* Add CC and BCC support

* drop scope check, breakout tests

* use abstract auth

* tweak

* bump dependency

* dependency bump

* remove oauth2client
2023-01-07 11:59:14 -08:00
shbatm
d2537dacc6 Add beep button entity to ISY994 Insteon devices (#85367)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-07 09:40:34 -10:00
RenierM26
1804006da0 EZVIZ: Add mac to device info (#85378)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-01-07 20:39:15 +01:00
Allen Porter
5000c426c6 Add config flow for Rain Bird (#85271)
* Rainbird config flow

Convert rainbird to a config flow. Still need to handle irrigation numbers.

* Add options for irrigation time and deprecate yaml

* Combine exception handling paths to get 100% test coverage

* Bump the rainird config deprecation release

* Apply suggestions from code review

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

* Remove unnecessary sensor/binary sensor and address some PR feedback

* Simplify configuration flow and options based on PR feedback

* Consolidate data update coordinators to simplify overall integration

* Fix type error on python3.9

* Handle yaml name import

* Fix naming import post serialization

* Parallelize requests to the device

* Complete conversion to entity service

* Update homeassistant/components/rainbird/switch.py

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

* Update homeassistant/components/rainbird/config_flow.py

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

* Remove unused import

* Set default duration in options used in tests

* Add separate devices for each sprinkler zone and update service to use config entry

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-01-07 09:34:01 -08:00
Joakim Plate
e3e64c103d Switch to attr use in philips js (#85345) 2023-01-07 15:00:32 +01:00
Marc Mueller
c3991b591a Improve DataUpdateCoordinator typing in integrations (8) (#85331) 2023-01-07 14:55:19 +01:00
Marc Mueller
2e989b16ad Improve DataUpdateCoordinator typing in integrations (9) (#85332) 2023-01-07 14:52:06 +01:00
Marc Mueller
a2ef0caa07 Improve sleepiq generic typing (#85330) 2023-01-07 14:13:16 +01:00
Marc Mueller
e99840f82c Improve devolo_home_network generic typing (#85328) 2023-01-07 14:12:03 +01:00
Marc Mueller
b27e89b40e Improve flume generic typing (#85329) 2023-01-07 14:10:44 +01:00
Michael
dddba4ba45 Remove own sensor description in PI-Hole (#85371)
own sensor description is not needed anymor
2023-01-07 14:06:33 +01:00
Maciej Bieniek
0fbb334ad9 Bump accuweather package to 0.5.0 (#85326)
Bump accuweather
2023-01-07 13:37:29 +01:00
Phil Bruckner
b257de57d9 Bump life360 package to 5.5.0 (#85322)
Improve debug output & redact sensitive info from log.
Fix bug that was masking some HTTP errors.
Retry HTTP errors 502, 503 & 504, which have been observed to happen every once
in a while, resulting in fewer unnecessary unavailable states.
2023-01-07 12:53:04 +01:00
Benjamin
f215ae9dd9 Bump volkszahler to 0.4.0 (#85335)
bump volkszahler to 0.4.0

bump volkszahler to 0.4.0
2023-01-07 12:45:09 +01:00
Michael
c3716015c4 Move platform related stuff out of const.py in PI-Hole integration (#85237)
move platform related stuff out of const.py
2023-01-07 12:40:21 +01:00
Michael
ee3ab45012 Make API key mandatory for PI-Hole (#85264)
* add reauth flow

* adjust tests

* use constant for platforms

* remove not needed async_get_entry()

* fix typo

* user _async_abort_entries_match()

* don't use CONF_ prefix for config dicts

* sort PLATFORMS

* use entry_data in reauth flow
2023-01-07 12:22:36 +01:00
Joakim Plate
7f2b7340b9 Validate length of rfxtrx identifier (#85352) 2023-01-07 10:52:46 +01:00
Joakim Plate
dfca3c2448 Correct memory leak for rfxtrx lighting4 devices (#85354) 2023-01-07 10:52:05 +01:00
puddly
757e4cf9e1 Retry ZHA config entry setup when ENETUNREACH is caught (#84615)
* The config entry is not ready on `ENETUNREACH`

* Use new `TransientConnectionError` from zigpy
2023-01-07 10:46:33 +01:00
Allen Porter
d3c7cbbfb0 Bump pyrainbird to 1.1.0 (#85358) 2023-01-06 22:16:14 -08:00
J. Nick Koston
4025ac712f Add note to SwitchBot locks that usernames are case sensitive (#85359) 2023-01-06 19:51:20 -10:00
J. Nick Koston
21c0e93ee9 Bump pySwitchbot to 0.36.3 (#85360) 2023-01-06 19:50:50 -10:00
puddly
015281078a Bump ZHA dependencies (#85355)
* Bump ZHA dependencies

* Deprecated `foundation.Command` -> `foundation.GeneralCommand`
2023-01-06 23:01:36 -05:00
J. Nick Koston
6d012ea7c0 Bump aioesphomeapi to 13.0.3 (#85356)
Performance improvements

changelog: https://github.com/esphome/aioesphomeapi/compare/v13.0.2...v13.0.3
2023-01-06 23:00:38 -05:00
shbatm
cf3ca816a8 Add query button entities to ISY994 devices and hub (#85337) 2023-01-06 15:15:02 -10:00
GitHub Action
2976f843b5 [ci skip] Translation update 2023-01-07 00:22:33 +00:00
shbatm
9ad05b55d9 Use Platform enum and remove DOMAIN as X imports in ISY994 (#85341) 2023-01-06 13:16:14 -10:00
J. Nick Koston
194adcde9c Drop ChainMap in translation cache (#85260) 2023-01-06 11:52:18 -10:00
mkmer
d75087ede5 Add Whirlpool washer and dryer to Whirlpool integration (#85066)
* redo Add sensor

* move back to ClientError
simplify washer_state

* Cleanup Sensor definitions

* Seperated EndTimeSensor

* Clean up WasherDryerTimeClass

* Start with Timestamp = None

* Clean up class description

* One more ClientError

* change to restore sensor

* Don't update when no state change

* Seperate washer tests
Add restore_state test

* Remove unused loop in washer sensor test

* No loops in sensor tests

* Remove unnecessary SensorTestInstance
2023-01-06 12:41:46 -08:00
starkillerOG
968cf641b8 Bump reolink-aio to 0.1.3 (#85309)
bump reolink-aio to 0.1.3
2023-01-06 20:52:24 +01:00
shbatm
f12ffe1e49 Add addtional device classes to ISY994 sensors and bump PyISY to 3.0.11 (#85315) 2023-01-06 07:41:39 -10:00
Franck Nijhof
9d45071e3f Add EasyBaby support to Tuya (#85298) 2023-01-06 14:42:09 +01:00
Carlos Cristobal
8bb5763ea0 Fix Fitbit state for values over 999 (#85251)
* Remove comma thousands formatting

* Add calorie and bpm to units

* Updating device and state classes

* Revert "Updating device and state classes"

This reverts commit ae77cf3cd7.

* Revert "Add calorie and bpm to units"

This reverts commit 7d82bb1c12.

* Removing unnecessary formatting
2023-01-06 14:12:41 +01:00
Franck Nijhof
bd8cb4f166 Update debugpy to 1.6.5 (#85297) 2023-01-06 13:28:15 +01:00
Aaron Bach
31bf0a0105 Renovate Tile config flow tests (#85154) 2023-01-06 13:08:52 +01:00
Anders
4b178e88a4 Mark Yamaha media player as unavailable when unresponsive (#85018) 2023-01-06 13:03:02 +01:00
starkillerOG
d9be9fe6d5 Increase Netgear speedtest period to 2 hours (#85299) 2023-01-06 12:56:27 +01:00
Tom Puttemans
b9339a290a Fix dsmr_reader peak hour consumption unit of measurement (#85301) 2023-01-06 12:55:32 +01:00
Robert Svensson
220ec1906c Make sensor platform use common UniFi entity class (#84818)
fixes undefined
2023-01-06 12:50:32 +01:00
epenet
52032c6c7f Complete test coverage for SFR Box (#85068)
* Complete test coverage for SFR Box

* Add missing hint

* renault -> sfr_box

* Fixes following rebase
2023-01-06 12:30:07 +01:00
epenet
0d5bdaf037 Bump sfrbox-api to 0.0.2 (#85302) 2023-01-06 12:13:49 +01:00
Michal Čihař
aace1da358 lacrosse_view: Set entity availablity depending on the data (#85303) 2023-01-06 12:13:06 +01:00
epenet
3ecbb235cc Address late feedback in SFR Box enum sensors (#84977)
* Address late feedback to SFR Box

* Hassfest

* missed a capital G

* Apply suggestion
2023-01-06 11:13:33 +01:00
Aaron Bach
39b110b9b0 Renovate OpenUV config flow tests (#85150) 2023-01-06 10:51:46 +01:00
Paulus Schoutsen
9ed629d838 Fix some pytest warning for helpers (#85283) 2023-01-06 09:21:46 +01:00
Klaas Schoute
f620d2bb2f Add diagnostics to EnergyZero integration (#85164) 2023-01-06 09:13:11 +01:00
dependabot[bot]
5cc3636be7 Bump actions/checkout from 3.2.0 to 3.3.0 (#85285)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-06 08:35:47 +01:00
Paulus Schoutsen
1e78314638 Use async with timeout (#85281) 2023-01-05 20:43:56 -10:00
Charles Garwood
9e68117a33 Bump bluetooth-data-tools to 0.3.1 for ld2410-ble (#85278) 2023-01-05 22:33:37 -05:00
Charles Garwood
cf92142b64 Fix Fully Kiosk service call config entry handling (#85275)
* Make sure we're getting the fully_kiosk config entry

* Make sure we're getting the fully_kiosk config entry
2023-01-05 22:10:41 -05:00
Franck Nijhof
bdcccd9d83 Improve weather Forecast typing (#85019) 2023-01-06 03:39:37 +01:00
930913
2507ec1f4b Add LD2410 BLE integration (#83883) 2023-01-05 16:15:03 -10:00
rikroe
5b8b6167ac Bump bimmer_connected to 0.12.0 (#85255)
* Bump bimmer_connected to 0.12.0

* Fix mypy

* Remove not needed code

Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2023-01-06 03:05:37 +01:00
shbatm
b5d5a720dc Add additional device classes and units to ISY994 aux sensors (#85274)
fixes undefined
2023-01-05 15:31:45 -10:00
J. Nick Koston
1fbdb80430 Avoid some data merges in the bluetooth remote scanners when nothing has changed (#85270) 2023-01-05 15:22:14 -10:00
shbatm
c4d03088c0 Restore low battery state on ISY994 Insteon heartbeat nodes (#85209)
fixes undefined
2023-01-05 14:30:08 -10:00
GitHub Action
bdd87bcc87 [ci skip] Translation update 2023-01-06 00:23:50 +00:00
Robert Hillis
77dd0b2fd3 Bump steamodd to 4.23 (#85071) 2023-01-06 01:56:42 +02:00
Shai Ungar
f61d605d6d Remove redundant CONF_PATH from sabnzbd config flow (#85214)
remove redundant CONF_PATH from sabnzbd config flow
2023-01-06 01:53:30 +02:00
Guido Schmitz
21fbe07218 Bump devolo_plc_api to 1.0.0 (#85235)
* Bump devolo_plc_api to 1.0.0

* Fix pylint
2023-01-06 01:49:59 +02:00
IceBotYT
57f792d88f Add support for WetDry, WindHeading, and Flex fields in LaCrosse View (#79062)
* Add support for WetDry and WindHeading fields in LaCrosse View

* Improve test coverage

* Verify data type before conversion

* Improve test coverage

* Convert to more concise type conversion

* Add Flex field as per #79529

* Improve code quality

* Add check if expected field is missing
2023-01-06 00:45:06 +01:00
J. Nick Koston
3ac5b780ff Reject the WiFI AP when considering to update a shelly config entry from zeroconf (#85265)
Reject the WiFI AP IP when considering to update a shelly config entry from zeroconf

fixes #85180
2023-01-06 01:44:10 +02:00
Franck Nijhof
a36709cc8d Update coverage to 7.0.3 (#85197) 2023-01-05 23:54:31 +01:00
Michal Čihař
18a18aa6c4 Fix lacrosse_view fetching of latest data (#85117)
lacrosse_view: fixed fetching of latest data

When using datetime.utcnow(), it only replaces timezone information with
UTC making the actual time offset by the timezone. When you are in UTC-
timezones, it makes no issue as the offset is in the future, but when in
UTC+, the last hour(s) of data are missing.

This commits swtiches to time.time() as UTC timestamp is actually what
the API expects.

It also reduces the window to one hour what noticeably improves the API
performance.
2023-01-05 23:45:29 +01:00
Franck Nijhof
f4a71ea83f Fix translation keys for NAM sensors (#85245)
Co-authored-by: Maciej Bieniek <bieniu@users.noreply.github.com>
2023-01-05 23:17:29 +01:00
shbatm
ef759e9c63 Assign ISY994 program entities to hub device, simplify device info (#85224) 2023-01-05 11:16:17 -10:00
starkillerOG
11df364b10 bump reolink-aio to 0.1.2 (#85247) 2023-01-05 22:06:40 +01:00
Álvaro Fernández Rojas
146b43f8c5 Add Airzone Select platform support (#76415)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-05 11:03:36 -10:00
epenet
829c8e611e Remove invalid device class for RSSI sensors (#85191)
* Remove invalid device class for RRSI sensors

* Restore state class
2023-01-05 15:30:52 -05:00
J. Nick Koston
28ad27a3b3 Improve error reporting when switchbot auth fails (#85244)
* Improve error reporting when switchbot auth fails

related issue #85243

* bump

* coverage
2023-01-05 15:29:13 -05:00
Franck Nijhof
4a48f0d659 Fix device class for DSMR gas sensors providing energy readings (#85202) 2023-01-05 20:28:13 +01:00
G Johansson
26a964b90a Remove unneeded type checking from Sensibo (#85231) 2023-01-05 18:50:05 +01:00
Franck Nijhof
4335a7c653 Remove invalid AQI unit from Environment Canada (#85183) 2023-01-05 09:02:17 -07:00
Erik Montnemery
377396ba16 Add WS endpoint config/entity_registry/get_entries (#85063) 2023-01-05 09:39:10 -05:00
David McKenna
8ffeffd9d2 Add econet device and state classes (#84201)
* Updated econet sensors to have device and state classes

* Updated econet sensors to have device and state classes

* EcoNet sensor updates

* Updated EcoNet sensors to convert kBtu to kWh

* Updating EcoNet sensor with suggestions

* Updating EcoNet sensor with suggestions

* Updating EcoNet sensor with suggestions

* Updating EcoNet sensor with suggestions

* Updating EcoNet sensors name and unique id

* Updating EcoNet sensor with suggestions

* Updating EcoNet sensor with suggestions
2023-01-05 14:25:33 +01:00
epenet
b578d08e8a Adjust valid energy units (#85190) 2023-01-05 13:00:46 +01:00
Franck Nijhof
83f6e168e5 Update orjson to 3.8.4 (#85195) 2023-01-05 12:34:23 +01:00
Duco Sebel
ab6535382d Bumb python-homewizard-energy to 1.4.0 (#85114) 2023-01-05 11:35:59 +01:00
Artem Draft
49885757db Bump pybravia to 0.3.0 (#85127) 2023-01-05 11:34:07 +01:00
Aaron Bach
6b68d3d365 Generalize a base ReCollect Waste entity (#85166) 2023-01-05 11:26:59 +01:00
Erik Montnemery
280f6e4752 Bump hatasmota to 0.6.2 (#85182) 2023-01-05 12:24:38 +02:00
Klaas Schoute
e8b68e67a7 Add Mijndomein Energie virtual integration (#85165) 2023-01-05 11:22:27 +01:00
Erik Montnemery
c1075ebb8c Allow SensorDeviceClass.POWER_FACTOR unit None (#85181) 2023-01-05 11:03:37 +01:00
epenet
3a02c627fa Adjust set_humidity type hints (#85176) 2023-01-05 10:26:49 +01:00
o951753o
240b4078cd Fix typo in Tuya climate (#85185) 2023-01-05 10:22:22 +01:00
Martin Hjelmare
433c0defbe Clean up pylint warning in zwave_js light (#85149) 2023-01-04 21:13:59 -05:00
William Scanlon
8bb964e1bd Bump pyeconet to 0.1.18 to fix energy usage (#85094) 2023-01-04 21:09:54 -05:00
Ernst Klamer
e33c743f4a Bump bthome-ble to 2.4.1 (#85153)
fix https://github.com/home-assistant/core/issues/85142
fixes undefined
2023-01-05 03:05:46 +01:00
GitHub Action
01e99c0229 [ci skip] Translation update 2023-01-05 00:23:39 +00:00
Martin Hjelmare
8805a7e555 Fix humidifier enforce type hints (#85148) 2023-01-05 00:58:08 +01:00
Aaron Bach
80c357c00f Renovate Ridwell config flow tests (#85135)
* Renovate Ridwell config flow tests

* Better fixture name

* Inconsistent typing
2023-01-04 14:00:59 -07:00
Aaron Bach
6e9d3bf8e9 Renovate Airvisual tests (#84892)
* Renovate AirVisual tests

* Cleanup

* Package scope

* Update tests/components/airvisual/test_config_flow.py

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

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-01-04 13:05:37 -07:00
JC Connell
9c88dea584 Add last timestamp to Tile attributes (#85095)
* Add last timestamp to Tile attributes

* sort lines ascending
2023-01-04 12:58:53 -07:00
Aaron Bach
b80997cc43 Remove unnecessary title kwarg in options flows (#85131) 2023-01-04 12:17:58 -07:00
Martin Hjelmare
439b35c310 Fix Z-Wave JS sensor units and device classes (#85129)
fixes undefined
2023-01-04 19:47:10 +01:00
J. Nick Koston
a9640d9c94 Bump home-assistant-bluetooth to 1.9.2 (#85123) 2023-01-04 18:29:26 +01:00
G Johansson
a5225a3606 Sensibo select platform translations (#82743) 2023-01-04 07:17:57 -10:00
Jan Bouwhuis
ee21bc5d7f Allow MQTT device_class or state_class to be set as None (#85106)
* Allow MQTT device_class to be set as `None`

* Add test

* Also allow sensor state_class to be `None`
2023-01-04 15:21:07 +01:00
Guido Schmitz
a981117f2d Remove illuminance device class for sensors in devolo Home Control (#85108) 2023-01-04 14:38:42 +01:00
Bram Kragten
d3b1a2c95e Update frontend to 20230104.0 (#85107) 2023-01-04 14:38:17 +01:00
Joakim Sørensen
f5c35ac0c1 Handle zone exception when setting up Cloudflare (#85110) 2023-01-04 14:36:41 +01:00
Erik Montnemery
22dbbd4b71 Revert "Disable sky connect config entry if USB stick is not plugged in" (#85103) 2023-01-04 11:33:16 +01:00
Klaas Schoute
0239938d99 Add ANWB Energie (virtual) integration (#85077) 2023-01-04 10:42:55 +01:00
Jan Bouwhuis
9f24897814 Do not reset current selection on reconfig or MQTT select (#85099)
* Do not reset current selection on reconfig

* Add a test
2023-01-04 10:29:53 +01:00
Jan Bouwhuis
b29c96639b Correct initial config of MQTT climate (#85097)
* Do not reset MQTT climate state on re-config

* More corrections

* Correct startup behavior in optimistic mode
2023-01-04 10:29:02 +01:00
Aaron Bach
49b1d6e7fe Remove workaround for reloading PurpleAir upon device removal (#85086) 2023-01-03 21:24:24 -05:00
shbatm
e150b0cf0f ISY994: Add dhcp support for eisy (#85083) 2023-01-03 15:14:36 -10:00
GitHub Action
5169721916 [ci skip] Translation update 2023-01-04 00:22:58 +00:00
Paul Bottein
dd0f11a062 Add translation key for IPP printer integration (#84441)
* Add translation key for IPP printer integration

* Add tests
2023-01-03 17:56:46 -06:00
Marc Mueller
516cb31635 Fix multi inheritance with CoordinatorEntity (#85053) 2023-01-03 23:07:59 +01:00
Robert Svensson
6718b40181 Make switch platform use common UniFi entity class (#84458)
* Make switch platform use common UniFi entity class

* Consolidate common functions between update and switch platforms

* Use controller.register_platform_add_entities

* Rename UnfiEntityLoader to UnifiUpdateEntityDescriptionMixin
2023-01-03 22:57:44 +01:00
Mike K
799d527fb5 Add MQTT climate setting for current humidity (#84592)
* MQTT Climate: Add support for setting the current humidity via MQTT

* MQTT Climate: Add configuration constants related to setting the target humidity

* MQTT Climate: Add support for setting the humidity's state topic & template

* MQTT Climate: Add support for setting the initial humidity

* MQTT Climate: Add support for setting the humidity's command topic & template

* MQTT Climate: Add support for setting the min/max humidity

* MQTT Climate: Fix style & tests

* MQTT Climate: Set the initial humidity to None

* MQTT Climate: Rename _set_mqtt_attribute to _set_climate_attribute and handle_temperature_received to handle_climate_attribute_received

* MQTT Climate: Copy humidity range validation from MQTT Humidifier

* MQTT Climate: Remove CONF_HUMIDITY_INITIAL

* MQTT Climate: Only enable support for TARGET_HUMIDITY when the command topic is set

* MQTT Climate: Check if setting the target humidity is supported before actually setting it

* MQTT Climate: Make sure that CONF_HUMIDITY_COMMAND_TOPIC has been configured when setting CONF_HUMIDITY_STATE_TOPIC

* MQTT Climate: Fix broken tests

* MQTT Climate: Add test for optimistically setting the target humidity

* MQTT Climate: Remove references to "temperature" in handle_climate_attribute_received

* MQTT Climate: Add additional humidity-related tests

* MQTT Climate: Remove supported feature check in handle_target_humidity_received

It's not needed because this is covered by the `valid_humidity_state_configuration` validation.

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

* MQTT Climate: Remove supported feature check in async_set_humidity

It is covered by the base Climate entity.

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

Co-authored-by: Jan Bouwhuis <jbouwh@users.noreply.github.com>
2023-01-03 22:57:20 +01:00
J. Nick Koston
7fdf00a9fb Bump scapy to 2.5.0 (#85074)
changelog: https://github.com/secdev/scapy/compare/v2.4.5...v2.5.0

Reduces memory overhead via https://github.com/secdev/scapy/pull/3579
2023-01-03 16:48:47 -05:00
Klaas Schoute
7d54620f34 Add EnergyZero integration (#83886) 2023-01-03 22:28:16 +01:00
Aarni Koskela
38f183a683 Ruuvi Gateway integration (#84853)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-03 10:19:43 -10:00
Robert Svensson
a75bad3a83 Move add Device tracker entities to UniFi controller (#84883) 2023-01-03 20:59:28 +01:00
Andre Lengwenus
45fbbbaea1 Fix integer only LCN variable values (#85035) 2023-01-03 20:23:52 +01:00
J. Nick Koston
d89c259d7e Fix double time conversion in async_track_point_in_utc_time (#85036) 2023-01-03 20:21:54 +01:00
Erik Montnemery
6490dcf099 Import mqtt and recorder locally in test fixtures (#85067) 2023-01-03 20:18:36 +01:00
Koen van Zuijlen
6349760a2c Zeversolar integration (#84887)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-01-03 20:14:08 +01:00
Franck Nijhof
c1a6f83f12 Fix incorrectly return type on bad_identifier in UniFi Protect (#85050) 2023-01-03 20:10:27 +01:00
Ernst Klamer
171e114ec1 Add door, opening and motion sensors to Xiaomi-ble (#84990) 2023-01-03 08:21:28 -10:00
amitfin
b5664f9eaf Bump pycoolmasternet-async and add coolmaster swing mode (#82809)
* Add filter and error code support to CoolMastetNet

* Create separate entities

* coolmaster swing_mode support

* Changed default to False

* Raise HomeAssistantError

* Add tests for init and climate

* Fixed bad merge

* Catch only ValueError
2023-01-03 10:21:11 -08:00
Austin Brunkhorst
ca7384f96e Add services for transitioning snooz volume on or off (#83515)
* Add services for fading snooz on/off

* Rename fade to transition
2023-01-03 18:08:54 +01:00
amitfin
11b03b5669 Bump pycoolmasternet-async and add filter and error code support to CoolMastetNet (#84548)
* Add filter and error code support to CoolMastetNet

* Create separate entities

* Remove async_add_entities_for_platform

* Fixed call to async_add_entities

* Avoid using test global
2023-01-03 09:00:45 -08:00
epenet
34798189ca Improve SFR Box test coverage (#85054)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-01-03 17:56:30 +01:00
epenet
3737170d37 Improve onewire tests (#85064) 2023-01-03 17:32:39 +01:00
epenet
6af07aa348 Improve renault tests (#85065) 2023-01-03 17:32:10 +01:00
Franck Nijhof
5caef34209 Update adguard to 0.6.1 (#85052)
* Update adguard to 0.6.0

* Update adguard to 0.6.1
2023-01-03 15:28:39 +01:00
Michał Huryn
d1935603a9 Bump blebox_uniapi to 2.1.4 (#85059) 2023-01-03 15:22:00 +01:00
epenet
58b36514ad Address late feedback in SFR Box coordinator (#85039)
* Address late feedback in SFR Box coordinator

* One more
2023-01-03 13:54:15 +01:00
epenet
4cea5420b3 Add bitcoin to strict typing (#85049) 2023-01-03 13:44:06 +01:00
Sándor Oroszi
a0d41e1d97 Add hs_command_template and xy_command_template to mqtt light default schema (#84988)
* Add mqtt light hs_command_template

* Add mqtt light xy_command_template
2023-01-03 12:58:00 +01:00
epenet
e7e1a7d46e Clarify NumberDeviceClass.PRECIPITATION docstring (#85051) 2023-01-03 12:31:01 +01:00
epenet
2a9526de17 Address late feedback in SFR Box config flow (#85037)
* Address late feedback in SFR Box config flow

* Adjust tests
2023-01-03 12:18:05 +01:00
Franck Nijhof
fed8f905c8 Correct return type of two raise-only methods in recorder (#85048) 2023-01-03 12:15:45 +01:00
epenet
0d290ac21e Address late feedback in SFR Box sensors (#85038) 2023-01-03 12:15:03 +01:00
Erik Montnemery
8a0fb21988 Clarify SensorDeviceClass.PRECIPITATION docstring (#85045) 2023-01-03 11:30:03 +01:00
Erik Montnemery
605619a5ee Update stale strings in repairs tests (#85046) 2023-01-03 11:11:20 +01:00
Marc Mueller
972eb34ed9 Improve bluetooth generic typing (#84891)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-01-02 21:19:53 -10:00
J. Nick Koston
6b95fa5942 Fix bluetooth not being loaded with esphome proxies when removed from default_config (#85032)
* Fix bluetooth not being loaded with esphome proxies when removed from default_config

fixes #84960

* actually commit the conftest change
2023-01-02 21:10:39 -05:00
Paulus Schoutsen
94e6743a7b Bump slixmpp to 1.8.3 (#85031) 2023-01-02 21:10:23 -05:00
starkillerOG
c4a5d12df4 Switch to reolink-aio (#85014)
* switch to reolink-aio

* fix imports
2023-01-02 20:49:55 -05:00
J. Nick Koston
8db086f65b Bump sqlalchemy to 1.4.45 (#85021)
changelog: https://docs.sqlalchemy.org/en/20/changelog/changelog_14.html#change-1.4.45
2023-01-02 20:46:56 -05:00
J. Nick Koston
b470c3484b Bump httpx to 0.23.2 (#85023)
changelogs:
https://github.com/encode/httpcore/compare/0.16.2...0.16.3
https://github.com/encode/httpx/compare/0.23.1...0.23.2
2023-01-02 20:45:52 -05:00
Martin Hjelmare
94b80db968 Handle not available add-on in hassio add-on manager (#84943)
* Handle not available add-on in hassio add-on manager

* Fix zwave_js tests

* Fix sky connect tests

* Fix matter tests

* Fix yellow tests

* Update hardware tests
2023-01-02 20:28:21 -05:00
shbatm
240e1fd8f3 Update ISY994 integration to be model agnostic (#85017) 2023-01-02 14:22:40 -10:00
Tobias Sauerwein
5d6ca6dd44 Bump pyatmo to v7.5.0 (#85016) 2023-01-02 18:52:47 -05:00
Franck Nijhof
5cfa98e400 Improve typing of SelectorConfig (#85022) 2023-01-02 18:52:15 -05:00
Franck Nijhof
9c36f05ac4 Update coverage to 7.0.2 (#85020) 2023-01-02 13:43:20 -10:00
J. Nick Koston
b8a1537b58 Improve performance of fetching and storing history and events with the database (#84870) 2023-01-02 13:26:08 -10:00
Bram Kragten
0ad16e25ef Update frontend to 20230102.0 (#85010)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-01-02 23:31:42 +01:00
J. Nick Koston
3dd342baf3 Bump home-assistant-bluetooth to 1.9.1 (#85005)
fixes #83722
2023-01-02 16:33:01 -05:00
Erik Montnemery
472c23d35f Disable sky connect config entry if USB stick is not plugged in (#84975)
* Disable sky connect config entry if USB stick is not plugged in

* Remove debug stuff
2023-01-02 22:24:59 +01:00
starkillerOG
1724fcc150 Bump motionblinds to 0.6.15 (#84994) 2023-01-02 22:17:20 +01:00
Daniel Hjelseth Høyer
be9010f459 Update Tibber lib to 0.26.7. Improve error handling of realtime data (#85008) 2023-01-02 22:16:38 +01:00
Franck Nijhof
2176281894 Adjust stale bot action to be more performant (#84999) 2023-01-02 21:55:13 +01:00
mkmer
323810e31a Bump AIOAladdinConnect to 0.1.50 (#85006) 2023-01-02 21:47:36 +01:00
David F. Mulcahey
c9efebbf0c Bump ZHA quirks (#85004) 2023-01-02 21:46:50 +01:00
Martin Hjelmare
3b84dba72e Bump pytradfri to 9.0.1 (#85001) 2023-01-02 21:25:00 +01:00
Joakim Plate
987e77780a Only run garbage collection per module (#84681)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2023-01-02 09:31:12 -10:00
Joakim Plate
b302d1f3fc Add initial test for nibe buttons (#84950) 2023-01-02 20:24:20 +01:00
Robert Svensson
534bb74069 Bump axis to v45 (#84992) 2023-01-02 18:14:14 +01:00
Franck Nijhof
02b5da710b Remove attributes from Twinkly lights (#84986) 2023-01-02 17:58:07 +01:00
mkmer
f999258a42 Add Whirlpool device_info and has_entity_name (#84946) 2023-01-02 17:57:58 +01:00
Franck Nijhof
6ecf2e8c71 Move sensor constants and define public names from this module (#84973) 2023-01-02 16:00:50 +01:00
Franck Nijhof
aaa78259b5 Update watchdog to 2.2.1 (#84982) 2023-01-02 15:19:37 +01:00
Franck Nijhof
2371a6cc72 Update Pillow to 9.4.0 (#84974) 2023-01-02 14:43:41 +01:00
starkillerOG
46166160fe Consider 95% as closed for Motion blinds venetian blinds (#84872) 2023-01-02 14:12:36 +01:00
Marc Mueller
7da434f455 Improve DataUpdateCoordinator typing in integrations (7) (#84890) 2023-01-02 12:57:15 +01:00
Aaron Bach
0a77232444 Renovate PurpleAir tests (#84894) 2023-01-02 12:55:19 +01:00
Erik Montnemery
9af17fa5a0 Improve device automation tests (#84972) 2023-01-02 12:33:38 +01:00
Erik Montnemery
11c174aca3 Revert "Add aliases to device registry items" (#84976) 2023-01-02 12:30:25 +01:00
Jan Bouwhuis
9cf86b234b Add optimistic option for MQTT climate (#84777) 2023-01-02 11:39:42 +01:00
Michael
bcbae1388d Remove deprecated PI-Hole YAML config (#84803) 2023-01-02 10:57:16 +01:00
TheJulianJES
f740312247 Fix some typos in ZHA comments (#84881)
* Fix copy paste errors

* Fix "setup/set up" usage

* Fix typo

* Fix comment

* Fix copy paste errors

* Remove space at end of comment

* Remove double word

* Fix copy paste errors

* Fix typos

* Apply review suggestion

* Upper-case zha (to ZHA) everywhere

* Review: fix "over rules"

* Review: most/more
2023-01-02 00:20:59 -05:00
Greg Dowling
f79ffb2981 Improve roon volume translation logic (#84916)
Improve roon volume translation logic.
2023-01-02 00:16:37 -05:00
Allen Porter
0ae55fb58b Fix Climate device HVAC mode trigger UI (#84930)
* Fix Climate device HVAC mode trigger UI

* Use updated order of test case results
2023-01-01 20:16:18 -05:00
mkmer
812665cda4 Fix Whirlpool register_attr_callback (#84962)
relocate register_attr_callback
2023-01-01 20:12:31 -05:00
Allen Porter
a1588cd6af Fix caldav calendars with custom timezones (#84955)
* Fix caldav calendars with custom timezones

* Revert whitespace change
2023-01-01 20:11:34 -05:00
GitHub Action
6220804639 [ci skip] Translation update 2023-01-02 00:23:28 +00:00
starkillerOG
c0d5ceb18c Process late feedback for Reolink (#84884)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-01-01 23:32:17 +01:00
Aaron Bach
ec33f6fe78 Remove unused PurpleAir sensor constant (#84953) 2023-01-01 12:15:29 -07:00
mkmer
b72e0f1d87 Fix Whirlpool type error in get_brand_for_region (#84944)
Fix type error
2023-01-01 20:10:41 +01:00
mkmer
b65d4a9efd Bump whirlpool-sixth-sense to 0.18.0 (#84945)
* bump whirlpool_sixth_sense to 18.0
add callback method initiated in 18.0

* add disconnect to mock
2023-01-01 20:08:54 +01:00
Robert Svensson
f56f391f81 Remove legacy constant from UniFi (#84947) 2023-01-01 20:03:14 +01:00
Aaron Bach
2d4625ad69 Fix issues with PurpleAir sensor device class and unit (#84896) 2023-01-01 19:55:05 +01:00
Artem Draft
ed0e583556 Assumed state in Bravia TV media player (#84885) 2023-01-01 18:07:14 +01:00
Allen Porter
e5b6f05e5b Bump google-nest-sdm to 2.1.2 (#84926) 2023-01-01 15:19:31 +01:00
J. Nick Koston
45e9b8b119 Bump pySwitchbot to 0.36.1 (#84937)
changelog: https://github.com/Danielhiversen/pySwitchbot/compare/0.36.0...0.36.1

small fix for the battery not updating with passive scanning
after lock operation
2023-01-01 14:35:01 +01:00
shbatm
a9fa9a5dd3 Change ISY994 group device assignments (#84933)
Changes to ISY994 group device assignments
2023-01-01 14:29:57 +01:00
Aaron Bach
e62ee331c7 Simplify AirVisual Pro sensor implementation (#84898)
* Simplify AirVisual Pro sensor implementation

* Code review
2023-01-01 14:19:29 +01:00
Aaron Bach
34b5928707 Use serial number for AirVisal Pro config entry unique ID (#84902)
* Use serial number for AirVisal Pro config entry unique ID

* Code review
2023-01-01 14:17:34 +01:00
Maikel Punie
fdf2f8a2ea Bump velbus-aio to 2022.12.0 (#83278)
* Add support for fututre config entry migrations

* Add testcase

* dir check bug

* rework the migrate testcase

* implement comments

* Missed this part of the file

* Fix and clean tests

* add more into the testcase

* push sugestions

* Upgrade velbusaio to add version 2 support

* more comments

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-01-01 12:28:31 +01:00
J. Nick Koston
d51f483855 Fix failing HomeKit Controller diagnostics tests (#84936) 2022-12-31 21:38:34 -10:00
ChopperRob
208b281505 Fix haveibeenpwned user-agent string (#84919)
* Fixed user-agent string not being accepted as an valid header

* Update homeassistant/components/haveibeenpwned/sensor.py

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

* Removed the aiohttp import

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-01-01 02:49:13 +01:00
ChopperRob
a168df342d Fix haveibeenpwned user-agent string (#84919)
* Fixed user-agent string not being accepted as an valid header

* Update homeassistant/components/haveibeenpwned/sensor.py

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

* Removed the aiohttp import

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-01-01 02:48:55 +01:00
GitHub Action
5c7120aa36 [ci skip] Translation update 2023-01-01 00:25:49 +00:00
Paulus Schoutsen
6d4489e822 Update description to guide user to find ESPHome encryption key. (#84928) 2022-12-31 15:21:24 -05:00
tronikos
d90ec3ccca Google Assistant SDK: Log command and response (#84904)
Log command and response
2022-12-31 12:07:31 -08:00
Aaron Bach
82977a43d3 Use generator instead of single-list-unpack in PurpleAir config flow (#84922) 2022-12-31 12:07:12 -08:00
Paulus Schoutsen
c6a0c7eccc Tiny clean up of the ESPHome config flow (#84903)
Clean up the ESPHome config flow
2022-12-31 12:20:48 -05:00
Aaron Bach
ad51952802 Renovate ReCollect Waste config flow tests (#84908) 2022-12-31 07:35:33 -07:00
Aaron Bach
e7cb3f1979 Renovate Notion config flow tests (#84906) 2022-12-31 07:34:59 -07:00
Allen Porter
9c348b6330 Fix free/busy google calendars (#84907)
fixes undefined
2022-12-31 14:01:05 +01:00
Robert Svensson
f275389ffe Bump pydeconz to v106 (#84914)
fixes undefined
2022-12-31 13:59:39 +01:00
avee87
2dd9229dc4 Add device info to transmission (#84660) 2022-12-31 13:20:44 +01:00
Martin Hjelmare
fd78373b5c Use entity descriptions in mysensors binary sensor (#84897) 2022-12-31 11:52:36 +01:00
Allen Porter
6b6f115d7e Fix handling of empty google_calendars.yaml file (#84909)
fixes undefined
2022-12-31 11:50:56 +01:00
Aaron Bach
fbb406842e Remove redundant Guardian handler unsub logic (#84905) 2022-12-31 11:17:37 +01:00
Aaron Bach
e141374831 Don't include distance in PurpleAir sensor selector (#84893) 2022-12-31 11:16:09 +01:00
epenet
896526c24b Add SFR Box integration (#84780)
* Add SFR Box integration

* Adjust error handling in config flow

* Add tests

* Use value_fn

* Add translation

* Enable mypy strict typing

* Add ConfigEntryNotReady

* Rename exception

* Fix requirements
2022-12-31 10:14:13 +01:00
Marc Mueller
11b5de9463 Improve shelly generic typing (#84889)
Improve shelly generic typing
2022-12-31 08:33:41 +02:00
J. Nick Koston
f6991cd4dc Small fixes for SwitchBot Locks (#84888)
Co-authored-by: Aaron Bach <bachya1208@gmail.com>
2022-12-31 05:05:25 +01:00
GitHub Action
d12857c68c [ci skip] Translation update 2022-12-31 00:22:33 +00:00
Aaron Bach
f8467d253e Renovate Ambient PWS config flow tests (#84879)
* Renovate Ambient PWS config flow tests

* Naming

* Update tests/components/ambient_station/conftest.py

* Update tests/components/ambient_station/conftest.py

* Simplify
2022-12-30 17:09:38 -07:00
Franck Nijhof
9b3d727e8e Update orjson to 3.8.3 (#84878) 2022-12-31 00:58:02 +01:00
starkillerOG
0a8514d7cd Bump motionblinds to 0.6.14 (#84873) 2022-12-30 23:57:35 +01:00
Aaron Bach
34dc47ad10 Ensure AirVisual Pro migration includes device and entity customizations (#84798)
* Ensure AirVisual Pro migration includes device and entity customizations

* Update homeassistant/components/airvisual/__init__.py

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

* Code review

* Fix tests

* Fix tests FOR REAL

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-12-30 14:47:41 -07:00
Robert Svensson
60de2a82c7 Make device tracker use common UniFi entity class (#84786) 2022-12-30 22:27:45 +01:00
William Scanlon
8ffd540c85 Bump pyeconet to 0.1.17 (#84868) 2022-12-30 22:12:01 +01:00
Robert Svensson
28eda7d1f0 Move add Update entities to UniFi controller (#84477) 2022-12-30 21:58:23 +01:00
Yuxin Wang
06095b1fec Enable strict typing for apcupsd (#84861) 2022-12-30 21:48:29 +01:00
Robert Svensson
7abff358a5 Bump aiounifi to v43 (#84864) 2022-12-30 21:17:47 +01:00
Greg Dowling
3e18d70483 Bump pyroon library to 0.1.2. (#84865) 2022-12-30 13:31:16 -05:00
Franck Nijhof
02f64ada2d Only reflect unavailable state in DSMR when disconnected (#84862)
* Only reflect unavailable state in DSMR when disonnected

* Addressreview comment
2022-12-30 13:08:11 -05:00
Franck Nijhof
f8fa676ac8 Do not validate device classes when entity state is unknown (#84860) 2022-12-30 13:07:49 -05:00
Yuxin Wang
7a7f986444 Add state_class to the sensor entity descriptions for apcupsd integration (#84829) 2022-12-30 17:53:54 +00:00
Aaron Godfrey
8cbbdf21f3 Update todoist integration to use new official rest api library (#79481)
* Swapping out libraries.

* Adding types

* Add ability to add task.

* Removed remaining todos.

* Fix lint errors.

* Fixing tests.

* Update to v2 of the rest api.

* Swapping out libraries.

* Adding types

* Add ability to add task.

* Removed remaining todos.

* Fix lint errors.

* Fix mypy errors

* Fix custom projects.

* Bump DEPENDENCY_CONFLICTS const

* Remove conflict bump

* Addressing PR feedback.

* Removing utc offset logic and configuration.

* Addressing PR feedback.

* Revert date range logic check
2022-12-30 09:49:35 -08:00
Aarni Koskela
7440c34901 Allow None connector for BaseHaRemoteScanner (#84847) 2022-12-30 06:49:37 -10:00
Artem Draft
3ac7c687be Redesign and refactor Bravia TV config_flow (#84832)
fixes undefined
2022-12-30 16:35:18 +01:00
Franck Nijhof
1b3d3d5cc3 Add availability property to DSMR sensors (#84848) 2022-12-30 16:21:41 +01:00
Chris Straffon
eba64f84ef Fix growatt identification issue (#84628)
Fixes https://github.com/home-assistant/core/issues/84600
fixes undefined
2022-12-30 15:33:30 +01:00
Steven Looman
a9be2adf06 Actually try port when finding next available port for ssdp server (#84206)
fixes undefined
2022-12-30 15:30:29 +01:00
Bram Kragten
55885f49f2 Update frontend to 20221230.0 (#84842) 2022-12-30 14:55:50 +01:00
Phil Cole
e4f692ce6f Use pycarwings2 2.14 (#84792)
fixes undefined
2022-12-30 14:09:36 +01:00
SukramJ
005bc8994d Add mA to SensorDeviceClass.CURRENT units (#84492)
fixes undefined
2022-12-30 13:55:14 +01:00
Martin Hjelmare
df2d0cd3e3 Refactor mysensors device tracker (#84747) 2022-12-30 13:15:00 +01:00
Jan Bouwhuis
b2388b74d9 Add mV as a unit for voltage and enable conversions (#84805)
fixes undefined
2022-12-30 12:51:05 +01:00
Franck Nijhof
bcf32f8331 Mark required fields in FlowResult typedict (#84811)
* Mark required fields in FlowResult typedict

* Remove unneeded asserts from tests
2022-12-30 12:01:45 +01:00
epenet
f68a7636c5 Cleanup pytest.approx in unit conversion tests (#84810) 2022-12-30 10:16:20 +01:00
Artem Draft
0e98e0f65f Bump pybravia to 0.2.5 (#84835) 2022-12-30 09:16:49 +01:00
Abílio Costa
0e8164c07a Add support for US in the Whirlpool integration (#77237)
* Support US region in the Whirlpool integration

* Force maytag brand for US region

* Add missing util.py file

* Fix import after merge

* run black

* Missing region key in config flow test

* Fixed Generic config entry

* fixed typos in dict

* Remove redundant list const

Co-authored-by: mkmer <mike.j.kasper@gmail.com>
2022-12-30 09:13:47 +01:00
Damian Sypniewski
7aadcc1f97 Add option to retrieve SwitchBot Lock encryption key through config flow (#84830)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-12-29 21:48:39 -10:00
Michael
381480813d Deprecate YAML config in PI-Hole (#84797)
create an issue about deprecated yaml config
2022-12-29 20:41:08 -05:00
shbatm
1fc9eb6629 ISY994: Bump PyISY to 3.0.10 (#84821) 2022-12-29 20:37:34 -05:00
J. Nick Koston
6374cc6480 Fix thermobeacon WS08 models that identify with manufacturer_id 27 (#84812)
fixes #84706
2022-12-29 15:09:37 -10:00
GitHub Action
dd560a517c [ci skip] Translation update 2022-12-30 00:23:31 +00:00
Martin Hjelmare
5d4216d648 Add mysensors text platform (#84667)
Co-authored-by: J. Nick Koston <nick@koston.org>
2022-12-30 00:01:03 +01:00
Aaron Bach
c0da80b567 Don't attempt setup on migrated AirVisual Pro in the airvisual domain (#84796)
fixes undefined
2022-12-29 23:57:50 +01:00
Robert Svensson
e33cea9ff7 Add PoE power sensor to UniFi integration (#84314)
* Add PoE power sensor to UniFi integration

* Add unit of power

* Only update state if value has changed

* Remove stale print

* Subscribe to specific sensor to remove unnecessary state changes

Co-authored-by: J. Nick Koston <nick@koston.org>
2022-12-29 22:55:00 +01:00
Joakim Plate
0defe97892 Correct missing alarm reset button on nibe (#84809)
fixes undefined
2022-12-29 22:34:01 +01:00
Robert Svensson
9f399a1bbe Only subscribe to specific UniFi object ID (#84787) 2022-12-29 10:51:16 -10:00
Aaron Bach
f51cf87361 Fix AirVisual Pro sensors with incorrect units for their device classes (#84800) 2022-12-29 20:42:33 +01:00
Duco Sebel
d8cbff65f1 Fix code quality issues for HomeWizard (#84134)
* Remove unused constant

* Reuse fetch check for retrieving device information

* Remove else block

* Patch integration setup in test

* use isinstance to detect return type, instead of tuple

* Raise exception when recoverable error has been triggered to make code cleaner

* Use error code to split message and localization

* Actually log things
2022-12-29 10:35:24 -08:00
Aaron Bach
570824100c Remove ozone device class from OpenUV sensor (#84791)
fixes undefined
2022-12-29 18:32:06 +01:00
Jan Bouwhuis
ee66ffc8de Do not depend MQTT CI tests on debug logs (#84783)
* Do not depend MQTT CI tests on debug logs

* Leave Clean up expire as debug message
2022-12-29 18:29:28 +01:00
Brandon Rothweiler
8678b36e71 Add distance sensor device class to Mazda integration (#84659) 2022-12-29 17:17:11 +01:00
G Johansson
187b03446e Improve code quality Time of Day (#79412) 2022-12-29 17:10:10 +01:00
Marc Mueller
3312a041fd Improve opengarage generic typing (#84640) 2022-12-29 15:59:25 +01:00
Hans Oischinger
235a34c10c Catch vicare errors when deactivating preset fails (#84778)
vicare: catch errors when deactivating preset fails
2022-12-29 15:28:33 +01:00
Franck Nijhof
f84533838a Update attrs to 22.2.0 (#84772) 2022-12-29 15:09:39 +01:00
Jan Bouwhuis
5fbe36d43e Fix MQTT test logging level after default pytest logging capture change (#84773)
Fix logging level for MQTT CI testing after #84672
2022-12-29 15:08:35 +01:00
Tomas Kislan
1dec6854e5 Fix and upgrade minio integration (#84545)
closes https://github.com/home-assistant/core/issues/79842
2022-12-29 14:16:06 +01:00
Franck Nijhof
bfdca4b274 Update pre-commit to 2.21.0 (#84768) 2022-12-29 14:09:26 +01:00
Franck Nijhof
e164fdbef8 Update holidays to 0.18.0 (#84770) 2022-12-29 13:57:35 +01:00
Marc Mueller
77e71cf18b Improve modbus generic typing (#84737) 2022-12-29 12:37:31 +01:00
Marc Mueller
d849dab7ba Improve oncue generic typing (#84761)
Improve oncue generic typing
2022-12-29 12:26:17 +01:00
Franck Nijhof
7768084655 Update coverage to 7.0.1 (#84764) 2022-12-29 12:24:32 +01:00
Marc Mueller
b90a51490f Improve here_travel_time generic typing (#84631) 2022-12-29 11:01:21 +01:00
Allen Porter
2049993941 Check google calendar API scope to determine if write access is enabled (#84749)
* Check google calendar API scope to determine if write access is enabled

* Add API scope for calendar service for creating events
2022-12-29 11:00:31 +01:00
Marc Mueller
bd9f03010f Improve upnp typing (#84652) 2022-12-29 10:59:06 +01:00
epenet
6261994fcf Enable unit conversion for DATA_SIZE (#84699) 2022-12-29 09:58:15 +01:00
Marc Mueller
e693ba17e0 Improve brunt generic typing (#84735) 2022-12-29 09:55:59 +01:00
Marc Mueller
bfb509ccb8 Improve iqvia typing (#84734) 2022-12-29 09:45:05 +01:00
Marc Mueller
c4b45fb110 Improve ondilo_ico generic typing (#84738) 2022-12-29 09:35:06 +01:00
Marc Mueller
b8a4399078 Improve freedompro generic typing (#84736) 2022-12-29 09:31:47 +01:00
Lukas Barth
50f05ac51a Remove myself as a code owner (#84701)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2022-12-29 09:14:48 +01:00
Marc Mueller
fa7018bbec Improve DataUpdateCoordinator typing in integrations (6) (#84741) 2022-12-29 09:07:23 +01:00
Jc2k
9c2c57831b Fix UUID normalisation for vendor extensions in homekit_controller thread transport (#84746) 2022-12-29 05:40:25 +00:00
starkillerOG
fb1702647d Bump pynetgear to 0.10.9 (#84733) 2022-12-29 01:26:58 +01:00
GitHub Action
b3ab0a0199 [ci skip] Translation update 2022-12-29 00:23:20 +00:00
Anders
65aaea6ec6 Set Yamaha unique_id (#84730)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-12-29 01:00:31 +01:00
Marc Mueller
72671b93d2 Improve youless generic typing (#84739) 2022-12-28 23:52:01 +01:00
Marc Mueller
2512eb1e4c Improve DataUpdateCoordinator typing in integrations (5) (#84740) 2022-12-28 23:44:41 +01:00
Joakim Plate
5c43f0861f Avoid running final writes in executor in test (#84679) 2022-12-28 23:40:11 +01:00
Marc Mueller
345081ba15 Improve syncthru generic typing (#84648) 2022-12-28 23:37:12 +01:00
Robert Svensson
de5c7b0414 Rework UniFi device tracker to utilizing entity description (#81979)
* Rework UniFi device tracker to utilizing entity description

* Use bound

* Fix review comments from other PR
2022-12-28 22:29:11 +01:00
Hmmbob
cbcfeee322 Update apprise to 1.2.1 (#84705) 2022-12-28 22:13:20 +01:00
Joakim Plate
cb982294bd Avoid logging increase during tests (#84672) 2022-12-28 22:12:25 +01:00
Michael
551d52103d Remove deprecated tankerkoenig YAML config (#84711)
remove yaml import
2022-12-28 16:11:40 -05:00
Allen Porter
128ccbaa57 Gracefully handle caldav event with missing summary (#84719)
fixes undefined
2022-12-28 22:07:51 +01:00
Aaron Bach
580f2058a7 Fix incorrect values for AirVisual Pro sensors (#84725) 2022-12-28 22:06:44 +01:00
Aaron Bach
03ca50f292 Remove additional airvisual_pro references in airvisual (#84724) 2022-12-28 22:05:02 +01:00
Aaron Bach
5e2753d2fc Remove incorrect unit for AirVisual AQI sensor (#84723)
fixes undefined
2022-12-28 22:03:49 +01:00
epenet
46e02ebaff Enable unit conversion for DATA_RATE (#84698) 2022-12-28 21:49:00 +01:00
Hans Oischinger
c354868270 water_heater: Add unsupported states (#84720) 2022-12-28 21:45:24 +01:00
Nathan Spencer
3f3ffe3060 Use built in polling for litterrobot update entity (#84678)
* Use built in polling

* Define scan interval
2022-12-28 20:30:48 +01:00
Franck Nijhof
ba24cb6e72 Bump version to 2023.2.0dev0 (#84707) 2022-12-28 18:46:04 +01:00
Marcel van der Veldt
0e9c6b2bba Bump python matter server to 1.0.8 (#84692)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-12-28 18:29:37 +01:00
J. Nick Koston
5bdaad9c13 Reduce number of asyncio tasks created by bond (#84668) 2022-12-28 18:14:38 +01:00
2693 changed files with 64019 additions and 18702 deletions

View File

@@ -195,9 +195,6 @@ omit =
homeassistant/components/control4/const.py
homeassistant/components/control4/director_utils.py
homeassistant/components/control4/light.py
homeassistant/components/coolmaster/__init__.py
homeassistant/components/coolmaster/climate.py
homeassistant/components/coolmaster/const.py
homeassistant/components/cppm_tracker/device_tracker.py
homeassistant/components/crownstone/__init__.py
homeassistant/components/crownstone/const.py
@@ -233,6 +230,9 @@ omit =
homeassistant/components/discord/notify.py
homeassistant/components/dlib_face_detect/image_processing.py
homeassistant/components/dlib_face_identify/image_processing.py
homeassistant/components/dlink/__init__.py
homeassistant/components/dlink/data.py
homeassistant/components/dlink/entity.py
homeassistant/components/dlink/switch.py
homeassistant/components/dominos/*
homeassistant/components/doods/*
@@ -351,6 +351,8 @@ omit =
homeassistant/components/esphome/switch.py
homeassistant/components/etherscan/sensor.py
homeassistant/components/eufy/*
homeassistant/components/eufylife_ble/__init__.py
homeassistant/components/eufylife_ble/sensor.py
homeassistant/components/everlights/light.py
homeassistant/components/evohome/*
homeassistant/components/ezviz/__init__.py
@@ -564,6 +566,8 @@ omit =
homeassistant/components/ifttt/const.py
homeassistant/components/iglo/light.py
homeassistant/components/ihc/*
homeassistant/components/imap/__init__.py
homeassistant/components/imap/coordinator.py
homeassistant/components/imap/sensor.py
homeassistant/components/imap_email_content/sensor.py
homeassistant/components/incomfort/*
@@ -584,6 +588,7 @@ omit =
homeassistant/components/intellifire/coordinator.py
homeassistant/components/intellifire/entity.py
homeassistant/components/intellifire/fan.py
homeassistant/components/intellifire/light.py
homeassistant/components/intellifire/number.py
homeassistant/components/intellifire/sensor.py
homeassistant/components/intellifire/switch.py
@@ -599,6 +604,7 @@ omit =
homeassistant/components/iss/sensor.py
homeassistant/components/isy994/__init__.py
homeassistant/components/isy994/binary_sensor.py
homeassistant/components/isy994/button.py
homeassistant/components/isy994/climate.py
homeassistant/components/isy994/cover.py
homeassistant/components/isy994/entity.py
@@ -606,6 +612,9 @@ omit =
homeassistant/components/isy994/helpers.py
homeassistant/components/isy994/light.py
homeassistant/components/isy994/lock.py
homeassistant/components/isy994/models.py
homeassistant/components/isy994/number.py
homeassistant/components/isy994/select.py
homeassistant/components/isy994/sensor.py
homeassistant/components/isy994/services.py
homeassistant/components/isy994/switch.py
@@ -673,6 +682,9 @@ omit =
homeassistant/components/lcn/helpers.py
homeassistant/components/lcn/scene.py
homeassistant/components/lcn/services.py
homeassistant/components/ld2410_ble/__init__.py
homeassistant/components/ld2410_ble/binary_sensor.py
homeassistant/components/ld2410_ble/coordinator.py
homeassistant/components/led_ble/__init__.py
homeassistant/components/led_ble/light.py
homeassistant/components/lg_netcast/media_player.py
@@ -845,7 +857,6 @@ omit =
homeassistant/components/nibe_heatpump/__init__.py
homeassistant/components/nibe_heatpump/climate.py
homeassistant/components/nibe_heatpump/binary_sensor.py
homeassistant/components/nibe_heatpump/button.py
homeassistant/components/nibe_heatpump/number.py
homeassistant/components/nibe_heatpump/select.py
homeassistant/components/nibe_heatpump/sensor.py
@@ -870,6 +881,7 @@ omit =
homeassistant/components/nuki/binary_sensor.py
homeassistant/components/nuki/const.py
homeassistant/components/nuki/lock.py
homeassistant/components/nuki/sensor.py
homeassistant/components/nut/diagnostics.py
homeassistant/components/nx584/alarm_control_panel.py
homeassistant/components/nzbget/coordinator.py
@@ -1061,6 +1073,7 @@ omit =
homeassistant/components/rest/switch.py
homeassistant/components/rfxtrx/diagnostics.py
homeassistant/components/ridwell/__init__.py
homeassistant/components/ridwell/entity.py
homeassistant/components/ridwell/sensor.py
homeassistant/components/ridwell/switch.py
homeassistant/components/ring/camera.py
@@ -1082,6 +1095,9 @@ omit =
homeassistant/components/rova/sensor.py
homeassistant/components/rpi_camera/*
homeassistant/components/rtorrent/sensor.py
homeassistant/components/ruuvi_gateway/__init__.py
homeassistant/components/ruuvi_gateway/bluetooth.py
homeassistant/components/ruuvi_gateway/coordinator.py
homeassistant/components/russound_rio/media_player.py
homeassistant/components/russound_rnet/media_player.py
homeassistant/components/sabnzbd/__init__.py
@@ -1213,6 +1229,10 @@ omit =
homeassistant/components/squeezebox/__init__.py
homeassistant/components/squeezebox/browse_media.py
homeassistant/components/squeezebox/media_player.py
homeassistant/components/starlink/binary_sensor.py
homeassistant/components/starlink/coordinator.py
homeassistant/components/starlink/entity.py
homeassistant/components/starlink/sensor.py
homeassistant/components/starline/__init__.py
homeassistant/components/starline/account.py
homeassistant/components/starline/binary_sensor.py
@@ -1595,6 +1615,11 @@ omit =
homeassistant/components/zerproc/__init__.py
homeassistant/components/zerproc/const.py
homeassistant/components/zestimate/sensor.py
homeassistant/components/zeversolar/__init__.py
homeassistant/components/zeversolar/const.py
homeassistant/components/zeversolar/coordinator.py
homeassistant/components/zeversolar/entity.py
homeassistant/components/zeversolar/sensor.py
homeassistant/components/zha/api.py
homeassistant/components/zha/core/channels/*
homeassistant/components/zha/core/const.py

View File

@@ -45,5 +45,13 @@
"!include_dir_merge_list scalar",
"!include_dir_merge_named scalar"
]
},
"features": {
"ghcr.io/devcontainers/features/sshd:1": {
"version": "latest"
},
"ghcr.io/devcontainers/features/github-cli:1": {
"version": "latest"
}
}
}

View File

@@ -24,12 +24,12 @@ jobs:
publish: ${{ steps.version.outputs.publish }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
with:
fetch-depth: 0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
@@ -67,10 +67,10 @@ jobs:
if: github.repository_owner == 'home-assistant' && needs.init.outputs.publish == 'true'
steps:
- name: Checkout the repository
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
@@ -100,7 +100,7 @@ jobs:
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Download nightly wheels of frontend
if: needs.init.outputs.channel == 'dev'
@@ -113,9 +113,20 @@ jobs:
workflow_conclusion: success
name: wheels
- name: Download nightly wheels of intents
if: needs.init.outputs.channel == 'dev'
uses: dawidd6/action-download-artifact@v2
with:
github_token: ${{secrets.GITHUB_TOKEN}}
repo: home-assistant/intents
branch: main
workflow: nightly.yaml
workflow_conclusion: success
name: package
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
if: needs.init.outputs.channel == 'dev'
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
@@ -140,6 +151,24 @@ jobs:
python -m script.gen_requirements_all
fi
if [[ "$(ls home_assistant_intents*.whl)" =~ ^home_assistant_intents-(.*)-py3-none-any.whl$ ]]; then
echo "Found intents wheel, setting version to: ${BASH_REMATCH[1]}"
yq \
--inplace e -o json \
'del(.requirements[] | select(contains("home-assistant-intents")))' \
homeassistant/components/conversation/manifest.json
intents_version="${BASH_REMATCH[1]}" yq \
--inplace e -o json \
'.requirements += ["home-assistant-intents=="+env(intents_version)]' \
homeassistant/components/conversation/manifest.json
sed -i "s|home-assistant-intents==.*|home-assistant-intents==${BASH_REMATCH[1]}|" \
homeassistant/package_constraints.txt
python -m script.gen_requirements_all
fi
- name: Write meta info file
shell: bash
run: |
@@ -198,7 +227,7 @@ jobs:
- yellow
steps:
- name: Checkout the repository
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set build additional args
run: |
@@ -241,7 +270,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Initialize git
uses: home-assistant/actions/helpers/git-init@master
@@ -280,7 +309,7 @@ jobs:
- "homeassistant"
steps:
- name: Checkout the repository
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Login to DockerHub
if: matrix.registry == 'homeassistant'

View File

@@ -22,7 +22,7 @@ on:
env:
CACHE_VERSION: 3
PIP_CACHE_VERSION: 3
HA_SHORT_VERSION: 2023.1
HA_SHORT_VERSION: 2023.2
DEFAULT_PYTHON: 3.9
ALL_PYTHON_VERSIONS: "['3.9', '3.10']"
PRE_COMMIT_CACHE: ~/.cache/pre-commit
@@ -56,7 +56,7 @@ jobs:
runs-on: ubuntu-20.04
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Generate partial Python venv restore key
id: generate_python_cache_key
run: >-
@@ -167,16 +167,16 @@ jobs:
- info
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v3.2.2
uses: actions/cache@v3.2.3
with:
path: venv
key: >-
@@ -191,7 +191,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.2.2
uses: actions/cache@v3.2.3
with:
path: ${{ env.PRE_COMMIT_CACHE }}
key: >-
@@ -211,16 +211,16 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
id: python
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: venv
key: >-
@@ -233,7 +233,7 @@ jobs:
exit 1
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: ${{ env.PRE_COMMIT_CACHE }}
key: >-
@@ -265,16 +265,16 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
id: python
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: venv
key: >-
@@ -287,7 +287,7 @@ jobs:
exit 1
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: ${{ env.PRE_COMMIT_CACHE }}
key: >-
@@ -322,16 +322,16 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
id: python
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: venv
key: >-
@@ -344,7 +344,7 @@ jobs:
exit 1
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: ${{ env.PRE_COMMIT_CACHE }}
key: >-
@@ -368,16 +368,16 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
id: python
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: venv
key: >-
@@ -390,7 +390,7 @@ jobs:
exit 1
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: ${{ env.PRE_COMMIT_CACHE }}
key: >-
@@ -495,10 +495,10 @@ jobs:
python-version: ${{ fromJSON(needs.info.outputs.python_versions) }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ matrix.python-version }}
check-latest: true
@@ -509,7 +509,7 @@ jobs:
env.HA_SHORT_VERSION }}-$(date -u '+%Y-%m-%dT%H:%M:%s')" >> $GITHUB_OUTPUT
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v3.2.2
uses: actions/cache@v3.2.3
with:
path: venv
key: >-
@@ -517,7 +517,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.2.2
uses: actions/cache@v3.2.3
with:
path: ${{ env.PIP_CACHE }}
key: >-
@@ -559,16 +559,16 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: venv
key: >-
@@ -592,16 +592,16 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: venv
key: >-
@@ -626,16 +626,16 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: venv
key: >-
@@ -671,16 +671,16 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: venv
key: >-
@@ -720,16 +720,16 @@ jobs:
name: Run pip check ${{ matrix.python-version }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: venv
key: >-
@@ -775,16 +775,16 @@ jobs:
bluez \
ffmpeg
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: venv
key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
@@ -852,7 +852,7 @@ jobs:
-p no:sugar \
tests/components/${{ matrix.group }}
- name: Upload coverage artifact
uses: actions/upload-artifact@v3.1.1
uses: actions/upload-artifact@v3.1.2
with:
name: coverage-${{ matrix.python-version }}-${{ matrix.group }}
path: coverage.xml
@@ -898,16 +898,16 @@ jobs:
ffmpeg \
libmariadb-dev-compat
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.2
uses: actions/cache/restore@v3.2.3
with:
path: venv
key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
@@ -954,7 +954,7 @@ jobs:
--dburl=mysql://root:password@127.0.0.1/homeassistant-test \
tests/components/recorder
- name: Upload coverage artifact
uses: actions/upload-artifact@v3.1.1
uses: actions/upload-artifact@v3.1.2
with:
name: coverage-${{ matrix.python-version }}-mariadb
path: coverage.xml
@@ -970,7 +970,7 @@ jobs:
- pytest
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Download all coverage artifacts
uses: actions/download-artifact@v3
- name: Upload coverage to Codecov (full coverage)

View File

@@ -11,34 +11,21 @@ jobs:
if: github.repository_owner == 'home-assistant'
runs-on: ubuntu-latest
steps:
# The 90 day stale policy
# The 90 day stale policy for PRs
# Used for:
# - Issues & PRs
# - PRs
# - No PRs marked as no-stale
# - No issues marked as no-stale or help-wanted
- name: 90 days stale issues & PRs policy
# - No issues (-1)
- name: 90 days stale PRs policy
uses: actions/stale@v7.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 90
days-before-close: 7
days-before-issue-stale: -1
days-before-issue-close: -1
operations-per-run: 150
remove-stale-when-updated: true
stale-issue-label: "stale"
exempt-issue-labels: "no-stale,help-wanted"
stale-issue-message: >
There hasn't been any activity on this issue recently. Due to the
high number of incoming GitHub notifications, we have to clean some
of the old issues, as many of them have already been resolved with
the latest updates.
Please make sure to update to the latest Home Assistant version and
check if that solves the issue. Let us know if that works for you by
adding a comment 👍
This issue has now been marked as stale and will be closed if no
further activity occurs. Thank you for your contributions.
stale-pr-label: "stale"
exempt-pr-labels: "no-stale"
stale-pr-message: >
@@ -48,30 +35,47 @@ jobs:
Thank you for your contributions.
# The 30 day stale policy for PRS
# Generate a token for the GitHub App, we use this method to avoid
# hitting API limits for our GitHub actions + have a higher rate limit.
# This is only used for issues.
- name: Generate app token
id: token
# Pinned to a specific version of the action for security reasons
# v1.7.0
uses: tibdex/github-app-token@021a2405c7f990db57f5eae5397423dcc554159c
with:
app_id: ${{ secrets.ISSUE_TRIAGE_APP_ID }}
private_key: ${{ secrets.ISSUE_TRIAGE_APP_PEM }}
# The 90 day stale policy for issues
# Used for:
# - PRs
# - No PRs marked as no-stale or new-integrations
# - No issues (-1)
- name: 30 days stale PRs policy
# - Issues
# - No issues marked as no-stale or help-wanted
# - No PRs (-1)
- name: 90 days stale issues
uses: actions/stale@v7.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 30
repo-token: ${{ steps.token.outputs.token }}
days-before-stale: 90
days-before-close: 7
days-before-issue-close: -1
operations-per-run: 50
days-before-pr-stale: -1
days-before-pr-close: -1
operations-per-run: 250
remove-stale-when-updated: true
stale-pr-label: "stale"
# Exempt new integrations, these often take more time.
# They will automatically be handled by the 90 day version above.
exempt-pr-labels: "no-stale,new-integration"
stale-pr-message: >
There hasn't been any activity on this pull request recently. This
pull request has been automatically marked as stale because of that
and will be closed if no further activity occurs within 7 days.
stale-issue-label: "stale"
exempt-issue-labels: "no-stale,help-wanted,needs-more-information"
stale-issue-message: >
There hasn't been any activity on this issue recently. Due to the
high number of incoming GitHub notifications, we have to clean some
of the old issues, as many of them have already been resolved with
the latest updates.
Thank you for your contributions.
Please make sure to update to the latest Home Assistant version and
check if that solves the issue. Let us know if that works for you by
adding a comment 👍
This issue has now been marked as stale and will be closed if no
further activity occurs. Thank you for your contributions.
# The 30 day stale policy for issues
# Used for:
@@ -81,12 +85,13 @@ jobs:
- name: Needs more information stale issues policy
uses: actions/stale@v7.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
repo-token: ${{ steps.token.outputs.token }}
only-labels: "needs-more-information"
days-before-stale: 14
days-before-close: 7
days-before-pr-stale: -1
days-before-pr-close: -1
operations-per-run: 50
operations-per-run: 250
remove-stale-when-updated: true
stale-issue-label: "stale"
exempt-issue-labels: "no-stale,help-wanted"

View File

@@ -21,10 +21,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
@@ -40,10 +40,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.4.0
uses: actions/setup-python@v4.5.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}

View File

@@ -22,7 +22,7 @@ jobs:
architectures: ${{ steps.info.outputs.architectures }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Get information
id: info
@@ -57,13 +57,13 @@ jobs:
) > .env_file
- name: Upload env_file
uses: actions/upload-artifact@v3.1.1
uses: actions/upload-artifact@v3.1.2
with:
name: env_file
path: ./.env_file
- name: Upload requirements_diff
uses: actions/upload-artifact@v3.1.1
uses: actions/upload-artifact@v3.1.2
with:
name: requirements_diff
path: ./requirements_diff.txt
@@ -79,7 +79,7 @@ jobs:
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Download env_file
uses: actions/download-artifact@v3
@@ -116,7 +116,7 @@ jobs:
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3.2.0
uses: actions/checkout@v3.3.0
- name: Download env_file
uses: actions/download-artifact@v3
@@ -144,6 +144,14 @@ jobs:
sed -i "s|# opencv-python-headless|opencv-python-headless|g" ${requirement_file}
done
- name: Split requirements all
run: |
# We split requirements all into two different files.
# This is to prevent the build from running out of memory when
# resolving packages on 32-bits systems (like armhf, armv7).
split -l $(expr $(expr $(cat requirements_all.txt | wc -l) + 1) / 2) requirements_all.txt requirements_all.txt
- name: Adjust build env
run: |
if [ "${{ matrix.arch }}" = "i386" ]; then
@@ -159,7 +167,7 @@ jobs:
# Do not pin numpy in wheels building
sed -i "/numpy/d" homeassistant/package_constraints.txt
- name: Build wheels
- name: Build wheels (part 1)
uses: home-assistant/wheels@2022.10.1
with:
abi: cp310
@@ -172,4 +180,19 @@ jobs:
legacy: true
constraints: "homeassistant/package_constraints.txt"
requirements-diff: "requirements_diff.txt"
requirements: "requirements_all.txt"
requirements: "requirements_all.txtaa"
- name: Build wheels (part 2)
uses: home-assistant/wheels@2022.10.1
with:
abi: cp310
tag: musllinux_1_2
arch: ${{ matrix.arch }}
wheels-key: ${{ secrets.WHEELS_KEY }}
env-file: true
apk: "libexecinfo-dev;bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev"
skip-binary: aiohttp;grpcio
legacy: true
constraints: "homeassistant/package_constraints.txt"
requirements-diff: "requirements_diff.txt"
requirements: "requirements_all.txtab"

View File

@@ -36,11 +36,11 @@ repos:
- pycodestyle==2.10.0
- pyflakes==3.0.1
- flake8-docstrings==1.6.0
- pydocstyle==6.1.1
- pydocstyle==6.2.3
- flake8-comprehensions==3.10.1
- flake8-noqa==1.3.0
- mccabe==0.7.0
files: ^(homeassistant|script|tests)/.+\.py$
exclude: docs/source/conf.py
- repo: https://github.com/PyCQA/bandit
rev: 1.7.4
hooks:

View File

@@ -58,6 +58,7 @@ homeassistant.components.amcrest.*
homeassistant.components.ampio.*
homeassistant.components.analytics.*
homeassistant.components.anthemav.*
homeassistant.components.apcupsd.*
homeassistant.components.aqualogic.*
homeassistant.components.aseko_pool_live.*
homeassistant.components.asuswrt.*
@@ -68,6 +69,7 @@ homeassistant.components.backup.*
homeassistant.components.baf.*
homeassistant.components.bayesian.*
homeassistant.components.binary_sensor.*
homeassistant.components.bitcoin.*
homeassistant.components.blockchain.*
homeassistant.components.bluetooth.*
homeassistant.components.bluetooth_tracker.*
@@ -176,6 +178,7 @@ homeassistant.components.lacrosse_view.*
homeassistant.components.lametric.*
homeassistant.components.laundrify.*
homeassistant.components.lcn.*
homeassistant.components.ld2410_ble.*
homeassistant.components.lidarr.*
homeassistant.components.lifx.*
homeassistant.components.light.*
@@ -246,6 +249,7 @@ homeassistant.components.rituals_perfume_genie.*
homeassistant.components.roku.*
homeassistant.components.rpi_power.*
homeassistant.components.rtsp_to_webrtc.*
homeassistant.components.ruuvi_gateway.*
homeassistant.components.ruuvitag_ble.*
homeassistant.components.samsungtv.*
homeassistant.components.scene.*
@@ -256,6 +260,7 @@ homeassistant.components.sensibo.*
homeassistant.components.sensirion_ble.*
homeassistant.components.sensor.*
homeassistant.components.senz.*
homeassistant.components.sfr_box.*
homeassistant.components.shelly.*
homeassistant.components.simplepush.*
homeassistant.components.simplisafe.*

View File

@@ -156,6 +156,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/bluesound/ @thrawnarn
/homeassistant/components/bluetooth/ @bdraco
/tests/components/bluetooth/ @bdraco
/homeassistant/components/bluetooth_adapters/ @bdraco
/tests/components/bluetooth_adapters/ @bdraco
/homeassistant/components/bmw_connected_drive/ @gerard33 @rikroe
/tests/components/bmw_connected_drive/ @gerard33 @rikroe
/homeassistant/components/bond/ @bdraco @prystupa @joshs85 @marciogranzotto
@@ -265,6 +267,8 @@ build.json @home-assistant/supervisor
/tests/components/discord/ @tkdrob
/homeassistant/components/discovery/ @home-assistant/core
/tests/components/discovery/ @home-assistant/core
/homeassistant/components/dlink/ @tkdrob
/tests/components/dlink/ @tkdrob
/homeassistant/components/dlna_dmr/ @StevenLooman @chishm
/tests/components/dlna_dmr/ @StevenLooman @chishm
/homeassistant/components/dlna_dms/ @chishm
@@ -313,6 +317,8 @@ build.json @home-assistant/supervisor
/tests/components/emulated_kasa/ @kbickar
/homeassistant/components/energy/ @home-assistant/core
/tests/components/energy/ @home-assistant/core
/homeassistant/components/energyzero/ @klaasnicolaas
/tests/components/energyzero/ @klaasnicolaas
/homeassistant/components/enigma2/ @fbradyirl
/homeassistant/components/enocean/ @bdurrer
/tests/components/enocean/ @bdurrer
@@ -331,6 +337,8 @@ build.json @home-assistant/supervisor
/tests/components/escea/ @lazdavila
/homeassistant/components/esphome/ @OttoWinter @jesserockz
/tests/components/esphome/ @OttoWinter @jesserockz
/homeassistant/components/eufylife_ble/ @bdr99
/tests/components/eufylife_ble/ @bdr99
/homeassistant/components/evil_genius_labs/ @balloob
/tests/components/evil_genius_labs/ @balloob
/homeassistant/components/evohome/ @zxdavb
@@ -433,6 +441,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/google_assistant_sdk/ @tronikos
/tests/components/google_assistant_sdk/ @tronikos
/homeassistant/components/google_cloud/ @lufton
/homeassistant/components/google_mail/ @tkdrob
/tests/components/google_mail/ @tkdrob
/homeassistant/components/google_sheets/ @tkdrob
/tests/components/google_sheets/ @tkdrob
/homeassistant/components/google_travel_time/ @eifinger
@@ -533,6 +543,8 @@ build.json @home-assistant/supervisor
/tests/components/image_processing/ @home-assistant/core
/homeassistant/components/image_upload/ @home-assistant/core
/tests/components/image_upload/ @home-assistant/core
/homeassistant/components/imap/ @engrbm87
/tests/components/imap/ @engrbm87
/homeassistant/components/incomfort/ @zxdavb
/homeassistant/components/influxdb/ @mdegat01
/tests/components/influxdb/ @mdegat01
@@ -599,6 +611,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/keyboard_remote/ @bendavid @lanrat
/homeassistant/components/keymitt_ble/ @spycle
/tests/components/keymitt_ble/ @spycle
/homeassistant/components/kitchen_sink/ @home-assistant/core
/tests/components/kitchen_sink/ @home-assistant/core
/homeassistant/components/kmtronic/ @dgomes
/tests/components/kmtronic/ @dgomes
/homeassistant/components/knx/ @Julius2342 @farmio @marvin-w
@@ -625,6 +639,8 @@ build.json @home-assistant/supervisor
/tests/components/laundrify/ @xLarry
/homeassistant/components/lcn/ @alengwenus
/tests/components/lcn/ @alengwenus
/homeassistant/components/ld2410_ble/ @930913
/tests/components/ld2410_ble/ @930913
/homeassistant/components/led_ble/ @bdraco
/tests/components/led_ble/ @bdraco
/homeassistant/components/lg_netcast/ @Drafteed
@@ -669,7 +685,6 @@ build.json @home-assistant/supervisor
/homeassistant/components/lyric/ @timmo001
/tests/components/lyric/ @timmo001
/homeassistant/components/mastodon/ @fabaff
/homeassistant/components/matrix/ @tinloaf
/homeassistant/components/matter/ @home-assistant/matter
/tests/components/matter/ @home-assistant/matter
/homeassistant/components/mazda/ @bdr99
@@ -840,9 +855,11 @@ build.json @home-assistant/supervisor
/tests/components/openweathermap/ @fabaff @freekode @nzapponi
/homeassistant/components/opnsense/ @mtreinish
/tests/components/opnsense/ @mtreinish
/homeassistant/components/oralb/ @bdraco
/tests/components/oralb/ @bdraco
/homeassistant/components/oralb/ @bdraco @conway20
/tests/components/oralb/ @bdraco @conway20
/homeassistant/components/oru/ @bvlaicu
/homeassistant/components/otbr/ @home-assistant/core
/tests/components/otbr/ @home-assistant/core
/homeassistant/components/overkiz/ @imicknl @vlebourl @tetienne @nyroDev
/tests/components/overkiz/ @imicknl @vlebourl @tetienne @nyroDev
/homeassistant/components/ovo_energy/ @timmo001
@@ -947,8 +964,8 @@ build.json @home-assistant/supervisor
/tests/components/remote/ @home-assistant/core
/homeassistant/components/renault/ @epenet
/tests/components/renault/ @epenet
/homeassistant/components/reolink/ @starkillerOG @JimStar
/tests/components/reolink/ @starkillerOG @JimStar
/homeassistant/components/reolink/ @starkillerOG
/tests/components/reolink/ @starkillerOG
/homeassistant/components/repairs/ @home-assistant/core
/tests/components/repairs/ @home-assistant/core
/homeassistant/components/repetier/ @MTrab @ShadowBr0ther
@@ -980,6 +997,8 @@ build.json @home-assistant/supervisor
/tests/components/rtsp_to_webrtc/ @allenporter
/homeassistant/components/ruckus_unleashed/ @gabe565
/tests/components/ruckus_unleashed/ @gabe565
/homeassistant/components/ruuvi_gateway/ @akx
/tests/components/ruuvi_gateway/ @akx
/homeassistant/components/ruuvitag_ble/ @akx
/tests/components/ruuvitag_ble/ @akx
/homeassistant/components/sabnzbd/ @shaiu
@@ -1026,6 +1045,8 @@ build.json @home-assistant/supervisor
/tests/components/senz/ @milanmeu
/homeassistant/components/serial/ @fabaff
/homeassistant/components/seven_segments/ @fabaff
/homeassistant/components/sfr_box/ @epenet
/tests/components/sfr_box/ @epenet
/homeassistant/components/sharkiq/ @JeffResc @funkybunch @AritroSaha10
/tests/components/sharkiq/ @JeffResc @funkybunch @AritroSaha10
/homeassistant/components/shell_command/ @home-assistant/core
@@ -1107,6 +1128,8 @@ build.json @home-assistant/supervisor
/tests/components/srp_energy/ @briglx
/homeassistant/components/starline/ @anonym-tsk
/tests/components/starline/ @anonym-tsk
/homeassistant/components/starlink/ @boswelja
/tests/components/starlink/ @boswelja
/homeassistant/components/statistics/ @fabaff @ThomDietrich
/tests/components/statistics/ @fabaff @ThomDietrich
/homeassistant/components/steam_online/ @tkdrob
@@ -1293,14 +1316,14 @@ build.json @home-assistant/supervisor
/tests/components/weather/ @home-assistant/core
/homeassistant/components/webhook/ @home-assistant/core
/tests/components/webhook/ @home-assistant/core
/homeassistant/components/webostv/ @bendavid @thecode
/tests/components/webostv/ @bendavid @thecode
/homeassistant/components/webostv/ @thecode
/tests/components/webostv/ @thecode
/homeassistant/components/websocket_api/ @home-assistant/core
/tests/components/websocket_api/ @home-assistant/core
/homeassistant/components/wemo/ @esev
/tests/components/wemo/ @esev
/homeassistant/components/whirlpool/ @abmantis
/tests/components/whirlpool/ @abmantis
/homeassistant/components/whirlpool/ @abmantis @mkmer
/tests/components/whirlpool/ @abmantis @mkmer
/homeassistant/components/whois/ @frenck
/tests/components/whois/ @frenck
/homeassistant/components/wiffi/ @mampfes
@@ -1356,6 +1379,8 @@ build.json @home-assistant/supervisor
/tests/components/zeroconf/ @bdraco
/homeassistant/components/zerproc/ @emlove
/tests/components/zerproc/ @emlove
/homeassistant/components/zeversolar/ @kvanzuijlen
/tests/components/zeversolar/ @kvanzuijlen
/homeassistant/components/zha/ @dmulcahey @adminiuga @puddly
/tests/components/zha/ @dmulcahey @adminiuga @puddly
/homeassistant/components/zodiac/ @JulienTant
@@ -1365,8 +1390,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/zoneminder/ @rohankapoorcom
/homeassistant/components/zwave_js/ @home-assistant/z-wave
/tests/components/zwave_js/ @home-assistant/z-wave
/homeassistant/components/zwave_me/ @lawfulchaos @Z-Wave-Me
/tests/components/zwave_me/ @lawfulchaos @Z-Wave-Me
/homeassistant/components/zwave_me/ @lawfulchaos @Z-Wave-Me @PoltoS
/tests/components/zwave_me/ @lawfulchaos @Z-Wave-Me @PoltoS
# Individual files
/homeassistant/components/demo/weather.py @fabaff

View File

@@ -11,22 +11,51 @@ WORKDIR /usr/src
COPY requirements.txt homeassistant/
COPY homeassistant/package_constraints.txt homeassistant/homeassistant/
RUN \
pip3 install --no-cache-dir --no-index --only-binary=:all: --find-links "${WHEELS_LINKS}" \
-r homeassistant/requirements.txt --use-deprecated=legacy-resolver
COPY requirements_all.txt home_assistant_frontend-* homeassistant/
pip3 install \
--no-cache-dir \
--no-index \
--only-binary=:all: \
--find-links "${WHEELS_LINKS}" \
--use-deprecated=legacy-resolver \
-r homeassistant/requirements.txt
COPY requirements_all.txt home_assistant_frontend-* home_assistant_intents-* homeassistant/
RUN \
if ls homeassistant/home_assistant_frontend*.whl 1> /dev/null 2>&1; then \
pip3 install --no-cache-dir --no-index homeassistant/home_assistant_frontend-*.whl; \
pip3 install \
--no-cache-dir \
--no-index \
homeassistant/home_assistant_frontend-*.whl; \
fi \
&& pip3 install --no-cache-dir --no-index --only-binary=:all: --find-links "${WHEELS_LINKS}" \
-r homeassistant/requirements_all.txt --use-deprecated=legacy-resolver
&& if ls homeassistant/home_assistant_intents*.whl 1> /dev/null 2>&1; then \
pip3 install \
--no-cache-dir \
--no-index \
homeassistant/home_assistant_intents-*.whl; \
fi \
&& \
LD_PRELOAD="/usr/local/lib/libjemalloc.so.2" \
MALLOC_CONF="background_thread:true,metadata_thp:auto,dirty_decay_ms:20000,muzzy_decay_ms:20000" \
pip3 install \
--no-cache-dir \
--no-index \
--only-binary=:all: \
--find-links "${WHEELS_LINKS}" \
--use-deprecated=legacy-resolver \
-r homeassistant/requirements_all.txt
## Setup Home Assistant Core
COPY . homeassistant/
RUN \
pip3 install --no-cache-dir --no-index --only-binary=:all: --find-links "${WHEELS_LINKS}" \
-e ./homeassistant --use-deprecated=legacy-resolver \
&& python3 -m compileall homeassistant/homeassistant
pip3 install \
--no-cache-dir \
--no-index \
--only-binary=:all: \
--find-links "${WHEELS_LINKS}" \
--use-deprecated=legacy-resolver \
-e ./homeassistant \
&& python3 -m compileall \
homeassistant/homeassistant
# Home Assistant S6-Overlay
COPY rootfs /

View File

@@ -1,6 +1,5 @@
"""
Sphinx extension to add ReadTheDocs-style "Edit on GitHub" links to the
sidebar.
Sphinx extension for ReadTheDocs-style "Edit on GitHub" links on the sidebar.
Loosely based on https://github.com/astropy/astropy/pull/347
"""
@@ -12,6 +11,7 @@ __licence__ = "BSD (3 clause)"
def get_github_url(app, view, path):
"""Build the GitHub URL."""
return (
f"https://github.com/{app.config.edit_on_github_project}/"
f"{view}/{app.config.edit_on_github_branch}/"
@@ -20,6 +20,7 @@ def get_github_url(app, view, path):
def html_page_context(app, pagename, templatename, context, doctree):
"""Build the HTML page."""
if templatename != "page.html":
return
@@ -38,6 +39,7 @@ def html_page_context(app, pagename, templatename, context, doctree):
def setup(app):
"""Set up the app."""
app.add_config_value("edit_on_github_project", "", True)
app.add_config_value("edit_on_github_branch", "master", True)
app.add_config_value("edit_on_github_src_path", "", True) # 'eg' "docs/"

View File

@@ -25,7 +25,7 @@ from homeassistant.const import __short_version__, __version__
PROJECT_NAME = "Home Assistant"
PROJECT_PACKAGE_NAME = "homeassistant"
PROJECT_AUTHOR = "The Home Assistant Authors"
PROJECT_COPYRIGHT = f" 2013-2020, {PROJECT_AUTHOR}"
PROJECT_COPYRIGHT = PROJECT_AUTHOR
PROJECT_LONG_DESCRIPTION = (
"Home Assistant is an open-source "
"home automation platform running on Python 3. "

View File

@@ -15,7 +15,10 @@ FAULT_LOG_FILENAME = "home-assistant.log.fault"
def validate_os() -> None:
"""Validate that Home Assistant is running in a supported operating system."""
if not sys.platform.startswith(("darwin", "linux")):
print("Home Assistant only supports Linux, OSX and Windows using WSL")
print(
"Home Assistant only supports Linux, OSX and Windows using WSL",
file=sys.stderr,
)
sys.exit(1)
@@ -24,7 +27,8 @@ def validate_python() -> None:
if sys.version_info[:3] < REQUIRED_PYTHON_VER:
print(
"Home Assistant requires at least Python "
f"{REQUIRED_PYTHON_VER[0]}.{REQUIRED_PYTHON_VER[1]}.{REQUIRED_PYTHON_VER[2]}"
f"{REQUIRED_PYTHON_VER[0]}.{REQUIRED_PYTHON_VER[1]}.{REQUIRED_PYTHON_VER[2]}",
file=sys.stderr,
)
sys.exit(1)
@@ -39,18 +43,23 @@ def ensure_config_path(config_dir: str) -> None:
# Test if configuration directory exists
if not os.path.isdir(config_dir):
if config_dir != config_util.get_default_config_dir():
if os.path.exists(config_dir):
reason = "is not a directory"
else:
reason = "does not exist"
print(
f"Fatal Error: Specified configuration directory {config_dir} "
"does not exist"
f"Fatal Error: Specified configuration directory {config_dir} {reason}",
file=sys.stderr,
)
sys.exit(1)
try:
os.mkdir(config_dir)
except OSError:
except OSError as ex:
print(
"Fatal Error: Unable to create default configuration "
f"directory {config_dir}"
f"directory {config_dir}: {ex}",
file=sys.stderr,
)
sys.exit(1)
@@ -58,8 +67,11 @@ def ensure_config_path(config_dir: str) -> None:
if not os.path.isdir(lib_dir):
try:
os.mkdir(lib_dir)
except OSError:
print(f"Fatal Error: Unable to create library directory {lib_dir}")
except OSError as ex:
print(
f"Fatal Error: Unable to create library directory {lib_dir}: {ex}",
file=sys.stderr,
)
sys.exit(1)

View File

@@ -555,7 +555,9 @@ class AuthStore:
"client_icon": refresh_token.client_icon,
"token_type": refresh_token.token_type,
"created_at": refresh_token.created_at.isoformat(),
"access_token_expiration": refresh_token.access_token_expiration.total_seconds(),
"access_token_expiration": (
refresh_token.access_token_expiration.total_seconds()
),
"token": refresh_token.token,
"jwt_key": refresh_token.jwt_key,
"last_used_at": refresh_token.last_used_at.isoformat()

View File

@@ -8,7 +8,9 @@ from .util.async_ import protect_loop
def enable() -> None:
"""Enable the detection of blocking calls in the event loop."""
# Prevent urllib3 and requests doing I/O in event loop
HTTPConnection.putrequest = protect_loop(HTTPConnection.putrequest) # type: ignore[assignment]
HTTPConnection.putrequest = protect_loop( # type: ignore[assignment]
HTTPConnection.putrequest
)
# Prevent sleeping in event loop. Non-strict since 2022.02
time.sleep = protect_loop(time.sleep, strict=False)

View File

@@ -385,7 +385,11 @@ def async_enable_logging(
)
threading.excepthook = lambda args: logging.getLogger(None).exception(
"Uncaught thread exception",
exc_info=(args.exc_type, args.exc_value, args.exc_traceback), # type: ignore[arg-type]
exc_info=( # type: ignore[arg-type]
args.exc_type,
args.exc_value,
args.exc_traceback,
),
)
# Log errors to a file if we have write access to file or config dir
@@ -403,7 +407,10 @@ def async_enable_logging(
not err_path_exists and os.access(err_dir, os.W_OK)
):
err_handler: logging.handlers.RotatingFileHandler | logging.handlers.TimedRotatingFileHandler
err_handler: (
logging.handlers.RotatingFileHandler
| logging.handlers.TimedRotatingFileHandler
)
if log_rotate_days:
err_handler = logging.handlers.TimedRotatingFileHandler(
err_log_path, when="midnight", backupCount=log_rotate_days
@@ -462,7 +469,10 @@ def _get_domains(hass: core.HomeAssistant, config: dict[str, Any]) -> set[str]:
async def _async_watch_pending_setups(hass: core.HomeAssistant) -> None:
"""Periodic log of setups that are pending for longer than LOG_SLOW_STARTUP_INTERVAL."""
"""Periodic log of setups that are pending.
Pending for longer than LOG_SLOW_STARTUP_INTERVAL.
"""
loop_count = 0
setup_started: dict[str, datetime] = hass.data[DATA_SETUP_STARTED]
previous_was_empty = True

View File

@@ -1,5 +1,5 @@
{
"domain": "amazon",
"name": "Amazon",
"integrations": ["alexa", "amazon_polly", "aws", "route53"]
"integrations": ["alexa", "amazon_polly", "aws", "fire_tv", "route53"]
}

View File

@@ -0,0 +1,6 @@
{
"domain": "eufy",
"name": "eufy",
"integrations": ["eufy", "eufylife_ble"],
"iot_standards": []
}

View File

@@ -6,6 +6,7 @@
"google_assistant_sdk",
"google_cloud",
"google_domains",
"google_mail",
"google_maps",
"google_pubsub",
"google_sheets",

View File

@@ -0,0 +1,12 @@
{
"config": {
"step": {
"user": {
"data": {
"password": "Slapta\u017eodis",
"username": "El. pa\u0161tas"
}
}
}
}
}

View File

@@ -1,6 +1,8 @@
"""Diagnostics support for AccuWeather."""
from __future__ import annotations
from typing import Any
from homeassistant.components.diagnostics import async_redact_data
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE
@@ -14,7 +16,7 @@ TO_REDACT = {CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE}
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, config_entry: ConfigEntry
) -> dict:
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
coordinator: AccuWeatherDataUpdateCoordinator = hass.data[DOMAIN][
config_entry.entry_id

View File

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

View File

@@ -22,6 +22,27 @@
}
}
},
"entity": {
"sensor": {
"pressure_tendency": {
"state": {
"falling": "D\u00fc\u015f\u00fcyor",
"rising": "Y\u00fckseliyor",
"steady": "Sabit"
}
}
}
},
"options": {
"step": {
"init": {
"data": {
"forecast": "Hava Durumu tahmini"
},
"description": "AccuWeather API anahtar\u0131n\u0131n \u00fccretsiz s\u00fcr\u00fcm\u00fcn\u00fcn s\u0131n\u0131rlamalar\u0131 nedeniyle, hava tahminini etkinle\u015ftirdi\u011finizde, veri g\u00fcncellemeleri her 40 dakikada bir yerine 80 dakikada bir ger\u00e7ekle\u015ftirilir."
}
}
},
"system_health": {
"info": {
"can_reach_server": "AccuWeather sunucusuna ula\u015f\u0131n",

View File

@@ -0,0 +1,15 @@
{
"config": {
"abort": {
"invalid_auth": "\u041d\u0435\u0434\u0456\u0439\u0441\u043d\u0430 \u0430\u0432\u0442\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u044f"
},
"step": {
"cloud": {
"data": {
"account_id": "ID \u041e\u0431\u043b\u0456\u043a\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0443",
"password": "\u041f\u0430\u0440\u043e\u043b\u044c"
}
}
}
}
}

View File

@@ -58,7 +58,12 @@ class AdGuardHomeEntity(Entity):
return DeviceInfo(
entry_type=DeviceEntryType.SERVICE,
identifiers={
(DOMAIN, self.adguard.host, self.adguard.port, self.adguard.base_path) # type: ignore[arg-type]
( # type: ignore[arg-type]
DOMAIN,
self.adguard.host,
self.adguard.port,
self.adguard.base_path,
)
},
manufacturer="AdGuard Team",
name="AdGuard Home",

View File

@@ -3,7 +3,7 @@
"name": "AdGuard Home",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/adguard",
"requirements": ["adguardhome==0.5.1"],
"requirements": ["adguardhome==0.6.1"],
"codeowners": ["@frenck"],
"iot_class": "local_polling",
"integration_type": "service",

View File

@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"password": "Slapta\u017eodis"
}
}
}
}
}

View File

@@ -14,7 +14,7 @@
"longitude": "\u0393\u03b5\u03c9\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc \u03bc\u03ae\u03ba\u03bf\u03c2",
"name": "\u038c\u03bd\u03bf\u03bc\u03b1 \u03c4\u03b7\u03c2 \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7\u03c2"
},
"description": "\u03a1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 AEMET OpenData. \u0393\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03ba\u03bb\u03b5\u03b9\u03b4\u03af API \u03bc\u03b5\u03c4\u03b1\u03b2\u03b5\u03af\u03c4\u03b5 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 https://opendata.aemet.es/centrodedescargas/altaUsuario"
"description": "\u0393\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03ba\u03bb\u03b5\u03b9\u03b4\u03af API, \u03bc\u03b5\u03c4\u03b1\u03b2\u03b5\u03af\u03c4\u03b5 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 https://opendata.aemet.es/centrodedescargas/altaUsuario"
}
}
},

View File

@@ -150,7 +150,9 @@ class AirlyDataUpdateCoordinator(DataUpdateCoordinator):
"""Initialize."""
self.latitude = latitude
self.longitude = longitude
self.airly = Airly(api_key, session)
# Currently, Airly only supports Polish and English
language = "pl" if hass.config.language == "pl" else "en"
self.airly = Airly(api_key, session, language=language)
self.use_nearest = use_nearest
super().__init__(hass, _LOGGER, name=DOMAIN, update_interval=update_interval)

View File

@@ -46,7 +46,7 @@ class AirlyFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
user_input["longitude"],
)
if not location_point_valid:
await test_location(
location_nearest_valid = await test_location(
websession,
user_input["api_key"],
user_input["latitude"],
@@ -60,6 +60,8 @@ class AirlyFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
errors["base"] = "wrong_location"
else:
if not location_point_valid:
if not location_nearest_valid:
return self.async_abort(reason="wrong_location")
use_nearest = True
return self.async_create_entry(
title=user_input[CONF_NAME],

View File

@@ -1,6 +1,8 @@
"""Diagnostics support for Airly."""
from __future__ import annotations
from typing import Any
from homeassistant.components.diagnostics import async_redact_data
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
@@ -19,7 +21,7 @@ TO_REDACT = {CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE, CONF_UNIQUE_ID}
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, config_entry: ConfigEntry
) -> dict:
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
coordinator: AirlyDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]

View File

@@ -16,7 +16,8 @@
"invalid_api_key": "[%key:common::config_flow::error::invalid_api_key%]"
},
"abort": {
"already_configured": "[%key:common::config_flow::abort::already_configured_location%]"
"already_configured": "[%key:common::config_flow::abort::already_configured_location%]",
"wrong_location": "No Airly measuring stations in this area."
}
},
"system_health": {

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "La ubicaci\u00f3 ja est\u00e0 configurada"
"already_configured": "La ubicaci\u00f3 ja est\u00e0 configurada",
"wrong_location": "No hi ha estacions de mesura Airly en aquesta zona."
},
"error": {
"invalid_api_key": "Clau API inv\u00e0lida",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "Standort ist bereits konfiguriert"
"already_configured": "Standort ist bereits konfiguriert",
"wrong_location": "Keine Airly Luftmessstation an diesem Ort"
},
"error": {
"invalid_api_key": "Ung\u00fcltiger API-Schl\u00fcssel",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "\u0397 \u03c4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7 \u03b4\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03b8\u03b5\u03af"
"already_configured": "\u0397 \u03c4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7 \u03b4\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03b8\u03b5\u03af",
"wrong_location": "\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03bd \u03c3\u03c4\u03b1\u03b8\u03bc\u03bf\u03af \u03bc\u03ad\u03c4\u03c1\u03b7\u03c3\u03b7\u03c2 Airly \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7\u03bd \u03c0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae."
},
"error": {
"invalid_api_key": "\u0386\u03ba\u03c5\u03c1\u03bf API \u03ba\u03bb\u03b5\u03b9\u03b4\u03af",
@@ -15,7 +16,7 @@
"longitude": "\u0393\u03b5\u03c9\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc \u03bc\u03ae\u03ba\u03bf\u03c2",
"name": "\u038c\u03bd\u03bf\u03bc\u03b1"
},
"description": "\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 \u03c0\u03bf\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03b1\u03ad\u03c1\u03b1 Airly. \u0393\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03ba\u03bb\u03b5\u03b9\u03b4\u03af API, \u03bc\u03b5\u03c4\u03b1\u03b2\u03b5\u03af\u03c4\u03b5 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 https://developer.airly.eu/register"
"description": "\u0393\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03ba\u03bb\u03b5\u03b9\u03b4\u03af API, \u03bc\u03b5\u03c4\u03b1\u03b2\u03b5\u03af\u03c4\u03b5 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 https://developer.airly.eu/register"
}
}
},

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "Location is already configured"
"already_configured": "Location is already configured",
"wrong_location": "No Airly measuring stations in this area."
},
"error": {
"invalid_api_key": "Invalid API key",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "La ubicaci\u00f3n ya est\u00e1 configurada"
"already_configured": "La ubicaci\u00f3n ya est\u00e1 configurada",
"wrong_location": "No hay estaciones de medici\u00f3n Airly en esta \u00e1rea."
},
"error": {
"invalid_api_key": "Clave API no v\u00e1lida",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "Asukoht on juba m\u00e4\u00e4ratud"
"already_configured": "Asukoht on juba m\u00e4\u00e4ratud",
"wrong_location": "Selles piirkonnas pole Airly m\u00f5\u00f5tejaamu."
},
"error": {
"invalid_api_key": "Vigane API v\u00f5ti",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "A hely m\u00e1r konfigur\u00e1lva van"
"already_configured": "A hely m\u00e1r konfigur\u00e1lva van",
"wrong_location": "Ezen a ter\u00fcleten nincs Airly m\u00e9r\u0151\u00e1llom\u00e1s."
},
"error": {
"invalid_api_key": "\u00c9rv\u00e9nytelen API kulcs",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "Lokasi sudah dikonfigurasi"
"already_configured": "Lokasi sudah dikonfigurasi",
"wrong_location": "Tidak ada stasiun pengukur Airly di daerah ini."
},
"error": {
"invalid_api_key": "Kunci API tidak valid",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "La posizione \u00e8 gi\u00e0 configurata"
"already_configured": "La posizione \u00e8 gi\u00e0 configurata",
"wrong_location": "Nessuna stazione di misurazione Airly in quest'area."
},
"error": {
"invalid_api_key": "Chiave API non valida",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "Locatie is al geconfigureerd"
"already_configured": "Locatie is al geconfigureerd",
"wrong_location": "Geen Airly meetstations in deze ruimte."
},
"error": {
"invalid_api_key": "Ongeldige API-sleutel",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "Plasseringen er allerede konfigurert"
"already_configured": "Plasseringen er allerede konfigurert",
"wrong_location": "Ingen Airly m\u00e5lestasjoner i dette omr\u00e5det."
},
"error": {
"invalid_api_key": "Ugyldig API-n\u00f8kkel",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "Lokalizacja jest ju\u017c skonfigurowana"
"already_configured": "Lokalizacja jest ju\u017c skonfigurowana",
"wrong_location": "Brak stacji pomiarowych Airly w tym rejonie"
},
"error": {
"invalid_api_key": "Nieprawid\u0142owy klucz API",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "Localiza\u00e7\u00e3o j\u00e1 est\u00e1 configurada"
"already_configured": "Localiza\u00e7\u00e3o j\u00e1 est\u00e1 configurada",
"wrong_location": "Nenhuma esta\u00e7\u00e3o de medi\u00e7\u00e3o Airly nesta \u00e1rea."
},
"error": {
"invalid_api_key": "Chave de API inv\u00e1lida",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430."
"already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430.",
"wrong_location": "\u0412 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0435\u0442 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0430\u043d\u0446\u0438\u0439 Airly."
},
"error": {
"invalid_api_key": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API.",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "Umiestnenie u\u017e je nakonfigurovan\u00e9"
"already_configured": "Umiestnenie u\u017e je nakonfigurovan\u00e9",
"wrong_location": "V tejto oblasti nie s\u00fa \u017eiadne meracie stanice Airly."
},
"error": {
"invalid_api_key": "Neplatn\u00fd API k\u013e\u00fa\u010d",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "Konum zaten yap\u0131land\u0131r\u0131lm\u0131\u015f"
"already_configured": "Konum zaten yap\u0131land\u0131r\u0131lm\u0131\u015f",
"wrong_location": "Bu b\u00f6lgede Airly \u00f6l\u00e7\u00fcm istasyonu yok."
},
"error": {
"invalid_api_key": "Ge\u00e7ersiz API anahtar\u0131",

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "\u5ea7\u6a19\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210"
"already_configured": "\u5ea7\u6a19\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210",
"wrong_location": "\u8a72\u5340\u57df\u6c92\u6709 Arily \u76e3\u6e2c\u7ad9\u3002"
},
"error": {
"invalid_api_key": "API \u91d1\u9470\u7121\u6548",

View File

@@ -17,7 +17,7 @@
"longitude": "\u0393\u03b5\u03c9\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc \u03bc\u03ae\u03ba\u03bf\u03c2",
"radius": "\u0391\u03ba\u03c4\u03af\u03bd\u03b1 \u03c3\u03c4\u03b1\u03b8\u03bc\u03bf\u03cd (\u03bc\u03af\u03bb\u03b9\u03b1, \u03c0\u03c1\u03bf\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc)"
},
"description": "\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5 AirNow \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03c0\u03bf\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1 \u03c4\u03bf\u03c5 \u03b1\u03ad\u03c1\u03b1. \u0393\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03ba\u03bb\u03b5\u03b9\u03b4\u03af API \u03bc\u03b5\u03c4\u03b1\u03b2\u03b5\u03af\u03c4\u03b5 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 https://docs.airnowapi.org/account/request/"
"description": "\u0393\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03ba\u03bb\u03b5\u03b9\u03b4\u03af API, \u03bc\u03b5\u03c4\u03b1\u03b2\u03b5\u03af\u03c4\u03b5 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 https://docs.airnowapi.org/account/request/"
}
}
}

View File

@@ -0,0 +1,22 @@
{
"config": {
"abort": {
"already_configured": "Cihaz zaten yap\u0131land\u0131r\u0131lm\u0131\u015f"
},
"error": {
"cannot_connect": "Ba\u011flanma hatas\u0131",
"invalid_auth": "Ge\u00e7ersiz kimlik do\u011frulama",
"invalid_input": "Ge\u00e7ersiz ana bilgisayar ad\u0131 veya IP adresi"
},
"step": {
"user": {
"data": {
"ip_address": "IP Adresi",
"password": "Parola"
},
"description": "Cihaz\u0131n IP adresini veya mDNS'sini ve \u015fifresini sa\u011flay\u0131n",
"title": "Cihaz\u0131 tan\u0131mlay\u0131n"
}
}
}
}

View File

@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"password": "\u041f\u0430\u0440\u043e\u043b\u044c"
}
}
}
}
}

View File

@@ -4,7 +4,7 @@
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/airthings_ble",
"requirements": ["airthings-ble==0.5.3"],
"dependencies": ["bluetooth"],
"dependencies": ["bluetooth_adapters"],
"codeowners": ["@vincegio"],
"iot_class": "local_polling",
"bluetooth": [

View File

@@ -154,7 +154,7 @@ class AirthingsSensor(
def __init__(
self,
coordinator: DataUpdateCoordinator,
coordinator: DataUpdateCoordinator[AirthingsDevice],
airthings_device: AirthingsDevice,
entity_description: SensorEntityDescription,
) -> None:

View File

@@ -0,0 +1,7 @@
{
"config": {
"abort": {
"unknown": "Neo\u010dek\u00e1van\u00e1 chyba"
}
}
}

View File

@@ -10,13 +10,13 @@
"flow_title": "{name}",
"step": {
"bluetooth_confirm": {
"description": "{name} kurulumunu yapmak istiyor musunuz?"
"description": "{name} 'i kurmak istiyor musunuz?"
},
"user": {
"data": {
"address": "Cihaz"
},
"description": "Kurulum i\u00e7in bir cihaz se\u00e7in"
"description": "Kurmak i\u00e7in bir cihaz se\u00e7in"
}
}
}

View File

@@ -12,7 +12,7 @@
"data": {
"host": "\u039a\u03b5\u03bd\u03c4\u03c1\u03b9\u03ba\u03cc\u03c2 \u03c5\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03c4\u03ae\u03c2"
},
"title": "\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03c4\u03b5 \u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 {intergration}."
"title": "\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03c4\u03b5 \u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2 AirTouch 4."
}
}
}

View File

@@ -32,6 +32,7 @@ from homeassistant.helpers import (
aiohttp_client,
config_validation as cv,
device_registry as dr,
entity_registry as er,
)
from homeassistant.helpers.entity import EntityDescription
from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
@@ -60,7 +61,6 @@ DOMAIN_AIRVISUAL_PRO = "airvisual_pro"
PLATFORMS = [Platform.SENSOR]
DEFAULT_ATTRIBUTION = "Data provided by AirVisual"
DEFAULT_NODE_PRO_UPDATE_INTERVAL = timedelta(minutes=1)
CONFIG_SCHEMA = cv.removed(DOMAIN, raise_if_present=False)
@@ -117,36 +117,6 @@ def async_get_geography_id(geography_dict: Mapping[str, Any]) -> str:
)
@callback
def async_get_pro_config_entry_by_ip_address(
hass: HomeAssistant, ip_address: str
) -> ConfigEntry:
"""Get the Pro config entry related to an IP address."""
[config_entry] = [
entry
for entry in hass.config_entries.async_entries(DOMAIN_AIRVISUAL_PRO)
if entry.data[CONF_IP_ADDRESS] == ip_address
]
return config_entry
@callback
def async_get_pro_device_by_config_entry(
hass: HomeAssistant, config_entry: ConfigEntry
) -> dr.DeviceEntry:
"""Get the Pro device entry related to a config entry.
Note that a Pro config entry can only contain a single device.
"""
device_registry = dr.async_get(hass)
[device_entry] = [
device_entry
for device_entry in device_registry.devices.values()
if config_entry.entry_id in device_entry.config_entries
]
return device_entry
@callback
def async_sync_geo_coordinator_update_intervals(
hass: HomeAssistant, api_key: str
@@ -207,6 +177,11 @@ def _standardize_geography_config_entry(
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up AirVisual as config entry."""
if CONF_API_KEY not in entry.data:
# If this is a migrated AirVisual Pro entry, there's no actual setup to do;
# that will be handled by the `airvisual_pro` domain:
return False
_standardize_geography_config_entry(hass, entry)
websession = aiohttp_client.async_get_clientsession(hass)
@@ -301,14 +276,31 @@ async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
version = 3
if entry.data[CONF_INTEGRATION_TYPE] == INTEGRATION_TYPE_NODE_PRO:
device_registry = dr.async_get(hass)
entity_registry = er.async_get(hass)
ip_address = entry.data[CONF_IP_ADDRESS]
# Get the existing Pro device entry before it is removed by the migration:
old_device_entry = async_get_pro_device_by_config_entry(hass, entry)
# Store the existing Pro device before the migration removes it:
old_device_entry = next(
entry
for entry in dr.async_entries_for_config_entry(
device_registry, entry.entry_id
)
)
# Store the existing Pro entity entries (mapped by unique ID) before the
# migration removes it:
old_entity_entries: dict[str, er.RegistryEntry] = {
entry.unique_id: entry
for entry in er.async_entries_for_device(
entity_registry, old_device_entry.id, include_disabled_entities=True
)
}
# Remove this config entry and create a new one under the `airvisual_pro`
# domain:
new_entry_data = {**entry.data}
new_entry_data.pop(CONF_INTEGRATION_TYPE)
tasks = [
hass.config_entries.async_remove(entry.entry_id),
hass.config_entries.flow.async_init(
@@ -319,18 +311,52 @@ async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
]
await asyncio.gather(*tasks)
# After the migration has occurred, grab the new config and device entries
# (now under the `airvisual_pro` domain):
new_config_entry = next(
entry
for entry in hass.config_entries.async_entries(DOMAIN_AIRVISUAL_PRO)
if entry.data[CONF_IP_ADDRESS] == ip_address
)
new_device_entry = next(
entry
for entry in dr.async_entries_for_config_entry(
device_registry, new_config_entry.entry_id
)
)
# Update the new device entry with any customizations from the old one:
device_registry.async_update_device(
new_device_entry.id,
area_id=old_device_entry.area_id,
disabled_by=old_device_entry.disabled_by,
name_by_user=old_device_entry.name_by_user,
)
# Update the new entity entries with any customizations from the old ones:
for new_entity_entry in er.async_entries_for_device(
entity_registry, new_device_entry.id, include_disabled_entities=True
):
if old_entity_entry := old_entity_entries.get(
new_entity_entry.unique_id
):
entity_registry.async_update_entity(
new_entity_entry.entity_id,
area_id=old_entity_entry.area_id,
device_class=old_entity_entry.device_class,
disabled_by=old_entity_entry.disabled_by,
hidden_by=old_entity_entry.hidden_by,
icon=old_entity_entry.icon,
name=old_entity_entry.name,
new_entity_id=old_entity_entry.entity_id,
unit_of_measurement=old_entity_entry.unit_of_measurement,
)
# If any automations are using the old device ID, create a Repairs issues
# with instructions on how to update it:
if device_automations := automation.automations_with_device(
hass, old_device_entry.id
):
new_config_entry = async_get_pro_config_entry_by_ip_address(
hass, ip_address
)
new_device_entry = async_get_pro_device_by_config_entry(
hass, new_config_entry
)
async_create_issue(
hass,
DOMAIN,

View File

@@ -132,15 +132,14 @@ class AirVisualFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
LOGGER.error(err)
errors["base"] = "unknown"
if errors:
return self.async_show_form(
step_id=error_step, data_schema=error_schema, errors=errors
)
valid_keys.add(user_input[CONF_API_KEY])
if errors:
return self.async_show_form(
step_id=error_step, data_schema=error_schema, errors=errors
)
existing_entry = await self.async_set_unique_id(self._geo_id)
if existing_entry:
if existing_entry := await self.async_set_unique_id(self._geo_id):
self.hass.config_entries.async_update_entry(existing_entry, data=user_input)
self.hass.async_create_task(
self.hass.config_entries.async_reload(existing_entry.entry_id)

View File

@@ -19,11 +19,8 @@ from homeassistant.const import (
CONF_LONGITUDE,
CONF_SHOW_ON_MAP,
CONF_STATE,
PERCENTAGE,
UnitOfTemperature,
)
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
@@ -37,17 +34,8 @@ ATTR_POLLUTANT_UNIT = "pollutant_unit"
ATTR_REGION = "region"
SENSOR_KIND_AQI = "air_quality_index"
SENSOR_KIND_BATTERY_LEVEL = "battery_level"
SENSOR_KIND_CO2 = "carbon_dioxide"
SENSOR_KIND_HUMIDITY = "humidity"
SENSOR_KIND_LEVEL = "air_pollution_level"
SENSOR_KIND_PM_0_1 = "particulate_matter_0_1"
SENSOR_KIND_PM_1_0 = "particulate_matter_1_0"
SENSOR_KIND_PM_2_5 = "particulate_matter_2_5"
SENSOR_KIND_POLLUTANT = "main_pollutant"
SENSOR_KIND_SENSOR_LIFE = "sensor_life"
SENSOR_KIND_TEMPERATURE = "temperature"
SENSOR_KIND_VOC = "voc"
GEOGRAPHY_SENSOR_DESCRIPTIONS = (
SensorEntityDescription(
@@ -69,7 +57,6 @@ GEOGRAPHY_SENSOR_DESCRIPTIONS = (
key=SENSOR_KIND_AQI,
name="Air quality index",
device_class=SensorDeviceClass.AQI,
native_unit_of_measurement="AQI",
state_class=SensorStateClass.MEASUREMENT,
),
SensorEntityDescription(
@@ -83,70 +70,6 @@ GEOGRAPHY_SENSOR_DESCRIPTIONS = (
)
GEOGRAPHY_SENSOR_LOCALES = {"cn": "Chinese", "us": "U.S."}
NODE_PRO_SENSOR_DESCRIPTIONS = (
SensorEntityDescription(
key=SENSOR_KIND_AQI,
name="Air quality index",
device_class=SensorDeviceClass.AQI,
native_unit_of_measurement="AQI",
state_class=SensorStateClass.MEASUREMENT,
),
SensorEntityDescription(
key=SENSOR_KIND_BATTERY_LEVEL,
name="Battery",
device_class=SensorDeviceClass.BATTERY,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=PERCENTAGE,
),
SensorEntityDescription(
key=SENSOR_KIND_CO2,
name="C02",
device_class=SensorDeviceClass.CO2,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
state_class=SensorStateClass.MEASUREMENT,
),
SensorEntityDescription(
key=SENSOR_KIND_HUMIDITY,
name="Humidity",
device_class=SensorDeviceClass.HUMIDITY,
native_unit_of_measurement=PERCENTAGE,
),
SensorEntityDescription(
key=SENSOR_KIND_PM_0_1,
name="PM 0.1",
device_class=SensorDeviceClass.PM1,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
),
SensorEntityDescription(
key=SENSOR_KIND_PM_1_0,
name="PM 1.0",
device_class=SensorDeviceClass.PM10,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
),
SensorEntityDescription(
key=SENSOR_KIND_PM_2_5,
name="PM 2.5",
device_class=SensorDeviceClass.PM25,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
),
SensorEntityDescription(
key=SENSOR_KIND_TEMPERATURE,
name="Temperature",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
),
SensorEntityDescription(
key=SENSOR_KIND_VOC,
name="VOC",
device_class=SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
state_class=SensorStateClass.MEASUREMENT,
),
)
STATE_POLLUTANT_LABEL_CO = "co"
STATE_POLLUTANT_LABEL_N2 = "n2"

View File

@@ -1,7 +1,7 @@
{
"config": {
"abort": {
"already_configured": "\u0397 \u03c4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7 \u03b4\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03b8\u03b5\u03af \u03ae \u03c4\u03bf Node/Pro ID \u03b5\u03af\u03bd\u03b1\u03b9 \u03ae\u03b4\u03b7 \u03ba\u03b1\u03c4\u03b1\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf.",
"already_configured": "\u0397 \u03c4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7 \u03b4\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03b8\u03b5\u03af",
"reauth_successful": "\u039f \u03b5\u03ba \u03bd\u03ad\u03bf\u03c5 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 \u03ae\u03c4\u03b1\u03bd \u03b5\u03c0\u03b9\u03c4\u03c5\u03c7\u03ae\u03c2"
},
"error": {

View File

@@ -0,0 +1,11 @@
{
"config": {
"step": {
"node_pro": {
"data": {
"password": "Slapta\u017eodis"
}
}
}
}
}

View File

@@ -50,6 +50,17 @@
}
}
},
"entity": {
"sensor": {
"pollutant_level": {
"state": {
"good": "Goed",
"hazardous": "Gevaarlijk",
"unhealthy": "Ongezond"
}
}
}
},
"options": {
"step": {
"init": {

View File

@@ -1,7 +1,7 @@
{
"config": {
"abort": {
"already_configured": "Konum zaten yap\u0131land\u0131r\u0131lm\u0131\u015f veya Node/Pro Kimli\u011fi zaten kay\u0131tl\u0131.",
"already_configured": "Konum zaten yap\u0131land\u0131r\u0131lm\u0131\u015f",
"reauth_successful": "Yeniden kimlik do\u011frulama ba\u015far\u0131l\u0131 oldu"
},
"error": {
@@ -50,6 +50,36 @@
}
}
},
"entity": {
"sensor": {
"pollutant_label": {
"state": {
"co": "Karbonmonoksit",
"n2": "Nitrojen dioksit",
"o3": "Ozon",
"p1": "PM10",
"p2": "PM2.5",
"s2": "K\u00fck\u00fcrt dioksit"
}
},
"pollutant_level": {
"state": {
"good": "\u0130yi",
"hazardous": "Tehlikeli",
"moderate": "Il\u0131ml\u0131",
"unhealthy": "Sa\u011fl\u0131ks\u0131z",
"unhealthy_sensitive": "Hassas gruplar i\u00e7in sa\u011fl\u0131ks\u0131z",
"very_unhealthy": "\u00c7ok sa\u011fl\u0131ks\u0131z"
}
}
}
},
"issues": {
"airvisual_pro_migration": {
"description": "AirVisual Pro birimleri art\u0131k kendi Ev Asistan\u0131 entegrasyonudur (AirVisual bulut API'sini kullanan orijinal AirVisual entegrasyonuna dahil edilmek yerine). ` {ip_address} ` konumunda bulunan Pro cihaz\u0131 otomatik olarak ta\u015f\u0131nd\u0131. \n\n Bu ge\u00e7i\u015fin bir par\u00e7as\u0131 olarak, Uzman\u0131n \" {old_device_id}\" olan cihaz kimli\u011fi \" {old_device_id} {new_device_id} olarak de\u011fi\u015fti. L\u00fctfen bu otomasyonlar\u0131 yeni cihaz kimli\u011fini kullanacak \u015fekilde g\u00fcncelleyin: {device_automations_string} .",
"title": "{ip_address} art\u0131k AirVisual Pro entegrasyonunun bir par\u00e7as\u0131"
}
},
"options": {
"step": {
"init": {

View File

@@ -21,7 +21,7 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_STOP,
Platform,
)
from homeassistant.core import Event, HomeAssistant, callback
from homeassistant.core import Event, HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
from homeassistant.helpers.entity import DeviceInfo, EntityDescription
from homeassistant.helpers.update_coordinator import (
@@ -136,19 +136,3 @@ class AirVisualProEntity(CoordinatorEntity):
hw_version=self.coordinator.data["status"]["system_version"],
sw_version=self.coordinator.data["status"]["app_version"],
)
@callback
def _async_update_from_latest_data(self) -> None:
"""Update the entity's underlying data."""
raise NotImplementedError
@callback
def _handle_coordinator_update(self) -> None:
"""Respond to a DataUpdateCoordinator update."""
self._async_update_from_latest_data()
self.async_write_ha_state()
async def async_added_to_hass(self) -> None:
"""Handle entity which will be added."""
await super().async_added_to_hass()
self._async_update_from_latest_data()

View File

@@ -2,6 +2,7 @@
from __future__ import annotations
from collections.abc import Mapping
from dataclasses import dataclass, field
from typing import Any
from pyairvisual.node import (
@@ -33,13 +34,24 @@ STEP_USER_SCHEMA = vol.Schema(
)
async def async_validate_credentials(ip_address: str, password: str) -> dict[str, Any]:
"""Validate an IP address/password combo (and return any errors as appropriate)."""
@dataclass
class ValidationResult:
"""Define a validation result."""
serial_number: str | None = None
errors: dict[str, Any] = field(default_factory=dict)
async def async_validate_credentials(
ip_address: str, password: str
) -> ValidationResult:
"""Validate an IP address/password combo."""
node = NodeSamba(ip_address, password)
errors = {}
try:
await node.async_connect()
measurements = await node.async_get_latest_measurements()
except InvalidAuthenticationError as err:
LOGGER.error("Invalid password for Pro at IP address %s: %s", ip_address, err)
errors["base"] = "invalid_auth"
@@ -52,10 +64,12 @@ async def async_validate_credentials(ip_address: str, password: str) -> dict[str
except Exception as err: # pylint: disable=broad-except
LOGGER.exception("Unknown error while connecting to %s: %s", ip_address, err)
errors["base"] = "unknown"
else:
return ValidationResult(serial_number=measurements["serial_number"])
finally:
await node.async_disconnect()
return errors
return ValidationResult(errors=errors)
class AirVisualProFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
@@ -89,11 +103,15 @@ class AirVisualProFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
assert self._reauth_entry
if errors := await async_validate_credentials(
validation_result = await async_validate_credentials(
self._reauth_entry.data[CONF_IP_ADDRESS], user_input[CONF_PASSWORD]
):
)
if validation_result.errors:
return self.async_show_form(
step_id="reauth_confirm", data_schema=STEP_REAUTH_SCHEMA, errors=errors
step_id="reauth_confirm",
data_schema=STEP_REAUTH_SCHEMA,
errors=validation_result.errors,
)
self.hass.config_entries.async_update_entry(
@@ -113,14 +131,18 @@ class AirVisualProFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
ip_address = user_input[CONF_IP_ADDRESS]
await self.async_set_unique_id(ip_address)
self._abort_if_unique_id_configured()
if errors := await async_validate_credentials(
validation_result = await async_validate_credentials(
ip_address, user_input[CONF_PASSWORD]
):
)
if validation_result.errors:
return self.async_show_form(
step_id="user", data_schema=STEP_USER_SCHEMA, errors=errors
step_id="user",
data_schema=STEP_USER_SCHEMA,
errors=validation_result.errors,
)
await self.async_set_unique_id(validation_result.serial_number)
self._abort_if_unique_id_configured()
return self.async_create_entry(title=ip_address, data=user_input)

View File

@@ -1,6 +1,8 @@
"""Support for AirVisual Pro sensors."""
from __future__ import annotations
from collections.abc import Callable
from dataclasses import dataclass
from typing import Any
from homeassistant.components.sensor import (
@@ -23,79 +25,93 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import AirVisualProData, AirVisualProEntity
from .const import DOMAIN
SENSOR_KIND_AQI = "air_quality_index"
SENSOR_KIND_BATTERY_LEVEL = "battery_level"
SENSOR_KIND_CO2 = "carbon_dioxide"
SENSOR_KIND_HUMIDITY = "humidity"
SENSOR_KIND_PM_0_1 = "particulate_matter_0_1"
SENSOR_KIND_PM_1_0 = "particulate_matter_1_0"
SENSOR_KIND_PM_2_5 = "particulate_matter_2_5"
SENSOR_KIND_SENSOR_LIFE = "sensor_life"
SENSOR_KIND_TEMPERATURE = "temperature"
SENSOR_KIND_VOC = "voc"
@dataclass
class AirVisualProMeasurementKeyMixin:
"""Define an entity description mixin to include a measurement key."""
value_fn: Callable[[dict[str, Any], dict[str, Any], dict[str, Any]], float | int]
@dataclass
class AirVisualProMeasurementDescription(
SensorEntityDescription, AirVisualProMeasurementKeyMixin
):
"""Describe an AirVisual Pro sensor."""
SENSOR_DESCRIPTIONS = (
SensorEntityDescription(
key=SENSOR_KIND_AQI,
AirVisualProMeasurementDescription(
key="air_quality_index",
name="Air quality index",
device_class=SensorDeviceClass.AQI,
native_unit_of_measurement="AQI",
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda settings, status, measurements: measurements[
async_get_aqi_locale(settings)
],
),
SensorEntityDescription(
key=SENSOR_KIND_BATTERY_LEVEL,
AirVisualProMeasurementDescription(
key="battery_level",
name="Battery",
device_class=SensorDeviceClass.BATTERY,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda settings, status, measurements: status["battery"],
),
SensorEntityDescription(
key=SENSOR_KIND_CO2,
AirVisualProMeasurementDescription(
key="carbon_dioxide",
name="C02",
device_class=SensorDeviceClass.CO2,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda settings, status, measurements: measurements["co2"],
),
SensorEntityDescription(
key=SENSOR_KIND_HUMIDITY,
AirVisualProMeasurementDescription(
key="humidity",
name="Humidity",
device_class=SensorDeviceClass.HUMIDITY,
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda settings, status, measurements: measurements["humidity"],
),
SensorEntityDescription(
key=SENSOR_KIND_PM_0_1,
AirVisualProMeasurementDescription(
key="particulate_matter_0_1",
name="PM 0.1",
device_class=SensorDeviceClass.PM1,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda settings, status, measurements: measurements["pm0_1"],
),
SensorEntityDescription(
key=SENSOR_KIND_PM_1_0,
AirVisualProMeasurementDescription(
key="particulate_matter_1_0",
name="PM 1.0",
device_class=SensorDeviceClass.PM10,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda settings, status, measurements: measurements["pm1_0"],
),
SensorEntityDescription(
key=SENSOR_KIND_PM_2_5,
AirVisualProMeasurementDescription(
key="particulate_matter_2_5",
name="PM 2.5",
device_class=SensorDeviceClass.PM25,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda settings, status, measurements: measurements["pm2_5"],
),
SensorEntityDescription(
key=SENSOR_KIND_TEMPERATURE,
AirVisualProMeasurementDescription(
key="temperature",
name="Temperature",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda settings, status, measurements: measurements["temperature_C"],
),
SensorEntityDescription(
key=SENSOR_KIND_VOC,
AirVisualProMeasurementDescription(
key="voc",
name="VOC",
device_class=SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda settings, status, measurements: measurements["voc"],
),
)
@@ -125,40 +141,13 @@ class AirVisualProSensor(AirVisualProEntity, SensorEntity):
_attr_has_entity_name = True
MEASUREMENTS_KEY_TO_VALUE = {
SENSOR_KIND_CO2: "co2",
SENSOR_KIND_HUMIDITY: "humidity",
SENSOR_KIND_PM_0_1: "pm0_1",
SENSOR_KIND_PM_1_0: "pm1_0",
SENSOR_KIND_PM_2_5: "pm2_5",
SENSOR_KIND_TEMPERATURE: "temperature_C",
SENSOR_KIND_VOC: "voc",
}
entity_description: AirVisualProMeasurementDescription
@property
def measurements(self) -> dict[str, Any]:
"""Define measurements data."""
return self.coordinator.data["measurements"]
@property
def settings(self) -> dict[str, Any]:
"""Define settings data."""
return self.coordinator.data["settings"]
@property
def status(self) -> dict[str, Any]:
"""Define status data."""
return self.coordinator.data["status"]
@callback
def _async_update_from_latest_data(self) -> None:
"""Update the entity from the latest data."""
if self.entity_description.key == SENSOR_KIND_AQI:
locale = async_get_aqi_locale(self.settings)
self._attr_native_value = self.measurements[locale]
elif self.entity_description.key == SENSOR_KIND_BATTERY_LEVEL:
self._attr_native_value = self.status["battery"]
else:
self._attr_native_value = self.MEASUREMENTS_KEY_TO_VALUE[
self.entity_description.key
]
def native_value(self) -> float | int:
"""Return the sensor value."""
return self.entity_description.value_fn(
self.coordinator.data["settings"],
self.coordinator.data["status"],
self.coordinator.data["measurements"],
)

View File

@@ -0,0 +1,7 @@
{
"config": {
"error": {
"unknown": "Neo\u010dek\u00e1van\u00e1 chyba"
}
}
}

View File

@@ -0,0 +1,26 @@
{
"config": {
"abort": {
"already_configured": "Apparaat is al geconfigureerd",
"reauth_successful": "Herauthenticatie geslaagd"
},
"error": {
"cannot_connect": "Kan geen verbinding maken",
"invalid_auth": "Ongeldige authenticatie",
"unknown": "Onverwachte fout"
},
"step": {
"reauth_confirm": {
"data": {
"password": "Wachtwoord"
}
},
"user": {
"data": {
"ip_address": "Host",
"password": "Wachtwoord"
}
}
}
}
}

View File

@@ -1,11 +1,11 @@
{
"config": {
"abort": {
"already_configured": "O dispositivo j\u00e1 est\u00e1 configurado",
"already_configured": "Dispositivo j\u00e1 est\u00e1 configurado",
"reauth_successful": "A reautentica\u00e7\u00e3o foi bem-sucedida"
},
"error": {
"cannot_connect": "Falhou ao conectar",
"cannot_connect": "Falha ao conectar",
"invalid_auth": "Autentica\u00e7\u00e3o inv\u00e1lida",
"unknown": "Erro inesperado"
},
@@ -18,7 +18,7 @@
},
"user": {
"data": {
"ip_address": "Host",
"ip_address": "Nome do host",
"password": "Senha"
},
"description": "A senha pode ser recuperada da IU do AirVisual Pro."

View File

@@ -0,0 +1,28 @@
{
"config": {
"abort": {
"already_configured": "Cihaz zaten yap\u0131land\u0131r\u0131lm\u0131\u015f",
"reauth_successful": "Yeniden kimlik do\u011frulama ba\u015far\u0131l\u0131 oldu"
},
"error": {
"cannot_connect": "Ba\u011flanma hatas\u0131",
"invalid_auth": "Ge\u00e7ersiz kimlik do\u011frulama",
"unknown": "Beklenmeyen hata"
},
"step": {
"reauth_confirm": {
"data": {
"password": "Parola"
},
"description": "Parola, AirVisual Pro'nun kullan\u0131c\u0131 aray\u00fcz\u00fcnden al\u0131nabilir."
},
"user": {
"data": {
"ip_address": "Sunucu",
"password": "Parola"
},
"description": "Parola, AirVisual Pro'nun kullan\u0131c\u0131 aray\u00fcz\u00fcnden al\u0131nabilir."
}
}
}
}

View File

@@ -0,0 +1,19 @@
{
"config": {
"error": {
"invalid_auth": "\u041d\u0435\u0434\u0456\u0439\u0441\u043d\u0430 \u0430\u0432\u0442\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u044f"
},
"step": {
"reauth_confirm": {
"data": {
"password": "\u041f\u0430\u0440\u043e\u043b\u044c"
}
},
"user": {
"data": {
"password": "\u041f\u0430\u0440\u043e\u043b\u044c"
}
}
}
}
}

View File

@@ -19,7 +19,12 @@ from homeassistant.helpers import (
from .const import DOMAIN
from .coordinator import AirzoneUpdateCoordinator
PLATFORMS: list[Platform] = [Platform.BINARY_SENSOR, Platform.CLIMATE, Platform.SENSOR]
PLATFORMS: list[Platform] = [
Platform.BINARY_SENSOR,
Platform.CLIMATE,
Platform.SELECT,
Platform.SENSOR,
]
_LOGGER = logging.getLogger(__name__)
@@ -40,7 +45,7 @@ async def _async_migrate_unique_ids(
entity_unique_id = entity_entry.unique_id
if entity_unique_id.startswith(entry_id):
new_unique_id = f"{unique_id}{entity_unique_id[len(entry_id):]}"
new_unique_id = f"{unique_id}{entity_unique_id.removeprefix(entry_id)}"
_LOGGER.debug(
"Migrating unique_id from [%s] to [%s]",
entity_unique_id,

View File

@@ -1,7 +1,6 @@
"""Support for the Airzone climate."""
from __future__ import annotations
import logging
from typing import Any, Final
from aioairzone.common import OperationMode
@@ -9,8 +8,6 @@ from aioairzone.const import (
API_MODE,
API_ON,
API_SET_POINT,
API_SYSTEM_ID,
API_ZONE_ID,
AZD_DEMAND,
AZD_HUMIDITY,
AZD_MASTER,
@@ -25,7 +22,6 @@ from aioairzone.const import (
AZD_TEMP_UNIT,
AZD_ZONES,
)
from aioairzone.exceptions import AirzoneError
from homeassistant.components.climate import (
ClimateEntity,
@@ -43,9 +39,6 @@ from .const import API_TEMPERATURE_STEP, DOMAIN, TEMP_UNIT_LIB_TO_HASS
from .coordinator import AirzoneUpdateCoordinator
from .entity import AirzoneZoneEntity
_LOGGER = logging.getLogger(__name__)
HVAC_ACTION_LIB_TO_HASS: Final[dict[OperationMode, HVACAction]] = {
OperationMode.STOP: HVACAction.OFF,
OperationMode.COOLING: HVACAction.COOLING,
@@ -114,23 +107,6 @@ class AirzoneClimate(AirzoneZoneEntity, ClimateEntity):
]
self._async_update_attrs()
async def _async_update_hvac_params(self, params: dict[str, Any]) -> None:
"""Send HVAC parameters to API."""
_params = {
API_SYSTEM_ID: self.system_id,
API_ZONE_ID: self.zone_id,
**params,
}
_LOGGER.debug("update_hvac_params=%s", _params)
try:
await self.coordinator.airzone.set_hvac_parameters(_params)
except AirzoneError as error:
raise HomeAssistantError(
f"Failed to set zone {self.name}: {error}"
) from error
else:
self.coordinator.async_set_updated_data(self.coordinator.airzone.data())
async def async_turn_on(self) -> None:
"""Turn the entity on."""
params = {

View File

@@ -1,9 +1,12 @@
"""Entity classes for the Airzone integration."""
from __future__ import annotations
import logging
from typing import Any
from aioairzone.const import (
API_SYSTEM_ID,
API_ZONE_ID,
AZD_FIRMWARE,
AZD_FULL_NAME,
AZD_ID,
@@ -17,8 +20,10 @@ from aioairzone.const import (
AZD_WEBSERVER,
AZD_ZONES,
)
from aioairzone.exceptions import AirzoneError
from homeassistant.config_entries import ConfigEntry
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -26,6 +31,8 @@ from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import DOMAIN, MANUFACTURER
from .coordinator import AirzoneUpdateCoordinator
_LOGGER = logging.getLogger(__name__)
class AirzoneEntity(CoordinatorEntity[AirzoneUpdateCoordinator]):
"""Define an Airzone entity."""
@@ -130,3 +137,20 @@ class AirzoneZoneEntity(AirzoneEntity):
if key in zone:
value = zone[key]
return value
async def _async_update_hvac_params(self, params: dict[str, Any]) -> None:
"""Send HVAC parameters to API."""
_params = {
API_SYSTEM_ID: self.system_id,
API_ZONE_ID: self.zone_id,
**params,
}
_LOGGER.debug("update_hvac_params=%s", _params)
try:
await self.coordinator.airzone.set_hvac_parameters(_params)
except AirzoneError as error:
raise HomeAssistantError(
f"Failed to set zone {self.name}: {error}"
) from error
else:
self.coordinator.async_set_updated_data(self.coordinator.airzone.data())

View File

@@ -0,0 +1,160 @@
"""Support for the Airzone sensors."""
from __future__ import annotations
from dataclasses import dataclass, replace
from typing import Any, Final
from aioairzone.common import GrilleAngle, SleepTimeout
from aioairzone.const import (
API_COLD_ANGLE,
API_HEAT_ANGLE,
API_SLEEP,
AZD_COLD_ANGLE,
AZD_HEAT_ANGLE,
AZD_NAME,
AZD_SLEEP,
AZD_ZONES,
)
from homeassistant.components.select import SelectEntity, SelectEntityDescription
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from .coordinator import AirzoneUpdateCoordinator
from .entity import AirzoneEntity, AirzoneZoneEntity
@dataclass
class AirzoneSelectDescriptionMixin:
"""Define an entity description mixin for select entities."""
api_param: str
options_dict: dict[str, int]
@dataclass
class AirzoneSelectDescription(SelectEntityDescription, AirzoneSelectDescriptionMixin):
"""Class to describe an Airzone select entity."""
GRILLE_ANGLE_DICT: Final[dict[str, int]] = {
"90º": GrilleAngle.DEG_90,
"50º": GrilleAngle.DEG_50,
"45º": GrilleAngle.DEG_45,
"40º": GrilleAngle.DEG_40,
}
SLEEP_DICT: Final[dict[str, int]] = {
"Off": SleepTimeout.SLEEP_OFF,
"30m": SleepTimeout.SLEEP_30,
"60m": SleepTimeout.SLEEP_60,
"90m": SleepTimeout.SLEEP_90,
}
ZONE_SELECT_TYPES: Final[tuple[AirzoneSelectDescription, ...]] = (
AirzoneSelectDescription(
api_param=API_COLD_ANGLE,
entity_category=EntityCategory.CONFIG,
key=AZD_COLD_ANGLE,
name="Cold Angle",
options_dict=GRILLE_ANGLE_DICT,
),
AirzoneSelectDescription(
api_param=API_HEAT_ANGLE,
entity_category=EntityCategory.CONFIG,
key=AZD_HEAT_ANGLE,
name="Heat Angle",
options_dict=GRILLE_ANGLE_DICT,
),
AirzoneSelectDescription(
api_param=API_SLEEP,
entity_category=EntityCategory.CONFIG,
key=AZD_SLEEP,
name="Sleep",
options_dict=SLEEP_DICT,
),
)
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
"""Add Airzone sensors from a config_entry."""
coordinator = hass.data[DOMAIN][entry.entry_id]
entities: list[AirzoneBaseSelect] = []
for system_zone_id, zone_data in coordinator.data[AZD_ZONES].items():
for description in ZONE_SELECT_TYPES:
if description.key in zone_data:
_desc = replace(
description,
options=list(description.options_dict.keys()),
)
entities.append(
AirzoneZoneSelect(
coordinator,
_desc,
entry,
system_zone_id,
zone_data,
)
)
async_add_entities(entities)
class AirzoneBaseSelect(AirzoneEntity, SelectEntity):
"""Define an Airzone select."""
entity_description: AirzoneSelectDescription
values_dict: dict[int, str]
@callback
def _handle_coordinator_update(self) -> None:
"""Update attributes when the coordinator updates."""
self._async_update_attrs()
super()._handle_coordinator_update()
def _get_current_option(self) -> str | None:
value = self.get_airzone_value(self.entity_description.key)
return self.values_dict.get(value)
@callback
def _async_update_attrs(self) -> None:
"""Update select attributes."""
self._attr_current_option = self._get_current_option()
class AirzoneZoneSelect(AirzoneZoneEntity, AirzoneBaseSelect):
"""Define an Airzone Zone select."""
def __init__(
self,
coordinator: AirzoneUpdateCoordinator,
description: AirzoneSelectDescription,
entry: ConfigEntry,
system_zone_id: str,
zone_data: dict[str, Any],
) -> None:
"""Initialize."""
super().__init__(coordinator, entry, system_zone_id, zone_data)
self._attr_name = f"{zone_data[AZD_NAME]} {description.name}"
self._attr_unique_id = (
f"{self._attr_unique_id}_{system_zone_id}_{description.key}"
)
self.entity_description = description
self.values_dict = {v: k for k, v in description.options_dict.items()}
self._async_update_attrs()
async def async_select_option(self, option: str) -> None:
"""Change the selected option."""
param = self.entity_description.api_param
value = self.entity_description.options_dict[option]
await self._async_update_hvac_params({param: value})

View File

@@ -10,6 +10,7 @@
"step": {
"discovered_connection": {
"data": {
"host": "Host",
"id": "Systeem ID",
"port": "Poort"
}

View File

@@ -8,9 +8,17 @@
"invalid_system_id": "Ge\u00e7ersiz Airzone Sistem Kimli\u011fi"
},
"step": {
"discovered_connection": {
"data": {
"host": "Sunucu",
"id": "Sistem ID",
"port": "Port"
}
},
"user": {
"data": {
"host": "Sunucu",
"id": "Sistem ID",
"port": "Port"
}
}

View File

@@ -4,8 +4,8 @@ import logging
from typing import Final
from AIOAladdinConnect import AladdinConnectClient
from AIOAladdinConnect.session_manager import InvalidPasswordError
from aiohttp import ClientConnectionError
import AIOAladdinConnect.session_manager as Aladdin
from aiohttp import ClientError
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, Platform
@@ -29,9 +29,9 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
)
try:
await acc.login()
except (ClientConnectionError, asyncio.TimeoutError) as ex:
except (ClientError, asyncio.TimeoutError, Aladdin.ConnectionError) as ex:
raise ConfigEntryNotReady("Can not connect to host") from ex
except InvalidPasswordError as ex:
except Aladdin.InvalidPasswordError as ex:
raise ConfigEntryAuthFailed("Incorrect Password") from ex
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = acc

View File

@@ -7,8 +7,8 @@ import logging
from typing import Any
from AIOAladdinConnect import AladdinConnectClient
from AIOAladdinConnect.session_manager import InvalidPasswordError
from aiohttp.client_exceptions import ClientConnectionError
import AIOAladdinConnect.session_manager as Aladdin
from aiohttp.client_exceptions import ClientError
import voluptuous as vol
from homeassistant import config_entries
@@ -45,10 +45,10 @@ async def validate_input(hass: HomeAssistant, data: dict[str, Any]) -> None:
)
try:
await acc.login()
except (ClientConnectionError, asyncio.TimeoutError) as ex:
except (ClientError, asyncio.TimeoutError, Aladdin.ConnectionError) as ex:
raise ex
except InvalidPasswordError as ex:
except Aladdin.InvalidPasswordError as ex:
raise InvalidAuth from ex
@@ -84,7 +84,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
except InvalidAuth:
errors["base"] = "invalid_auth"
except (ClientConnectionError, asyncio.TimeoutError):
except (ClientError, asyncio.TimeoutError, Aladdin.ConnectionError):
errors["base"] = "cannot_connect"
else:
@@ -121,7 +121,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
except InvalidAuth:
errors["base"] = "invalid_auth"
except (ClientConnectionError, asyncio.TimeoutError):
except (ClientError, asyncio.TimeoutError, Aladdin.ConnectionError):
errors["base"] = "cannot_connect"
else:

View File

@@ -91,31 +91,27 @@ class AladdinDevice(CoverEntity):
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
@property
def device_info(self) -> DeviceInfo | None:
"""Device information for Aladdin Connect cover."""
return DeviceInfo(
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, f"{self._device_id}-{self._number}")},
name=self._name,
manufacturer="Overhead Door",
model=self._model,
)
self._attr_has_entity_name = True
self._attr_unique_id = f"{self._device_id}-{self._number}"
async def async_added_to_hass(self) -> None:
"""Connect Aladdin Connect to the cloud."""
async def update_callback() -> None:
"""Schedule a state update."""
self.async_write_ha_state()
self._acc.register_callback(update_callback, self._serial, self._number)
self._acc.register_callback(
self.async_write_ha_state, self._serial, self._number
)
await self._acc.get_doors(self._serial)
async def async_will_remove_from_hass(self) -> None:
"""Close Aladdin Connect before removing."""
self._acc.unregister_callback(self._serial, self._number)
await self._acc.close()
async def async_close_cover(self, **kwargs: Any) -> 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.48"],
"requirements": ["AIOAladdinConnect==0.1.52"],
"codeowners": ["@mkmer"],
"iot_class": "cloud_polling",
"loggers": ["aladdin_connect"],

View File

@@ -0,0 +1,17 @@
{
"config": {
"step": {
"reauth_confirm": {
"data": {
"password": "\u041f\u0430\u0440\u043e\u043b\u044c"
}
},
"user": {
"data": {
"password": "\u041f\u0430\u0440\u043e\u043b\u044c",
"username": "\u0406\u043c'\u044f \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430"
}
}
}
}
}

View File

@@ -1,13 +1,44 @@
{
"device_automation": {
"action_type": {
"arm_away": "U\u017erakinti {entity_name}",
"arm_home": "U\u017erakinti {entity_name} - Namie",
"arm_night": "U\u017erakinti {entity_name} - Naktin\u0117 apsauga",
"arm_vacation": "U\u017erakinti {entity_name} atostog\u0173 re\u017eime",
"disarm": "I\u0161jungti {entity_name}",
"trigger": "Suaktyvinti {entity_name}"
},
"condition_type": {
"is_armed_away": "{entity_name} yra u\u017erakinta",
"is_armed_home": "{entity_name} yra u\u017erakinta nam\u0173 re\u017eime",
"is_armed_night": "{entity_name} u\u017erakinta naktin\u0117 apsauga",
"is_armed_vacation": "{entity_name} u\u017erakinta atostog\u0173 re\u017eime",
"is_disarmed": "{entity_name} i\u0161jungta",
"is_triggered": "{entity_name} suveik\u0117"
},
"trigger_type": {
"armed_away": "{entity_name} u\u017erakinta",
"armed_home": "{entity_name} u\u017erakinta - Namie",
"armed_night": "{entity_name} u\u017erakinta - Naktin\u0117 apsauga",
"armed_vacation": "{entity_name} u\u017erakinta - atostog\u0173 re\u017eime",
"disarmed": "{entity_name} i\u0161jungta",
"triggered": "{entity_name} suveik\u0117"
}
},
"state": {
"_": {
"armed": "U\u017erakinta",
"armed_home": "Nam\u0173 apsauga \u012fjungta",
"arming": "Saugojimo re\u017eimo \u012fjungimas",
"armed_away": "U\u017erakinta",
"armed_custom_bypass": "U\u017erakinta su ap\u0117jimu",
"armed_home": "\u012ejungta - Namie",
"armed_night": "Naktin\u0117 apsauga",
"armed_vacation": "U\u017erakinta - atostog\u0173 re\u017eime",
"arming": "U\u017erakinama",
"disarmed": "Atrakinta",
"disarming": "Saugojimo re\u017eimo i\u0161jungimas",
"pending": "Laukiama",
"triggered": "Aktyvinta"
}
}
},
"title": "Signalizacijos valdymo pultas"
}

View File

@@ -0,0 +1,7 @@
{
"config": {
"abort": {
"already_configured": "\u012erenginys jau sukonfig\u016bruotas"
}
}
}

View File

@@ -0,0 +1,7 @@
{
"state": {
"_": {
"idle": "Laukiama"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"state": {
"_": {
"idle": "Bo\u015fta",
"off": "Onayland\u0131",
"on": "Etkin"
}
},
"title": "Uyar\u0131"
}

View File

@@ -0,0 +1,7 @@
{
"state": {
"_": {
"idle": "\u0411\u0435\u0437\u0434\u0456\u044f\u043b\u044c\u043d\u0456\u0441\u0442\u044c"
}
}
}

View File

@@ -0,0 +1,9 @@
{
"config": {
"step": {
"auth": {
"description": "Pra\u0161ome sekti \u0161ia [nuoroda]({authorization_url}) ir **leisti** prieig\u0105 prie savo \"Ambiclimate\" paskyros, tada gr\u012f\u017ekite ir paspauskite **Pateikti** toliau.\n(\u012esitikinkite, kad nurodytas gr\u012f\u017etamojo ry\u0161io URL yra {cb_url})"
}
}
}
}

View File

@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u0406\u043c'\u044f \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430"
}
}
}
}
}

View File

@@ -0,0 +1 @@
"""Virtual integration: ANWB Energie."""

View File

@@ -0,0 +1,6 @@
{
"domain": "anwb_energie",
"name": "ANWB Energie",
"integration_type": "virtual",
"supported_by": "energyzero"
}

View File

@@ -62,7 +62,7 @@ class APCUPSdData:
"""Initialize the data object."""
self._host = host
self._port = port
self.status: dict[str, Any] = {}
self.status: dict[str, str] = {}
@property
def name(self) -> str | None:
@@ -100,7 +100,7 @@ class APCUPSdData:
return self.status.get("STATFLAG")
@Throttle(MIN_TIME_BETWEEN_UPDATES)
def update(self, **kwargs):
def update(self, **kwargs: Any) -> None:
"""Fetch the latest status from APCUPSd.
Note that the result dict uses upper case for each resource, where our

View File

@@ -65,8 +65,15 @@ class OnlineStatus(BinarySensorEntity):
def update(self) -> None:
"""Get the status report from APCUPSd and set this entity's state."""
self._data_service.update()
try:
self._data_service.update()
except OSError as ex:
if self._attr_available:
self._attr_available = False
_LOGGER.exception("Got exception while fetching state: %s", ex)
return
self._attr_available = True
key = self.entity_description.key.upper()
if key not in self._data_service.status:
self._attr_is_on = None

View File

@@ -9,6 +9,7 @@ from homeassistant.components.sensor import (
SensorDeviceClass,
SensorEntity,
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
@@ -39,6 +40,9 @@ SENSORS: dict[str, SensorEntityDescription] = {
key="ambtemp",
name="UPS Ambient Temperature",
icon="mdi:thermometer",
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
),
"apc": SensorEntityDescription(
key="apc",
@@ -72,12 +76,15 @@ SENSORS: dict[str, SensorEntityDescription] = {
name="UPS Battery Voltage",
native_unit_of_measurement=UnitOfElectricPotential.VOLT,
device_class=SensorDeviceClass.VOLTAGE,
state_class=SensorStateClass.MEASUREMENT,
),
"bcharge": SensorEntityDescription(
key="bcharge",
name="UPS Battery",
native_unit_of_measurement=PERCENTAGE,
icon="mdi:battery",
device_class=SensorDeviceClass.BATTERY,
state_class=SensorStateClass.MEASUREMENT,
),
"cable": SensorEntityDescription(
key="cable",
@@ -89,6 +96,7 @@ SENSORS: dict[str, SensorEntityDescription] = {
key="cumonbatt",
name="UPS Total Time on Battery",
icon="mdi:timer-outline",
state_class=SensorStateClass.TOTAL_INCREASING,
),
"date": SensorEntityDescription(
key="date",
@@ -155,13 +163,16 @@ SENSORS: dict[str, SensorEntityDescription] = {
key="humidity",
name="UPS Ambient Humidity",
native_unit_of_measurement=PERCENTAGE,
device_class=SensorDeviceClass.HUMIDITY,
icon="mdi:water-percent",
state_class=SensorStateClass.MEASUREMENT,
),
"itemp": SensorEntityDescription(
key="itemp",
name="UPS Internal Temperature",
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
),
"laststest": SensorEntityDescription(
key="laststest",
@@ -184,18 +195,21 @@ SENSORS: dict[str, SensorEntityDescription] = {
name="UPS Line Frequency",
native_unit_of_measurement=UnitOfFrequency.HERTZ,
device_class=SensorDeviceClass.FREQUENCY,
state_class=SensorStateClass.MEASUREMENT,
),
"linev": SensorEntityDescription(
key="linev",
name="UPS Input Voltage",
native_unit_of_measurement=UnitOfElectricPotential.VOLT,
device_class=SensorDeviceClass.VOLTAGE,
state_class=SensorStateClass.MEASUREMENT,
),
"loadpct": SensorEntityDescription(
key="loadpct",
name="UPS Load",
native_unit_of_measurement=PERCENTAGE,
icon="mdi:gauge",
state_class=SensorStateClass.MEASUREMENT,
),
"loadapnt": SensorEntityDescription(
key="loadapnt",
@@ -288,18 +302,21 @@ SENSORS: dict[str, SensorEntityDescription] = {
key="numxfers",
name="UPS Transfer Count",
icon="mdi:counter",
state_class=SensorStateClass.TOTAL_INCREASING,
),
"outcurnt": SensorEntityDescription(
key="outcurnt",
name="UPS Output Current",
native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
device_class=SensorDeviceClass.CURRENT,
state_class=SensorStateClass.MEASUREMENT,
),
"outputv": SensorEntityDescription(
key="outputv",
name="UPS Output Voltage",
native_unit_of_measurement=UnitOfElectricPotential.VOLT,
device_class=SensorDeviceClass.VOLTAGE,
state_class=SensorStateClass.MEASUREMENT,
),
"reg1": SensorEntityDescription(
key="reg1",
@@ -362,16 +379,19 @@ SENSORS: dict[str, SensorEntityDescription] = {
key="stesti",
name="UPS Self Test Interval",
icon="mdi:information-outline",
state_class=SensorStateClass.TOTAL_INCREASING,
),
"timeleft": SensorEntityDescription(
key="timeleft",
name="UPS Time Left",
icon="mdi:clock-alert",
state_class=SensorStateClass.MEASUREMENT,
),
"tonbatt": SensorEntityDescription(
key="tonbatt",
name="UPS Time on Battery",
icon="mdi:timer-outline",
state_class=SensorStateClass.TOTAL_INCREASING,
),
"upsmode": SensorEntityDescription(
key="upsmode",
@@ -445,7 +465,7 @@ async def async_setup_entry(
async_add_entities(entities, update_before_add=True)
def infer_unit(value):
def infer_unit(value: str) -> tuple[str, str | None]:
"""If the value ends with any of the units from ALL_UNITS.
Split the unit off the end of the value and return the value, unit tuple
@@ -454,7 +474,7 @@ def infer_unit(value):
for unit in ALL_UNITS:
if value.endswith(unit):
return value[: -len(unit)], INFERRED_UNITS.get(unit, unit.strip())
return value.removesuffix(unit), INFERRED_UNITS.get(unit, unit.strip())
return value, None
@@ -483,8 +503,15 @@ class APCUPSdSensor(SensorEntity):
def update(self) -> None:
"""Get the latest status and use it to update our sensor state."""
self._data_service.update()
try:
self._data_service.update()
except OSError as ex:
if self._attr_available:
self._attr_available = False
_LOGGER.exception("Got exception while fetching state: %s", ex)
return
self._attr_available = True
key = self.entity_description.key.upper()
if key not in self._data_service.status:
self._attr_native_value = None

View File

@@ -15,5 +15,10 @@
}
}
}
},
"issues": {
"deprecated_yaml": {
"title": "De APC UPS Daemon YAML-configuratie wordt verwijderd."
}
}
}

View File

@@ -344,12 +344,7 @@ class AppleTVManager:
ATTR_MANUFACTURER: "Apple",
ATTR_NAME: self.config_entry.data[CONF_NAME],
}
area = attrs[ATTR_NAME]
name_trailer = f" {DEFAULT_NAME}"
if area.endswith(name_trailer):
area = area[: -len(name_trailer)]
attrs[ATTR_SUGGESTED_AREA] = area
attrs[ATTR_SUGGESTED_AREA] = attrs[ATTR_NAME].removesuffix(f" {DEFAULT_NAME}")
if self.atv:
dev_info = self.atv.device_info

View File

@@ -2,7 +2,7 @@
"domain": "apprise",
"name": "Apprise",
"documentation": "https://www.home-assistant.io/integrations/apprise",
"requirements": ["apprise==1.2.0"],
"requirements": ["apprise==1.2.1"],
"codeowners": ["@caronc"],
"iot_class": "cloud_push",
"loggers": ["apprise"]

View File

@@ -4,7 +4,7 @@
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/aranet",
"requirements": ["aranet4==2.1.3"],
"dependencies": ["bluetooth"],
"dependencies": ["bluetooth_adapters"],
"codeowners": ["@aschmitz"],
"iot_class": "local_push",
"integration_type": "device",

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