Der Lobas nutzt das SunSpec-Modbus-Protokoll zur Integration in Energiemanagementsysteme. Externe Systeme wie EMS, Leitsysteme oder SCADA greifen dadurch auf Daten von Wallboxen, Zählern und weiteren Komponenten zu.
Die Bereitstellung der Daten muss in den einzelnen Komponenten aktiviert werden. Öffne dazu die Ladepunkt- oder Zähler-Einstellungen über das Dashboard. Aktiviere im Abschnitt „Allgemein“ die Funktion „Daten über Modbus TCP Server bereitstellen“.
Ob der SunSpec-Server aktiv ist, wird über folgende Eigenschaften der Systemkonfiguration gesteuert. Sie lassen sich über die Konfigurations-GUI des LMB oder alternativ über den Endpunkt /cnf?cmd=set_sys_params ändern.
{
...
"sunspec_srv_addr" : "127.0.0.1:502", // Format: IP:PORT oder nur PORT
"sunspec_srv_id" : 1, // muss größer als 0 sein (0 = Server gestoppt)
"sunspec_heartbeat_timeout_enable" : false,
"sunspec_heartbeat_timeout_seconds" : 20,
...
}Hinweis: Informationen zu konfigurierten Zählern und Ladepunkten sind nur für Geräte verfügbar, bei denen das Flag sunspec_publish_dev_info gesetzt ist. Ohne dieses Flag erscheint das Gerät nicht im SunSpec-Server.
Das SunSpec-Protokoll basiert auf Modbus und bietet standardisierte Datenmodelle für die Energiebranche.
Nach Aktivierung des Modbus TCP Servers:
Wichtig: Ein von den Adressen abhängiges System sollte die exakte Blockadresse immer dynamisch über einen Scan ab Adresse 40'000 bestimmen. Es besteht keine Garantie, dass sich Blockadressen durch Erweiterungen nicht verschieben.
| Modell-Nr. | Adresse | Registerlänge | Komponente | Anmerkungen |
|---|---|---|---|---|
| 113 | variabel | 63 | Ladestation | |
| 124 | variabel | 26 | Batteriespeicher | |
| 213 | variabel | 127 | Zähler | Inkl. virtueller Zähler für Energieflüsse |
| 60000 | 40070 | 16 | Lobas-Einstellungen | Register können sich in zukünftigen Versionen ändern |
| 60001 | 40098 | 33 | CM Flags (bis 32) | Register können sich in zukünftigen Versionen ändern |
| 60002 | 40132 | 22 | Lobas-Variablen | Register können sich in zukünftigen Versionen ändern |
Bei Entfernung eines Geräts rücken die folgenden Registerbereiche automatisch nach. Es existieren keine fest reservierten Adressräume.
Der erste verfügbare Registerbereich ist der SunSpec-Block mit den allgemeinen Informationen des Backends. Er liegt immer auf Adresse 40000 und ist sowohl über die Modbus-ID als auch über ID+1 erreichbar.
| Offset | Länge | Datentyp | Beschreibung | Einheit | Fester Wert |
|---|---|---|---|---|---|
| 0 | 2 | ASCII | Marker | SunS | |
| 2 | 1 | uint16 | Common | 1 | |
| 3 | 1 | uint16 | Länge | 66 | |
| 4 | 16 | ASCII | Hersteller | energielenker | |
| 20 | 16 | ASCII | Produkt | Load Management | |
| 36 | 8 | – | Optionen | ||
| 44 | 8 | ASCII | Version | ||
| 52 | 16 | ASCII | Seriennummer | ||
| 68 | 1 | uint16 | SunSpec-Server-ID | ||
| 69 | 1 | uint16 | Padding | 0 |
Hinweis: Nur der erste Block liegt garantiert auf 40000. Die Startadressen der folgenden Blöcke können sich bei Erweiterungen verschieben – die SunSpec-Modelle sollten daher ab 40000 gescannt werden.
Achtung: Welche Modelle auf den SunSpec-Block folgen, hängt von der verwendeten Modbus-ID ab. Bei der konfigurierten Modbus-ID folgen die Modelle der virtuellen Zähler und des Backends selbst (60000, 60001, 60002), bei ID+1 die Modelle der konfigurierten Geräte (113, 213, 124).
Dieses Modell wird verwendet, wenn das konfigurierte Gerät eine Ladestation (EVSE) ist.
| Offset | Länge | Datentyp | Beschreibung | Einheit | Fester Wert |
|---|---|---|---|---|---|
| 0 | 1 | uint16 | Modell-Code | 113 | |
| 1 | 1 | uint16 | Länge | 63 | |
| 2 | 2 | float | Summe Ströme L1-L3 | A | |
| 4 | 2 | float | Strom L1 | A | |
| 6 | 2 | float | Strom L2 | A | |
| 8 | 2 | float | Strom L3 | A | |
| 16 | 2 | float | Spannung L1 | V | |
| 18 | 2 | float | Spannung L2 | V | |
| 20 | 2 | float | Spannung L3 | V | |
| 22 | 2 | float | Wirkleistung | W | |
| 24 | 2 | float | Frequenz | Hz | 50 |
| 26 | 2 | float | Scheinleistung | VA | |
| 28 | 2 | float | Blindleistung | VAr | |
| 30 | 2 | float | Leistungsfaktor | ||
| 32 | 2 | float | Gesamtenergie | Wh | |
| 62 | 1 | int16 | Zustand (siehe unten) | ||
| 63 | 1 | int16 | Geräte-ID | ||
| 64 | 1 | uint16 | Kommunikationsfehler (1 = Fehler, 0 = kein Fehler) | bool |
Hinweis: Von diesem Modell ist ausschließlich Offset 28 (Blindleistung) beschreibbar. Kein weiteres Register dieses Modells und kein Register der Modelle 213 (Zähler) und 124 (Batteriespeicher) ist beschreibbar.
Mögliche Werte für den Zustand (Offset 62):
| Zustand | Wert |
|---|---|
| noMock | -2 |
| ignore | -1 |
| noState | 0 |
| waiting | 1 |
| evPresent | 2 |
| evCharging | 3 |
| evChargingWithVent | 4 |
| failure | 5 |
| offline | 6 |
| rebooting | 7 |
Dieses zusätzliche Modell wird angehängt, wenn der Zähler die Rolle „storage home“ oder „storage all“ hat oder wenn das konfigurierte Gerät ausschließlich eine Batterie ist (kein separater Zähler konfiguriert). Im letzteren Fall wird das Modell unabhängig von der Rolle immer angehängt.
| Offset | Länge | Datentyp | Beschreibung | Einheit | Fester Wert |
|---|---|---|---|---|---|
| 0 | 1 | uint16 | Modell-Code | 124 | |
| 1 | 1 | uint16 | Länge | 25 | |
| 2 | 1 | uint16 | Maximum aus Lade- und Entladeleistung | W | |
| 3 | 1 | uint16 | Prozent des aktuellen Ladelimits | 1/100 % | |
| 4 | 1 | uint16 | Prozent des aktuellen Entladelimits | 1/100 % | |
| 8 | 1 | uint16 | Ladezustand (State of Charge) | % | |
| 18 | 1 | uint16 | Skalierungsfaktor für Offset 2 | ||
| 19 | 1 | uint16 | Skalierungsfaktor für Offset 3 und 4 | -2 | |
| 26 | 1 | int16 | Geräte-ID |
Hinweis: Bei einem reinen Batteriegerät werden Offset 2 sowie die Offsets 3 und 4 aus der konfigurierten maximalen Lade-/Entladeleistung und der aktuellen Lade-/Entladeleistung abgeleitet. Offset 8 stammt aus dem von der Batterie selbst gemeldeten Ladezustand.
Dieses Modell wird verwendet, wenn das konfigurierte Gerät ein Zähler ist.
| Offset | Länge | Datentyp | Beschreibung | Einheit | Fester Wert |
|---|---|---|---|---|---|
| 0 | 1 | uint16 | Modell-Code | 213 | |
| 1 | 1 | uint16 | Länge | 126 | |
| 2 | 2 | float | Summe Ströme L1–L3 | A | |
| 4 | 2 | float | Strom L1 | A | |
| 6 | 2 | float | Strom L2 | A | |
| 8 | 2 | float | Strom L3 | A | |
| 10 | 2 | float | Spannung | V | |
| 12 | 2 | float | Spannung L1 | V | |
| 14 | 2 | float | Spannung L2 | V | |
| 16 | 2 | float | Spannung L3 | V | |
| 26 | 2 | float | Frequenz | Hz | 50 |
| 28 | 2 | float | Wirkleistung | W | |
| 30 | 2 | float | Leistung L1 | W | |
| 32 | 2 | float | Leistung L2 | W | |
| 34 | 2 | float | Leistung L3 | W | |
| 36 | 2 | float | Scheinleistung | VA | |
| 38 | 2 | float | Scheinleistung L1 | VA | |
| 40 | 2 | float | Scheinleistung L2 | VA | |
| 42 | 2 | float | Scheinleistung L3 | VA | |
| 44 | 2 | float | Blindleistung | VAr | |
| 52 | 2 | float | Leistungsfaktor | ||
| 60 | 2 | float | Export, Wirkleistung | Wh | |
| 68 | 2 | float | Import, Wirkleistung | Wh | |
| 124 | 2 | bitfield | Meter Event Flags | 0 | |
| 126 | 1 | uint16 | Rolle (siehe Tabelle unten) | ||
| 127 | 1 | int16 | Geräte-ID |
Mögliche Werte für die Rolle (Offset 126):
| Rolle | Wert |
|---|---|
| displayOnly | 0 |
| consumption | 1 |
| production | 2 |
| gridDemand | 3 |
| vehicleConsumption | 4 |
| storageHome | 5 |
| storageAll | 6 |
| chargingGroup | 7 |
Hinweis: Ist das konfigurierte Gerät eine Batterie ohne separaten Zähler, spiegeln die zählerartigen Felder (Ströme, Spannungen, Leistungen, Energien) die Werte wider, die das Batteriegerät selbst meldet. Die speicherspezifischen Werte liefert Modell 124.
Dieses Custom-Modell bietet Zugriff auf die Konfigurationsparameter des Backends selbst. Startadresse: 40070
| Offset | Länge | Datentyp | Beschreibung | Einheit | Fester Wert |
|---|---|---|---|---|---|
| 0 | 1 | uint16 | Modell-Code | 60000 | |
| 1 | 1 | uint16 | Länge | 26 | |
| 2 | 2 | float | Maximaler Gesamtstrom | mA | |
| 4 | 2 | float | Reservestrom | mA | |
| 6 | 2 | float | Maximaler Überziehungsstrom | mA | |
| 8 | 2 | float | Maximaler Gesamtstrom aller Ladepunkte | mA | |
| 10 | 2 | float | Maximaler Schieflaststrom | mA | |
| 12 | 2 | float | Freigabe-Status (0 = AUS, 1 = AN) | bool | |
| 14 | 2 | float | Schieflast addieren | bool | |
| 16 | 2 | float | Maximaler Gesamtstrom in Prozent | % | |
| 18 | 2 | uint32 | Heartbeat | ||
| 20 | 2 | float | Externer maximaler Gesamtstrom (nur gültig, bis der Heartbeat abläuft) | mA | |
| 22 | 2 | float | Fallback für maximalen Gesamtstrom | mA | |
| 24 | 2 | uint32 | Heartbeat-Timeout aktivieren (0 = AUS, 1 = AN) | bool | |
| 26 | 2 | uint32 | Heartbeat-Timeout | Sekunden |
Dieses Custom-Modell bietet Zugriff auf bis zu 32 frei verwendbare Flags, die in beliebigen Formeln genutzt werden können. Startadresse: 40098
| Offset | Länge | Datentyp | Beschreibung | Einheit | Fester Wert |
|---|---|---|---|---|---|
| 0 | 1 | uint16 | Modell-Code | 60001 | |
| 1 | 1 | uint16 | Länge | 32 | |
| 2 | 1 | uint16 | Flag 1 | ||
| … | … | … | … | ||
| 33 | 1 | uint16 | Flag 32 |
Dieses Custom-Modell bietet Zugriff auf alle konfigurierten Custom-Variablen. Jeder Eintrag belegt 22 Register (20 Register für den Namen, 2 Register für den Wert). Startadresse: 40132
| Offset | Länge | Datentyp | Beschreibung | Einheit | Fester Wert |
|---|---|---|---|---|---|
| 0 | 1 | uint16 | Modell-Code | 60002 | |
| 1 | 1 | uint16 | Länge | ||
| 2 | 20 | ASCII | Name Variable 1 | ||
| 22 | 2 | float | Wert Variable 1 | ||
| 24 | 20 | ASCII | Name Variable 2 | ||
| 44 | 2 | float | Wert Variable 2 | ||
| … | … | … | … |
Über einen Heartbeat können Werte automatisch zurückgesetzt werden, sobald das Heartbeat-Timeout erreicht ist. Relevant sind dafür die Offsets 18, 20, 22, 24 und 26 in Modell 60000 sowie die Konfigurationsparameter sunspec_heartbeat_timeout_enable und sunspec_heartbeat_timeout_seconds.
Lesen und Schreiben im SunSpec-Server ist mit einem beliebigen Modbus-Client möglich. Zum Lesen dienen die Funktionscodes 3 und 4, zum Schreiben die Funktionscodes 6 und 16.
Zusätzlich bringt das LMB einen eigenen Modbus-Client mit, der über die REST-API angesprochen werden kann (Endpunkt modbus_get_set). Damit lassen sich Werte im SunSpec-Server – oder in jedem anderen erreichbaren Modbus-Server – lesen und schreiben.
Startadressen können sich in künftigen Versionen ändern. Scanne den Registerbereich bei jeder neuen Konfiguration automatisch, beginnend bei Adresse 40'000.
Bei Fragen zur Implementierung oder tiefergehenden technischen Details steht der Support zur Verfügung.