Refactor huisbaasje to use entity descriptions (#83825)
* Refactor huisbaasje to use entity descriptions * Apply suggestions from code review Co-authored-by: Martin Hjelmare <marhje52@gmail.com> Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
parent
85235ea5f6
commit
9f67eb1aaa
2 changed files with 229 additions and 198 deletions
|
@ -8,14 +8,13 @@ from energyflip.const import (
|
||||||
SOURCE_TYPE_GAS,
|
SOURCE_TYPE_GAS,
|
||||||
)
|
)
|
||||||
|
|
||||||
from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass
|
from homeassistant.const import UnitOfTime, UnitOfVolume
|
||||||
from homeassistant.const import ENERGY_KILO_WATT_HOUR, TIME_HOURS, VOLUME_CUBIC_METERS
|
|
||||||
|
|
||||||
DATA_COORDINATOR = "coordinator"
|
DATA_COORDINATOR = "coordinator"
|
||||||
|
|
||||||
DOMAIN = "huisbaasje"
|
DOMAIN = "huisbaasje"
|
||||||
|
|
||||||
FLOW_CUBIC_METERS_PER_HOUR = f"{VOLUME_CUBIC_METERS}/{TIME_HOURS}"
|
FLOW_CUBIC_METERS_PER_HOUR = f"{UnitOfVolume.CUBIC_METERS}/{UnitOfTime.HOURS}"
|
||||||
|
|
||||||
"""Interval in seconds between polls to huisbaasje."""
|
"""Interval in seconds between polls to huisbaasje."""
|
||||||
POLLING_INTERVAL = 20
|
POLLING_INTERVAL = 20
|
||||||
|
@ -37,146 +36,3 @@ SOURCE_TYPES = [
|
||||||
SOURCE_TYPE_ELECTRICITY_OUT_LOW,
|
SOURCE_TYPE_ELECTRICITY_OUT_LOW,
|
||||||
SOURCE_TYPE_GAS,
|
SOURCE_TYPE_GAS,
|
||||||
]
|
]
|
||||||
|
|
||||||
SENSORS_INFO = [
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Current Power",
|
|
||||||
"device_class": SensorDeviceClass.POWER,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Current Power In Peak",
|
|
||||||
"device_class": SensorDeviceClass.POWER,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY_IN,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Current Power In Off Peak",
|
|
||||||
"device_class": SensorDeviceClass.POWER,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY_IN_LOW,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Current Power Out Peak",
|
|
||||||
"device_class": SensorDeviceClass.POWER,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY_OUT,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Current Power Out Off Peak",
|
|
||||||
"device_class": SensorDeviceClass.POWER,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY_OUT_LOW,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Energy Consumption Peak Today",
|
|
||||||
"device_class": SensorDeviceClass.ENERGY,
|
|
||||||
"unit_of_measurement": ENERGY_KILO_WATT_HOUR,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY_IN,
|
|
||||||
"sensor_type": SENSOR_TYPE_THIS_DAY,
|
|
||||||
"state_class": SensorStateClass.TOTAL_INCREASING,
|
|
||||||
"precision": 3,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Energy Consumption Off Peak Today",
|
|
||||||
"device_class": SensorDeviceClass.ENERGY,
|
|
||||||
"unit_of_measurement": ENERGY_KILO_WATT_HOUR,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY_IN_LOW,
|
|
||||||
"sensor_type": SENSOR_TYPE_THIS_DAY,
|
|
||||||
"state_class": SensorStateClass.TOTAL_INCREASING,
|
|
||||||
"precision": 3,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Energy Production Peak Today",
|
|
||||||
"device_class": SensorDeviceClass.ENERGY,
|
|
||||||
"unit_of_measurement": ENERGY_KILO_WATT_HOUR,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY_OUT,
|
|
||||||
"sensor_type": SENSOR_TYPE_THIS_DAY,
|
|
||||||
"state_class": SensorStateClass.TOTAL_INCREASING,
|
|
||||||
"precision": 3,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Energy Production Off Peak Today",
|
|
||||||
"device_class": SensorDeviceClass.ENERGY,
|
|
||||||
"unit_of_measurement": ENERGY_KILO_WATT_HOUR,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY_OUT_LOW,
|
|
||||||
"sensor_type": SENSOR_TYPE_THIS_DAY,
|
|
||||||
"state_class": SensorStateClass.TOTAL_INCREASING,
|
|
||||||
"precision": 3,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Energy Today",
|
|
||||||
"device_class": SensorDeviceClass.ENERGY,
|
|
||||||
"unit_of_measurement": ENERGY_KILO_WATT_HOUR,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY,
|
|
||||||
"sensor_type": SENSOR_TYPE_THIS_DAY,
|
|
||||||
"precision": 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Energy This Week",
|
|
||||||
"device_class": SensorDeviceClass.ENERGY,
|
|
||||||
"unit_of_measurement": ENERGY_KILO_WATT_HOUR,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY,
|
|
||||||
"sensor_type": SENSOR_TYPE_THIS_WEEK,
|
|
||||||
"precision": 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Energy This Month",
|
|
||||||
"device_class": SensorDeviceClass.ENERGY,
|
|
||||||
"unit_of_measurement": ENERGY_KILO_WATT_HOUR,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY,
|
|
||||||
"sensor_type": SENSOR_TYPE_THIS_MONTH,
|
|
||||||
"precision": 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Energy This Year",
|
|
||||||
"device_class": SensorDeviceClass.ENERGY,
|
|
||||||
"unit_of_measurement": ENERGY_KILO_WATT_HOUR,
|
|
||||||
"source_type": SOURCE_TYPE_ELECTRICITY,
|
|
||||||
"sensor_type": SENSOR_TYPE_THIS_YEAR,
|
|
||||||
"precision": 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Current Gas",
|
|
||||||
"unit_of_measurement": FLOW_CUBIC_METERS_PER_HOUR,
|
|
||||||
"source_type": SOURCE_TYPE_GAS,
|
|
||||||
"icon": "mdi:fire",
|
|
||||||
"precision": 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Gas Today",
|
|
||||||
"device_class": SensorDeviceClass.GAS,
|
|
||||||
"unit_of_measurement": VOLUME_CUBIC_METERS,
|
|
||||||
"source_type": SOURCE_TYPE_GAS,
|
|
||||||
"sensor_type": SENSOR_TYPE_THIS_DAY,
|
|
||||||
"state_class": SensorStateClass.TOTAL_INCREASING,
|
|
||||||
"icon": "mdi:counter",
|
|
||||||
"precision": 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Gas This Week",
|
|
||||||
"device_class": SensorDeviceClass.GAS,
|
|
||||||
"unit_of_measurement": VOLUME_CUBIC_METERS,
|
|
||||||
"source_type": SOURCE_TYPE_GAS,
|
|
||||||
"sensor_type": SENSOR_TYPE_THIS_WEEK,
|
|
||||||
"state_class": SensorStateClass.TOTAL_INCREASING,
|
|
||||||
"icon": "mdi:counter",
|
|
||||||
"precision": 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Gas This Month",
|
|
||||||
"device_class": SensorDeviceClass.GAS,
|
|
||||||
"unit_of_measurement": VOLUME_CUBIC_METERS,
|
|
||||||
"source_type": SOURCE_TYPE_GAS,
|
|
||||||
"sensor_type": SENSOR_TYPE_THIS_MONTH,
|
|
||||||
"state_class": SensorStateClass.TOTAL_INCREASING,
|
|
||||||
"icon": "mdi:counter",
|
|
||||||
"precision": 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Huisbaasje Gas This Year",
|
|
||||||
"device_class": SensorDeviceClass.GAS,
|
|
||||||
"unit_of_measurement": VOLUME_CUBIC_METERS,
|
|
||||||
"source_type": SOURCE_TYPE_GAS,
|
|
||||||
"sensor_type": SENSOR_TYPE_THIS_YEAR,
|
|
||||||
"state_class": SensorStateClass.TOTAL_INCREASING,
|
|
||||||
"icon": "mdi:counter",
|
|
||||||
"precision": 1,
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
|
@ -1,15 +1,26 @@
|
||||||
"""Platform for sensor integration."""
|
"""Platform for sensor integration."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from dataclasses import dataclass
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from energyflip.const import (
|
||||||
|
SOURCE_TYPE_ELECTRICITY,
|
||||||
|
SOURCE_TYPE_ELECTRICITY_IN,
|
||||||
|
SOURCE_TYPE_ELECTRICITY_IN_LOW,
|
||||||
|
SOURCE_TYPE_ELECTRICITY_OUT,
|
||||||
|
SOURCE_TYPE_ELECTRICITY_OUT_LOW,
|
||||||
|
SOURCE_TYPE_GAS,
|
||||||
|
)
|
||||||
|
|
||||||
from homeassistant.components.sensor import (
|
from homeassistant.components.sensor import (
|
||||||
SensorDeviceClass,
|
SensorDeviceClass,
|
||||||
SensorEntity,
|
SensorEntity,
|
||||||
|
SensorEntityDescription,
|
||||||
SensorStateClass,
|
SensorStateClass,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import CONF_ID, POWER_WATT
|
from homeassistant.const import CONF_ID, UnitOfEnergy, UnitOfPower, UnitOfVolume
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.update_coordinator import (
|
from homeassistant.helpers.update_coordinator import (
|
||||||
|
@ -17,11 +28,206 @@ from homeassistant.helpers.update_coordinator import (
|
||||||
DataUpdateCoordinator,
|
DataUpdateCoordinator,
|
||||||
)
|
)
|
||||||
|
|
||||||
from .const import DATA_COORDINATOR, DOMAIN, SENSOR_TYPE_RATE, SENSORS_INFO
|
from .const import (
|
||||||
|
DATA_COORDINATOR,
|
||||||
|
DOMAIN,
|
||||||
|
FLOW_CUBIC_METERS_PER_HOUR,
|
||||||
|
SENSOR_TYPE_RATE,
|
||||||
|
SENSOR_TYPE_THIS_DAY,
|
||||||
|
SENSOR_TYPE_THIS_MONTH,
|
||||||
|
SENSOR_TYPE_THIS_WEEK,
|
||||||
|
SENSOR_TYPE_THIS_YEAR,
|
||||||
|
)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class HuisbaasjeSensorEntityDescription(SensorEntityDescription):
|
||||||
|
"""Class describing Airly sensor entities."""
|
||||||
|
|
||||||
|
sensor_type: str = SENSOR_TYPE_RATE
|
||||||
|
precision: int = 0
|
||||||
|
|
||||||
|
|
||||||
|
SENSORS_INFO = [
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Current Power",
|
||||||
|
sensor_type=SENSOR_TYPE_RATE,
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
native_unit_of_measurement=UnitOfPower.WATT,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Current Power In Peak",
|
||||||
|
sensor_type=SENSOR_TYPE_RATE,
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
native_unit_of_measurement=UnitOfPower.WATT,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY_IN,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Current Power In Off Peak",
|
||||||
|
sensor_type=SENSOR_TYPE_RATE,
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
native_unit_of_measurement=UnitOfPower.WATT,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY_IN_LOW,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Current Power Out Peak",
|
||||||
|
sensor_type=SENSOR_TYPE_RATE,
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
native_unit_of_measurement=UnitOfPower.WATT,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY_OUT,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Current Power Out Off Peak",
|
||||||
|
sensor_type=SENSOR_TYPE_RATE,
|
||||||
|
device_class=SensorDeviceClass.POWER,
|
||||||
|
native_unit_of_measurement=UnitOfPower.WATT,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY_OUT_LOW,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Energy Consumption Peak Today",
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY_IN,
|
||||||
|
sensor_type=SENSOR_TYPE_THIS_DAY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
precision=3,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Energy Consumption Off Peak Today",
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY_IN_LOW,
|
||||||
|
sensor_type=SENSOR_TYPE_THIS_DAY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
precision=3,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Energy Production Peak Today",
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY_OUT,
|
||||||
|
sensor_type=SENSOR_TYPE_THIS_DAY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
precision=3,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Energy Production Off Peak Today",
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY_OUT_LOW,
|
||||||
|
sensor_type=SENSOR_TYPE_THIS_DAY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
precision=3,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Energy Today",
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY,
|
||||||
|
sensor_type=SENSOR_TYPE_THIS_DAY,
|
||||||
|
precision=1,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Energy This Week",
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY,
|
||||||
|
sensor_type=SENSOR_TYPE_THIS_WEEK,
|
||||||
|
precision=1,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Energy This Month",
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY,
|
||||||
|
sensor_type=SENSOR_TYPE_THIS_MONTH,
|
||||||
|
precision=1,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Energy This Year",
|
||||||
|
device_class=SensorDeviceClass.ENERGY,
|
||||||
|
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
key=SOURCE_TYPE_ELECTRICITY,
|
||||||
|
sensor_type=SENSOR_TYPE_THIS_YEAR,
|
||||||
|
precision=1,
|
||||||
|
icon="mdi:lightning-bolt",
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Current Gas",
|
||||||
|
native_unit_of_measurement=FLOW_CUBIC_METERS_PER_HOUR,
|
||||||
|
sensor_type=SENSOR_TYPE_RATE,
|
||||||
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
|
key=SOURCE_TYPE_GAS,
|
||||||
|
icon="mdi:fire",
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Gas Today",
|
||||||
|
device_class=SensorDeviceClass.GAS,
|
||||||
|
native_unit_of_measurement=UnitOfVolume.CUBIC_METERS,
|
||||||
|
key=SOURCE_TYPE_GAS,
|
||||||
|
sensor_type=SENSOR_TYPE_THIS_DAY,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
icon="mdi:counter",
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Gas This Week",
|
||||||
|
device_class=SensorDeviceClass.GAS,
|
||||||
|
native_unit_of_measurement=UnitOfVolume.CUBIC_METERS,
|
||||||
|
key=SOURCE_TYPE_GAS,
|
||||||
|
sensor_type=SENSOR_TYPE_THIS_WEEK,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
icon="mdi:counter",
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Gas This Month",
|
||||||
|
device_class=SensorDeviceClass.GAS,
|
||||||
|
native_unit_of_measurement=UnitOfVolume.CUBIC_METERS,
|
||||||
|
key=SOURCE_TYPE_GAS,
|
||||||
|
sensor_type=SENSOR_TYPE_THIS_MONTH,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
icon="mdi:counter",
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
HuisbaasjeSensorEntityDescription(
|
||||||
|
name="Huisbaasje Gas This Year",
|
||||||
|
device_class=SensorDeviceClass.GAS,
|
||||||
|
native_unit_of_measurement=UnitOfVolume.CUBIC_METERS,
|
||||||
|
key=SOURCE_TYPE_GAS,
|
||||||
|
sensor_type=SENSOR_TYPE_THIS_YEAR,
|
||||||
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||||
|
icon="mdi:counter",
|
||||||
|
precision=1,
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config_entry: ConfigEntry,
|
config_entry: ConfigEntry,
|
||||||
|
@ -32,73 +238,42 @@ async def async_setup_entry(
|
||||||
user_id = config_entry.data[CONF_ID]
|
user_id = config_entry.data[CONF_ID]
|
||||||
|
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
HuisbaasjeSensor(coordinator, user_id=user_id, **sensor_info)
|
HuisbaasjeSensor(coordinator, user_id, description)
|
||||||
for sensor_info in SENSORS_INFO
|
for description in SENSORS_INFO
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class HuisbaasjeSensor(CoordinatorEntity, SensorEntity):
|
class HuisbaasjeSensor(CoordinatorEntity, SensorEntity):
|
||||||
"""Defines a Huisbaasje sensor."""
|
"""Defines a Huisbaasje sensor."""
|
||||||
|
|
||||||
|
entity_description: HuisbaasjeSensorEntityDescription
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
coordinator: DataUpdateCoordinator,
|
coordinator: DataUpdateCoordinator,
|
||||||
user_id: str,
|
user_id: str,
|
||||||
name: str,
|
description: HuisbaasjeSensorEntityDescription,
|
||||||
source_type: str,
|
|
||||||
device_class: SensorDeviceClass | None = None,
|
|
||||||
sensor_type: str = SENSOR_TYPE_RATE,
|
|
||||||
unit_of_measurement: str = POWER_WATT,
|
|
||||||
icon: str = "mdi:lightning-bolt",
|
|
||||||
precision: int = 0,
|
|
||||||
state_class: str | None = SensorStateClass.MEASUREMENT,
|
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Initialize the sensor."""
|
"""Initialize the sensor."""
|
||||||
super().__init__(coordinator)
|
super().__init__(coordinator)
|
||||||
self._user_id = user_id
|
self.entity_description = description
|
||||||
self._name = name
|
self._source_type = description.key
|
||||||
self._device_class = device_class
|
self._sensor_type = description.sensor_type
|
||||||
self._unit_of_measurement = unit_of_measurement
|
self._precision = description.precision
|
||||||
self._source_type = source_type
|
self._attr_unique_id = (
|
||||||
self._sensor_type = sensor_type
|
f"{DOMAIN}_{user_id}_{description.key}_{description.sensor_type}"
|
||||||
self._icon = icon
|
|
||||||
self._precision = precision
|
|
||||||
self._attr_state_class = state_class
|
|
||||||
|
|
||||||
@property
|
|
||||||
def unique_id(self) -> str:
|
|
||||||
"""Return an unique id for the sensor."""
|
|
||||||
return f"{DOMAIN}_{self._user_id}_{self._source_type}_{self._sensor_type}"
|
|
||||||
|
|
||||||
@property
|
|
||||||
def name(self) -> str:
|
|
||||||
"""Return the name of the sensor."""
|
|
||||||
return self._name
|
|
||||||
|
|
||||||
@property
|
|
||||||
def device_class(self) -> SensorDeviceClass | None:
|
|
||||||
"""Return the device class of the sensor."""
|
|
||||||
return self._device_class
|
|
||||||
|
|
||||||
@property
|
|
||||||
def icon(self) -> str:
|
|
||||||
"""Return the icon to use for the sensor."""
|
|
||||||
return self._icon
|
|
||||||
|
|
||||||
@property
|
|
||||||
def native_value(self):
|
|
||||||
"""Return the state of the sensor."""
|
|
||||||
if self.coordinator.data[self._source_type][self._sensor_type] is not None:
|
|
||||||
return round(
|
|
||||||
self.coordinator.data[self._source_type][self._sensor_type],
|
|
||||||
self._precision,
|
|
||||||
)
|
)
|
||||||
return None
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def native_unit_of_measurement(self) -> str:
|
def native_value(self) -> int | float | None:
|
||||||
"""Return the unit of measurement."""
|
"""Return the state of the sensor."""
|
||||||
return self._unit_of_measurement
|
if (
|
||||||
|
data := self.coordinator.data[self.entity_description.key][
|
||||||
|
self.entity_description.sensor_type
|
||||||
|
]
|
||||||
|
) is not None:
|
||||||
|
return round(data, self._precision)
|
||||||
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def available(self) -> bool:
|
def available(self) -> bool:
|
||||||
|
|
Loading…
Add table
Reference in a new issue