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 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