Fix plugwise longterm statistics (#58127)

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
This commit is contained in:
Bouwe Westerdijk 2021-10-22 18:46:21 +02:00 committed by GitHub
parent 5a102d793e
commit 1aa7a8170c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 75 additions and 11 deletions

View File

@ -31,8 +31,8 @@ ZEROCONF_MAP = {
# Sensor mapping
SENSOR_MAP_DEVICE_CLASS = 2
SENSOR_MAP_ICON = 3
SENSOR_MAP_MODEL = 0
SENSOR_MAP_STATE_CLASS = 3
SENSOR_MAP_UOM = 1
# Default directives

View File

@ -2,14 +2,20 @@
import logging
from homeassistant.components.sensor import SensorEntity
from homeassistant.const import (
from homeassistant.components.sensor import (
DEVICE_CLASS_BATTERY,
DEVICE_CLASS_ENERGY,
DEVICE_CLASS_GAS,
DEVICE_CLASS_ILLUMINANCE,
DEVICE_CLASS_POWER,
DEVICE_CLASS_PRESSURE,
DEVICE_CLASS_TEMPERATURE,
STATE_CLASS_MEASUREMENT,
STATE_CLASS_TOTAL,
STATE_CLASS_TOTAL_INCREASING,
SensorEntity,
)
from homeassistant.const import (
ENERGY_KILO_WATT_HOUR,
ENERGY_WATT_HOUR,
PERCENTAGE,
@ -29,6 +35,7 @@ from .const import (
IDLE_ICON,
SENSOR_MAP_DEVICE_CLASS,
SENSOR_MAP_MODEL,
SENSOR_MAP_STATE_CLASS,
SENSOR_MAP_UOM,
UNIT_LUMEN,
)
@ -40,18 +47,26 @@ ATTR_TEMPERATURE = [
"Temperature",
TEMP_CELSIUS,
DEVICE_CLASS_TEMPERATURE,
STATE_CLASS_MEASUREMENT,
]
ATTR_BATTERY_LEVEL = [
"Charge",
PERCENTAGE,
DEVICE_CLASS_BATTERY,
STATE_CLASS_MEASUREMENT,
]
ATTR_ILLUMINANCE = [
"Illuminance",
UNIT_LUMEN,
DEVICE_CLASS_ILLUMINANCE,
STATE_CLASS_MEASUREMENT,
]
ATTR_PRESSURE = [
"Pressure",
PRESSURE_BAR,
DEVICE_CLASS_PRESSURE,
STATE_CLASS_MEASUREMENT,
]
ATTR_PRESSURE = ["Pressure", PRESSURE_BAR, DEVICE_CLASS_PRESSURE]
TEMP_SENSOR_MAP = {
"setpoint": ATTR_TEMPERATURE,
@ -64,97 +79,138 @@ TEMP_SENSOR_MAP = {
}
ENERGY_SENSOR_MAP = {
"electricity_consumed": ["Current Consumed Power", POWER_WATT, DEVICE_CLASS_POWER],
"electricity_produced": ["Current Produced Power", POWER_WATT, DEVICE_CLASS_POWER],
"electricity_consumed": [
"Current Consumed Power",
POWER_WATT,
DEVICE_CLASS_POWER,
STATE_CLASS_MEASUREMENT,
],
"electricity_produced": [
"Current Produced Power",
POWER_WATT,
DEVICE_CLASS_POWER,
STATE_CLASS_MEASUREMENT,
],
"electricity_consumed_interval": [
"Consumed Power Interval",
ENERGY_WATT_HOUR,
DEVICE_CLASS_ENERGY,
STATE_CLASS_TOTAL,
],
"electricity_consumed_peak_interval": [
"Consumed Power Interval",
ENERGY_WATT_HOUR,
DEVICE_CLASS_ENERGY,
STATE_CLASS_TOTAL,
],
"electricity_consumed_off_peak_interval": [
"Consumed Power Interval (off peak)",
ENERGY_WATT_HOUR,
DEVICE_CLASS_ENERGY,
STATE_CLASS_TOTAL,
],
"electricity_produced_interval": [
"Produced Power Interval",
ENERGY_WATT_HOUR,
DEVICE_CLASS_ENERGY,
STATE_CLASS_TOTAL,
],
"electricity_produced_peak_interval": [
"Produced Power Interval",
ENERGY_WATT_HOUR,
DEVICE_CLASS_ENERGY,
STATE_CLASS_TOTAL,
],
"electricity_produced_off_peak_interval": [
"Produced Power Interval (off peak)",
ENERGY_WATT_HOUR,
DEVICE_CLASS_ENERGY,
STATE_CLASS_TOTAL,
],
"electricity_consumed_off_peak_point": [
"Current Consumed Power (off peak)",
POWER_WATT,
DEVICE_CLASS_POWER,
STATE_CLASS_MEASUREMENT,
],
"electricity_consumed_peak_point": [
"Current Consumed Power",
POWER_WATT,
DEVICE_CLASS_POWER,
STATE_CLASS_MEASUREMENT,
],
"electricity_consumed_off_peak_cumulative": [
"Cumulative Consumed Power (off peak)",
ENERGY_KILO_WATT_HOUR,
DEVICE_CLASS_ENERGY,
STATE_CLASS_TOTAL_INCREASING,
],
"electricity_consumed_peak_cumulative": [
"Cumulative Consumed Power",
ENERGY_KILO_WATT_HOUR,
DEVICE_CLASS_ENERGY,
STATE_CLASS_TOTAL_INCREASING,
],
"electricity_produced_off_peak_point": [
"Current Produced Power (off peak)",
POWER_WATT,
DEVICE_CLASS_POWER,
STATE_CLASS_MEASUREMENT,
],
"electricity_produced_peak_point": [
"Current Produced Power",
POWER_WATT,
DEVICE_CLASS_POWER,
STATE_CLASS_MEASUREMENT,
],
"electricity_produced_off_peak_cumulative": [
"Cumulative Produced Power (off peak)",
ENERGY_KILO_WATT_HOUR,
DEVICE_CLASS_ENERGY,
STATE_CLASS_TOTAL_INCREASING,
],
"electricity_produced_peak_cumulative": [
"Cumulative Produced Power",
ENERGY_KILO_WATT_HOUR,
DEVICE_CLASS_ENERGY,
STATE_CLASS_TOTAL_INCREASING,
],
"gas_consumed_interval": [
"Current Consumed Gas Interval",
VOLUME_CUBIC_METERS,
None,
DEVICE_CLASS_GAS,
STATE_CLASS_TOTAL,
],
"gas_consumed_cumulative": [
"Consumed Gas",
VOLUME_CUBIC_METERS,
DEVICE_CLASS_GAS,
STATE_CLASS_TOTAL_INCREASING,
],
"net_electricity_point": [
"Current net Power",
POWER_WATT,
DEVICE_CLASS_POWER,
STATE_CLASS_MEASUREMENT,
],
"gas_consumed_cumulative": ["Cumulative Consumed Gas", VOLUME_CUBIC_METERS, None],
"net_electricity_point": ["Current net Power", POWER_WATT, DEVICE_CLASS_POWER],
"net_electricity_cumulative": [
"Cumulative net Power",
ENERGY_KILO_WATT_HOUR,
DEVICE_CLASS_ENERGY,
STATE_CLASS_TOTAL,
],
}
MISC_SENSOR_MAP = {
"battery": ATTR_BATTERY_LEVEL,
"illuminance": ATTR_ILLUMINANCE,
"modulation_level": ["Heater Modulation Level", PERCENTAGE, None],
"valve_position": ["Valve Position", PERCENTAGE, None],
"modulation_level": [
"Heater Modulation Level",
PERCENTAGE,
None,
STATE_CLASS_MEASUREMENT,
],
"valve_position": ["Valve Position", PERCENTAGE, None, STATE_CLASS_MEASUREMENT],
"water_pressure": ATTR_PRESSURE,
}
@ -249,6 +305,7 @@ class SmileSensor(SmileGateway, SensorEntity):
self._dev_class = None
self._icon = None
self._state = None
self._state_class = None
self._unit_of_measurement = None
if dev_id == self._api.heater_id:
@ -282,6 +339,11 @@ class SmileSensor(SmileGateway, SensorEntity):
"""Return the unit of measurement of this entity, if any."""
return self._unit_of_measurement
@property
def state_class(self):
"""Return the state_class of this entity."""
return self._state_class
class PwThermostatSensor(SmileSensor):
"""Thermostat (or generic) sensor devices."""
@ -294,6 +356,7 @@ class PwThermostatSensor(SmileSensor):
self._model = sensor_type[SENSOR_MAP_MODEL]
self._unit_of_measurement = sensor_type[SENSOR_MAP_UOM]
self._dev_class = sensor_type[SENSOR_MAP_DEVICE_CLASS]
self._state_class = sensor_type[SENSOR_MAP_STATE_CLASS]
@callback
def _async_process_data(self):
@ -363,6 +426,7 @@ class PwPowerSensor(SmileSensor):
self._unit_of_measurement = sensor_type[SENSOR_MAP_UOM]
self._dev_class = sensor_type[SENSOR_MAP_DEVICE_CLASS]
self._state_class = sensor_type[SENSOR_MAP_STATE_CLASS]
if dev_id == self._api.gateway_id:
self._model = "P1 DSMR"