Skip to content

Commit c1a8ae0

Browse files
authored
Coordinator fixes (#4)
- Set up coordinator in init (preparing for multiple platforms) - Write state to HA after updating - Support unloading integration - Bump version to 0.0.6
1 parent 82ba141 commit c1a8ae0

File tree

5 files changed

+28
-17
lines changed

5 files changed

+28
-17
lines changed

custom_components/connectlife/__init__.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,31 @@
77
from homeassistant.core import HomeAssistant
88
from connectlife.api import ConnectLifeApi
99

10-
1110
from .const import DOMAIN
11+
from .coordinator import ConnectLifeCoordinator
1212

1313
PLATFORMS: list[Platform] = [Platform.SENSOR]
1414

1515

1616
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
1717
"""Set up ConnectLife from a config entry."""
18-
1918
hass.data.setdefault(DOMAIN, {})
20-
# TODO 1. Create API instance
21-
# TODO 2. Validate the API connection (and authentication)
22-
# TODO 3. Store an API object for your platforms to access
23-
# hass.data[DOMAIN][entry.entry_id] = MyApi(...)
2419

2520
api = ConnectLifeApi(entry.data[CONF_USERNAME], entry.data[CONF_PASSWORD])
2621
await api.login()
27-
hass.data[DOMAIN][entry.entry_id] = api
22+
coordinator = ConnectLifeCoordinator(hass, api)
23+
await coordinator.async_config_entry_first_refresh()
24+
hass.data[DOMAIN][entry.entry_id] = coordinator
25+
2826
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
2927

3028
return True
3129

30+
31+
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
32+
"""Unload a config entry."""
33+
34+
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
35+
hass.data[DOMAIN].pop(entry.entry_id)
36+
37+
return unload_ok

custom_components/connectlife/coordinator.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from homeassistant.exceptions import ConfigEntryAuthFailed
88
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
99

10+
from .const import DOMAIN
11+
1012
_LOGGER = logging.getLogger(__name__)
1113

1214
class ConnectLifeCoordinator(DataUpdateCoordinator):
@@ -16,13 +18,13 @@ class ConnectLifeCoordinator(DataUpdateCoordinator):
1618

1719
def __init__(self, hass, api: ConnectLifeApi):
1820
"""Initialize coordinator."""
21+
self.api = api
1922
super().__init__(
2023
hass,
2124
_LOGGER,
22-
name="ConnectLife",
25+
name=DOMAIN,
2326
update_interval=timedelta(seconds=60),
2427
)
25-
self.api = api
2628

2729
async def _async_update_data(self):
2830
"""Fetch data from API endpoint."""

custom_components/connectlife/entity.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from homeassistant.helpers.update_coordinator import CoordinatorEntity
1010

1111

12-
class ConnectLifeEntity(CoordinatorEntity):
12+
class ConnectLifeEntity(CoordinatorEntity[ConnectLifeCoordinator]):
1313
"""Generic ConnectLife entity (base class)."""
1414

1515
def __init__(self, coordinator: ConnectLifeCoordinator, appliance: ConnectLifeAppliance):

custom_components/connectlife/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
"documentation": "https://github.com/oyvindwe/connectlife-ha",
77
"iot_class": "cloud_polling",
88
"requirements": ["connectlife==0.0.5"],
9-
"version": "0.0.5"
9+
"version": "0.0.6"
1010
}

custom_components/connectlife/sensor.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ async def async_setup_entry(
2424
) -> None:
2525
"""Set up ConnectLife sensors."""
2626

27-
api = hass.data[DOMAIN][config_entry.entry_id]
28-
coordinator = ConnectLifeCoordinator(hass, api)
29-
await coordinator.async_refresh()
27+
coordinator = hass.data[DOMAIN][config_entry.entry_id]
3028

3129
for appliance in coordinator.appliances.values():
3230
async_add_entities(
@@ -44,10 +42,15 @@ def __init__(self, coordinator: ConnectLifeCoordinator, appliance: ConnectLifeAp
4442
description = status.replace("_", " ")
4543
self._attr_name = f"{appliance._device_nickname} {description}"
4644
self._attr_unique_id = f"{appliance.device_id}-{status}"
47-
self._handle_coordinator_update()
45+
self.update_state()
4846

4947
@callback
50-
def _handle_coordinator_update(self) -> None:
51-
"""Handle updated data from the coordinator."""
48+
def update_state(self):
5249
self._attr_native_value = self.coordinator.appliances[self.device_id].status_list[self.status]
5350
self._attr_available = self.coordinator.appliances[self.device_id]._offline_state == 1
51+
52+
@callback
53+
def _handle_coordinator_update(self) -> None:
54+
"""Handle updated data from the coordinator."""
55+
self.update_state()
56+
self.async_write_ha_state()

0 commit comments

Comments
 (0)