mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 15:17:35 +00:00
Use ConfigEntry runtime_data in P1 Monitor (#131048)
This commit is contained in:
parent
74f68316c8
commit
a0ee8eac37
@ -7,10 +7,12 @@ from homeassistant.const import CONF_HOST, CONF_PORT, Platform
|
|||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.exceptions import ConfigEntryNotReady
|
from homeassistant.exceptions import ConfigEntryNotReady
|
||||||
|
|
||||||
from .const import DOMAIN, LOGGER
|
from .const import LOGGER
|
||||||
from .coordinator import P1MonitorDataUpdateCoordinator
|
from .coordinator import P1MonitorDataUpdateCoordinator
|
||||||
|
|
||||||
PLATFORMS = [Platform.SENSOR]
|
PLATFORMS: list[Platform] = [Platform.SENSOR]
|
||||||
|
|
||||||
|
type P1MonitorConfigEntry = ConfigEntry[P1MonitorDataUpdateCoordinator]
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
@ -23,8 +25,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
await coordinator.p1monitor.close()
|
await coordinator.p1monitor.close()
|
||||||
raise
|
raise
|
||||||
|
|
||||||
hass.data.setdefault(DOMAIN, {})
|
entry.runtime_data = coordinator
|
||||||
hass.data[DOMAIN][entry.entry_id] = coordinator
|
|
||||||
|
|
||||||
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
||||||
return True
|
return True
|
||||||
@ -55,7 +56,4 @@ async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) ->
|
|||||||
|
|
||||||
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
"""Unload P1 Monitor config entry."""
|
"""Unload P1 Monitor config entry."""
|
||||||
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|
||||||
if unload_ok:
|
|
||||||
del hass.data[DOMAIN][entry.entry_id]
|
|
||||||
return unload_ok
|
|
||||||
|
@ -11,13 +11,11 @@ from homeassistant.const import CONF_HOST, CONF_PORT
|
|||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
DOMAIN,
|
|
||||||
SERVICE_PHASES,
|
SERVICE_PHASES,
|
||||||
SERVICE_SETTINGS,
|
SERVICE_SETTINGS,
|
||||||
SERVICE_SMARTMETER,
|
SERVICE_SMARTMETER,
|
||||||
SERVICE_WATERMETER,
|
SERVICE_WATERMETER,
|
||||||
)
|
)
|
||||||
from .coordinator import P1MonitorDataUpdateCoordinator
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from _typeshed import DataclassInstance
|
from _typeshed import DataclassInstance
|
||||||
@ -29,23 +27,21 @@ async def async_get_config_entry_diagnostics(
|
|||||||
hass: HomeAssistant, entry: ConfigEntry
|
hass: HomeAssistant, entry: ConfigEntry
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
"""Return diagnostics for a config entry."""
|
"""Return diagnostics for a config entry."""
|
||||||
coordinator: P1MonitorDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
"entry": {
|
"entry": {
|
||||||
"title": entry.title,
|
"title": entry.title,
|
||||||
"data": async_redact_data(entry.data, TO_REDACT),
|
"data": async_redact_data(entry.data, TO_REDACT),
|
||||||
},
|
},
|
||||||
"data": {
|
"data": {
|
||||||
"smartmeter": asdict(coordinator.data[SERVICE_SMARTMETER]),
|
"smartmeter": asdict(entry.runtime_data.data[SERVICE_SMARTMETER]),
|
||||||
"phases": asdict(coordinator.data[SERVICE_PHASES]),
|
"phases": asdict(entry.runtime_data.data[SERVICE_PHASES]),
|
||||||
"settings": asdict(coordinator.data[SERVICE_SETTINGS]),
|
"settings": asdict(entry.runtime_data.data[SERVICE_SETTINGS]),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
if coordinator.has_water_meter:
|
if entry.runtime_data.has_water_meter:
|
||||||
data["data"]["watermeter"] = asdict(
|
data["data"]["watermeter"] = asdict(
|
||||||
cast("DataclassInstance", coordinator.data[SERVICE_WATERMETER])
|
cast("DataclassInstance", entry.runtime_data.data[SERVICE_WATERMETER])
|
||||||
)
|
)
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
@ -239,11 +239,10 @@ async def async_setup_entry(
|
|||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up P1 Monitor Sensors based on a config entry."""
|
"""Set up P1 Monitor Sensors based on a config entry."""
|
||||||
coordinator: P1MonitorDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
|
||||||
entities: list[P1MonitorSensorEntity] = []
|
entities: list[P1MonitorSensorEntity] = []
|
||||||
entities.extend(
|
entities.extend(
|
||||||
P1MonitorSensorEntity(
|
P1MonitorSensorEntity(
|
||||||
coordinator=coordinator,
|
entry=entry,
|
||||||
description=description,
|
description=description,
|
||||||
name="SmartMeter",
|
name="SmartMeter",
|
||||||
service=SERVICE_SMARTMETER,
|
service=SERVICE_SMARTMETER,
|
||||||
@ -252,7 +251,7 @@ async def async_setup_entry(
|
|||||||
)
|
)
|
||||||
entities.extend(
|
entities.extend(
|
||||||
P1MonitorSensorEntity(
|
P1MonitorSensorEntity(
|
||||||
coordinator=coordinator,
|
entry=entry,
|
||||||
description=description,
|
description=description,
|
||||||
name="Phases",
|
name="Phases",
|
||||||
service=SERVICE_PHASES,
|
service=SERVICE_PHASES,
|
||||||
@ -261,17 +260,17 @@ async def async_setup_entry(
|
|||||||
)
|
)
|
||||||
entities.extend(
|
entities.extend(
|
||||||
P1MonitorSensorEntity(
|
P1MonitorSensorEntity(
|
||||||
coordinator=coordinator,
|
entry=entry,
|
||||||
description=description,
|
description=description,
|
||||||
name="Settings",
|
name="Settings",
|
||||||
service=SERVICE_SETTINGS,
|
service=SERVICE_SETTINGS,
|
||||||
)
|
)
|
||||||
for description in SENSORS_SETTINGS
|
for description in SENSORS_SETTINGS
|
||||||
)
|
)
|
||||||
if coordinator.has_water_meter:
|
if entry.runtime_data.has_water_meter:
|
||||||
entities.extend(
|
entities.extend(
|
||||||
P1MonitorSensorEntity(
|
P1MonitorSensorEntity(
|
||||||
coordinator=coordinator,
|
entry=entry,
|
||||||
description=description,
|
description=description,
|
||||||
name="WaterMeter",
|
name="WaterMeter",
|
||||||
service=SERVICE_WATERMETER,
|
service=SERVICE_WATERMETER,
|
||||||
@ -291,24 +290,26 @@ class P1MonitorSensorEntity(
|
|||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
coordinator: P1MonitorDataUpdateCoordinator,
|
entry: ConfigEntry,
|
||||||
description: SensorEntityDescription,
|
description: SensorEntityDescription,
|
||||||
name: str,
|
name: str,
|
||||||
service: Literal["smartmeter", "watermeter", "phases", "settings"],
|
service: Literal["smartmeter", "watermeter", "phases", "settings"],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Initialize P1 Monitor sensor."""
|
"""Initialize P1 Monitor sensor."""
|
||||||
super().__init__(coordinator=coordinator)
|
super().__init__(coordinator=entry.runtime_data)
|
||||||
self._service_key = service
|
self._service_key = service
|
||||||
|
|
||||||
self.entity_description = description
|
self.entity_description = description
|
||||||
self._attr_unique_id = (
|
self._attr_unique_id = (
|
||||||
f"{coordinator.config_entry.entry_id}_{service}_{description.key}"
|
f"{entry.runtime_data.config_entry.entry_id}_{service}_{description.key}"
|
||||||
)
|
)
|
||||||
|
|
||||||
self._attr_device_info = DeviceInfo(
|
self._attr_device_info = DeviceInfo(
|
||||||
entry_type=DeviceEntryType.SERVICE,
|
entry_type=DeviceEntryType.SERVICE,
|
||||||
identifiers={(DOMAIN, f"{coordinator.config_entry.entry_id}_{service}")},
|
identifiers={
|
||||||
configuration_url=f"http://{coordinator.config_entry.data[CONF_HOST]}",
|
(DOMAIN, f"{entry.runtime_data.config_entry.entry_id}_{service}")
|
||||||
|
},
|
||||||
|
configuration_url=f"http://{entry.runtime_data.config_entry.data[CONF_HOST]}",
|
||||||
manufacturer="P1 Monitor",
|
manufacturer="P1 Monitor",
|
||||||
name=name,
|
name=name,
|
||||||
)
|
)
|
||||||
|
@ -26,7 +26,6 @@ async def test_load_unload_config_entry(
|
|||||||
await hass.config_entries.async_unload(mock_config_entry.entry_id)
|
await hass.config_entries.async_unload(mock_config_entry.entry_id)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert not hass.data.get(DOMAIN)
|
|
||||||
assert mock_config_entry.state is ConfigEntryState.NOT_LOADED
|
assert mock_config_entry.state is ConfigEntryState.NOT_LOADED
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user