Energielenker Hilfecenter: SunSpec-Modbus im Lobas-System einrichten und nutzen

Wie teste ich den Modbus TCP Server?

Gültig ab Lobas-Version: V2.32.0 (LMB 3.20.0)

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.

Voraussetzung

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“.

Modbus-Server aktivieren

  1. Navigiere zu Konfiguration > Schnittstellen – Abschnitt Modbus TCP Server
  2. Aktiviere den Modbus TCP Server
  3. Bei Lobas-Systemen auf Basis der CC100-Hardware sowie bei allen Lobas-Systemen ab Baujahr 2025 ist der Port fest auf 1502 gesetzt und nicht änderbar. Bei Lobas-Systemen von vor 2025 lässt sich der Port frei wählen (empfohlen: ein Port über 1024, da niedrigere Ports Adminrechte erfordern).
  4. Speichere die Einstellungen
  5. Mit Klick auf Aktive Geräte anzeigen erscheint eine Liste aller über Modbus verfügbaren Komponenten.

Konfigurationsparameter

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.

SunSpec-Protokollübersicht

Das SunSpec-Protokoll basiert auf Modbus und bietet standardisierte Datenmodelle für die Energiebranche.

  1. Adressierung: Der SunSpec-Block liegt immer fest an Adresse 40'000. Er enthält einen Marker sowie Herstellerinformationen. Alle weiteren Blöcke – Systemeinstellungen (UnitID = 1) und Geräteeinstellungen (UnitID = 2) – folgen ohne feste Adressierung. Ein Scan der Register ist daher notwendig. Die Lobas-Oberfläche bietet dafür den Button „Aktive Geräte anzeigen“.
  2. Datenformat: Alle Daten werden ausschließlich im Big-Endian-Format übertragen.
  3. Modelle: Unter UnitID = 1 stehen die systemspezifischen Modelle 60'000, 60'001 und 60'002 zur Verfügung. Unter UnitID = 2 stehen die Modelle 113 (Ladestation), 213 (Zähler) und 124 (Batteriespeicher) zur Verfügung.

Zugriff und Adressierung

Nach Aktivierung des Modbus TCP Servers:

  1. Lobas ist unter Unit ID = 1 erreichbar.
  2. An Lobas angeschlossene Geräte sind ab Unit ID = 2 erreichbar.
  3. Die Startadressen der Geräteblöcke lassen sich über die Lobas-Oberfläche abfragen.

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.


Start-Adressen der Modelle

Modell-Nr.AdresseRegisterlängeKomponenteAnmerkungen
113variabel63Ladestation
124variabel26Batteriespeicher
213variabel127ZählerInkl. virtueller Zähler für Energieflüsse
600004007016Lobas-EinstellungenRegister können sich in zukünftigen Versionen ändern
600014009833CM Flags (bis 32)Register können sich in zukünftigen Versionen ändern
600024013222Lobas-VariablenRegister 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.

SunSpec-Block (Startadresse 40000)

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.

OffsetLängeDatentypBeschreibungEinheitFester Wert
02ASCIIMarkerSunS
21uint16Common1
31uint16Länge66
416ASCIIHerstellerenergielenker
2016ASCIIProduktLoad Management
368Optionen
448ASCIIVersion
5216ASCIISeriennummer
681uint16SunSpec-Server-ID
691uint16Padding0

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).

Modell 113 (Wallbox)

Dieses Modell wird verwendet, wenn das konfigurierte Gerät eine Ladestation (EVSE) ist.

OffsetLängeDatentypBeschreibungEinheitFester Wert
01uint16Modell-Code113
11uint16Länge63
22floatSumme Ströme L1-L3A
42floatStrom L1A
62floatStrom L2A
82floatStrom L3A
162floatSpannung L1V
182floatSpannung L2V
202floatSpannung L3V
222floatWirkleistungW
242floatFrequenzHz50
262floatScheinleistungVA
282floatBlindleistungVAr
302floatLeistungsfaktor
322floatGesamtenergieWh
621int16Zustand (siehe unten)
631int16Geräte-ID
641uint16Kommunikationsfehler (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):

ZustandWert
noMock-2
ignore-1
noState0
waiting1
evPresent2
evCharging3
evChargingWithVent4
failure5
offline6
rebooting7

Modell 124 (Batteriespeicher)

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.

OffsetLängeDatentypBeschreibungEinheitFester Wert
01uint16Modell-Code124
11uint16Länge25
21uint16Maximum aus Lade- und EntladeleistungW
31uint16Prozent des aktuellen Ladelimits1/100 %
41uint16Prozent des aktuellen Entladelimits1/100 %
81uint16Ladezustand (State of Charge)%
181uint16Skalierungsfaktor für Offset 2
191uint16Skalierungsfaktor für Offset 3 und 4-2
261int16Gerä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.

Modell 213 (Zähler)

Dieses Modell wird verwendet, wenn das konfigurierte Gerät ein Zähler ist.

OffsetLängeDatentypBeschreibungEinheitFester Wert
01uint16Modell-Code213
11uint16Länge126
22floatSumme Ströme L1–L3A
42floatStrom L1A
62floatStrom L2A
82floatStrom L3A
102floatSpannungV
122floatSpannung L1V
142floatSpannung L2V
162floatSpannung L3V
262floatFrequenzHz50
282floatWirkleistungW
302floatLeistung L1W
322floatLeistung L2W
342floatLeistung L3W
362floatScheinleistungVA
382floatScheinleistung L1VA
402floatScheinleistung L2VA
422floatScheinleistung L3VA
442floatBlindleistungVAr
522floatLeistungsfaktor
602floatExport, WirkleistungWh
682floatImport, WirkleistungWh
1242bitfieldMeter Event Flags0
1261uint16Rolle (siehe Tabelle unten)
1271int16Geräte-ID

Mögliche Werte für die Rolle (Offset 126):

RolleWert
displayOnly0
consumption1
production2
gridDemand3
vehicleConsumption4
storageHome5
storageAll6
chargingGroup7

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.

Modell 60000 – Lobas Einstellparameter

Dieses Custom-Modell bietet Zugriff auf die Konfigurationsparameter des Backends selbst. Startadresse: 40070

OffsetLängeDatentypBeschreibungEinheitFester Wert
01uint16Modell-Code60000
11uint16Länge26
22floatMaximaler GesamtstrommA
42floatReservestrommA
62floatMaximaler ÜberziehungsstrommA
82floatMaximaler Gesamtstrom aller LadepunktemA
102floatMaximaler SchieflaststrommA
122floatFreigabe-Status (0 = AUS, 1 = AN)bool
142floatSchieflast addierenbool
162floatMaximaler Gesamtstrom in Prozent%
182uint32Heartbeat
202floatExterner maximaler Gesamtstrom (nur gültig, bis der Heartbeat abläuft)mA
222floatFallback für maximalen GesamtstrommA
242uint32Heartbeat-Timeout aktivieren (0 = AUS, 1 = AN)bool
262uint32Heartbeat-TimeoutSekunden

Modell 60001 – CM Flags

Dieses Custom-Modell bietet Zugriff auf bis zu 32 frei verwendbare Flags, die in beliebigen Formeln genutzt werden können. Startadresse: 40098

OffsetLängeDatentypBeschreibungEinheitFester Wert
01uint16Modell-Code60001
11uint16Länge32
21uint16Flag 1
331uint16Flag 32

Modell 60002 – Lobas Variablen

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

OffsetLängeDatentypBeschreibungEinheitFester Wert
01uint16Modell-Code60002
11uint16Länge
220ASCIIName Variable 1
222floatWert Variable 1
2420ASCIIName Variable 2
442floatWert Variable 2

Heartbeat

Ü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.

Werte lesen und schreiben

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.

Hinweis zur Weiterentwicklung

Startadressen können sich in künftigen Versionen ändern. Scanne den Registerbereich bei jeder neuen Konfiguration automatisch, beginnend bei Adresse 40'000.


Datenformate

  • Modellnummer und Registerlänge: Dezimal (uint16)
  • Alle weiteren Werte: Big Endian

Bei Fragen zur Implementierung oder tiefergehenden technischen Details steht der Support zur Verfügung.