Commit graph

116 commits

Author SHA1 Message Date
TheJulianJES
a996a51aa9
Add "Jasco Products" manufacturer to ZHA ForceOnLight (#104089)
* Add "Jasco Products" manufacturer to ZHA `ForceOnLight`

* Change tests to expect `ForceOnLight` for "Jasco Products" lights
2023-11-16 15:24:32 -05:00
Joost Lekkerkerker
8ca5df6fcc
Guard for None color mode in ZHA (#102774) 2023-10-25 13:17:41 +02:00
Joakim Plate
29e8814d1b
Add translation entiry support (zha) (#101909)
* zha: Add translation to binary sensors

* Add some small test for name

* Add translations for sensors

* Correct some tests

* Adjust summation key

* Add translation keys for button

* Add translation keys to climate

* Add translation keys for cover

* Add translation keys to fan

* Add translations to light

* Add translations for lock

* Add translation keys to number

* Add translationk keys to select

* Add translations for switch entities

* Add translation to alarm control panel

* Map to some more standard device classes

* Use shorter references

* Remove explicit name from identify button

* Correct tests

* Correction after rebase
2023-10-17 21:59:49 +02:00
puddly
cbb28b6943
Migrate internal ZHA data to a dataclasses (#100127)
* Cache device triggers on startup

* reorg zha init

* don't reuse gateway

* don't nuke yaml configuration

* review comments

* Add unit tests

* Do not cache device and entity registries

* [WIP] Wrap ZHA data in a dataclass

* [WIP] Get unit tests passing

* Use a helper function for getting the gateway object to fix annotations

* Remove `bridge_id`

* Fix typing issues with entity references in group websocket info

* Use `Platform` instead of `str` for entity platform matching

* Use `get_zha_gateway` in a few more places

* Fix flaky unit test

* Use `slots` for ZHA data

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

---------

Co-authored-by: David F. Mulcahey <david.mulcahey@icloud.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-09-11 21:39:33 +02:00
puddly
23839a7f10
Wrap most ZHA exceptions in HomeAssistantError (#98421)
* Wrap attribute writes in a helper throwing `HomeAssistantError`

* Do not check for `Exception` instances, they are now propagated

* Write `cie_addr` synchronously

* Fix unnecessary `if` in `async_set_native_value`

* Fix unit tests

* Use `HomeAssistantError` in cover commands

* Revert writing `cie_addr` synchronously

* Disallow proxying of some cluster methods to fix unit test warnings

* Unit test cover failures to increase coverage

* Unit test missing climate device

* Unit test remaining cover commands
2023-08-28 17:24:12 -04:00
Ville Skyttä
b51c0f6ddc
Remove unnnecessary pylint configs from components [s-z]* (#98925) 2023-08-24 01:25:32 +02:00
TheJulianJES
bae5a3dbd6
Fix ZHA turn_on issues with transition=0, improve tests (#97539)
* Fix turn_on ignoring transition=0 and brightness=None, add test

This fixes light.turn_on for ZHA lights ignoring a transition of 0 when no brightness is given at the same time.
It also adds a test for that case.

Fixes https://github.com/home-assistant/core/issues/93265

* Add test for "force on" lights

This test checks that "force on" lights also get an "on" command (in addition to the "move to level" command) when turn_on is called with only transition=0.

* Fix "on" command sent for transition=0 calls, fix FORCE_ON missing for transition=0

This fixes an issue where the "on" command is sent in addition to a "move_to_level_with_on_off" command, even though the latter one is enough (for non-FORCE_ON lights).
It also fixes the test to not expect the unnecessary "on" command (in addition to the expected "move_to_level_with_on_off" command).

The `brightness != 0` change is needed to fix an issue where FORCE_ON lights did not get the required "on" command (in addition to "move_to_level_with_on_off") if turn_on was called with only transition=0.
(It could have been `brightness not None`, but that would also send an "on" command if turn_on is called with brightness=0 which HA somewhat "supports". The brightness != 0 check avoids that issue.)

* Improve comments in ZHA light class
2023-08-03 15:20:40 -04:00
Erik Montnemery
59f5b8f2d6
Remove unneeded checks for Entity.platform (#94321)
* Remove unneeded checks for Entity.platform

* Update tests

* Prevent breaking integrations without an EntityComponent

* Warn when entity has no platform
2023-06-09 15:17:41 +02:00
puddly
4f660cc5f5
Allow the ZHA default light transition time to be configured as a float (#92075) 2023-04-26 21:24:06 +02:00
puddly
6842cdcb65
Clean up default ZHA entity names (#91841)
* Always use `Light` for lights, including subclasses

* Clean up other platforms

* Add a unit test to ensure all future entity classes have names

* Remove stale `_name`

* Address review feedback and rename `Open` to `Opening`
2023-04-25 19:51:39 -04:00
Marc Mueller
06520217bc
Update pylint to 2.17.2 (#91894) 2023-04-23 14:46:48 +02:00
epenet
d70ae8afc5
Fix lingering timer in ZHA debouncers (#91685) 2023-04-19 18:45:27 +02:00
epenet
ec914815bd
Fix lingering timer in ZHA light transition (#91683) 2023-04-19 18:20:17 +02:00
David F. Mulcahey
9c784ac622
Refactor ZHA (#91476)
* rename channel -> cluster handler

* remove refs to channels and create endpoint class

* remove remaining references to channels

* fix filter

* take in latest changes from #91403

* missed one

* missed a reference
2023-04-19 10:47:07 -04:00
Paulus Schoutsen
3a32d2bdcb
Add background tasks to config entries (#88335)
* Use a set for config entries task tracking

* Allow adding background tasks to config entries

* Add tests for config entry add tasks

* Update docstrings on core create task

* Migrate roon and august

* Use in more places

* Guard for None
2023-02-17 13:50:05 -05:00
Paulus Schoutsen
093f7d6bf1
Fix dangling task for zha (#88302) 2023-02-16 23:07:15 -05:00
epenet
bb3e0633a4
Add init return type to integrations (#87523)
Add type hints to integrations
2023-02-06 11:37:25 +01:00
Franck Nijhof
fcb612cd6f
Collection of code styling tweaks (#87344) 2023-02-03 23:51:27 +01:00
TheJulianJES
665a2889ec
Add group support for ZHA ExecuteIfOff lights (#86465)
Add group support for ZHA "execute if off" lights
2023-01-25 06:18:23 -05:00
TheJulianJES
6582ee3591
Use ExecuteIfOff on color cluster for supported bulbs with ZHA (#84874)
* Add options and execute_if_off_supported properties to Color channel

* Initialize "options" attribute on Color channel (allowing cache)

* Implement execute_if_off_supported for ZHA lights

* Make sure that color_channel exists, before checking execute_if_off_supported

* Replace "color_channel is not None" check with simplified "if color_channel"

* Make "test_number" test expect "options" for init attribute

* Add test_on_with_off_color test to test old and new behavior

* Experimental code to also support "execute_if_off" for groups if all members support it

* Remove support for groups for now

Group support will likely be added in a separate PR. For now, the old/standard behavior is used for groups.
2023-01-23 07:58:18 -05: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
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
epenet
7f1e1ed1d8
Enforce LightEntityFeature (#82460) 2022-11-22 07:14:47 +01:00
David F. Mulcahey
9d47160e68
Fix sengled bulbs in ZHA (#78315)
* Fix sengled bulbs in ZHA

* fix tests

* update discovery data
2022-09-12 15:37:11 -04:00
puddly
4076f8b94e
Fix ZHA lighting initial hue/saturation attribute read (#77727)
* Handle the case of `current_hue` being `None`

* WIP unit tests
2022-09-07 11:10:24 -04:00
epenet
3a0eae3986
Improve entity type hints [z] (#77890) 2022-09-06 14:01:09 +02:00
puddly
73e26b71b1
Migrate ZHA lighting to use newer zigpy ZCL request syntax (#77676)
* Migrate unit test to use more command definition constants

* Use keyword argument syntax for sending ZCL requests

* Ensure all ZHA unit tests pass
2022-09-01 15:32:32 -04:00
David F. Mulcahey
0881ff2d1f
Add guard to enhanced current hue usage in ZHA (#77359) 2022-08-26 10:00:46 -04:00
epenet
9af64b1c3b
Improve type hints in zha light (#75947) 2022-08-04 14:02:07 +02:00
TheJulianJES
129b42cd23
Fix ZHA light brightness jumping around during transitions (#74849)
* Moved color commands to a new ``async_handle_color_commands`` method

* Fixed tests

* Fix brightness jumping around during transitions

* Add config option to disable "Enhanced brightness slider during light transition"
2022-07-26 20:03:17 -04:00
David F. Mulcahey
e2dd2c9424
Add guards to ZHA light groups when using hs color mode (#75599)
* fix polling currentSaturation

* Guard light groups against enhanced current hue

* Use XY if all group members do not support HS

* add config option to always prefer XY color mode

* use correct enum

* remove periods
2022-07-26 16:42:08 -04:00
TheJulianJES
b8ae883f18
Set min transition time for Sengled lights in ZHA groups (#75644)
* Set min transition time for Sengled lights in ZHA groups

* Change test to expect correct min transition time for group with Sengled light

* Fix turn_off with transition 0 for Sengled lights
2022-07-25 08:13:01 -04:00
TheJulianJES
975378ba44
Add ZHA config option for "enhanced light transition from an off-state" (#75151)
* Add ZHA config option for "enhanced light transition from an off-state"

* Default option to disabled

* Always disable "enhanced light transition" for ZHA LightGroups

* Rename _enhanced_light_transition to _zha_config_enhanced_light_transition

* Remove LightGroup check, as config option always disables for groups

* Remove duplicated line

* Remove duplicated line

* Move ZHA config transition line below other config line

* Renamed comments of renamed variable in tests
color_provided_while_off -> new_color_provided_while_off

* Enable "enhanced light transitions" for testing
2022-07-21 19:46:16 -04:00
David F. Mulcahey
04c6b9c519
ZHA light entity cleanup (#75573)
* use base class attributes

* initial hue and saturation support

* spec is 65536 not 65535

* fixes

* enhanced current hue

* fix comparison

* clean up

* fix channel test

* oops

* report enhanced current hue
2022-07-21 17:54:50 -04:00
David F. Mulcahey
6f5e4ca503
Fix ZHA light turn on issues (#75220)
* rename variable

* default transition is for color commands not level

* no extra command for groups

* don't transition color change when light off -> on

* clean up

* update condition

* fix condition again...

* simplify

* simplify

* missed one

* rename

* simplify

* rename

* tests

* color_provided_while_off with no changes

* fix missing flag clear

* more tests for transition scenarios

* add to comment

* fix comment

* don't transition when force on is set

* stale comment

* dont transition when colors don't change

* remove extra line

* remove debug print :)

* fix colors

* restore color to 65535 until investigated
2022-07-18 10:20:49 -04:00
TheJulianJES
1d69e631b5
Fix ZHA group not setting the correct color mode (#74687)
* Fix ZHA group not setting the correct color mode

* Changed to use _attr_color_mode
2022-07-08 12:47:59 -04:00
TheJulianJES
4d673278c7
Fix color transition when turning on a ZHA light (#74024)
* Initial implementation of fixing color transition when turning on a ZHA light

* Add off_with_transition attribute, very slightly cleanup

* Fix unnecessarily using last off_brightness when just turning on light

Now it uses the Zigbee on_off call again if possible (instead of always move_to_level_with_on_off)

* Use DEFAULT_TRANSITION constant for color transition, add DEFAULT_MIN_BRIGHTNESS constant

* Add _DEFAULT_COLOR_FROM_OFF_TRANSITION = 0 but override transition for Sengled lights to 0.1s
2022-06-29 13:09:52 -04:00
TheJulianJES
ed7ea1423a
Fix ZHA color mode not being set correctly when changing light state (#74018) 2022-06-28 09:53:00 -04:00
epenet
243905ae3e
Fix cover, light, select, sensor, switch type hints in zha (#73770)
* Fix zha sensor type hints

* Fix zha entity type hints

* Fix switch type hints

* Fix light type hints

* Fix cover type hints

* Fix select type hints
2022-06-21 21:04:24 -04:00
epenet
06e45893aa
Remove invalid type definitions in zha (#73596) 2022-06-20 11:28:53 +02:00
Erik Montnemery
5ca82b2d33
Migrate zha light to color_mode (#70970)
* Migrate zha light to color_mode

* Fix restoring color mode

* Correct set operations

* Derive color mode from group members

* Add color mode to color channel

* use Zigpy color mode enum

Co-authored-by: David Mulcahey <david.mulcahey@me.com>
2022-05-27 15:38:22 +02:00
epenet
f08615fc76
Use LightEntityFeature enum in zha (#71060) 2022-04-29 22:45:25 +03:00
David F. Mulcahey
361119d5c1
Improve ZHA startup performance (#70111)
* Remove semaphores and background mains init

* additional logging

* correct cache usage and update tests
2022-04-27 08:24:26 -07:00
puddly
0f6296e4b5
Bump zigpy to 0.44.1 and zha-quirks to 0.0.69 (#68921)
* Make unit tests pass

* Flip response type check to not rely on it being a list
https://github.com/zigpy/zigpy/pull/716#issuecomment-1025236190

* Bump zigpy and quirks versions to ZCLR8 releases

* Fix renamed zigpy cluster attributes

* Handle the default response for ZLL `get_group_identifiers`

* Add more error context to `stage failed` errors

* Fix unit test returning lists as ZCL request responses

* Always load quirks when testing ZHA

* Bump zha-quirks to 0.0.69
2022-03-31 11:26:27 -04:00
epenet
eafece3651
Add setup type hints (part 1) (#63955)
Co-authored-by: epenet <epenet@users.noreply.github.com>
2022-01-12 08:49:46 +01:00
David F. Mulcahey
f6ac856b8d
Use async_on_unload from config entry in ZHA (#61015)
* remove DATA_ZHA_DISPATCHERS

* update typing information

* fix rebase
2021-12-11 11:50:03 -05:00
David F. Mulcahey
a17031630f
Use Platform enum in ZHA (#61016) 2021-12-11 11:06:39 -05:00
Marc Mueller
487fa0a905
Use assignment expressions 20 (#57969) 2021-10-20 20:31:00 +02:00
TheJulianJES
84f568abb1
Updated ZHA to also poll Philips Hue lights with new firmware (#54513) 2021-08-12 17:08:51 -04:00
Alexei Chetroi
c9ae141eab
Mark ZHA Light methods as a callbacks (#53170)
* ZHA Light.set_level is safe to run in the loop

* Fix tests.
2021-07-20 09:33:45 +03:00