Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 16 additions & 14 deletions homeassistant/components/fronius/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from homeassistant.components.sensor import (
PLATFORM_SCHEMA,
STATE_CLASS_MEASUREMENT,
STATE_CLASS_TOTAL_INCREASING,
SensorEntity,
)
from homeassistant.const import (
Expand All @@ -32,7 +33,6 @@
from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.event import async_track_time_interval
from homeassistant.util import dt

_LOGGER = logging.getLogger(__name__)

Expand Down Expand Up @@ -64,6 +64,17 @@
("voltage", DEVICE_CLASS_VOLTAGE),
]

PREFIX_STATE_CLASS_MAPPING = [
("state_of_charge", STATE_CLASS_MEASUREMENT),
("temperature", STATE_CLASS_MEASUREMENT),
("power_factor", STATE_CLASS_MEASUREMENT),
("power", STATE_CLASS_MEASUREMENT),
("energy", STATE_CLASS_TOTAL_INCREASING),
("current", STATE_CLASS_MEASUREMENT),
("timestamp", STATE_CLASS_MEASUREMENT),
("voltage", STATE_CLASS_MEASUREMENT),
]


def _device_id_validator(config):
"""Ensure that inverters have default id 1 and other devices 0."""
Expand Down Expand Up @@ -281,8 +292,6 @@ async def _update(self):
class FroniusTemplateSensor(SensorEntity):
"""Sensor for the single values (e.g. pv power, ac power)."""

_attr_state_class = STATE_CLASS_MEASUREMENT

def __init__(self, parent: FroniusAdapter, key: str) -> None:
"""Initialize a singular value sensor."""
self._key = key
Expand All @@ -292,6 +301,10 @@ def __init__(self, parent: FroniusAdapter, key: str) -> None:
if self._key.startswith(prefix):
self._attr_device_class = device_class
break
for prefix, state_class in PREFIX_STATE_CLASS_MAPPING:
if self._key.startswith(prefix):
self._attr_state_class = state_class
break

@property
def should_poll(self):
Expand All @@ -311,17 +324,6 @@ async def async_update(self):
self._attr_native_value = round(self._attr_native_value, 2)
self._attr_native_unit_of_measurement = state.get("unit")

@property
def last_reset(self) -> dt.dt.datetime | None:
"""Return the time when the sensor was last reset, if it is a meter."""
if self._key.endswith("day"):
return dt.start_of_local_day()
if self._key.endswith("year"):
return dt.start_of_local_day(dt.dt.date(dt.now().year, 1, 1))
if self._key.endswith("total") or self._key.startswith("energy_real"):
return dt.utc_from_timestamp(0)
return None

async def async_added_to_hass(self):
"""Register at parent component for updates."""
self.async_on_remove(self._parent.register(self))
Expand Down