TapHome

Orno OR-WE-515

Modbus RTU
Inviato da
Ultimo aggiornamento: 03. 2026
Orno OR-WE-515

L’Orno OR-WE-515 è un contatore di energia monofase multitariffa da barra DIN che comunica tramite Modbus RTU su RS-485. Con soli 18 mm di larghezza (1 modulo DIN), misura energia attiva, energia reattiva, tensione, corrente, potenza, fattore di potenza e frequenza. La differenza principale rispetto al più semplice OR-WE-514 è il supporto di 4 tariffe indipendenti (punta, alta, bassa, piatta) con programmazione fasce orarie configurabile e una batteria al litio integrata per l’orologio in tempo reale.

Il template TapHome fornisce 6 dispositivi: un contatore energetico totale con domanda di potenza istantanea, 4 contatori tariffari individuali (T1–T4) e un sensore di corrente elettrica. Le azioni di servizio a livello modulo consentono di configurare i piani tariffari, impostare l’orologio RTC, cambiare l’indirizzo Modbus slave, regolare il baud rate e controllare il tempo di ciclo del display LCD — tutto da remoto tramite TapHome.

Collegamento hardware

Cablaggio RS-485

L’OR-WE-515 ha un’interfaccia RS-485 a 3 morsetti sul lato destro del contatore. Collegare con topologia daisy-chain:

  • Morsetto 23 (A) ad A+/D+ su TapHome RS-485
  • Morsetto 24 (G) a GND su TapHome RS-485
  • Morsetto 25 (B) a B-/D- su TapHome RS-485

I morsetti rimanenti gestiscono la linea di alimentazione: il Morsetto 1 è L-IN (ingresso fase), il Morsetto 3 è L-OUT (uscita fase) e i due morsetti N sono per il conduttore neutro.

Se il convertitore RS-485 non dispone di un morsetto G (massa), il collegamento a massa sul morsetto 24 può essere omesso. Per una comunicazione affidabile su tratte di cavo più lunghe, si raccomanda tuttavia di collegare il GND.

Scollegare sempre l’alimentazione prima dell’installazione. Il contatore gestisce fino a 100 A attraverso i suoi morsetti. Assicurare il corretto dimensionamento dei cavi (morsetti a vite fino a 25 mm2) e sigillare il coperchio dei morsetti dopo il cablaggio.

Configurazione

Parametri di comunicazione

Le impostazioni Modbus predefinite corrispondono al template TapHome:

ParametroPredefinitoOpzioni
Baud rate96001200, 2400, 4800, 9600
Bit di dati8Fisso
ParitàEvenFisso (8E1)
Bit di stop1Fisso
Slave ID11–255

L’intestazione del PDF della descrizione dei registri indica “N81” (nessuna parità), ma il manuale di installazione e le implementazioni della community (libreria Arduino, AGG Software) confermano costantemente 8E1 (parità pari) come impostazione corretta. In TapHome utilizzare la parità pari.

Slave ID

Quando si collegano più contatori sullo stesso bus RS-485, ogni contatore deve avere uno Slave ID univoco. Lo Slave ID predefinito è 1, configurabile nell’intervallo 1–255. Il template TapHome include un’azione di servizio Set Slave ID che scrive nel registro holding H:272, consentendo la modifica remota dell’indirizzo senza accesso fisico al contatore.

Baud rate

Il baud rate può essere modificato da remoto tramite l’azione di servizio Set Baud Rate. Le opzioni disponibili sono 1200, 2400, 4800 e 9600 bps. Il valore è memorizzato nel registro holding H:273 come intero codificato (1=1200, 2=2400, 3=4800, 4=9600). Dopo aver modificato il baud rate, aggiornare le impostazioni di connessione del modulo in TapHome.

Funzionalità del dispositivo

Il template crea 6 dispositivi organizzati in due gruppi: misurazione energia e misurazione corrente. Tutti i registri utilizzano il codice funzione Modbus 03H (registri holding).

Misurazione energia

Cinque dispositivi ModbusElectricityMeter monitorano il consumo energetico:

  • Total Energy — energia attiva totale (H:40960, UInt32 / 100 in kWh) e domanda di potenza attiva istantanea (H:320, Int32 / 1000 in kW). Questo dispositivo include 4 attributi di servizio: frequenza di rete (Hz), potenza reattiva (kVAr), potenza apparente (kVA) e fattore di potenza (0,000–1,000).
  • Tariff T1 — energia attiva accumulata durante i periodi tariffari 1 (H:40962, UInt32 / 100 in kWh). Include un attributo di servizio per l’energia reattiva T1 (kVArh).
  • Tariff T2 — energia attiva accumulata durante i periodi tariffari 2 (H:40964, UInt32 / 100 in kWh). Include un attributo di servizio per l’energia reattiva T2 (kVArh).
  • Tariff T3 — energia attiva accumulata durante i periodi tariffari 3 (H:40966, UInt32 / 100 in kWh). Include un attributo di servizio per l’energia reattiva T3 (kVArh).
  • Tariff T4 — energia attiva accumulata durante i periodi tariffari 4 (H:40968, UInt32 / 100 in kWh). Include un attributo di servizio per l’energia reattiva T4 (kVArh).

Le 4 tariffe corrispondono alle fasce orarie di consumo: 1 = punta (tariffa più alta), 2 = alta, 3 = bassa (fuori punta), 4 = piatta. Fino a 8 intervalli di tempo giornalieri definiscono quando ogni tariffa è applicata.

Misurazione corrente
  • Electric Current — corrente di linea istantanea (H:313, UInt32 / 1000 in A). Include un attributo di servizio per la tensione (H:305, V).
Gestione tariffe e orologio

Il modulo espone 5 azioni di servizio per la configurazione remota:

  • Set Date/Time — imposta l’orologio RTC integrato (anno, mese, giorno, ora, minuti, secondi). L’OR-WE-515 dispone di una batteria al litio che mantiene l’orologio durante le interruzioni di alimentazione.
  • Set Tariffs — configura fino a 8 intervalli feriali. Ogni intervallo definisce un orario di inizio (ora, minuto) e una tariffa (0=disabilitato, 1=punta, 2=alta, 3=bassa, 4=piatta). La pianificazione predefinita avvia la tariffa 2 (alta) alle 07:00 e la tariffa 3 (bassa) alle 22:00.
  • Set Slave ID — cambia l’indirizzo Modbus (1–255).
  • Set Baud Rate — cambia la velocità di comunicazione RS-485 (1200/2400/4800/9600 bps).
  • Set LCD Cycle Time — regola l’intervallo di scorrimento automatico del display (1–120 secondi).

Gli attributi di servizio a livello modulo mostrano lo Slave ID attuale, il baud rate, data/ora e gli 8 piani di periodi temporali configurati con le relative assegnazioni tariffarie.

Il piano tariffario configurato tramite TapHome si applica solo ai giorni feriali (registri 0x8100–0x810F). L’OR-WE-515 supporta anche piani separati per il fine settimana (0x8110) e i giorni festivi (0x8130), ma questi non sono disponibili nel template attuale. Possono essere configurati tramite il software Orno o aggiunti come dispositivi Modbus personalizzati in TapHome.

Funzionalità aggiuntive

L’OR-WE-515 fornisce anche un registro di tensione ad alta precisione (UInt32, risoluzione 0,001 V) come alternativa al registro UInt16 utilizzato nel template. Il contatore supporta misurazione bidirezionale (potenza attiva diretta e inversa), contatori di esportazione energia per tariffa, contatori totali bidirezionali combinati, energia reattiva totale su tutte le tariffe e distorsione armonica totale (THD) per tensione e corrente. Questi possono essere aggiunti in un futuro aggiornamento del template.

Risoluzione dei problemi

Nessuna comunicazione
  1. Verificare il cablaggio RS-485: morsetto 23 = A, morsetto 25 = B — invertire A e B se la comunicazione non funziona
  2. Confermare che l’impostazione della parità in TapHome è Even (8E1), non None
  3. Verificare che il baud rate in TapHome corrisponda al contatore (predefinito 9600)
  4. Verificare che lo Slave ID in TapHome corrisponda al contatore (predefinito 1)
  5. Per tratte di cavo lunghe, assicurarsi che il GND (morsetto 24) sia collegato
Letture di energia errate
  1. Verificare la modalità di misurazione del contatore — l’Opzione 1 (predefinita) misura energia attiva e reattiva; l’Opzione 2 misura energia diretta e inversa (bidirezionale)
  2. I contatori tariffari (T1–T4) accumulano energia solo durante i periodi assegnati — se tutti i piani tariffari sono disabilitati (impostati a 0), i contatori tariffari restano a zero mentre Total Energy continua a incrementare
  3. La costante del contatore è configurabile (100, 1000 o 2000 imp/kWh) — il valore predefinito 1000 imp/kWh corrisponde alla scalatura dei registri nel template
Nota sulla scalatura dell’energia reattiva

La documentazione ufficiale dei registri specifica una scalatura di 0,01 kVArh per i registri di energia reattiva, mentre il template TapHome utilizza un divisore /1000 per gli attributi di servizio dell’energia reattiva per tariffa. Questa differenza può causare un offset di scalatura 10x per i valori di energia reattiva. Se i valori di energia reattiva appaiono errati, confrontarli con il display LCD sul contatore fisico.

Dispositivi disponibili

Orno OR-WE-515 Modulo
Attributi di servizio
Slave ID
Baud rate
Data/OraLettura dell'orologio in tempo reale integrato — data e ora mantenute dalla batteria al litio
Periodo 1Piano tariffario slot 1 — orario di inizio (HH:MM) e tariffa (punta, alta, bassa o piatta)
Periodo 2Piano tariffario slot 2 — orario di inizio e assegnazione tariffa
Periodo 3Piano tariffario slot 3 — orario di inizio e assegnazione tariffa
Periodo 4Piano tariffario slot 4 — orario di inizio e assegnazione tariffa
Periodo 5Piano tariffario slot 5 — orario di inizio e assegnazione tariffa
Periodo 6Piano tariffario slot 6 — orario di inizio e assegnazione tariffa
Periodo 7Piano tariffario slot 7 — orario di inizio e assegnazione tariffa
Periodo 8Piano tariffario slot 8 — orario di inizio e assegnazione tariffa
Frequenza
Tensione
Potenza reattiva di fase
Azioni di servizio
Imposta data/oraImposta l'orologio in tempo reale integrato — anno, mese, giorno, ora, minuti, secondi
Imposta tariffeConfigurazione di fino a 8 intervalli feriali — ciascuno con orario di inizio e tariffa (punta, alta, bassa, piatta)
Imposta Slave ID
Imposta tempo ciclo LCDRegolazione dell'intervallo di scorrimento automatico del display LCD (1--120 secondi)
Imposta baud rate

OR-WE-515

Attributi di servizio
${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
Azioni di servizio
Date/Time
Parametri: 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}
Parametri: 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
Parametri: Parameter1 (1–255 ID)
modbusw(H, 0x110, Uint16, ID)
LCD Cycle time
Parametri: Time [s] (1–120 t)
modbusw(H, 0x0d, Uint16, t)
Baud rate
Parametri: Baud rate
modbusw(H,0x111,int16,Br)
Corrente elettrica Variabile Solo lettura

Corrente di linea monofase istantanea (A) con attributo di servizio tensione

Registro: H:313 UInt32 Unità: A numeric
Attributi di servizio
Tensione

Corrente elettrica

Lettura
MODBUSR(H, 0x139, UInt32)/1000
Attributi di servizio
Voltage [V]
round(modbusr(H, 0x131, uint16)*0.01)
Energia totale Contatore elettrico Solo lettura

Consumo totale di energia attiva (kWh) e domanda di potenza istantanea (kW) con frequenza di rete, potenza reattiva, potenza apparente e fattore di potenza

Registro: H:40960 (readtotalconsumption), H:320 (readdemand) UInt32 / Int32 Unità: kWh / kW numeric
Attributi di servizio
Frequenza di rete
Potenza reattiva
Potenza apparente
Fattore di potenza

Energia totale

Lettura consumo totale
MODBUSR(H, 0xA000, UInt32)/100
Lettura domanda
MODBUSR(H, 0x140, Int32)/1000
Attributi di servizio
${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")
Tariffa T1 Contatore elettrico Solo lettura

Energia attiva accumulata durante i periodi tariffari 1 (punta) con contatore energia reattiva

Registro: H:40962 (readtotalconsumption) UInt32 Unità: kWh numeric
Attributi di servizio
Energia reattiva totale

Tariffa T1

Lettura consumo totale
MODBUSR(H, 0xA002, UInt32)/100
Attributi di servizio
${total_reactive_energy} [kVArh]
tostring(modbusr(H, 0xA01E + 2,UInt32)/1000, "F2")
Tariffa T2 Contatore elettrico Solo lettura

Energia attiva accumulata durante i periodi tariffari 2 (alta) con contatore energia reattiva

Registro: H:40964 (readtotalconsumption) UInt32 Unità: kWh numeric
Attributi di servizio
Energia reattiva totale

Tariffa T2

Lettura consumo totale
MODBUSR(H, 0xA004, UInt32)/100
Attributi di servizio
Total Reactive Energy [kwarh]
tostring(modbusr(H, 0xA01E + 4,UInt32)/1000, "F2")
Tariffa T3 Contatore elettrico Solo lettura

Energia attiva accumulata durante i periodi tariffari 3 (bassa/fuori punta) con contatore energia reattiva

Registro: H:40966 (readtotalconsumption) UInt32 Unità: kWh numeric
Attributi di servizio
Energia reattiva totale

Tariffa T3

Lettura consumo totale
MODBUSR(H, 0xA006, UInt32)/100
Attributi di servizio
Total Reactive Energy
tostring(modbusr(H, 0xA01E + 6,UInt32)/1000, "F2")
Tariffa T4 Contatore elettrico Solo lettura

Energia attiva accumulata durante i periodi tariffari 4 (piatta) con contatore energia reattiva

Registro: H:40968 (readtotalconsumption) UInt32 Unità: kWh numeric
Attributi di servizio
Energia reattiva totale

Tariffa T4

Lettura consumo totale
MODBUSR(H, 0xA008, UInt32)/100
Attributi di servizio
${total_reactive_energy} [kVArh]
tostring(modbusr(H, 0xA01E + 8,UInt32)/1000, "F2")
Connessione: Modbus RTU • 9600 baud• 8E1 • Slave ID: $[SlaveId]
Possibili miglioramenti (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, %

Fonti

  • 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