mirror of
https://github.com/home-assistant/core.git
synced 2025-07-13 08:17:08 +00:00
Add state class and last reset in kostal_plenticore (#54084)
* Add state class and implement in kostal_plenticore * Add support for more entity variants * Add the state_class to the total values too * Reformat kostal const.py * Add `last_reset` to kostal_plenticore entities when `state_class` is set Also reformat sensor.py * Fix import * Remove the constants from the homeassistant constants file * Use sensor constants for the state_class * Reformat * Reformat * Move last_reset from sensor.py into const.py * Remove last_reset on PERCENTAGE entities * Address lint issues * Update homeassistant/components/kostal_plenticore/sensor.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Import datetime * Apply suggestions from code review * Fix isort * Fix more isort Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
parent
98bcdc2cf5
commit
8b8f3b55b6
@ -1,5 +1,10 @@
|
|||||||
"""Constants for the Kostal Plenticore Solar Inverter integration."""
|
"""Constants for the Kostal Plenticore Solar Inverter integration."""
|
||||||
|
|
||||||
|
from homeassistant.components.sensor import (
|
||||||
|
ATTR_LAST_RESET,
|
||||||
|
ATTR_STATE_CLASS,
|
||||||
|
STATE_CLASS_MEASUREMENT,
|
||||||
|
)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_DEVICE_CLASS,
|
ATTR_DEVICE_CLASS,
|
||||||
ATTR_ICON,
|
ATTR_ICON,
|
||||||
@ -11,11 +16,14 @@ from homeassistant.const import (
|
|||||||
PERCENTAGE,
|
PERCENTAGE,
|
||||||
POWER_WATT,
|
POWER_WATT,
|
||||||
)
|
)
|
||||||
|
from homeassistant.util.dt import utc_from_timestamp
|
||||||
|
|
||||||
DOMAIN = "kostal_plenticore"
|
DOMAIN = "kostal_plenticore"
|
||||||
|
|
||||||
ATTR_ENABLED_DEFAULT = "entity_registry_enabled_default"
|
ATTR_ENABLED_DEFAULT = "entity_registry_enabled_default"
|
||||||
|
|
||||||
|
LAST_RESET_NEVER = utc_from_timestamp(0)
|
||||||
|
|
||||||
# Defines all entities for process data.
|
# Defines all entities for process data.
|
||||||
#
|
#
|
||||||
# Each entry is defined with a tuple of these values:
|
# Each entry is defined with a tuple of these values:
|
||||||
@ -40,6 +48,7 @@ SENSOR_PROCESS_DATA = [
|
|||||||
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||||
ATTR_ENABLED_DEFAULT: True,
|
ATTR_ENABLED_DEFAULT: True,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
},
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
@ -51,6 +60,7 @@ SENSOR_PROCESS_DATA = [
|
|||||||
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||||
ATTR_ENABLED_DEFAULT: True,
|
ATTR_ENABLED_DEFAULT: True,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
},
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
@ -65,28 +75,44 @@ SENSOR_PROCESS_DATA = [
|
|||||||
"devices:local",
|
"devices:local",
|
||||||
"HomeGrid_P",
|
"HomeGrid_P",
|
||||||
"Home Power from Grid",
|
"Home Power from Grid",
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: POWER_WATT, ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER},
|
{
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||||
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"devices:local",
|
"devices:local",
|
||||||
"HomeOwn_P",
|
"HomeOwn_P",
|
||||||
"Home Power from Own",
|
"Home Power from Own",
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: POWER_WATT, ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER},
|
{
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||||
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"devices:local",
|
"devices:local",
|
||||||
"HomePv_P",
|
"HomePv_P",
|
||||||
"Home Power from PV",
|
"Home Power from PV",
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: POWER_WATT, ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER},
|
{
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||||
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"devices:local",
|
"devices:local",
|
||||||
"Home_P",
|
"Home_P",
|
||||||
"Home Power",
|
"Home Power",
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: POWER_WATT, ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER},
|
{
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||||
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@ -97,6 +123,7 @@ SENSOR_PROCESS_DATA = [
|
|||||||
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||||
ATTR_ENABLED_DEFAULT: True,
|
ATTR_ENABLED_DEFAULT: True,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
},
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
@ -104,28 +131,44 @@ SENSOR_PROCESS_DATA = [
|
|||||||
"devices:local:pv1",
|
"devices:local:pv1",
|
||||||
"P",
|
"P",
|
||||||
"DC1 Power",
|
"DC1 Power",
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: POWER_WATT, ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER},
|
{
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||||
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"devices:local:pv2",
|
"devices:local:pv2",
|
||||||
"P",
|
"P",
|
||||||
"DC2 Power",
|
"DC2 Power",
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: POWER_WATT, ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER},
|
{
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||||
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"devices:local:pv3",
|
"devices:local:pv3",
|
||||||
"P",
|
"P",
|
||||||
"DC3 Power",
|
"DC3 Power",
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: POWER_WATT, ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER},
|
{
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||||
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"devices:local",
|
"devices:local",
|
||||||
"PV2Bat_P",
|
"PV2Bat_P",
|
||||||
"PV to Battery Power",
|
"PV to Battery Power",
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: POWER_WATT, ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER},
|
{
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||||
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@ -139,14 +182,18 @@ SENSOR_PROCESS_DATA = [
|
|||||||
"devices:local:battery",
|
"devices:local:battery",
|
||||||
"Cycles",
|
"Cycles",
|
||||||
"Battery Cycles",
|
"Battery Cycles",
|
||||||
{ATTR_ICON: "mdi:recycle"},
|
{ATTR_ICON: "mdi:recycle", ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"devices:local:battery",
|
"devices:local:battery",
|
||||||
"P",
|
"P",
|
||||||
"Battery Power",
|
"Battery Power",
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: POWER_WATT, ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER},
|
{
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
|
||||||
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_POWER,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@ -174,7 +221,11 @@ SENSOR_PROCESS_DATA = [
|
|||||||
"scb:statistic:EnergyFlow",
|
"scb:statistic:EnergyFlow",
|
||||||
"Statistic:Autarky:Total",
|
"Statistic:Autarky:Total",
|
||||||
"Autarky Total",
|
"Autarky Total",
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE, ATTR_ICON: "mdi:chart-donut"},
|
{
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
|
||||||
|
ATTR_ICON: "mdi:chart-donut",
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@ -202,7 +253,11 @@ SENSOR_PROCESS_DATA = [
|
|||||||
"scb:statistic:EnergyFlow",
|
"scb:statistic:EnergyFlow",
|
||||||
"Statistic:OwnConsumptionRate:Total",
|
"Statistic:OwnConsumptionRate:Total",
|
||||||
"Own Consumption Rate Total",
|
"Own Consumption Rate Total",
|
||||||
{ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE, ATTR_ICON: "mdi:chart-donut"},
|
{
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
|
||||||
|
ATTR_ICON: "mdi:chart-donut",
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
},
|
||||||
"format_round",
|
"format_round",
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@ -249,6 +304,8 @@ SENSOR_PROCESS_DATA = [
|
|||||||
{
|
{
|
||||||
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
ATTR_LAST_RESET: LAST_RESET_NEVER,
|
||||||
},
|
},
|
||||||
"format_energy",
|
"format_energy",
|
||||||
),
|
),
|
||||||
@ -289,6 +346,8 @@ SENSOR_PROCESS_DATA = [
|
|||||||
{
|
{
|
||||||
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
ATTR_LAST_RESET: LAST_RESET_NEVER,
|
||||||
},
|
},
|
||||||
"format_energy",
|
"format_energy",
|
||||||
),
|
),
|
||||||
@ -329,6 +388,8 @@ SENSOR_PROCESS_DATA = [
|
|||||||
{
|
{
|
||||||
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
ATTR_LAST_RESET: LAST_RESET_NEVER,
|
||||||
},
|
},
|
||||||
"format_energy",
|
"format_energy",
|
||||||
),
|
),
|
||||||
@ -369,6 +430,8 @@ SENSOR_PROCESS_DATA = [
|
|||||||
{
|
{
|
||||||
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
ATTR_LAST_RESET: LAST_RESET_NEVER,
|
||||||
},
|
},
|
||||||
"format_energy",
|
"format_energy",
|
||||||
),
|
),
|
||||||
@ -409,6 +472,8 @@ SENSOR_PROCESS_DATA = [
|
|||||||
{
|
{
|
||||||
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
ATTR_LAST_RESET: LAST_RESET_NEVER,
|
||||||
},
|
},
|
||||||
"format_energy",
|
"format_energy",
|
||||||
),
|
),
|
||||||
@ -449,6 +514,8 @@ SENSOR_PROCESS_DATA = [
|
|||||||
{
|
{
|
||||||
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
ATTR_LAST_RESET: LAST_RESET_NEVER,
|
||||||
},
|
},
|
||||||
"format_energy",
|
"format_energy",
|
||||||
),
|
),
|
||||||
@ -489,6 +556,8 @@ SENSOR_PROCESS_DATA = [
|
|||||||
{
|
{
|
||||||
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
ATTR_LAST_RESET: LAST_RESET_NEVER,
|
||||||
},
|
},
|
||||||
"format_energy",
|
"format_energy",
|
||||||
),
|
),
|
||||||
@ -530,6 +599,8 @@ SENSOR_PROCESS_DATA = [
|
|||||||
{
|
{
|
||||||
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
|
||||||
|
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||||
|
ATTR_LAST_RESET: LAST_RESET_NEVER,
|
||||||
},
|
},
|
||||||
"format_energy",
|
"format_energy",
|
||||||
),
|
),
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
"""Platform for Kostal Plenticore sensors."""
|
"""Platform for Kostal Plenticore sensors."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from datetime import timedelta
|
from datetime import datetime, timedelta
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, Callable
|
from typing import Any, Callable
|
||||||
|
|
||||||
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.config_entries import ConfigEntry
|
||||||
from homeassistant.const import ATTR_DEVICE_CLASS, ATTR_ICON, ATTR_UNIT_OF_MEASUREMENT
|
from homeassistant.const import ATTR_DEVICE_CLASS, ATTR_ICON, ATTR_UNIT_OF_MEASUREMENT
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
@ -179,11 +183,21 @@ class PlenticoreDataSensor(CoordinatorEntity, SensorEntity):
|
|||||||
"""Return the class of this device, from component DEVICE_CLASSES."""
|
"""Return the class of this device, from component DEVICE_CLASSES."""
|
||||||
return self._sensor_data.get(ATTR_DEVICE_CLASS)
|
return self._sensor_data.get(ATTR_DEVICE_CLASS)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def state_class(self) -> str | None:
|
||||||
|
"""Return the class of the state of this device, from component STATE_CLASSES."""
|
||||||
|
return self._sensor_data.get(ATTR_STATE_CLASS)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def entity_registry_enabled_default(self) -> bool:
|
def entity_registry_enabled_default(self) -> bool:
|
||||||
"""Return if the entity should be enabled when first added to the entity registry."""
|
"""Return if the entity should be enabled when first added to the entity registry."""
|
||||||
return self._sensor_data.get(ATTR_ENABLED_DEFAULT, False)
|
return self._sensor_data.get(ATTR_ENABLED_DEFAULT, False)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def last_reset(self) -> datetime | None:
|
||||||
|
"""Return the last_reset time."""
|
||||||
|
return self._sensor_data.get(ATTR_LAST_RESET)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def state(self) -> Any | None:
|
def state(self) -> Any | None:
|
||||||
"""Return the state of the sensor."""
|
"""Return the state of the sensor."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user