From 0329d0f2465084cd95c888032fd405cc56fe7643 Mon Sep 17 00:00:00 2001
From: Erik Montnemery <erik@montnemery.com>
Date: Wed, 18 Aug 2021 14:18:51 +0200
Subject: [PATCH] Remove last_reset attribute and set state class to
 total_increasing for tibber energy sensors (#54799)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Remove last_reset attribute from tibber energy sensors

* Remove reset_type, fix merge

* Update homeassistant/components/tibber/sensor.py

Co-authored-by: Franck Nijhof <git@frenck.dev>

Co-authored-by: Daniel Hjelseth Høyer <mail@dahoiv.net>
Co-authored-by: Franck Nijhof <git@frenck.dev>
---
 homeassistant/components/tibber/sensor.py | 108 ++++++----------------
 1 file changed, 30 insertions(+), 78 deletions(-)

diff --git a/homeassistant/components/tibber/sensor.py b/homeassistant/components/tibber/sensor.py
index 080da3fca13..d376bf0a7d5 100644
--- a/homeassistant/components/tibber/sensor.py
+++ b/homeassistant/components/tibber/sensor.py
@@ -2,9 +2,7 @@
 from __future__ import annotations
 
 import asyncio
-from dataclasses import dataclass
 from datetime import timedelta
-from enum import Enum
 import logging
 from random import randrange
 
@@ -19,6 +17,7 @@ from homeassistant.components.sensor import (
     DEVICE_CLASS_SIGNAL_STRENGTH,
     DEVICE_CLASS_VOLTAGE,
     STATE_CLASS_MEASUREMENT,
+    STATE_CLASS_TOTAL_INCREASING,
     SensorEntity,
     SensorEntityDescription,
 )
@@ -49,166 +48,143 @@ PARALLEL_UPDATES = 0
 SIGNAL_UPDATE_ENTITY = "tibber_rt_update_{}"
 
 
-class ResetType(Enum):
-    """Data reset type."""
-
-    HOURLY = "hourly"
-    DAILY = "daily"
-    NEVER = "never"
-
-
-@dataclass
-class TibberSensorEntityDescription(SensorEntityDescription):
-    """Describes Tibber sensor entity."""
-
-    reset_type: ResetType | None = None
-
-
-RT_SENSORS: tuple[TibberSensorEntityDescription, ...] = (
-    TibberSensorEntityDescription(
+RT_SENSORS: tuple[SensorEntityDescription, ...] = (
+    SensorEntityDescription(
         key="averagePower",
         name="average power",
         device_class=DEVICE_CLASS_POWER,
         native_unit_of_measurement=POWER_WATT,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="power",
         name="power",
         device_class=DEVICE_CLASS_POWER,
         state_class=STATE_CLASS_MEASUREMENT,
         native_unit_of_measurement=POWER_WATT,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="powerProduction",
         name="power production",
         device_class=DEVICE_CLASS_POWER,
         state_class=STATE_CLASS_MEASUREMENT,
         native_unit_of_measurement=POWER_WATT,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="minPower",
         name="min power",
         device_class=DEVICE_CLASS_POWER,
         native_unit_of_measurement=POWER_WATT,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="maxPower",
         name="max power",
         device_class=DEVICE_CLASS_POWER,
         native_unit_of_measurement=POWER_WATT,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="accumulatedConsumption",
         name="accumulated consumption",
         device_class=DEVICE_CLASS_ENERGY,
         native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
-        state_class=STATE_CLASS_MEASUREMENT,
-        reset_type=ResetType.DAILY,
+        state_class=STATE_CLASS_TOTAL_INCREASING,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="accumulatedConsumptionLastHour",
         name="accumulated consumption current hour",
         device_class=DEVICE_CLASS_ENERGY,
         native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
-        state_class=STATE_CLASS_MEASUREMENT,
-        reset_type=ResetType.HOURLY,
+        state_class=STATE_CLASS_TOTAL_INCREASING,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="accumulatedProduction",
         name="accumulated production",
         device_class=DEVICE_CLASS_ENERGY,
         native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
-        state_class=STATE_CLASS_MEASUREMENT,
-        reset_type=ResetType.DAILY,
+        state_class=STATE_CLASS_TOTAL_INCREASING,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="accumulatedProductionLastHour",
         name="accumulated production current hour",
         device_class=DEVICE_CLASS_ENERGY,
         native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
-        state_class=STATE_CLASS_MEASUREMENT,
-        reset_type=ResetType.HOURLY,
+        state_class=STATE_CLASS_TOTAL_INCREASING,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="lastMeterConsumption",
         name="last meter consumption",
         device_class=DEVICE_CLASS_ENERGY,
         native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
-        state_class=STATE_CLASS_MEASUREMENT,
-        reset_type=ResetType.NEVER,
+        state_class=STATE_CLASS_TOTAL_INCREASING,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="lastMeterProduction",
         name="last meter production",
         device_class=DEVICE_CLASS_ENERGY,
         native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
-        state_class=STATE_CLASS_MEASUREMENT,
-        reset_type=ResetType.NEVER,
+        state_class=STATE_CLASS_TOTAL_INCREASING,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="voltagePhase1",
         name="voltage phase1",
         device_class=DEVICE_CLASS_VOLTAGE,
         native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
         state_class=STATE_CLASS_MEASUREMENT,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="voltagePhase2",
         name="voltage phase2",
         device_class=DEVICE_CLASS_VOLTAGE,
         native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
         state_class=STATE_CLASS_MEASUREMENT,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="voltagePhase3",
         name="voltage phase3",
         device_class=DEVICE_CLASS_VOLTAGE,
         native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
         state_class=STATE_CLASS_MEASUREMENT,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="currentL1",
         name="current L1",
         device_class=DEVICE_CLASS_CURRENT,
         native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
         state_class=STATE_CLASS_MEASUREMENT,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="currentL2",
         name="current L2",
         device_class=DEVICE_CLASS_CURRENT,
         native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
         state_class=STATE_CLASS_MEASUREMENT,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="currentL3",
         name="current L3",
         device_class=DEVICE_CLASS_CURRENT,
         native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
         state_class=STATE_CLASS_MEASUREMENT,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="signalStrength",
         name="signal strength",
         device_class=DEVICE_CLASS_SIGNAL_STRENGTH,
         native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
         state_class=STATE_CLASS_MEASUREMENT,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="accumulatedReward",
         name="accumulated reward",
         device_class=DEVICE_CLASS_MONETARY,
         state_class=STATE_CLASS_MEASUREMENT,
-        reset_type=ResetType.DAILY,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="accumulatedCost",
         name="accumulated cost",
         device_class=DEVICE_CLASS_MONETARY,
         state_class=STATE_CLASS_MEASUREMENT,
-        reset_type=ResetType.DAILY,
     ),
-    TibberSensorEntityDescription(
+    SensorEntityDescription(
         key="powerFactor",
         name="power factor",
         device_class=DEVICE_CLASS_POWER_FACTOR,
@@ -376,12 +352,10 @@ class TibberSensorElPrice(TibberSensor):
 class TibberSensorRT(TibberSensor, update_coordinator.CoordinatorEntity):
     """Representation of a Tibber sensor for real time consumption."""
 
-    entity_description: TibberSensorEntityDescription
-
     def __init__(
         self,
         tibber_home,
-        description: TibberSensorEntityDescription,
+        description: SensorEntityDescription,
         initial_state,
         coordinator: TibberRtDataCoordinator,
     ):
@@ -397,18 +371,6 @@ class TibberSensorRT(TibberSensor, update_coordinator.CoordinatorEntity):
 
         if description.key in ("accumulatedCost", "accumulatedReward"):
             self._attr_native_unit_of_measurement = tibber_home.currency
-        if description.reset_type == ResetType.NEVER:
-            self._attr_last_reset = dt_util.utc_from_timestamp(0)
-        elif description.reset_type == ResetType.DAILY:
-            self._attr_last_reset = dt_util.as_utc(
-                dt_util.now().replace(hour=0, minute=0, second=0, microsecond=0)
-            )
-        elif description.reset_type == ResetType.HOURLY:
-            self._attr_last_reset = dt_util.as_utc(
-                dt_util.now().replace(minute=0, second=0, microsecond=0)
-            )
-        else:
-            self._attr_last_reset = None
 
     @property
     def available(self):
@@ -422,16 +384,6 @@ class TibberSensorRT(TibberSensor, update_coordinator.CoordinatorEntity):
         state = live_measurement.get(self.entity_description.key)
         if state is None:
             return
-        timestamp = dt_util.parse_datetime(live_measurement["timestamp"])
-        if timestamp is not None and state < self.state:
-            if self.entity_description.reset_type == ResetType.DAILY:
-                self._attr_last_reset = dt_util.as_utc(
-                    timestamp.replace(hour=0, minute=0, second=0, microsecond=0)
-                )
-            elif self.entity_description.reset_type == ResetType.HOURLY:
-                self._attr_last_reset = dt_util.as_utc(
-                    timestamp.replace(minute=0, second=0, microsecond=0)
-                )
         if self.entity_description.key == "powerFactor":
             state *= 100.0
         self._attr_native_value = state
-- 
GitLab