Energy support for Solax inverters (#54654)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
This commit is contained in:
parent
69bc6bbe48
commit
6d7ad8903f
1 changed files with 47 additions and 4 deletions
|
@ -6,8 +6,23 @@ from solax import real_time_api
|
|||
from solax.inverter import InverterError
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity
|
||||
from homeassistant.const import CONF_IP_ADDRESS, CONF_PORT, TEMP_CELSIUS
|
||||
from homeassistant.components.sensor import (
|
||||
PLATFORM_SCHEMA,
|
||||
STATE_CLASS_MEASUREMENT,
|
||||
STATE_CLASS_TOTAL_INCREASING,
|
||||
SensorEntity,
|
||||
)
|
||||
from homeassistant.const import (
|
||||
CONF_IP_ADDRESS,
|
||||
CONF_PORT,
|
||||
DEVICE_CLASS_BATTERY,
|
||||
DEVICE_CLASS_CURRENT,
|
||||
DEVICE_CLASS_ENERGY,
|
||||
DEVICE_CLASS_POWER,
|
||||
DEVICE_CLASS_TEMPERATURE,
|
||||
DEVICE_CLASS_VOLTAGE,
|
||||
TEMP_CELSIUS,
|
||||
)
|
||||
from homeassistant.exceptions import PlatformNotReady
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.event import async_track_time_interval
|
||||
|
@ -34,10 +49,28 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
|||
async_track_time_interval(hass, endpoint.async_refresh, SCAN_INTERVAL)
|
||||
devices = []
|
||||
for sensor, (idx, unit) in api.inverter.sensor_map().items():
|
||||
device_class = state_class = None
|
||||
if unit == "C":
|
||||
device_class = DEVICE_CLASS_TEMPERATURE
|
||||
state_class = STATE_CLASS_MEASUREMENT
|
||||
unit = TEMP_CELSIUS
|
||||
elif unit == "kWh":
|
||||
device_class = DEVICE_CLASS_ENERGY
|
||||
state_class = STATE_CLASS_TOTAL_INCREASING
|
||||
elif unit == "V":
|
||||
device_class = DEVICE_CLASS_VOLTAGE
|
||||
state_class = STATE_CLASS_MEASUREMENT
|
||||
elif unit == "A":
|
||||
device_class = DEVICE_CLASS_CURRENT
|
||||
state_class = STATE_CLASS_MEASUREMENT
|
||||
elif unit == "W":
|
||||
device_class = DEVICE_CLASS_POWER
|
||||
state_class = STATE_CLASS_MEASUREMENT
|
||||
elif unit == "%":
|
||||
device_class = DEVICE_CLASS_BATTERY
|
||||
state_class = STATE_CLASS_MEASUREMENT
|
||||
uid = f"{serial}-{idx}"
|
||||
devices.append(Inverter(uid, serial, sensor, unit))
|
||||
devices.append(Inverter(uid, serial, sensor, unit, state_class, device_class))
|
||||
endpoint.sensors = devices
|
||||
async_add_entities(devices)
|
||||
|
||||
|
@ -75,13 +108,23 @@ class RealTimeDataEndpoint:
|
|||
class Inverter(SensorEntity):
|
||||
"""Class for a sensor."""
|
||||
|
||||
def __init__(self, uid, serial, key, unit):
|
||||
def __init__(
|
||||
self,
|
||||
uid,
|
||||
serial,
|
||||
key,
|
||||
unit,
|
||||
state_class=None,
|
||||
device_class=None,
|
||||
):
|
||||
"""Initialize an inverter sensor."""
|
||||
self.uid = uid
|
||||
self.serial = serial
|
||||
self.key = key
|
||||
self.value = None
|
||||
self.unit = unit
|
||||
self._attr_state_class = state_class
|
||||
self._attr_device_class = device_class
|
||||
|
||||
@property
|
||||
def native_value(self):
|
||||
|
|
Loading…
Add table
Reference in a new issue