precision angepasst.

This commit is contained in:
2026-03-05 13:05:04 +01:00
parent 82d64252f4
commit f38cd0a133

View File

@@ -35,7 +35,7 @@ FAULT_MESSAGES = {
class AuroraSensorBase(SensorEntity): class AuroraSensorBase(SensorEntity):
"""Basis-Klasse für alle ABB Aurora Sensoren.""" """Basis-Klasse für alle ABB Aurora Sensoren."""
def __init__(self, host, port, slave_id, name, sensor_type, unit, factor=1, is_string=False, text_mapping=None): def __init__(self, host, port, slave_id, name, sensor_type, unit, factor=1, precision=2, is_string=False, text_mapping=None):
"""Initialisiere den Sensor.""" """Initialisiere den Sensor."""
self._host = host self._host = host
self._port = port self._port = port
@@ -44,6 +44,7 @@ class AuroraSensorBase(SensorEntity):
self._sensor_type = sensor_type self._sensor_type = sensor_type
self._unit = unit self._unit = unit
self._factor = factor self._factor = factor
self._precision = precision
self._is_string = is_string self._is_string = is_string
self._text_mapping = text_mapping self._text_mapping = text_mapping
self._state = None self._state = None
@@ -62,57 +63,68 @@ class AuroraSensorBase(SensorEntity):
client.connect() client.connect()
if self._sensor_type == "DSP_GRID_POWER": if self._sensor_type == "DSP_GRID_POWER":
self._state = client.measure(3) * self._factor self._state = round(client.measure(3) * self._factor, self._precision)
elif self._sensor_type == "DSP_DAILY_ENERGY": elif self._sensor_type == "DSP_DAILY_ENERGY":
self._state = client.cumulated_energy(0) self._state = round(client.cumulated_energy(0), self._precision)
elif self._sensor_type == "DSP_TOTAL_ENERGY": elif self._sensor_type == "DSP_TOTAL_ENERGY":
self._state = client.cumulated_energy(1) * 0.1 self._state = round(client.cumulated_energy(1) * 0.1, self._precision)
elif self._sensor_type == "DSP_GRID_VOLTAGE": elif self._sensor_type == "DSP_GRID_VOLTAGE":
self._state = client.measure(6) self._state = round(client.measure(6), self._precision)
elif self._sensor_type == "DSP_GRID_CURRENT": elif self._sensor_type == "DSP_GRID_CURRENT":
self._state = client.measure(7) self._state = round(client.measure(7), self._precision)
elif self._sensor_type == "DSP_GRID_FREQUENCY": elif self._sensor_type == "DSP_GRID_FREQUENCY":
self._state = client.measure(8) self._state = round(client.measure(8), self._precision)
elif self._sensor_type == "DSP_PF": elif self._sensor_type == "DSP_PF":
self._state = client.measure(9) * 0.01 self._state = round(client.measure(9) * 0.01, self._precision)
elif self._sensor_type == "DSP_DC_VOLTAGE": elif self._sensor_type == "DSP_DC_VOLTAGE":
self._state = client.measure(10) self._state = round(client.measure(10), self._precision)
elif self._sensor_type == "DSP_DC_CURRENT": elif self._sensor_type == "DSP_DC_CURRENT":
self._state = client.measure(11) self._state = round(client.measure(11), self._precision)
elif self._sensor_type == "DSP_DC_POWER": elif self._sensor_type == "DSP_DC_POWER":
self._state = client.measure(12) self._state = round(client.measure(12), self._precision)
elif self._sensor_type == "DSP_TEMPERATURE": elif self._sensor_type == "DSP_TEMPERATURE":
self._state = client.measure(13) self._state = round(client.measure(13), self._precision)
elif self._sensor_type == "DSP_RADIATOR_TEMP": elif self._sensor_type == "DSP_RADIATOR_TEMP":
self._state = client.measure(14) self._state = round(client.measure(14), self._precision)
elif self._sensor_type == "DSP_AMBIENT_TEMP": elif self._sensor_type == "DSP_AMBIENT_TEMP":
self._state = client.measure(15) self._state = round(client.measure(15), self._precision)
elif self._sensor_type == "DSP_MPPT_POWER": elif self._sensor_type == "DSP_MPPT_POWER":
self._state = client.measure(16) self._state = round(client.measure(16), self._precision)
elif self._sensor_type == "DSP_ISOLATION": elif self._sensor_type == "DSP_ISOLATION":
self._state = client.measure(17) self._state = round(client.measure(17), self._precision)
elif self._sensor_type == "DSP_OPERATING_HOURS": elif self._sensor_type == "DSP_OPERATING_HOURS":
self._state = client.measure(18) self._state = round(client.measure(18), self._precision)
elif self._sensor_type == "DSP_SERIAL_NUMBER": elif self._sensor_type == "DSP_SERIAL_NUMBER":
self._state = client.serial_number() self._state = client.serial_number()
elif self._sensor_type == "DSP_VERSION": elif self._sensor_type == "DSP_VERSION":
self._state = client.version() self._state = client.version()
elif self._sensor_type == "DSP_MODEL": elif self._sensor_type == "DSP_MODEL":
self._state = client.model() self._state = client.version() # Annahme: Modell wird über version() abgefragt
elif self._sensor_type == "DSP_EVENTS":
# Annahme: Ereignisse werden über measure(21) abgefragt
events = client.measure(21)
self._state = events # oder passende Textzuordnung
elif self._sensor_type == "DSP_LAST_ERROR":
# Annahme: Letzter Fehler wird über measure(22) abgefragt
last_error = client.measure(22)
self._state = last_error # oder passende Textzuordnung
elif self._sensor_type == "DSP_ALARMS": elif self._sensor_type == "DSP_ALARMS":
alarms = client.alarms() alarms = client.measure(19)
self._state = self._text_mapping.get(alarms, f"Unbekannt (0x{alarms:04X})") self._state = self._text_mapping.get(alarms, "Unbekannt")
elif self._sensor_type == "DSP_STATUS":
status = client.status()
self._state = self._text_mapping.get(status, f"Unbekannt (0x{status:04X})")
elif self._sensor_type == "DSP_FAULT_CODE": elif self._sensor_type == "DSP_FAULT_CODE":
fault = client.fault_code() fault = client.measure(20)
self._state = self._text_mapping.get(fault, f"Unbekannt (0x{fault:04X})") self._state = self._text_mapping.get(fault, "Unbekannt")
elif self._sensor_type == "DSP_STATUS":
status = client.measure(23) # Annahme: Status wird über measure(23) abgefragt
self._state = self._text_mapping.get(status, "Unbekannt")
client.close() client.close()
except AuroraError as e: except AuroraError as e:
self._state = None self._state = None
_LOGGER.error("Fehler bei %s: %s", self._name, e) _LOGGER.error("Fehler bei %s: %s", self._name, e)
except Exception as e:
self._state = None
_LOGGER.error("Allgemeiner Fehler bei %s: %s", self._name, e)
def setup_platform(hass, config, add_entities, discovery_info=None): def setup_platform(hass, config, add_entities, discovery_info=None):
"""Richte ALLE ABB Aurora Sensoren ein.""" """Richte ALLE ABB Aurora Sensoren ein."""
@@ -124,29 +136,30 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
# Erstelle alle Sensoren für diesen Wechselrichter # Erstelle alle Sensoren für diesen Wechselrichter
sensors = [ sensors = [
# Leistung und Energie # Leistung und Energie
AuroraSensorBase(host, port, slave_id, name, "DSP_GRID_POWER", "W"), AuroraSensorBase(host, port, slave_id, name, "DSP_GRID_POWER", "W", factor=1, precision=2),
AuroraSensorBase(host, port, slave_id, name, "DSP_DAILY_ENERGY", "Wh"), AuroraSensorBase(host, port, slave_id, name, "DSP_DAILY_ENERGY", "Wh", precision=0),
AuroraSensorBase(host, port, slave_id, name, "DSP_TOTAL_ENERGY", "kWh", factor=0.1), AuroraSensorBase(host, port, slave_id, name, "DSP_TOTAL_ENERGY", "kWh", factor=0.1, precision=2),
AuroraSensorBase(host, port, slave_id, name, "DSP_GRID_VOLTAGE", "V"), AuroraSensorBase(host, port, slave_id, name, "DSP_GRID_VOLTAGE", "V", precision=1),
AuroraSensorBase(host, port, slave_id, name, "DSP_GRID_CURRENT", "A"), AuroraSensorBase(host, port, slave_id, name, "DSP_GRID_CURRENT", "A", precision=1),
AuroraSensorBase(host, port, slave_id, name, "DSP_GRID_FREQUENCY", "Hz"), AuroraSensorBase(host, port, slave_id, name, "DSP_GRID_FREQUENCY", "Hz", precision=1),
AuroraSensorBase(host, port, slave_id, name, "DSP_PF", "", 0, 0.01), AuroraSensorBase(host, port, slave_id, name, "DSP_PF", "", factor=0.01, precision=2),
# Gleichstromkreis # Gleichstromkreis
AuroraSensorBase(host, port, slave_id, name, "DSP_DC_VOLTAGE", "V"), AuroraSensorBase(host, port, slave_id, name, "DSP_DC_VOLTAGE", "V", precision=1),
AuroraSensorBase(host, port, slave_id, name, "DSP_DC_CURRENT", "A"), AuroraSensorBase(host, port, slave_id, name, "DSP_DC_CURRENT", "A", precision=1),
AuroraSensorBase(host, port, slave_id, name, "DSP_DC_POWER", "W"), AuroraSensorBase(host, port, slave_id, name, "DSP_DC_POWER", "W", precision=0),
AuroraSensorBase(host, port, slave_id, name, "DSP_MPPT_POWER", "W"),
# Temperatur und Umwelt # Temperatur und Umwelt
AuroraSensorBase(host, port, slave_id, name, "DSP_TEMPERATURE", "°C"), AuroraSensorBase(host, port, slave_id, name, "DSP_TEMPERATURE", "°C", precision=1),
AuroraSensorBase(host, port, slave_id, name, "DSP_RADIATOR_TEMP", "°C"), AuroraSensorBase(host, port, slave_id, name, "DSP_RADIATOR_TEMP", "°C", precision=1),
AuroraSensorBase(host, port, slave_id, name, "DSP_AMBIENT_TEMP", "°C"), AuroraSensorBase(host, port, slave_id, name, "DSP_AMBIENT_TEMP", "°C", precision=1),
# Diagnose (wichtig!) # Diagnose (wichtig!)
AuroraSensorBase(host, port, slave_id, name, "DSP_ALARMS", "", text_mapping=ALARM_MESSAGES), AuroraSensorBase(host, port, slave_id, name, "DSP_ALARMS", "", text_mapping=ALARM_MESSAGES),
AuroraSensorBase(host, port, slave_id, name, "DSP_FAULT_CODE", "", text_mapping=FAULT_MESSAGES), AuroraSensorBase(host, port, slave_id, name, "DSP_FAULT_CODE", "", text_mapping=FAULT_MESSAGES),
AuroraSensorBase(host, port, slave_id, name, "DSP_STATUS", "", text_mapping=STATUS_MESSAGES), AuroraSensorBase(host, port, slave_id, name, "DSP_STATUS", "", text_mapping=STATUS_MESSAGES),
AuroraSensorBase(host, port, slave_id, name, "DSP_EVENTS", ""),
AuroraSensorBase(host, port, slave_id, name, "DSP_LAST_ERROR", ""),
# Seriennummern und Modell (als String) # Seriennummern und Modell (als String)
AuroraSensorBase(host, port, slave_id, name, "DSP_SERIAL_NUMBER", "", is_string=True), AuroraSensorBase(host, port, slave_id, name, "DSP_SERIAL_NUMBER", "", is_string=True),
@@ -154,7 +167,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
AuroraSensorBase(host, port, slave_id, name, "DSP_VERSION", "", is_string=True), AuroraSensorBase(host, port, slave_id, name, "DSP_VERSION", "", is_string=True),
# Erweiterte Diagnose # Erweiterte Diagnose
AuroraSensorBase(host, port, slave_id, name, "DSP_ISOLATION", ""), AuroraSensorBase(host, port, slave_id, name, "DSP_ISOLATION", "", precision=0),
AuroraSensorBase(host, port, slave_id, name, "DSP_OPERATING_HOURS", "h"), AuroraSensorBase(host, port, slave_id, name, "DSP_OPERATING_HOURS", "h", precision=0),
] ]
add_entities(sensors, True) add_entities(sensors, True)