TapHome

Orno OR-WE-517

Modbus RTU
Eingereicht von
Zuletzt aktualisiert: 03. 2026
Orno OR-WE-517

Der Orno OR-WE-517 ist ein 3-Phasen-Mehrtarifzähler für DIN-Schienenmontage, der über Modbus RTU per RS-485 kommuniziert. Es handelt sich um einen Direktanschlusszähler mit einer Nennleistung von bis zu 80 A pro Phase, MID-zertifiziert (Richtlinie 2014/32/EU), und belegt 4,3 Module auf einer TH-35-Schiene. Die TapHome-Vorlage bietet 11 Stromzähler, die Strom pro Phase, Energie pro Phase, Gesamtenergie über alle drei Phasen und 4-Tarifzähler abdecken, zusammen mit Service-Attributen für Spannung, Blind-/Scheinleistung, Leistungsfaktor und bidirektionale (Bezug/Einspeisung) Energieaufteilung.

Alle Messregister verwenden die IEEE 754 Float32-Kodierung (2 Modbus-Wörter pro Wert), gelesen über den Funktionscode 03 (Holding-Register). Die Vorlage bietet außerdem Service-Aktionen zum Einstellen der Echtzeituhr des Zählers, zur Konfiguration von Tarifplänen und zur Änderung der Modbus-Slave-ID.

Hardwareanschluss

RS-485-Verkabelung

Der OR-WE-517 verfügt über eine integrierte RS-485-Schnittstelle für die Modbus-RTU-Kommunikation. Verbinden Sie den Zähler mit dem TapHome Core RS-485-Bus über ein geschirmtes zweiadriges Kommunikationskabel:

  • A-Klemme am Zähler zu A+/D+ am TapHome RS-485
  • B-Klemme am Zähler zu B-/D- am TapHome RS-485

Verwenden Sie eine Daisy-Chain-Verkabelung. Stern- oder Stichleitungstopologien verursachen Signalreflexionen und Kommunikationsfehler. Die Verbindung zwischen dem Konverter und dem Zähler sollte mit einem geschirmten Kommunikationskabel gemäß dem RS-485-Standard durchgeführt werden.

Für die Erstkonfiguration und zum Testen kann auch ein Standard-USB-RS485-Konverter verwendet werden. Der Konverter ist nicht im Lieferumfang des Zählers enthalten.

Konfiguration

Kommunikationsparameter

Die Standard-Modbus-Einstellungen entsprechen der TapHome-Vorlage ohne weitere Anpassungen:

ParameterStandardBereich
Baudrate9600 bps1200, 2400, 4800, 9600
Datenbits8Fest
ParitätGeradeFest
Stoppbits1Fest
Slave-ID11–255

Der Kommunikationsrahmen verwendet ein 11-Bit-Format: 1 Startbit, 8 Datenbits, 1 Bit gerade Parität und 1 Stoppbit mit CRC-Prüfung.

Slave-ID

Beim Anschluss mehrerer Zähler am selben RS-485-Bus muss jeder Zähler eine eindeutige Slave-ID haben. Die Standard-Slave-ID ist 1 (konfigurierbar von 1 bis 255 über Holding-Register H:2). Nach dem Import der TapHome-Vorlage passen Sie die Slave-ID in den Modulverbindungseinstellungen an den physischen Zähler an. Die Vorlage bietet außerdem eine Slave ID-Service-Aktion zur Fernänderung der Adresse über Modbus.

Die aktuelle Slave-ID und Baudrate sind auf dem LCD-Display des Zählers sichtbar (Seiten 42 bzw. 43).

Gerätefunktionen

Die Vorlage erstellt 11 ModbusElectricityMeter- und ModbusVariable-Geräte, die in drei Gruppen organisiert sind: Stromsensoren pro Phase, Energiezähler pro Phase und tarifbasierte Energiezähler. Ein Gesamtgerät für alle drei Phasen aggregiert die Werte mit zusätzlichen systemweiten Attributen.

Strommessung pro Phase

Drei Geräte bieten Echtzeit-Strommessung für jede Phase:

  • L1 Strom — Strom Phase 1 (H:22, A) mit L1-Spannung als Service-Attribut (H:14, V)
  • L2 Strom — Strom Phase 2 (H:24, A) mit L2-Spannung (H:16, V)
  • L3 Strom — Strom Phase 3 (H:26, A) mit L3-Spannung (H:18, V)
Energiemessung pro Phase

Drei Geräte erfassen den Wirkenergieverbrauch und die Leistungsaufnahme pro Phase mit einem umfangreichen Satz von Service-Attributen:

  • Phase L1 — Gesamtwirkenergie (H:258, kWh) und Wirkleistung (H:30, kW). Service-Attribute umfassen Spannung, Strom, Blindleistung (kVAr), Scheinleistung (kVA), Leistungsfaktor und bidirektionale Energiezähler (Bezug/Einspeisung von Wirk- und Blindenergie).
  • Phase L2 — Gesamtwirkenergie (H:260, kWh) und Wirkleistung (H:32, kW). Gleiche phasenspezifische Service-Attribute wie L1.
  • Phase L3 — Gesamtwirkenergie (H:262, kWh) und Wirkleistung (H:34, kW). Gleiche phasenspezifische Service-Attribute wie L1.
Gesamte 3-Phasen-Energie

Ein Gerät liefert die systemweiten Gesamtwerte:

  • Gesamtenergie (3-Phasen) — Gesamtwirkenergie (H:256, kWh) und Gesamtwirkleistungsbedarf (H:28, kW). Service-Attribute umfassen Netzfrequenz (Hz), Gesamtblindleistung (kVAr), Gesamtscheinleistung (kVA), Gesamtleistungsfaktor und bidirektionale Energiezähler (Bezug/Einspeisung von Wirk- und Blindenergie).
Tarifzähler

Vier Geräte erfassen die kumulierte Energie pro Tarifzone (T1–T4):

  • Tarif T1 bis Tarif T4 — jeder meldet die Gesamtwirkenergie (kWh) mit Service-Attributen für Bezug/Einspeisung von Wirkenergie und Bezug/Einspeisung/Gesamtblindenergie. Tarifzähler erfassen nur kumulierte Energie, nicht den momentanen Leistungsbedarf.

Der Zähler unterstützt bis zu 8 Zeitintervalle pro Tag (Montag bis Sonntag einzeln) für die Zuordnung der Tarifzonen T1–T4. Tarifpläne sind über die Service-Aktion Set Tariffs konfigurierbar, die das Programmieren von Intervallen für einen bestimmten Tag oder alle Tage gleichzeitig ermöglicht.

Die 4-Tarif-Fähigkeit ist das Hauptunterscheidungsmerkmal des OR-WE-517 gegenüber dem OR-WE-516 (der RS-485 unterstützt, aber keine Tarifplanung bietet). Der OR-WE-513 hat weder RS-485 noch Tarifunterstützung.

Service-Aktionen

Die Vorlage bietet drei Service-Aktionen zur Fernkonfiguration:

  • Date/Time — Einstellen der internen Echtzeituhr des Zählers (Jahr, Monat, Tag, Stunde, Minuten, Sekunden und Wochentag) über Register H:60–H:65
  • Set Tariffs — Konfiguration von bis zu 8 täglichen Tarifintervallen (T1–T4) für einen ausgewählten Tag oder alle Tage gleichzeitig, geschrieben in Tarifplanregister ab H:768
  • LCD Cycle time — Einstellung des automatischen LCD-Display-Scrollintervalls (1–120 Sekunden)
Weitere Funktionen

Der OR-WE-517 stellt außerdem Register für die Gesamtblindenergie pro Phase (L1/L2/L3), Seriennummer, Firmware- und Hardwareversion, einen kombinierten Konfigurationscode und ein Feiertags-/Wochenend-Tarifzuweisungsregister bereit. Diese können in einem zukünftigen Vorlagenupdate hinzugefügt werden.

Fehlerbehebung

Keine Kommunikation
  1. Überprüfen Sie die RS-485-Klemmenanschlüsse A/B – tauschen Sie A und B, wenn die Kommunikation fehlschlägt, da die Bezeichnungskonventionen zwischen Herstellern variieren
  2. Bestätigen Sie, dass die Baudrate in TapHome der Zählereinstellung entspricht (Standard 9600 bps, sichtbar auf LCD-Seite 43)
  3. Überprüfen Sie, dass die Slave-ID übereinstimmt (Standard 1, sichtbar auf LCD-Seite 42 im Format „Id 255", wobei 255 die aktuelle Adresse ist)
  4. Prüfen Sie, dass die Paritätseinstellung Even (8E1) ist – dieser Zähler verwendet standardmäßig gerade Parität, im Gegensatz zu einigen Zählern, die standardmäßig keine Parität (8N1) verwenden
Falsche Messwerte
  1. Stellen Sie sicher, dass der Zähler als 3-Phasen-4-Leiter-System verdrahtet ist, wobei alle drei Phasenleiter und der Neutralleiter durch die Zählerklemmen geführt werden
  2. Für bidirektionale Messung (Bezug/Einspeisung) überprüfen Sie die CT-Richtung oder Leiterrichtung entsprechend dem Energiefluss – umgekehrte Verdrahtung führt dazu, dass Bezugsenergie als Einspeisungsenergie registriert wird
Kommunikation über Ethernet-Konverter

Der OR-WE-517 kann auch über einen RS-485-zu-Ethernet-Konverter (z. B. Waveshare RS485 to ETH) angesprochen werden. Bei Verwendung eines solchen Konverters muss der Protokolltyp auf RTU over TCP eingestellt werden (nicht Standard-Modbus-TCP). Standard-TCP-Framing funktioniert mit diesem Zähler nicht.

Verfügbare Geräte

Orno OR-WE-517 Modul
Serviceattribute
Slave-ID
Baudrate
LCD-Zykluszeit
CT-VerhältnisStromwandlerverhältnis — gilt nur für CT-Zähler, nicht für Direktanschluss-Installationen
S0-Ausgangsrate
UhrzeitAktuelles Datum und Uhrzeit aus der internen Echtzeituhr des Zählers
Tarife (Mo)
Tarife (Di)
Tarife (Mi)
Tarife (Do)
Tarife (Fr)
Tarife (Sa)
Tarife (So)
Serviceaktionen
Datum/UhrzeitEingebaute Echtzeituhr des Zählers einstellen — Datum, Uhrzeit und Wochentag für den Tarifplanbetrieb
Tarife einstellenKonfiguration von bis zu 8 täglichen Tarifintervallen (T1–T4) für einen ausgewählten Tag oder alle Tage auf einmal
Slave-IDModbus-Slave-Adresse (1–255) für RS-485-Bus-Konfigurationen mit mehreren Zählern ändern
LCD-ZykluszeitAutomatisches Scrollintervall des LCD-Displays in Sekunden einstellen

OR-WE-517

Serviceattribute
${device_SlaveId}
modbusr(H, 0x02, Uint16)
${baud_rate} [bps]
modbusr(H, 0x03, Uint16)
LCD ${cycle_time} [s]
modbusr(H, 0x0d, Uint16)
CT Rate
modbusr(H, 0x08, Uint16)
S0 output rate [imp/kWh]
modbusr(H, 0x09, Float)
${time}
var ret := modbusr(H, 0x3c, Uint32);
var ret1 := modbusr(H, 0x3e, Uint16);
var xx := modbusr(H, 0x40, Uint16);
tostring(getbyte(ret,1), "X2") 
+ ":" + tostring(getbyte(ret,2), "X2")
+ ":" + tostring(getbyte(ret,3), "X2")
+ " " + switch(getbyte(ret,0), 
1, "(Mo)",
2, "(Tu)",
3, "(We)",
4, "(Th)",
5, "(Fr)",
6, "(Sa)",
7, "(Su)", "Err")
+ " " + tostring(getbyte(ret1,1), "X2")
+ "." + tostring(getbyte(ret1,0), "X2")
+ ".20" + modbusr(H, 0x3f, LittleEndianUint16);

${tariff}s (Mo)
var wd1 := modbusr(H, 0x300, Uint32);
var wd2 := modbusr(H, 0x300 +2, Uint32);
var wd3 := modbusr(H, 0x300 +4, Uint32);
var wd4 := modbusr(H, 0x300 +6, Uint32);
var wd5 := modbusr(H, 0x300 +8, Uint32);
var wd6 := modbusr(H, 0x300 +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
${tariff}s (Tu)
var wd1 := modbusr(H, 0x30c, Uint32);
var wd2 := modbusr(H, 0x30c +2, Uint32);
var wd3 := modbusr(H, 0x30c +4, Uint32);
var wd4 := modbusr(H, 0x30c +6, Uint32);
var wd5 := modbusr(H, 0x30c +8, Uint32);
var wd6 := modbusr(H, 0x30c +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
${tariff}s (We)
var wd1 := modbusr(H, 0x318, Uint32);
var wd2 := modbusr(H, 0x318 +2, Uint32);
var wd3 := modbusr(H, 0x318 +4, Uint32);
var wd4 := modbusr(H, 0x318 +6, Uint32);
var wd5 := modbusr(H, 0x318 +8, Uint32);
var wd6 := modbusr(H, 0x318 +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
${tariff}s (Th)
var wd1 := modbusr(H, 0x324, Uint32);
var wd2 := modbusr(H, 0x324 +2, Uint32);
var wd3 := modbusr(H, 0x324 +4, Uint32);
var wd4 := modbusr(H, 0x324 +6, Uint32);
var wd5 := modbusr(H, 0x324 +8, Uint32);
var wd6 := modbusr(H, 0x324 +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
${tariff}s (Fr)
var wd1 := modbusr(H, 0x330, Uint32);
var wd2 := modbusr(H, 0x330 +2, Uint32);
var wd3 := modbusr(H, 0x330 +4, Uint32);
var wd4 := modbusr(H, 0x330 +6, Uint32);
var wd5 := modbusr(H, 0x330 +8, Uint32);
var wd6 := modbusr(H, 0x330 +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
${tariff}s (Sa)
var wd1 := modbusr(H, 0x33c, Uint32);
var wd2 := modbusr(H, 0x33c +2, Uint32);
var wd3 := modbusr(H, 0x33c +4, Uint32);
var wd4 := modbusr(H, 0x33c +6, Uint32);
var wd5 := modbusr(H, 0x33c +8, Uint32);
var wd6 := modbusr(H, 0x33c +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
${tariff}s (Su)
var wd1 := modbusr(H, 0x348, Uint32);
var wd2 := modbusr(H, 0x348 +2, Uint32);
var wd3 := modbusr(H, 0x348 +4, Uint32);
var wd4 := modbusr(H, 0x348 +6, Uint32);
var wd5 := modbusr(H, 0x348 +8, Uint32);
var wd6 := modbusr(H, 0x348 +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
Serviceaktionen
Date/Time
Parameter: Year (22–99 YY), Month (1–12 MM), Day (1–31 DD), Hour (1–24 HH), Minutes (0–59 MI), Seconds (0–59 SS), Day of Week
var out1 := (tobcd(MI) << 8) + tobcd(SS);
var out2 := (tobcd(DW) << 8) + tobcd(HH);
var out3 := (tobcd(MM) << 8) + tobcd(DD);

modbusw(H, 0x3c, LittleEndianUint16, out1, out2, out3, YY);
${set_tarriffs}
Parameter: Interval 1 - ${hour} (0–23 HH1), Interval 1 - ${minutes} (0–59 MI1), Interval 1 - ${tariff} (0–4 T1), Interval 2 - Hour (0–23 HH2), Interval 2 - Minutes (0–59 MI2), Interval 2 - ${tariff} (0–4 T2), Interval 3 - Hour (0–23 HH3), Interval 3 - Minutes (0–59 MI3), Interval 3 - ${tariff} (0–4 T3), Interval 4 - Hour (0–23 HH4), Interval 4 - Minutes (0–59 MI4), Interval 4 - ${tariff} (0–4 T4), Interval 5 - Hour (0–23 HH5), Interval 5 - Minutes (0–59 MI5), Interval 5 - ${tariff} (0–4 T5), Interval 6 - Hour (0–23 HH6), Interval 6 - Minutes (0–59 MI6), Interval 6 - ${tariff} (0–4 T6), Interval 7 - Hour (0–23 HH7), Interval 7 - Minutes (0–59 MI7), Interval 7 - ${tariff} (0–4 T7), Interval 8 - Hour (0–23 HH8), Interval 8 - Minutes (0–59 MI8), Interval 8 - ${tariff} (0–4 T8), Day
var wd1 := (tobcd(HH1) << 24) + (tobcd(MI1) << 16) + (tobcd(T1) << 8) + tobcd(HH2);
var wd2 := (tobcd(MI2) << 24) + (tobcd(T2) << 16) + (tobcd(HH3) << 8) + tobcd(MI3);
var wd3 := (tobcd(T3) << 24) + (tobcd(HH4) << 16) + (tobcd(MI4) << 8) + tobcd(T4);
var wd4 := (tobcd(HH5) << 24) + (tobcd(MI5) << 16) + (tobcd(T5) << 8) + tobcd(HH6);
var wd5 := (tobcd(MI6) << 24) + (tobcd(T6) << 16) + (tobcd(HH7) << 8) + tobcd(MI7);
var wd6 := (tobcd(T7) << 24) + (tobcd(HH8) << 16) + (tobcd(MI8) << 8) + tobcd(T8);

if DoW = 0 or DoW = 1
    modbusw(H, 0x300, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
if DoW = 0 or DoW = 2
    modbusw(H, 0x30c, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
if DoW = 0 or DoW = 3
    modbusw(H, 0x318, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
if DoW = 0 or DoW = 4
    modbusw(H, 0x324, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
if DoW = 0 or DoW = 5
    modbusw(H, 0x330, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
if DoW = 0 or DoW = 6
    modbusw(H, 0x33c, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
if DoW = 0 or DoW = 7
    modbusw(H, 0x348, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
Slave ID
Parameter: Parameter1 (1–255 ID)
modbusw(H, 0x02, Uint16, ID)
LCD Cycle time
Parameter: Time [s] (1–120 t)
modbusw(H, 0x0d, Uint16, t)
Strom L1 Variable Nur lesen
Register: H:22 Float Einheit: A
Serviceattribute
Spannung L1

Strom L1

Lesen
MODBUSR(H, 22, Float)
Serviceattribute
L1 ${electric_voltage} [V]
round(modbusr(H, 0x0e, Float)*10)/10
Strom L2 Variable Nur lesen
Register: H:24 Float Einheit: A
Serviceattribute
Spannung L2

Strom L2

Lesen
MODBUSR(H, 24, Float)
Serviceattribute
L2 ${electric_voltage} [V]
round(modbusr(H, 0x10, Float)*10)/10
Strom L3 Variable Nur lesen
Register: H:26 Float Einheit: A
Serviceattribute
Spannung L3

Strom L3

Lesen
MODBUSR(H, 26, Float)
Serviceattribute
L3 ${electric_voltage} [V]
round(modbusr(H, 0x12, Float)*10)/10
Phase L1 Stromzähler Nur lesen

Energiezähler Phase 1 — gesamte Wirkenergie und Wirkleistung mit Spannung, Strom, Blind-/Scheinleistung, Leistungsfaktor und bidirektionalen Energiezählern

Register: H:258 (readtotalconsumption), H:30 (readdemand) Float Einheit: kWh / kW
Serviceattribute
Spannung
Strom
Blindleistung
Scheinleistung
Leistungsfaktor
Wirkenergie Bezug
Wirkenergie Einspeisung
Blindenergie Bezug
Blindenergie Einspeisung

Phase L1

Gesamtverbrauch lesen
MODBUSR(H, 0x102, Float)
Bedarf lesen
MODBUSR(H, 0x1e, Float)
Serviceattribute
${electric_voltage} [V]
tostring(modbusr(H, 0x0e,Float), "F2")
${electric_current} [A]
tostring(modbusr(H, 0x16,Float), "F2")
${reactive_power} [kVAr]
tostring(modbusr(H, 0x26,Float), "F2")
${apparent_power} [kVA]
tostring(modbusr(H, 0x2e,Float), "F2")
${power_factor}
tostring(modbusr(H, 0x36,Float), "F2")
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x10a,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x112,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x122,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x12a,Float), "F2")
Phase L2 Stromzähler Nur lesen
Register: H:260 (readtotalconsumption), H:32 (readdemand) Float Einheit: kWh / kW
Serviceattribute
Spannung
Strom
Blindleistung
Scheinleistung
Leistungsfaktor
Wirkenergie Bezug
Wirkenergie Einspeisung
Blindenergie Bezug
Blindenergie Einspeisung

Phase L2

Gesamtverbrauch lesen
MODBUSR(H, 0x104, Float)
Bedarf lesen
MODBUSR(H, 0x20, Float)
Serviceattribute
${electric_voltage} [V]
tostring(modbusr(H, 0x10,Float), "F2")
${electric_current} [A]
tostring(modbusr(H, 0x18,Float), "F2")
${reactive_power} [kVAr]
tostring(modbusr(H, 0x28,Float), "F2")
${apparent_power} [kVA]
tostring(modbusr(H, 0x30,Float), "F2")
${power_factor}
tostring(modbusr(H, 0x38,Float), "F2")
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x10c,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x114,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x124,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x12c,Float), "F2")
Phase L3 Stromzähler Nur lesen
Register: H:262 (readtotalconsumption), H:34 (readdemand) Float Einheit: kWh / kW
Serviceattribute
Spannung
Strom
Blindleistung
Scheinleistung
Leistungsfaktor
Wirkenergie Bezug
Wirkenergie Einspeisung
Blindenergie Bezug
Blindenergie Einspeisung

Phase L3

Gesamtverbrauch lesen
MODBUSR(H, 0x106, Float)
Bedarf lesen
MODBUSR(H, 0x22, Float)
Serviceattribute
${electric_voltage} [V]
tostring(modbusr(H, 0x12,Float), "F2")
${electric_current} [A]
tostring(modbusr(H, 0x1a,Float), "F2")
${reactive_power} [kVAr]
tostring(modbusr(H, 0x2a,Float), "F2")
${apparent_power} [kVA]
tostring(modbusr(H, 0x32,Float), "F2")
${power_factor}
tostring(modbusr(H, 0x3a,Float), "F2")
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x10e,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x116,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x126,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x12e,Float), "F2")
Tarif T1 Stromzähler Nur lesen

Kumulativer Energiezähler Tarif 1 — gesamte Wirkenergie mit Aufschlüsselung nach Bezug/Einspeisung von Wirk- und Blindenergie

Register: H:304 (readtotalconsumption) Float Einheit: kWh
Serviceattribute
Wirkenergie Bezug
Wirkenergie Einspeisung
Gesamte Blindenergie
Blindenergie Bezug
Blindenergie Einspeisung

Tarif T1

Gesamtverbrauch lesen
MODBUSR(H, 0x130, Float)
Serviceattribute
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x132,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x134,Float), "F2")
${total_reactive_energy} [kVArh]
tostring(modbusr(H, 0x136,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x138,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x13a,Float), "F2")
Tarif T2 Stromzähler Nur lesen
Register: H:316 (readtotalconsumption) Float Einheit: kWh
Serviceattribute
Wirkenergie Bezug
Wirkenergie Einspeisung
Gesamte Blindenergie
Blindenergie Bezug
Blindenergie Einspeisung

Tarif T2

Gesamtverbrauch lesen
MODBUSR(H, 0x13c, Float)
Serviceattribute
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x13e,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x140,Float), "F2")
${total_reactive_energy} [kVArh]
tostring(modbusr(H, 0x142,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x144,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x146,Float), "F2")
Tarif T3 Stromzähler Nur lesen
Register: H:328 (readtotalconsumption) Float Einheit: kWh
Serviceattribute
Wirkenergie Bezug
Wirkenergie Einspeisung
Gesamte Blindenergie
Blindenergie Bezug
Blindenergie Einspeisung

Tarif T3

Gesamtverbrauch lesen
MODBUSR(H, 0x148, Float)
Serviceattribute
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x14a,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x14c,Float), "F2")
${total_reactive_energy} [kVArh]
tostring(modbusr(H, 0x14e,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x150,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x152,Float), "F2")
Tarif T4 Stromzähler Nur lesen
Register: H:340 (readtotalconsumption) Float Einheit: kWh
Serviceattribute
Wirkenergie Bezug
Wirkenergie Einspeisung
Gesamte Blindenergie
Blindenergie Bezug
Blindenergie Einspeisung

Tarif T4

Gesamtverbrauch lesen
MODBUSR(H, 0x154, Float)
Serviceattribute
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x156,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x158,Float), "F2")
${total_reactive_energy} [kVArh]
tostring(modbusr(H, 0x15a,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x15c,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x15e,Float), "F2")
Gesamtenergie (3-Phasen) Stromzähler Nur lesen

3-Phasen-Systemgesamt — Wirkenergie und Leistungsbedarf mit Netzfrequenz, Blind-/Scheinleistung, Leistungsfaktor und bidirektionalen Energiezählern

Register: H:256 (readtotalconsumption), H:28 (readdemand) Float Einheit: kWh / kW
Serviceattribute
Netzfrequenz
Gesamte Blindleistung
Gesamte Scheinleistung
Gesamtleistungsfaktor
Wirkenergie Bezug
Wirkenergie Einspeisung
Blindenergie Bezug
Blindenergie Einspeisung

Gesamtenergie (3-Phasen)

Gesamtverbrauch lesen
MODBUSR(H, 0x100, Float)
Bedarf lesen
MODBUSR(H, 0x1c, Float)
Serviceattribute
${grid_frequency} [Hz]
tostring(modbusr(H, 0x14,Float), "F2")
${reactive_power} [kVAr]
tostring(modbusr(H, 0x24,Float), "F2")
${apparent_power} [kVA]
tostring(modbusr(H, 0x2c,Float), "F2")
${power_factor}
tostring(modbusr(H, 0x34,Float), "F2")
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x108,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x110,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x120,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x128,Float), "F2")
Verbindung: Modbus RTU • 9600 baud• 8E1 • Slave ID: $[SlaveId]
Mögliche Verbesserungen (9)
  • H:280 Total Reactive Energy — Aggregate reactive energy counter (sum of all phases)
  • H:282 L1 Reactive Energy — Per-phase reactive energy — only forward/reverse reactive exposed, not total per-phase
  • H:284 L2 Reactive Energy — Per-phase reactive energy
  • H:286 L3 Reactive Energy — Per-phase reactive energy
  • H:0 Serial Number — 4-byte serial number, read-only
  • H:4 Software Version — Firmware version as float
  • H:6 Hardware Version — Hardware version as float
  • H:11 Combined Code — Configuration code, R/W
  • H:12 HOLIDAY-WEEKEND T — Holiday/weekend tariff assignment

Quellen