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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user