1 """Support for WLED updates."""
3 from __future__
import annotations
5 from typing
import Any, cast
15 from .
import WLED_KEY, WLEDConfigEntry
16 from .coordinator
import WLEDDataUpdateCoordinator, WLEDReleasesDataUpdateCoordinator
17 from .entity
import WLEDEntity
18 from .helpers
import wled_exception_handler
23 entry: WLEDConfigEntry,
24 async_add_entities: AddEntitiesCallback,
26 """Set up WLED update based on a config entry."""
31 """Defines a WLED update entity."""
33 _attr_device_class = UpdateDeviceClass.FIRMWARE
34 _attr_supported_features = (
35 UpdateEntityFeature.INSTALL | UpdateEntityFeature.SPECIFIC_VERSION
41 coordinator: WLEDDataUpdateCoordinator,
42 releases_coordinator: WLEDReleasesDataUpdateCoordinator,
44 """Initialize the update entity."""
45 super().
__init__(coordinator=coordinator)
50 """When entity is added to hass.
52 Register extra update listener for the releases coordinator.
57 self._handle_coordinator_update
63 """Return if entity is available."""
68 """Version currently installed and in use."""
69 if (version := self.coordinator.data.info.version)
is None:
75 """Latest version available for install."""
80 and (current := self.coordinator.data.info.version)
is not None
81 and (current.alpha
or current.beta
or current.release_candidate)
84 or (stable
is not None and stable < beta
and current > stable)
96 """URL to the full release notes of the latest version available."""
99 return f
"https://github.com/Aircoookie/WLED/releases/tag/v{version}"
101 @wled_exception_handler
103 self, version: str |
None, backup: bool, **kwargs: Any
105 """Install an update."""
109 await self.coordinator.wled.upgrade(version=version)
str|None latest_version(self)
str|None release_url(self)
None async_install(self, str|None version, bool backup, **Any kwargs)
str|None latest_version(self)
None __init__(self, WLEDDataUpdateCoordinator coordinator, WLEDReleasesDataUpdateCoordinator releases_coordinator)
None async_added_to_hass(self)
None async_on_remove(self, CALLBACK_TYPE func)
Callable[[], None] async_add_listener(self, CALLBACK_TYPE update_callback, Any context=None)
None async_setup_entry(HomeAssistant hass, WLEDConfigEntry entry, AddEntitiesCallback async_add_entities)