1 """Support for RainMachine updates."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
9 from regenmaschine.errors
import RequestError
14 UpdateEntityDescription,
21 from .
import RainMachineConfigEntry
22 from .const
import DATA_MACHINE_FIRMWARE_UPDATE_STATUS
23 from .entity
import RainMachineEntity, RainMachineEntityDescription
27 """Define an enum for update states."""
39 2: UpdateStates.CHECKING,
40 3: UpdateStates.DOWNLOADING,
41 4: UpdateStates.UPGRADING,
42 5: UpdateStates.ERROR,
43 6: UpdateStates.REBOOT,
47 @dataclass(frozen=True, kw_only=True)
49 UpdateEntityDescription, RainMachineEntityDescription
51 """Describe a RainMachine update."""
56 api_category=DATA_MACHINE_FIRMWARE_UPDATE_STATUS,
62 entry: RainMachineConfigEntry,
63 async_add_entities: AddEntitiesCallback,
65 """Set up Rainmachine update based on a config entry."""
66 data = entry.runtime_data
71 """Define a RainMachine update entity."""
73 _attr_device_class = UpdateDeviceClass.FIRMWARE
75 _attr_supported_features = (
76 UpdateEntityFeature.INSTALL
77 | UpdateEntityFeature.PROGRESS
78 | UpdateEntityFeature.SPECIFIC_VERSION
82 self, version: str |
None, backup: bool, **kwargs: Any
84 """Install an update."""
86 await self.
_data_data.controller.machine.update_firmware()
87 except RequestError
as err:
94 """Update the state."""
100 data = self.coordinator.data
102 if not data[
"update"]:
108 UpdateStates.DOWNLOADING,
109 UpdateStates.UPGRADING,
117 package_details = data[
"packageDetails"][0]
None update_from_latest_data(self)
None async_install(self, str|None version, bool backup, **Any kwargs)
None async_setup_entry(HomeAssistant hass, RainMachineConfigEntry entry, AddEntitiesCallback async_add_entities)