Because the setup again was scheduled as a task, it would
not unset self._async_cancel_retry_setup in time and we would
try to unsub self._async_cancel_retry_setup after it had already
fired. Change it to call a callback that runs right away so it
unsets self._async_cancel_retry_setup as soon as its called
so there is no race
fixes#111796
* Deprecate @bind_hass and log error if used inside custom component
* Log also when accessing `hass.components`
* Log warning only when `hass.components` is used
* Change version
* Process code review
* Add counter entities to the ZHA coordinator device
* rework to prepare for non coordinator device counters
* Initial scaffolding to support quirks v2 entities
* update for zigpy changes
* add assertion error message
* clean up test
* update group entity discovery kwargs
* constants and clearer names
* apply custom device configuration
* quirks switches
* quirks select entities
* quirks sensor entities
* update discovery
* move call to super
* add complex quirks v2 discovery test
* remove duplicate replaces
* add quirks v2 button entity support
* add quirks v2 binary sensor entity support
* fix exception in counter entitiy discovery
* oops
* update formatting
* support custom on and off values
* logging
* don't filter out entities quirks says should be created
* fix type alias warnings
* sync up with zigpy changes and additions
* add a binary sensor test
* button coverage
* switch coverage
* initial select coverage
* number coverage
* sensor coverage
* update discovery after rebase
* coverage
* single line
* line lengths
* fix double underscore
* review comments
* set category from quirks in base entity
* line lengths
* move comment
* imports
* simplify
* simplify
* Add Overkiz support for AtlanticPassAPCHeatingAndCoolingZone widget
* Add support for AUTO HVAC mode for Atlantic Pass APC ZC devices that support it
* Add support for multiple IO controllers for same widget (mainly for Atlantic APC)
* Implement PR feedback
* Small PR fixes
* Fix constant inversion typo
* Use `None` instead of `"unknown"` when the current version is unknown
* Only use the current file version from the OTA notification
* Use `sw_version`, if available, and update `current_file_version`
* Assume the current version is the latest version
* Fix lint errors
* Use `image` instead of `firmware`
* Include a changelog if updates expose it
* Clear latest firmware only after updating the installed version
* Bump minimum zigpy version to 0.63.0
* Create a data update coordinator to consolidate updates
* Fix overridden `async_update`
* Fix most unit tests
* Simplify `test_devices` to fix current tests
* Use a dict comprehension for creating mocked entities
* Fix unit tests (thanks @dmulcahey!)
* Update the currently installed version on cluster attribute update
* Drop `PARALLEL_UPDATES` now that we use an update coordinator
* Drop `_reset_progress`, it is already handled by the update component
* Do not update the progress if we are not supposed to be updating
* Ignore latest version (e.g. if device attrs changed) if zigpy rejects it
* Clean up handling of command id in `Ota.cluster_command`
* Start progress at 1%: 0 and False are considered equal and are filtered!
Use `ceil` instead of remapping 1-100
* The installed version will be auto-updated when the upgrade succeeds
* Avoid 1 as well, it collides with `True`
* Bump zigpy to (unreleased) 0.63.2
* Fix unit tests
* Fix existing unit tests
Send both event types
Globally enable sending both event types
* Remove unnecessary branches
* Test ignoring invalid progress callbacks
* Test updating a device with a no longer compatible firmware
async_get_custom_components is the only place this can suspend
and it will always be cached by the time this is called so there
is no reason to schedule these on the event loop