Skip to content

Commit 691681a

Browse files
authored
Move medcom_ble coordinator to separate module (home-assistant#148009)
1 parent 3bc0082 commit 691681a

File tree

3 files changed

+58
-46
lines changed

3 files changed

+58
-46
lines changed

homeassistant/components/medcom_ble/__init__.py

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,23 @@
22

33
from __future__ import annotations
44

5-
from datetime import timedelta
6-
import logging
7-
8-
from bleak import BleakError
9-
from medcom_ble import MedcomBleDeviceData
10-
115
from homeassistant.components import bluetooth
126
from homeassistant.config_entries import ConfigEntry
137
from homeassistant.const import Platform
148
from homeassistant.core import HomeAssistant
159
from homeassistant.exceptions import ConfigEntryNotReady
16-
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
17-
from homeassistant.util.unit_system import METRIC_SYSTEM
1810

19-
from .const import DEFAULT_SCAN_INTERVAL, DOMAIN
11+
from .const import DOMAIN
12+
from .coordinator import MedcomBleUpdateCoordinator
2013

2114
# Supported platforms
2215
PLATFORMS: list[Platform] = [Platform.SENSOR]
2316

24-
_LOGGER = logging.getLogger(__name__)
25-
2617

2718
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
2819
"""Set up Medcom BLE radiation monitor from a config entry."""
2920

3021
address = entry.unique_id
31-
elevation = hass.config.elevation
32-
is_metric = hass.config.units is METRIC_SYSTEM
3322
assert address is not None
3423

3524
ble_device = bluetooth.async_ble_device_from_address(hass, address)
@@ -38,26 +27,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
3827
f"Could not find Medcom BLE device with address {address}"
3928
)
4029

41-
async def _async_update_method():
42-
"""Get data from Medcom BLE radiation monitor."""
43-
ble_device = bluetooth.async_ble_device_from_address(hass, address)
44-
inspector = MedcomBleDeviceData(_LOGGER, elevation, is_metric)
45-
46-
try:
47-
data = await inspector.update_device(ble_device)
48-
except BleakError as err:
49-
raise UpdateFailed(f"Unable to fetch data: {err}") from err
50-
51-
return data
52-
53-
coordinator = DataUpdateCoordinator(
54-
hass,
55-
_LOGGER,
56-
config_entry=entry,
57-
name=DOMAIN,
58-
update_method=_async_update_method,
59-
update_interval=timedelta(seconds=DEFAULT_SCAN_INTERVAL),
60-
)
30+
coordinator = MedcomBleUpdateCoordinator(hass, entry, address)
6131

6232
await coordinator.async_config_entry_first_refresh()
6333

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
"""The Medcom BLE integration."""
2+
3+
from __future__ import annotations
4+
5+
from datetime import timedelta
6+
import logging
7+
8+
from bleak import BleakError
9+
from medcom_ble import MedcomBleDevice, MedcomBleDeviceData
10+
11+
from homeassistant.components import bluetooth
12+
from homeassistant.config_entries import ConfigEntry
13+
from homeassistant.core import HomeAssistant
14+
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
15+
from homeassistant.util.unit_system import METRIC_SYSTEM
16+
17+
from .const import DEFAULT_SCAN_INTERVAL, DOMAIN
18+
19+
_LOGGER = logging.getLogger(__name__)
20+
21+
22+
class MedcomBleUpdateCoordinator(DataUpdateCoordinator[MedcomBleDevice]):
23+
"""Coordinator for Medcom BLE radiation monitor data."""
24+
25+
config_entry: ConfigEntry
26+
27+
def __init__(self, hass: HomeAssistant, entry: ConfigEntry, address: str) -> None:
28+
"""Initialize the coordinator."""
29+
super().__init__(
30+
hass,
31+
_LOGGER,
32+
config_entry=entry,
33+
name=DOMAIN,
34+
update_interval=timedelta(seconds=DEFAULT_SCAN_INTERVAL),
35+
)
36+
self._address = address
37+
self._elevation = hass.config.elevation
38+
self._is_metric = hass.config.units is METRIC_SYSTEM
39+
40+
async def _async_update_data(self) -> MedcomBleDevice:
41+
"""Get data from Medcom BLE radiation monitor."""
42+
ble_device = bluetooth.async_ble_device_from_address(self.hass, self._address)
43+
inspector = MedcomBleDeviceData(_LOGGER, self._elevation, self._is_metric)
44+
45+
try:
46+
data = await inspector.update_device(ble_device)
47+
except BleakError as err:
48+
raise UpdateFailed(f"Unable to fetch data: {err}") from err
49+
50+
return data

homeassistant/components/medcom_ble/sensor.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
import logging
66

7-
from medcom_ble import MedcomBleDevice
8-
97
from homeassistant import config_entries
108
from homeassistant.components.sensor import (
119
SensorEntity,
@@ -15,12 +13,10 @@
1513
from homeassistant.core import HomeAssistant
1614
from homeassistant.helpers.device_registry import CONNECTION_BLUETOOTH, DeviceInfo
1715
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
18-
from homeassistant.helpers.update_coordinator import (
19-
CoordinatorEntity,
20-
DataUpdateCoordinator,
21-
)
16+
from homeassistant.helpers.update_coordinator import CoordinatorEntity
2217

2318
from .const import DOMAIN, UNIT_CPM
19+
from .coordinator import MedcomBleUpdateCoordinator
2420

2521
_LOGGER = logging.getLogger(__name__)
2622

@@ -41,9 +37,7 @@ async def async_setup_entry(
4137
) -> None:
4238
"""Set up Medcom BLE radiation monitor sensors."""
4339

44-
coordinator: DataUpdateCoordinator[MedcomBleDevice] = hass.data[DOMAIN][
45-
entry.entry_id
46-
]
40+
coordinator: MedcomBleUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
4741

4842
entities = []
4943
_LOGGER.debug("got sensors: %s", coordinator.data.sensors)
@@ -62,16 +56,14 @@ async def async_setup_entry(
6256
async_add_entities(entities)
6357

6458

65-
class MedcomSensor(
66-
CoordinatorEntity[DataUpdateCoordinator[MedcomBleDevice]], SensorEntity
67-
):
59+
class MedcomSensor(CoordinatorEntity[MedcomBleUpdateCoordinator], SensorEntity):
6860
"""Medcom BLE radiation monitor sensors for the device."""
6961

7062
_attr_has_entity_name = True
7163

7264
def __init__(
7365
self,
74-
coordinator: DataUpdateCoordinator[MedcomBleDevice],
66+
coordinator: MedcomBleUpdateCoordinator,
7567
entity_description: SensorEntityDescription,
7668
) -> None:
7769
"""Populate the medcom entity with relevant data."""

0 commit comments

Comments
 (0)