1
0
mirror of https://github.com/home-assistant/core.git synced 2026-02-15 07:36:16 +00:00

Add solar production sensors to neurio_energy (#159533)

This commit is contained in:
W7RZL
2025-12-23 11:26:43 -08:00
committed by GitHub
parent a33a4b6d9d
commit 85311e3def

View File

@@ -29,9 +29,13 @@ CONF_SENSOR_ID = "sensor_id"
ACTIVE_NAME = "Energy Usage"
DAILY_NAME = "Daily Energy Usage"
ACTIVE_GENERATION_NAME = "Energy Production"
DAILY_GENERATION_NAME = "Daily Energy Production"
ACTIVE_TYPE = "active"
DAILY_TYPE = "daily"
ACTIVE_GENERATION_TYPE = "active_generation"
DAILY_GENERATION_TYPE = "daily_generation"
MIN_TIME_BETWEEN_DAILY_UPDATES = timedelta(seconds=150)
@@ -76,6 +80,18 @@ def setup_platform(
add_entities([NeurioEnergy(data, ACTIVE_NAME, ACTIVE_TYPE, update_active)])
# Daily power sensor
add_entities([NeurioEnergy(data, DAILY_NAME, DAILY_TYPE, update_daily)])
# Active generation sensor
add_entities(
[
NeurioEnergy(
data, ACTIVE_GENERATION_NAME, ACTIVE_GENERATION_TYPE, update_active
)
]
)
# Daily generation sensor
add_entities(
[NeurioEnergy(data, DAILY_GENERATION_NAME, DAILY_GENERATION_TYPE, update_daily)]
)
class NeurioData:
@@ -89,6 +105,8 @@ class NeurioData:
self._daily_usage = None
self._active_power = None
self._daily_generation = None
self._active_generation = None
self._state = None
@@ -105,17 +123,29 @@ class NeurioData:
"""Return latest active power value."""
return self._active_power
@property
def daily_generation(self):
"""Return latest daily generation value."""
return self._daily_generation
@property
def active_generation(self):
"""Return latest active generation value."""
return self._active_generation
def get_active_power(self) -> None:
"""Return current power value."""
"""Update current power values."""
try:
sample = self.neurio_client.get_samples_live_last(self.sensor_id)
self._active_power = sample["consumptionPower"]
self._active_generation = sample.get("generationPower")
except (requests.exceptions.RequestException, ValueError, KeyError):
_LOGGER.warning("Could not update current power usage")
def get_daily_usage(self) -> None:
"""Return current daily power usage."""
"""Update current daily power usage and generation."""
kwh = 0
gen_kwh = 0
start_time = dt_util.start_of_local_day().astimezone(dt_util.UTC).isoformat()
end_time = dt_util.utcnow().isoformat()
@@ -131,8 +161,10 @@ class NeurioData:
for result in history:
kwh += result["consumptionEnergy"] / 3600000
gen_kwh += result.get("generationEnergy", 0) / 3600000
self._daily_usage = round(kwh, 2)
self._daily_generation = round(gen_kwh, 2)
class NeurioEnergy(SensorEntity):
@@ -156,6 +188,16 @@ class NeurioEnergy(SensorEntity):
self._unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR
self._attr_device_class = SensorDeviceClass.ENERGY
self._attr_state_class = SensorStateClass.TOTAL_INCREASING
elif sensor_type == ACTIVE_GENERATION_TYPE:
self._attr_icon = "mdi:solar-power"
self._unit_of_measurement = UnitOfPower.WATT
self._attr_device_class = SensorDeviceClass.POWER
self._attr_state_class = SensorStateClass.MEASUREMENT
elif sensor_type == DAILY_GENERATION_TYPE:
self._attr_icon = "mdi:solar-power"
self._unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR
self._attr_device_class = SensorDeviceClass.ENERGY
self._attr_state_class = SensorStateClass.TOTAL_INCREASING
@property
def name(self):
@@ -180,3 +222,7 @@ class NeurioEnergy(SensorEntity):
self._state = self._data.active_power
elif self._sensor_type == DAILY_TYPE:
self._state = self._data.daily_usage
elif self._sensor_type == ACTIVE_GENERATION_TYPE:
self._state = self._data.active_generation
elif self._sensor_type == DAILY_GENERATION_TYPE:
self._state = self._data.daily_generation