TapHome

Orno OR-WE-515

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

Der Orno OR-WE-515 ist ein einphasiger Mehrtarifzähler für die DIN-Hutschienenmontage, der über Modbus RTU per RS-485 kommuniziert. Mit nur 18 mm Breite (1 DIN-Modul) misst er Wirkenergie, Blindenergie, Spannung, Strom, Leistung, Leistungsfaktor und Frequenz. Der wesentliche Unterschied zum einfacheren OR-WE-514 ist die Unterstützung von 4 unabhängigen Tarifen (Spitze, Hoch, Niedrig, Flach) mit konfigurierbarer Zeittarifplanung und einer eingebauten Lithiumbatterie für die Echtzeituhr.

Die TapHome-Vorlage stellt 6 Geräte bereit: einen Gesamtenergiezähler mit momentaner Leistungsabnahme, 4 einzelne Tarifzähler (T1–T4) und einen Stromsensor. Service-Aktionen auf Modulebene ermöglichen die Konfiguration von Tarifplänen, das Einstellen der RTC-Uhr, das Ändern der Modbus-Slave-Adresse, das Anpassen der Baudrate und die Steuerung der LCD-Zykluszeit — alles ferngesteuert über TapHome.

Hardwareanschluss

RS-485-Verdrahtung

Der OR-WE-515 hat eine 3-Klemmen-RS-485-Schnittstelle auf der rechten Seite des Zählers. Verbinden Sie in Daisy-Chain-Topologie:

  • Klemme 23 (A) an A+/D+ am TapHome RS-485
  • Klemme 24 (G) an GND am TapHome RS-485
  • Klemme 25 (B) an B-/D- am TapHome RS-485

Die übrigen Klemmen dienen dem Netzanschluss: Klemme 1 ist L-IN (Phaseneingang), Klemme 3 ist L-OUT (Phasenausgang), und die beiden N-Klemmen sind für den Neutralleiter.

Wenn der RS-485-Wandler keine G-Klemme (Masse) hat, kann der Masseanschluss an Klemme 24 entfallen. Für zuverlässige Kommunikation bei längeren Kabelstrecken wird der GND-Anschluss jedoch empfohlen.

Trennen Sie vor der Installation immer die Stromversorgung. Der Zähler verarbeitet bis zu 100 A über seine Klemmen. Stellen Sie die korrekte Leitungsdimensionierung sicher (Schraubklemmen bis 25 mm2) und verschließen Sie die Klemmenabdeckung nach der Verdrahtung.

Konfiguration

Kommunikationsparameter

Die Standard-Modbus-Einstellungen entsprechen der TapHome-Vorlage:

ParameterStandardwertOptionen
Baudrate96001200, 2400, 4800, 9600
Datenbits8Fest
ParitätEvenFest (8E1)
Stoppbits1Fest
Slave-ID11–255

Der PDF-Header der Registerbeschreibung gibt „N81" (keine Parität) an, aber die Installationsanleitung und Community-Implementierungen (Arduino-Bibliothek, AGG Software) bestätigen durchgängig 8E1 (gerade Parität) als korrekte Einstellung. Verwenden Sie in TapHome die gerade Parität.

Slave-ID

Beim Anschluss mehrerer Zähler am gleichen RS-485-Bus muss jeder Zähler eine eindeutige Slave-ID haben. Die Standard-Slave-ID ist 1, konfigurierbar im Bereich 1–255. Die TapHome-Vorlage enthält eine Service-Aktion Set Slave ID, die in das Holding-Register H:272 schreibt und eine Fernänderung der Adresse ohne physischen Zugang zum Zähler ermöglicht.

Baudrate

Die Baudrate kann per Fernzugriff über die Service-Aktion Set Baud Rate geändert werden. Verfügbare Optionen sind 1200, 2400, 4800 und 9600 bps. Der Wert wird im Holding-Register H:273 als codierte Ganzzahl gespeichert (1=1200, 2=2400, 3=4800, 4=9600). Aktualisieren Sie nach der Änderung der Baudrate die Modulverbindungseinstellungen in TapHome.

Gerätefunktionen

Die Vorlage erstellt 6 Geräte, organisiert in zwei Gruppen: Energiemessung und Strommessung. Alle Register verwenden den Modbus-Funktionscode 03H (Holding-Register).

Energiemessung

Fünf ModbusElectricityMeter-Geräte erfassen den Energieverbrauch:

  • Total Energy — Gesamtwirkenergie (H:40960, UInt32 / 100 in kWh) und momentane Wirkleistungsabnahme (H:320, Int32 / 1000 in kW). Dieses Gerät enthält 4 Service-Attribute: Netzfrequenz (Hz), Blindleistung (kVAr), Scheinleistung (kVA) und Leistungsfaktor (0,000–1,000).
  • Tariff T1 — Wirkenergie, akkumuliert während der Tarifperioden 1 (H:40962, UInt32 / 100 in kWh). Enthält ein Service-Attribut für Blindenergie T1 (kVArh).
  • Tariff T2 — Wirkenergie, akkumuliert während der Tarifperioden 2 (H:40964, UInt32 / 100 in kWh). Enthält ein Service-Attribut für Blindenergie T2 (kVArh).
  • Tariff T3 — Wirkenergie, akkumuliert während der Tarifperioden 3 (H:40966, UInt32 / 100 in kWh). Enthält ein Service-Attribut für Blindenergie T3 (kVArh).
  • Tariff T4 — Wirkenergie, akkumuliert während der Tarifperioden 4 (H:40968, UInt32 / 100 in kWh). Enthält ein Service-Attribut für Blindenergie T4 (kVArh).

Die 4 Tarifstufen entsprechen den Verbrauchszeitzonen: 1 = Spitze (höchster Tarif), 2 = Hochtarif, 3 = Niedrigtarif (Schwachlast), 4 = Flachtarif. Bis zu 8 Zeitintervalle pro Tag definieren, wann jeder Tarif gilt.

Strommessung
  • Electric Current — momentaner Leitungsstrom (H:313, UInt32 / 1000 in A). Enthält ein Service-Attribut für Spannung (H:305, V).
Tarif- und Uhrverwaltung

Das Modul bietet 5 Service-Aktionen zur Fernkonfiguration:

  • Set Date/Time — stellt die eingebaute RTC-Uhr ein (Jahr, Monat, Tag, Stunde, Minuten, Sekunden). Der OR-WE-515 hat eine Lithiumbatterie, die die Uhr bei Stromausfällen aufrechterhält.
  • Set Tariffs — konfiguriert bis zu 8 Werktags-Zeitintervalle. Jedes Intervall definiert eine Startzeit (Stunde, Minute) und eine Tarifstufe (0=deaktiviert, 1=Spitze, 2=Hoch, 3=Niedrig, 4=Flach). Der Standardplan startet Tarif 2 (Hoch) um 07:00 und Tarif 3 (Niedrig) um 22:00.
  • Set Slave ID — ändert die Modbus-Adresse (1–255).
  • Set Baud Rate — ändert die RS-485-Kommunikationsgeschwindigkeit (1200/2400/4800/9600 bps).
  • Set LCD Cycle Time — stellt das automatische Display-Scrollintervall ein (1–120 Sekunden).

Service-Attribute auf Modulebene zeigen die aktuelle Slave-ID, Baudrate, Datum/Uhrzeit und die 8 konfigurierten Zeitperiodenpläne mit ihren Tarifzuweisungen an.

Der über TapHome konfigurierte Tarifplan gilt nur für Werktage (Register 0x8100–0x810F). Der OR-WE-515 unterstützt auch separate Wochenend- (0x8110) und Feiertagspläne (0x8130), die aber in der aktuellen Vorlage nicht verfügbar sind. Sie können mit der Orno-Software konfiguriert oder als benutzerdefinierte Modbus-Geräte in TapHome hinzugefügt werden.

Weitere Funktionen

Der OR-WE-515 bietet auch ein hochpräzises Spannungsregister (UInt32, Auflösung 0,001 V) als Alternative zum in der Vorlage verwendeten UInt16-Register. Der Zähler unterstützt bidirektionale Messung (Wirk- und Rückspeiseleistung), tarifbezogene Exportenergiezähler, kombinierte bidirektionale Gesamtzähler, die gesamte Blindenergie über alle Tarife und den gesamten Klirrfaktor (THD) für Spannung und Strom. Diese können in einem zukünftigen Vorlagen-Update hinzugefügt werden.

Fehlerbehebung

Keine Kommunikation
  1. Überprüfen Sie die RS-485-Verdrahtung: Klemme 23 = A, Klemme 25 = B — tauschen Sie A und B, wenn die Kommunikation fehlschlägt
  2. Bestätigen Sie, dass die Paritätseinstellung in TapHome Even (8E1) ist, nicht None
  3. Prüfen Sie, ob die Baudrate in TapHome mit dem Zähler übereinstimmt (Standard 9600)
  4. Überprüfen Sie, ob die Slave-ID in TapHome mit dem Zähler übereinstimmt (Standard 1)
  5. Stellen Sie bei langen Kabelstrecken sicher, dass GND (Klemme 24) angeschlossen ist
Falsche Energiemesswerte
  1. Überprüfen Sie den Messmodus des Zählers — Option 1 (Standard) misst Wirk- und Blindenergie; Option 2 misst Vorwärts- und Rückwärtsenergie (bidirektional)
  2. Tarifzähler (T1–T4) akkumulieren Energie nur während ihrer zugewiesenen Zeitperioden — wenn alle Tarifpläne deaktiviert sind (auf 0 gesetzt), bleiben die Tarifzähler bei null, während Total Energy weiterzählt
  3. Die Zählerkonstante ist konfigurierbar (100, 1000 oder 2000 Imp/kWh) — der Standardwert 1000 Imp/kWh entspricht der Registerskalierung in der Vorlage
Hinweis zur Blindenergie-Skalierung

Die offizielle Registerdokumentation gibt eine Skalierung von 0,01 kVArh für Blindenergieregister an, während die TapHome-Vorlage einen Teiler von /1000 für die tarifbezogenen Blindenergie-Service-Attribute verwendet. Dieser Unterschied kann zu einem 10-fachen Skalierungsversatz bei Blindenergiewerten führen. Wenn die Blindenergiewerte falsch erscheinen, vergleichen Sie sie mit dem LCD-Display am physischen Zähler.

Verfügbare Geräte

Orno OR-WE-515 Modul
Serviceattribute
Slave-ID
Baudrate
Datum/UhrzeitAblesung der eingebauten Echtzeituhr — Datum und Uhrzeit durch Lithiumbatterie gepuffert
Zeitperiode 1Tarifplan Slot 1 — Startzeit (HH:MM) und Tarifstufe (Spitze, Hoch, Niedrig oder Flach)
Zeitperiode 2Tarifplan Slot 2 — Startzeit und Tarifzuweisung
Zeitperiode 3Tarifplan Slot 3 — Startzeit und Tarifzuweisung
Zeitperiode 4Tarifplan Slot 4 — Startzeit und Tarifzuweisung
Zeitperiode 5Tarifplan Slot 5 — Startzeit und Tarifzuweisung
Zeitperiode 6Tarifplan Slot 6 — Startzeit und Tarifzuweisung
Zeitperiode 7Tarifplan Slot 7 — Startzeit und Tarifzuweisung
Zeitperiode 8Tarifplan Slot 8 — Startzeit und Tarifzuweisung
Frequenz
Spannung
Blindleistung Einzelphase
Serviceaktionen
Datum/Uhrzeit einstellenEingebaute Echtzeituhr einstellen — Jahr, Monat, Tag, Stunde, Minuten, Sekunden
Tarife einstellenKonfiguration von bis zu 8 Werktags-Zeitintervallen — jeweils mit Startzeit und Tarifstufe (Spitze, Hoch, Niedrig, Flach)
Slave-ID einstellen
LCD-Zykluszeit einstellenEinstellung des automatischen LCD-Display-Scrollintervalls (1--120 Sekunden)
Baudrate einstellen

OR-WE-515

Serviceattribute
${device_SlaveId}
modbusr(H, 0x110, Int16)
${baud_rate} [bps]
switch(getbyte(modbusr(H, 0x111, Int16),0),0,0,1,1200,2,2400,3,4800,4,9600,"Invalid")
${time}
var Y := getbyte( modbusr(H,0x8120,uint16),1);
var M := getbyte( modbusr(H,0x8120,uint16),0);
var D := getbyte( modbusr(H,0x8121,uint16),1);
var H := getbyte( modbusr(H,0x8121,uint16),0);
var min := getbyte( modbusr(H,0x8122,uint16),1);
var sec := getbyte( modbusr(H,0x8122,uint16), 0);

tostring(tostring(H,"D2") + ":" + tostring(min,"D2") + ":" + tostring(sec, "D2") + " " + tostring(D,"D2") + "." + tostring(M,"D2") + ".20" + Y)


{1. time period starting time}, {rate}
var date := modbusr(H, 0x8100, INT16);
var belong := modbusr(H,0x8101,INT16);
tostring(tostring(getbyte(date,1),"D2") + ":" + tostring(getbyte(date,0),"D2") + ", " + belong + " (" + switch(belong,1,"sharp",2,"peak",3,"Valley",4,"flat","NaN")+")")
{2. time period starting time}, {rate}
var date := modbusr(H, 0x8100+2, INT16);
var belong := modbusr(H,0x8101+2,INT16);
tostring(tostring(getbyte(date,1),"D2") + ":" + tostring(getbyte(date,0),"D2") + ", " + belong + " (" + switch(belong,1,"sharp",2,"peak",3,"Valley",4,"flat","NaN")+")")
{3. time period starting time}, {rate}
var date := modbusr(H, 0x8100+4, INT16);
var belong := modbusr(H,0x8101+4,INT16);
tostring(tostring(getbyte(date,1),"D2") + ":" + tostring(getbyte(date,0),"D2") + ", " + belong + " (" + switch(belong,1,"sharp",2,"peak",3,"Valley",4,"flat","NaN")+")")
{4. time period starting time}, {rate}
var date := modbusr(H, 0x8100+6, INT16);
var belong := modbusr(H,0x8101+6,INT16);
tostring(tostring(getbyte(date,1),"D2") + ":" + tostring(getbyte(date,0),"D2") + ", " + belong + " (" + switch(belong,1,"sharp",2,"peak",3,"Valley",4,"flat","NaN")+")")
{5. time period starting time}, {rate}
var date := modbusr(H, 0x8100+8, INT16);
var belong := modbusr(H,0x8101+8,INT16);
tostring(tostring(getbyte(date,1),"D2") + ":" + tostring(getbyte(date,0),"D2") + ", " + belong + " (" + switch(belong,1,"sharp",2,"peak",3,"Valley",4,"flat","NaN")+")")
{6. time period starting time}, {rate}
var date := modbusr(H, 0x8100+10, INT16);
var belong := modbusr(H,0x8101+10,INT16);
tostring(tostring(getbyte(date,1),"D2") + ":" + tostring(getbyte(date,0),"D2") + ", " + belong + " (" + switch(belong,1,"sharp",2,"peak",3,"Valley",4,"flat","NaN")+")")
{7. time period starting time}, {rate}
var date := modbusr(H, 0x8100+12, INT16);
var belong := modbusr(H,0x8101+12,INT16);
tostring(tostring(getbyte(date,1),"D2") + ":" + tostring(getbyte(date,0),"D2") + ", " + belong + " (" + switch(belong,1,"sharp",2,"peak",3,"Valley",4,"flat","NaN")+")")
{8. time period starting time}, {rate}
var date := modbusr(H, 0x8100+14, INT16);
var belong := modbusr(H,0x8101+14,INT16);
tostring(tostring(getbyte(date,1),"D2") + ":" + tostring(getbyte(date,0),"D2") + ", " + belong + " (" + switch(belong,1,"sharp",2,"peak",3,"Valley",4,"flat","NaN")+")")
Frequency [Hz]
round(modbusr(h,0x130,uint16)*0.01)
Voltage [V]
round(modbusr(h,0x131,int16)*0.01)
Split phase reactive power [kwar]
round(modbusr(h, 0x148,uint32)*0.001*10)/10
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)
var out1 := (YY<<8) + MM;
var out2 := (DD<<8) + HH;
var out3 := (MI<<8) + SS;

modbusw(H, 0x8120, uint16, out1);
modbusw(H, 0x8121, uint16, out2);
modbusw(H, 0x8122, uint16, out3);



#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)
modbusw(H, 0x8100, uint16, (HH1<<8) + MI1);
modbusw(H, 0x8101, uint16, T1);

modbusw(H, 0x8100+2, uint16, (HH2<<8) + MI2);
modbusw(H, 0x8101+2, uint16, T2);

modbusw(H, 0x8100+4, uint16, (HH3<<8) + MI3);
modbusw(H, 0x8101+4, uint16, T3);

modbusw(H, 0x8100+6, uint16, (HH4<<8) + MI4);
modbusw(H, 0x8101+6, uint16, T4);

modbusw(H, 0x8100+8, uint16, (HH5<<8) + MI5);
modbusw(H, 0x8101+8, uint16, T5);

modbusw(H, 0x8100+10, uint16, (HH6<<8) + MI6);
modbusw(H, 0x8101+10, uint16, T6);

modbusw(H, 0x8100+12, uint16, (HH7<<8) + MI7);
modbusw(H, 0x8101+12, uint16, T7);

modbusw(H, 0x8100+14, uint16, (HH8<<8) + MI8);
modbusw(H, 0x8101+14, uint16, T8);
Slave ID
Parameter: Parameter1 (1–255 ID)
modbusw(H, 0x110, Uint16, ID)
LCD Cycle time
Parameter: Time [s] (1–120 t)
modbusw(H, 0x0d, Uint16, t)
Baud rate
Parameter: Baud rate
modbusw(H,0x111,int16,Br)
Elektrischer Strom Variable Nur lesen

Momentaner einphasiger Leitungsstrom (A) mit Spannungs-Service-Attribut

Register: H:313 UInt32 Einheit: A numeric
Serviceattribute
Spannung

Elektrischer Strom

Lesen
MODBUSR(H, 0x139, UInt32)/1000
Serviceattribute
Voltage [V]
round(modbusr(H, 0x131, uint16)*0.01)
Gesamtenergie Stromzähler Nur lesen

Gesamtwirkenergieverbrauch (kWh) und momentane Leistungsabnahme (kW) mit Netzfrequenz, Blindleistung, Scheinleistung und Leistungsfaktor

Register: H:40960 (readtotalconsumption), H:320 (readdemand) UInt32 / Int32 Einheit: kWh / kW numeric
Serviceattribute
Netzfrequenz
Blindleistung
Scheinleistung
Leistungsfaktor

Gesamtenergie

Gesamtverbrauch lesen
MODBUSR(H, 0xA000, UInt32)/100
Bedarf lesen
MODBUSR(H, 0x140, Int32)/1000
Serviceattribute
${grid_frequency} [Hz]
tostring(modbusr(H, 0x130,UInt16)/100, "F2")
${reactive_power} [kVAr]
tostring(modbusr(H, 0x148,Int32)/1000, "F2")
${apparent_power} [kVA]
tostring(modbusr(H, 0x150,Int32)/1000, "F2")
${power_factor}
tostring(modbusr(H, 0x158,Int16)/1000, "F2")
Tarif T1 Stromzähler Nur lesen

Wirkenergie, akkumuliert während Tarifperiode 1 (Spitze) mit Blindenergiezähler

Register: H:40962 (readtotalconsumption) UInt32 Einheit: kWh numeric
Serviceattribute
Gesamtblindenergie

Tarif T1

Gesamtverbrauch lesen
MODBUSR(H, 0xA002, UInt32)/100
Serviceattribute
${total_reactive_energy} [kVArh]
tostring(modbusr(H, 0xA01E + 2,UInt32)/1000, "F2")
Tarif T2 Stromzähler Nur lesen

Wirkenergie, akkumuliert während Tarifperiode 2 (Hochtarif) mit Blindenergiezähler

Register: H:40964 (readtotalconsumption) UInt32 Einheit: kWh numeric
Serviceattribute
Gesamtblindenergie

Tarif T2

Gesamtverbrauch lesen
MODBUSR(H, 0xA004, UInt32)/100
Serviceattribute
Total Reactive Energy [kwarh]
tostring(modbusr(H, 0xA01E + 4,UInt32)/1000, "F2")
Tarif T3 Stromzähler Nur lesen

Wirkenergie, akkumuliert während Tarifperiode 3 (Niedrigtarif/Schwachlast) mit Blindenergiezähler

Register: H:40966 (readtotalconsumption) UInt32 Einheit: kWh numeric
Serviceattribute
Gesamtblindenergie

Tarif T3

Gesamtverbrauch lesen
MODBUSR(H, 0xA006, UInt32)/100
Serviceattribute
Total Reactive Energy
tostring(modbusr(H, 0xA01E + 6,UInt32)/1000, "F2")
Tarif T4 Stromzähler Nur lesen

Wirkenergie, akkumuliert während Tarifperiode 4 (Flachtarif) mit Blindenergiezähler

Register: H:40968 (readtotalconsumption) UInt32 Einheit: kWh numeric
Serviceattribute
Gesamtblindenergie

Tarif T4

Gesamtverbrauch lesen
MODBUSR(H, 0xA008, UInt32)/100
Serviceattribute
${total_reactive_energy} [kVArh]
tostring(modbusr(H, 0xA01E + 8,UInt32)/1000, "F2")
Verbindung: Modbus RTU • 9600 baud• 8E1 • Slave ID: $[SlaveId]
Mögliche Verbesserungen (8)
  • H:312 (0x138) Voltage (high-precision UInt32) — UInt32 voltage register with 0.001V resolution — template uses H:305 (UInt16, 0.01V) instead
  • H:320 (0x140) — export Active Power (export/negative) — Template reads H:320 for total power but does not split into import/export — no bidirectional energy separation
  • H:0xA00A–0xA00E Tariff T1–T4 Export Active Energy — Per-tariff export (reverse) energy counters — template only reads import direction
  • H:0xA010 Total Active Energy (combined import+export) — Combined bidirectional total — template uses H:0xA000 (import only)
  • H:0xA01C Total Reactive Energy (all tariffs) — Grand total reactive energy across all tariffs — template only reads per-tariff reactive counters
  • H:0xA01E (40990) Total Reactive Energy (import) — Total reactive import energy — base address used by per-tariff SA formulas (0xA01E + offset)
  • H:0x160 (352) Current THD — Total harmonic distortion of current, %
  • H:0x168 (360) Voltage THD — Total harmonic distortion of voltage, %

Quellen

  • Orno OR-WE-514 & OR-WE-515 Register Description
    2026-03-27
    PDF
  • Orno OR-WE-512/514/515 Installation Manual
    PDF
  • AGG Software — OR-WE-514/515 Modbus Register Map
  • OR_WE_Energy_Meter Arduino Library — Register Definitions
    github.com 2026-03-27