From 394e044c6673d4d1c997764abca6dd6cac0eaa8d Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Mon, 24 May 2021 20:15:41 +0200 Subject: [PATCH] Add state classes to Toon (#50978) --- homeassistant/components/toon/const.py | 67 ++++++++++++++++++++++++- homeassistant/components/toon/sensor.py | 21 ++++---- 2 files changed, 76 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/toon/const.py b/homeassistant/components/toon/const.py index d1a8b702438..2946aacaa72 100644 --- a/homeassistant/components/toon/const.py +++ b/homeassistant/components/toon/const.py @@ -1,14 +1,17 @@ """Constants for the Toon integration.""" -from datetime import timedelta +from datetime import datetime, timedelta from homeassistant.components.binary_sensor import ( DEVICE_CLASS_CONNECTIVITY, DEVICE_CLASS_PROBLEM, ) from homeassistant.components.sensor import ( + ATTR_LAST_RESET, + ATTR_STATE_CLASS, DEVICE_CLASS_ENERGY, DEVICE_CLASS_POWER, DEVICE_CLASS_TEMPERATURE, + STATE_CLASS_MEASUREMENT, ) from homeassistant.const import ( ATTR_DEVICE_CLASS, @@ -127,6 +130,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + ATTR_LAST_RESET: None, }, "gas_average": { ATTR_NAME: "Average Gas Usage", @@ -136,6 +141,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:gas-cylinder", ATTR_DEFAULT_ENABLED: True, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "gas_average_daily": { ATTR_NAME: "Average Daily Gas Usage", @@ -145,6 +152,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:gas-cylinder", ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "gas_daily_usage": { ATTR_NAME: "Gas Usage Today", @@ -154,6 +163,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:gas-cylinder", ATTR_DEFAULT_ENABLED: True, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "gas_daily_cost": { ATTR_NAME: "Gas Cost Today", @@ -163,6 +174,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:gas-cylinder", ATTR_DEFAULT_ENABLED: True, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "gas_meter_reading": { ATTR_NAME: "Gas Meter", @@ -172,6 +185,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:gas-cylinder", ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + ATTR_LAST_RESET: datetime.fromtimestamp(0), }, "gas_value": { ATTR_NAME: "Current Gas Usage", @@ -181,6 +196,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:gas-cylinder", ATTR_DEFAULT_ENABLED: True, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "power_average": { ATTR_NAME: "Average Power Usage", @@ -190,6 +207,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "power_average_daily": { ATTR_NAME: "Average Daily Energy Usage", @@ -199,6 +218,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "power_daily_cost": { ATTR_NAME: "Energy Cost Today", @@ -208,6 +229,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:power-plug", ATTR_DEFAULT_ENABLED: True, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "power_daily_value": { ATTR_NAME: "Energy Usage Today", @@ -217,6 +240,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: True, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "power_meter_reading": { ATTR_NAME: "Electricity Meter Feed IN Tariff 1", @@ -226,6 +251,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + ATTR_LAST_RESET: datetime.fromtimestamp(0), }, "power_meter_reading_low": { ATTR_NAME: "Electricity Meter Feed IN Tariff 2", @@ -235,6 +262,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + ATTR_LAST_RESET: datetime.fromtimestamp(0), }, "power_value": { ATTR_NAME: "Current Power Usage", @@ -244,6 +273,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: True, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + ATTR_LAST_RESET: None, }, "solar_meter_reading_produced": { ATTR_NAME: "Electricity Meter Feed OUT Tariff 1", @@ -253,6 +284,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + ATTR_LAST_RESET: datetime.fromtimestamp(0), }, "solar_meter_reading_low_produced": { ATTR_NAME: "Electricity Meter Feed OUT Tariff 2", @@ -262,6 +295,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + ATTR_LAST_RESET: datetime.fromtimestamp(0), }, "solar_value": { ATTR_NAME: "Current Solar Power Production", @@ -271,6 +306,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: True, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + ATTR_LAST_RESET: None, }, "solar_maximum": { ATTR_NAME: "Max Solar Power Production Today", @@ -280,6 +317,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: True, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "solar_produced": { ATTR_NAME: "Solar Power Production to Grid", @@ -289,6 +328,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: True, + ATTR_STATE_CLASS: ATTR_MEASUREMENT, + ATTR_LAST_RESET: None, }, "power_usage_day_produced_solar": { ATTR_NAME: "Solar Energy Produced Today", @@ -298,6 +339,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: True, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "power_usage_day_to_grid_usage": { ATTR_NAME: "Energy Produced To Grid Today", @@ -307,6 +350,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "power_usage_day_from_grid_usage": { ATTR_NAME: "Energy Usage From Grid Today", @@ -316,6 +361,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "solar_average_produced": { ATTR_NAME: "Average Solar Power Production to Grid", @@ -325,6 +372,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER, ATTR_ICON: None, ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "thermostat_info_current_modulation_level": { ATTR_NAME: "Boiler Modulation Level", @@ -334,6 +383,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:percent", ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + ATTR_LAST_RESET: None, }, "power_usage_current_covered_by_solar": { ATTR_NAME: "Current Power Usage Covered By Solar", @@ -343,6 +394,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:solar-power", ATTR_DEFAULT_ENABLED: True, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + ATTR_LAST_RESET: None, }, "water_average": { ATTR_NAME: "Average Water Usage", @@ -352,6 +405,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:water", ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "water_average_daily": { ATTR_NAME: "Average Daily Water Usage", @@ -361,6 +416,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:water", ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "water_daily_usage": { ATTR_NAME: "Water Usage Today", @@ -370,6 +427,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:water", ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, "water_meter_reading": { ATTR_NAME: "Water Meter", @@ -379,6 +438,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:water", ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + ATTR_LAST_RESET: datetime.fromtimestamp(0), }, "water_value": { ATTR_NAME: "Current Water Usage", @@ -388,6 +449,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:water-pump", ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT, + ATTR_LAST_RESET: None, }, "water_daily_cost": { ATTR_NAME: "Water Cost Today", @@ -397,6 +460,8 @@ SENSOR_ENTITIES = { ATTR_DEVICE_CLASS: None, ATTR_ICON: "mdi:water-pump", ATTR_DEFAULT_ENABLED: False, + ATTR_STATE_CLASS: None, + ATTR_LAST_RESET: None, }, } diff --git a/homeassistant/components/toon/sensor.py b/homeassistant/components/toon/sensor.py index 36f5dedde3d..0e269c0bff3 100644 --- a/homeassistant/components/toon/sensor.py +++ b/homeassistant/components/toon/sensor.py @@ -1,7 +1,11 @@ """Support for Toon sensors.""" from __future__ import annotations -from homeassistant.components.sensor import SensorEntity +from homeassistant.components.sensor import ( + ATTR_LAST_RESET, + ATTR_STATE_CLASS, + SensorEntity, +) from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant @@ -124,6 +128,11 @@ class ToonSensor(ToonEntity, SensorEntity): name=SENSOR_ENTITIES[key][ATTR_NAME], ) + self._attr_last_reset = SENSOR_ENTITIES[key][ATTR_LAST_RESET] + self._attr_state_class = SENSOR_ENTITIES[key][ATTR_STATE_CLASS] + self._attr_unit_of_measurement = SENSOR_ENTITIES[key][ATTR_UNIT_OF_MEASUREMENT] + self._sttr_device_class = SENSOR_ENTITIES[key][ATTR_DEVICE_CLASS] + @property def unique_id(self) -> str: """Return the unique ID for this sensor.""" @@ -140,16 +149,6 @@ class ToonSensor(ToonEntity, SensorEntity): ) return getattr(section, SENSOR_ENTITIES[self.key][ATTR_MEASUREMENT]) - @property - def unit_of_measurement(self) -> str | None: - """Return the unit this state is expressed in.""" - return SENSOR_ENTITIES[self.key][ATTR_UNIT_OF_MEASUREMENT] - - @property - def device_class(self) -> str | None: - """Return the device class.""" - return SENSOR_ENTITIES[self.key][ATTR_DEVICE_CLASS] - class ToonElectricityMeterDeviceSensor(ToonSensor, ToonElectricityMeterDeviceEntity): """Defines a Electricity Meter sensor."""