Improve data handling for Sensibo (#68419)
This commit is contained in:
parent
5fffe9b22f
commit
d23d19f9e6
10 changed files with 81 additions and 287 deletions
|
@ -3,7 +3,8 @@ from __future__ import annotations
|
|||
|
||||
from collections.abc import Callable
|
||||
from dataclasses import dataclass
|
||||
from typing import Any
|
||||
|
||||
from pysensibo.model import MotionSensor, SensiboDevice
|
||||
|
||||
from homeassistant.components.sensor import (
|
||||
SensorDeviceClass,
|
||||
|
@ -25,7 +26,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
|||
from homeassistant.helpers.typing import StateType
|
||||
|
||||
from .const import DOMAIN
|
||||
from .coordinator import MotionSensor, SensiboDataUpdateCoordinator
|
||||
from .coordinator import SensiboDataUpdateCoordinator
|
||||
from .entity import SensiboDeviceBaseEntity, SensiboMotionBaseEntity
|
||||
|
||||
|
||||
|
@ -40,7 +41,7 @@ class MotionBaseEntityDescriptionMixin:
|
|||
class DeviceBaseEntityDescriptionMixin:
|
||||
"""Mixin for required Sensibo base description keys."""
|
||||
|
||||
value_fn: Callable[[dict[str, Any]], StateType]
|
||||
value_fn: Callable[[SensiboDevice], StateType]
|
||||
|
||||
|
||||
@dataclass
|
||||
|
@ -106,13 +107,13 @@ DEVICE_SENSOR_TYPES: tuple[SensiboDeviceSensorEntityDescription, ...] = (
|
|||
state_class=SensorStateClass.MEASUREMENT,
|
||||
name="PM2.5",
|
||||
icon="mdi:air-filter",
|
||||
value_fn=lambda data: data["pm25"],
|
||||
value_fn=lambda data: data.pm25,
|
||||
),
|
||||
SensiboDeviceSensorEntityDescription(
|
||||
key="pure_sensitivity",
|
||||
name="Pure Sensitivity",
|
||||
icon="mdi:air-filter",
|
||||
value_fn=lambda data: data["pure_sensitivity"],
|
||||
value_fn=lambda data: data.pure_sensitivity,
|
||||
),
|
||||
)
|
||||
|
||||
|
@ -129,15 +130,15 @@ async def async_setup_entry(
|
|||
entities.extend(
|
||||
SensiboMotionSensor(coordinator, device_id, sensor_id, sensor_data, description)
|
||||
for device_id, device_data in coordinator.data.parsed.items()
|
||||
for sensor_id, sensor_data in device_data["motion_sensors"].items()
|
||||
for sensor_id, sensor_data in device_data.motion_sensors.items()
|
||||
for description in MOTION_SENSOR_TYPES
|
||||
if device_data["motion_sensors"]
|
||||
if device_data.motion_sensors
|
||||
)
|
||||
entities.extend(
|
||||
SensiboDeviceSensor(coordinator, device_id, description)
|
||||
for device_id, device_data in coordinator.data.parsed.items()
|
||||
for description in DEVICE_SENSOR_TYPES
|
||||
if device_data[description.key] is not None
|
||||
if getattr(device_data, description.key) is not None
|
||||
)
|
||||
async_add_entities(entities)
|
||||
|
||||
|
@ -166,7 +167,7 @@ class SensiboMotionSensor(SensiboMotionBaseEntity, SensorEntity):
|
|||
self.entity_description = entity_description
|
||||
self._attr_unique_id = f"{sensor_id}-{entity_description.key}"
|
||||
self._attr_name = (
|
||||
f"{self.device_data['name']} Motion Sensor {entity_description.name}"
|
||||
f"{self.device_data.name} Motion Sensor {entity_description.name}"
|
||||
)
|
||||
|
||||
@property
|
||||
|
@ -193,7 +194,7 @@ class SensiboDeviceSensor(SensiboDeviceBaseEntity, SensorEntity):
|
|||
)
|
||||
self.entity_description = entity_description
|
||||
self._attr_unique_id = f"{device_id}-{entity_description.key}"
|
||||
self._attr_name = f"{self.device_data['name']} {entity_description.name}"
|
||||
self._attr_name = f"{self.device_data.name} {entity_description.name}"
|
||||
|
||||
@property
|
||||
def native_value(self) -> StateType:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue