diff --git a/homeassistant/components/plugwise/const.py b/homeassistant/components/plugwise/const.py index a7a5c92a21c..2c1867346c4 100644 --- a/homeassistant/components/plugwise/const.py +++ b/homeassistant/components/plugwise/const.py @@ -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 diff --git a/homeassistant/components/plugwise/sensor.py b/homeassistant/components/plugwise/sensor.py index 888f5bac5c2..6b33eccc753 100644 --- a/homeassistant/components/plugwise/sensor.py +++ b/homeassistant/components/plugwise/sensor.py @@ -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"