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 mapping
SENSOR_MAP_DEVICE_CLASS = 2 SENSOR_MAP_DEVICE_CLASS = 2
SENSOR_MAP_ICON = 3
SENSOR_MAP_MODEL = 0 SENSOR_MAP_MODEL = 0
SENSOR_MAP_STATE_CLASS = 3
SENSOR_MAP_UOM = 1 SENSOR_MAP_UOM = 1
# Default directives # Default directives

View File

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