---
title: "Orno OR-WE-517"
description: "Orno OR-WE-517 3-phase multitariff energy meter with Modbus RTU (RS-485). TapHome reads per-phase and total energy and 4 tariff counters."
url: "https://taphome.com/en/compatibility/orno-or-we-517/"
language: en
lastmod: 2026-10-08
generator: hugo
ai:
  topics: ["modbus-rtu","electric-meter","rs485","3-phase","energy-metering","din-rail","multitariff"]
  questions: ["How to integrate Orno OR-WE-517 with TapHome?","What does the Orno OR-WE-517 TapHome template measure?","How to connect Orno OR-WE-517 via RS-485 to TapHome?","How to configure tariff schedules on the OR-WE-517?","What is the difference between OR-WE-516 and OR-WE-517?","How to set the Modbus slave address on OR-WE-517?"]
---

# Orno OR-WE-517

Communication: Modbus RTU

- [Orno Official Website](https://www.orno.pl)

## Integration guide

The Orno OR-WE-517 is a DIN-rail mounted 3-phase multitariff energy meter that communicates via Modbus RTU over RS-485. It is a direct-connect meter rated up to 80 A per phase, MID certified (Directive 2014/32/EU), and occupies 4.3 modules on a TH-35 rail. The TapHome template provides 11 electricity meter devices covering per-phase current, per-phase energy, total 3-phase energy, and 4-tariff energy counters, along with service attributes for voltage, reactive/apparent power, power factor, and bidirectional (forward/reverse) energy breakdown.

All measurement registers use IEEE 754 Float32 encoding (2 Modbus words per value), read via function code 03 (holding registers). The template also provides service actions for setting the meter's real-time clock, configuring tariff schedules, and adjusting the Modbus slave ID.

## Hardware connection

### RS-485 wiring

The OR-WE-517 has a built-in RS-485 interface for Modbus RTU communication. Connect the meter to the TapHome Core RS-485 bus using a twin-core shielded communication cable:

- **A** terminal on the meter to **A+/D+** on TapHome RS-485
- **B** terminal on the meter to **B-/D-** on TapHome RS-485

> [!WARNING]
> Use a **daisy-chain** wiring topology. Star or stub topologies cause signal reflections and communication errors. The connection between the converter and the meter should be carried out using twin-core communication cable adapted to the RS-485 standard.

> [!TIP]
> A standard USB-RS485 converter can also be used for initial configuration and testing. The converter is not included with the meter.

## Configuration

### Communication parameters

The default Modbus settings match the TapHome template out of the box:

| Parameter | Default | Range |
|-----------|---------|-------|
| Baud rate | 9600 bps | 1200, 2400, 4800, 9600 |
| Data bits | 8 | Fixed |
| Parity | Even | Fixed |
| Stop bits | 1 | Fixed |
| Slave ID | 1 | 1--255 |

The communication frame uses an 11-bit format: 1 start bit, 8 data bits, 1 even parity bit, and 1 stop bit with CRC check.

### Slave ID

When connecting multiple meters on the same RS-485 bus, each meter must have a unique Slave ID. The default Slave ID is 1 (configurable from 1 to 255 via holding register H:2). After importing the TapHome template, adjust the Slave ID in the module connection settings to match the physical meter. The template also provides a **Slave ID** service action to change the address remotely via Modbus.

The current Slave ID and baud rate are visible on the meter's LCD display (pages 42 and 43 respectively).

## Device capabilities

The template creates 11 ModbusElectricityMeter and ModbusVariable devices organized into four groups: per-phase current sensors, per-phase energy meters, a total 3-phase energy device, and tariff-based energy counters.

### Per-phase current monitoring

Three devices provide real-time current measurement for each phase:

- **L1 Current** — phase 1 current (H:22, A) with L1 voltage as a service attribute (H:14, V)
- **L2 Current** — phase 2 current (H:24, A) with L2 voltage (H:16, V)
- **L3 Current** — phase 3 current (H:26, A) with L3 voltage (H:18, V)

### Per-phase energy metering

Three devices track active energy consumption and power demand per phase with a comprehensive set of service attributes:

- **Phase L1** — total active energy (H:258, kWh) and active power (H:30, kW). Service attributes include voltage, current, reactive power (kVAr), apparent power (kVA), power factor, and bidirectional energy counters (forward/reverse active and reactive energy).
- **Phase L2** — total active energy (H:260, kWh) and active power (H:32, kW). Same per-phase service attributes as L1.
- **Phase L3** — total active energy (H:262, kWh) and active power (H:34, kW). Same per-phase service attributes as L1.

### Total 3-phase energy

One device provides the system-wide totals:

- **Total Energy (3-Phase)** — total active energy (H:256, kWh) and total active power demand (H:28, kW). Service attributes include grid frequency (Hz), total reactive power (kVAr), total apparent power (kVA), total power factor, and bidirectional energy counters (forward/reverse active and reactive energy).

### Tariff energy counters

Four devices track cumulative energy per tariff zone (T1--T4):

- **Tariff T1** through **Tariff T4** — each reports total active energy (kWh) with service attributes for forward/reverse active energy and forward/reverse/total reactive energy. Tariff meters only track cumulative energy, not instantaneous power demand.

The meter supports up to 8 time intervals per day (Monday through Sunday individually) for assigning tariff zones T1--T4. Tariff schedules are configurable via the **Set Tariffs** service action, which allows programming intervals for a specific day or all days at once.

> [!TIP]
> The 4-tariff capability is the key differentiator of the OR-WE-517 compared to the OR-WE-516 (which supports RS-485 but has no tariff scheduling). The OR-WE-513 has neither RS-485 nor tariff support.

### Service actions

The template provides four service actions for remote configuration:

- **Date/Time** — set the meter's internal real-time clock (year, month, day, hour, minutes, seconds, and day of week) via registers H:60--H:65
- **Set Tariffs** — configure up to 8 daily tariff intervals (T1--T4) for a selected day or all days at once, written to tariff schedule registers starting at H:768
- **LCD Cycle time** — set the LCD display auto-scroll interval (1--120 seconds)
- **Slave ID** — change the meter's Modbus address (1--255) via holding register H:2

### Additional capabilities

The OR-WE-517 also exposes registers for total reactive energy per phase (L1/L2/L3), serial number, firmware and hardware version, a combined configuration code, and a holiday/weekend tariff assignment register. These can be added in a future template update.

## Troubleshooting

### No communication

1. Verify the RS-485 A/B terminal connections -- swap A and B if communication fails, as labeling conventions vary between manufacturers
2. Confirm the baud rate in TapHome matches the meter setting (default 9600 bps, visible on LCD page 43)
3. Verify the Slave ID matches (default 1, visible on LCD page 42 as "Id 255" format where 255 is the current address)
4. Check that the parity setting is **Even** (8E1) -- this meter uses even parity by default, unlike some meters that default to no parity (8N1)

### Incorrect readings

1. Ensure the meter is wired as a 3-phase 4-wire system with all three phase conductors and neutral connected through the meter terminals
2. For bidirectional metering (forward/reverse energy), verify the CT direction or conductor direction matches the energy flow -- reversed wiring causes forward energy to register as reverse

### Communication via Ethernet converter

The OR-WE-517 can also be accessed via an RS-485 to Ethernet converter (e.g., Waveshare RS485 to ETH). When using such a converter, the protocol type must be set to **RTU over TCP** (not standard Modbus TCP). Standard TCP framing does not work with this meter.

## Available devices 11

These devices appear in TapHome after import.

Orno OR-WE-517 Module

Service Attributes

|                |                                                                                                      |
|----------------|------------------------------------------------------------------------------------------------------|
| Slave ID       |                                                                                                      |
| Baud rate      |                                                                                                      |
| LCD cycle time |                                                                                                      |
| CT Rate        | Current transformer ratio — only applicable for CT-type meters, not for direct-connect installations |
| S0 output rate |                                                                                                      |
| Time           | Current date and time from the meter's internal real-time clock                                      |
| Tariffs (Mo)   |                                                                                                      |
| Tariffs (Tu)   |                                                                                                      |
| Tariffs (We)   |                                                                                                      |
| Tariffs (Th)   |                                                                                                      |
| Tariffs (Fr)   |                                                                                                      |
| Tariffs (Sa)   |                                                                                                      |
| Tariffs (Su)   |                                                                                                      |

Service Actions

|                |                                                                                                      |
|----------------|------------------------------------------------------------------------------------------------------|
| Date/Time      | Set the meter's internal real-time clock — date, time, and day of week for tariff schedule operation |
| Set Tariffs    | Configure up to 8 daily tariff intervals (T1–T4) for a selected day or all days at once              |
| Slave ID       | Change the Modbus slave address (1–255) for multi-meter RS-485 bus configurations                    |
| LCD Cycle time | Set the LCD display auto-scroll interval in seconds                                                  |

Service Attributes

${device\_SlaveId}

```taphome
modbusr(H, 0x02, Uint16)
```

${baud\_rate} \[bps]

```taphome
modbusr(H, 0x03, Uint16)
```

LCD ${cycle\_time} \[s]

```taphome
modbusr(H, 0x0d, Uint16)
```

CT Rate

```taphome
modbusr(H, 0x08, Uint16)
```

S0 output rate \[imp/kWh]

```taphome
modbusr(H, 0x09, Float)
```

${time}

```taphome
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)

```taphome
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)

```taphome
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)

```taphome
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)

```taphome
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)

```taphome
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)

```taphome
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)

```taphome
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)
```

Service Actions

Date/Time

Parameters: 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

```taphome
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}

Parameters: 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

```taphome
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

Parameters: Parameter1 (1–255 ID)

```taphome
modbusw(H, 0x02, Uint16, ID)
```

LCD Cycle time

Parameters: Time \[s] (1–120 t)

```taphome
modbusw(H, 0x0d, Uint16, t)
```

L1 Current Variable Read-only

Register: H:22 Float Unit: A

Service Attributes

|            |
|------------|
| L1 Voltage |

Read

```taphome
MODBUSR(H, 22, Float)
```

Service Attributes

L1 ${electric\_voltage} \[V]

```taphome
round(modbusr(H, 0x0e, Float)*10)/10
```

L2 Current Variable Read-only

Register: H:24 Float Unit: A

Service Attributes

|            |
|------------|
| L2 Voltage |

Read

```taphome
MODBUSR(H, 24, Float)
```

Service Attributes

L2 ${electric\_voltage} \[V]

```taphome
round(modbusr(H, 0x10, Float)*10)/10
```

L3 Current Variable Read-only

Register: H:26 Float Unit: A

Service Attributes

|            |
|------------|
| L3 Voltage |

Read

```taphome
MODBUSR(H, 26, Float)
```

Service Attributes

L3 ${electric\_voltage} \[V]

```taphome
round(modbusr(H, 0x12, Float)*10)/10
```

Phase L1 Electricity Meter Read-only

Phase 1 energy meter — total active energy and active power with voltage, current, reactive/apparent power, power factor, and bidirectional energy counters

Register: H:258 (readtotalconsumption), H:30 (readdemand) Float Unit: kWh / kW

Service Attributes

|                         |
|-------------------------|
| Voltage                 |
| Current                 |
| Reactive power          |
| Apparent power          |
| Power factor            |
| Forward active energy   |
| Reverse active energy   |
| Forward reactive energy |
| Reverse reactive energy |

Read total consumption

```taphome
MODBUSR(H, 0x102, Float)
```

Read demand

```taphome
MODBUSR(H, 0x1e, Float)
```

Service Attributes

${electric\_voltage} \[V]

```taphome
tostring(modbusr(H, 0x0e,Float), "F2")
```

${electric\_current} \[A]

```taphome
tostring(modbusr(H, 0x16,Float), "F2")
```

${reactive\_power} \[kVAr]

```taphome
tostring(modbusr(H, 0x26,Float), "F2")
```

${apparent\_power} \[kVA]

```taphome
tostring(modbusr(H, 0x2e,Float), "F2")
```

${power\_factor}

```taphome
tostring(modbusr(H, 0x36,Float), "F2")
```

${forward\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x10a,Float), "F2")
```

${reverse\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x112,Float), "F2")
```

${forward\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x122,Float), "F2")
```

${reverse\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x12a,Float), "F2")
```

Phase L2 Electricity Meter Read-only

Register: H:260 (readtotalconsumption), H:32 (readdemand) Float Unit: kWh / kW

Service Attributes

|                         |
|-------------------------|
| Voltage                 |
| Current                 |
| Reactive power          |
| Apparent power          |
| Power factor            |
| Forward active energy   |
| Reverse active energy   |
| Forward reactive energy |
| Reverse reactive energy |

Read total consumption

```taphome
MODBUSR(H, 0x104, Float)
```

Read demand

```taphome
MODBUSR(H, 0x20, Float)
```

Service Attributes

${electric\_voltage} \[V]

```taphome
tostring(modbusr(H, 0x10,Float), "F2")
```

${electric\_current} \[A]

```taphome
tostring(modbusr(H, 0x18,Float), "F2")
```

${reactive\_power} \[kVAr]

```taphome
tostring(modbusr(H, 0x28,Float), "F2")
```

${apparent\_power} \[kVA]

```taphome
tostring(modbusr(H, 0x30,Float), "F2")
```

${power\_factor}

```taphome
tostring(modbusr(H, 0x38,Float), "F2")
```

${forward\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x10c,Float), "F2")
```

${reverse\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x114,Float), "F2")
```

${forward\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x124,Float), "F2")
```

${reverse\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x12c,Float), "F2")
```

Phase L3 Electricity Meter Read-only

Register: H:262 (readtotalconsumption), H:34 (readdemand) Float Unit: kWh / kW

Service Attributes

|                         |
|-------------------------|
| Voltage                 |
| Current                 |
| Reactive power          |
| Apparent power          |
| Power factor            |
| Forward active energy   |
| Reverse active energy   |
| Forward reactive energy |
| Reverse reactive energy |

Read total consumption

```taphome
MODBUSR(H, 0x106, Float)
```

Read demand

```taphome
MODBUSR(H, 0x22, Float)
```

Service Attributes

${electric\_voltage} \[V]

```taphome
tostring(modbusr(H, 0x12,Float), "F2")
```

${electric\_current} \[A]

```taphome
tostring(modbusr(H, 0x1a,Float), "F2")
```

${reactive\_power} \[kVAr]

```taphome
tostring(modbusr(H, 0x2a,Float), "F2")
```

${apparent\_power} \[kVA]

```taphome
tostring(modbusr(H, 0x32,Float), "F2")
```

${power\_factor}

```taphome
tostring(modbusr(H, 0x3a,Float), "F2")
```

${forward\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x10e,Float), "F2")
```

${reverse\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x116,Float), "F2")
```

${forward\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x126,Float), "F2")
```

${reverse\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x12e,Float), "F2")
```

Tariff T1 Electricity Meter Read-only

Tariff 1 cumulative energy counter — total active energy with forward/reverse active and reactive energy breakdown

Register: H:304 (readtotalconsumption) Float Unit: kWh

Service Attributes

|                         |
|-------------------------|
| Forward active energy   |
| Reverse active energy   |
| Total reactive energy   |
| Forward reactive energy |
| Reverse reactive energy |

Read total consumption

```taphome
MODBUSR(H, 0x130, Float)
```

Service Attributes

${forward\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x132,Float), "F2")
```

${reverse\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x134,Float), "F2")
```

${total\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x136,Float), "F2")
```

${forward\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x138,Float), "F2")
```

${reverse\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x13a,Float), "F2")
```

Tariff T2 Electricity Meter Read-only

Register: H:316 (readtotalconsumption) Float Unit: kWh

Service Attributes

|                         |
|-------------------------|
| Forward active energy   |
| Reverse active energy   |
| Total reactive energy   |
| Forward reactive energy |
| Reverse reactive energy |

Read total consumption

```taphome
MODBUSR(H, 0x13c, Float)
```

Service Attributes

${forward\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x13e,Float), "F2")
```

${reverse\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x140,Float), "F2")
```

${total\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x142,Float), "F2")
```

${forward\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x144,Float), "F2")
```

${reverse\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x146,Float), "F2")
```

Tariff T3 Electricity Meter Read-only

Register: H:328 (readtotalconsumption) Float Unit: kWh

Service Attributes

|                         |
|-------------------------|
| Forward active energy   |
| Reverse active energy   |
| Total reactive energy   |
| Forward reactive energy |
| Reverse reactive energy |

Read total consumption

```taphome
MODBUSR(H, 0x148, Float)
```

Service Attributes

${forward\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x14a,Float), "F2")
```

${reverse\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x14c,Float), "F2")
```

${total\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x14e,Float), "F2")
```

${forward\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x150,Float), "F2")
```

${reverse\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x152,Float), "F2")
```

Tariff T4 Electricity Meter Read-only

Register: H:340 (readtotalconsumption) Float Unit: kWh

Service Attributes

|                         |
|-------------------------|
| Forward active energy   |
| Reverse active energy   |
| Total reactive energy   |
| Forward reactive energy |
| Reverse reactive energy |

Read total consumption

```taphome
MODBUSR(H, 0x154, Float)
```

Service Attributes

${forward\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x156,Float), "F2")
```

${reverse\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x158,Float), "F2")
```

${total\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x15a,Float), "F2")
```

${forward\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x15c,Float), "F2")
```

${reverse\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x15e,Float), "F2")
```

Total Energy (3-Phase) Electricity Meter Read-only

3-phase system total — active energy and power demand with grid frequency, reactive/apparent power, power factor, and bidirectional energy counters

Register: H:256 (readtotalconsumption), H:28 (readdemand) Float Unit: kWh / kW

Service Attributes

|                         |
|-------------------------|
| Grid frequency          |
| Total reactive power    |
| Total apparent power    |
| Total power factor      |
| Forward active energy   |
| Reverse active energy   |
| Forward reactive energy |
| Reverse reactive energy |

Read total consumption

```taphome
MODBUSR(H, 0x100, Float)
```

Read demand

```taphome
MODBUSR(H, 0x1c, Float)
```

Service Attributes

${grid\_frequency} \[Hz]

```taphome
tostring(modbusr(H, 0x14,Float), "F2")
```

${reactive\_power} \[kVAr]

```taphome
tostring(modbusr(H, 0x24,Float), "F2")
```

${apparent\_power} \[kVA]

```taphome
tostring(modbusr(H, 0x2c,Float), "F2")
```

${power\_factor}

```taphome
tostring(modbusr(H, 0x34,Float), "F2")
```

${forward\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x108,Float), "F2")
```

${reverse\_active\_energy} \[kWh]

```taphome
tostring(modbusr(H, 0x110,Float), "F2")
```

${forward\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x120,Float), "F2")
```

${reverse\_reactive\_energy} \[kVArh]

```taphome
tostring(modbusr(H, 0x128,Float), "F2")
```

**Connection:** Modbus RTU • 9600 baud• 8E1 • Slave ID: $\[SlaveId]

Possible improvements (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

## Import parameters

Enter these values when you import the XML.

| Asked in the app | Default       |
|------------------|---------------|
| Slave ID         | `1`           |
| IP address       | `192.168.1.0` |

## Sources

- Orno OR-WE-517 Modbus Register Map
  
  2026-03-27
  
  [PDF](https://taphome.com/compatibility/devices/orno-or-we-517/manufacturer/Orno%20OR-WE-517.pdf)
- OR-WE-513/516/517 Installation Manual
  
  [files.orno.pl](https://files.orno.pl/manuals/OR-WE-513,516,517_manual_EN.pdf) 2026-03-27
  
  [PDF](https://taphome.com/compatibility/devices/orno-or-we-517/manufacturer/installation-manual.pdf)
- Home Assistant Community — OR-WE-517 Modbus Configuration
  
  [community.home-assistant.io](https://community.home-assistant.io/t/configuration-of-the-orno-or-we-517-three-phase-meter-waveshare-rs485-to-eth-converter/778679) 2026-03-27

Manufacturer documents are © their respective owners. They are provided as published by the manufacturer, for reference only.

## Related Documentation

- [Modbus Integration](https://taphome.com/en/compatibility/modbus-guide/)
- [Modbus](https://taphome.com/en/docs/integration/modbus/)
- [Simple configuration using templates](https://taphome.com/en/docs/integration/modbus/templates/)
- [Modbus scripts and prefetch](https://taphome.com/en/docs/script/modbus-scripts/)
- [Modbus functions](https://taphome.com/en/docs/script/modbus/)
- [Modbus data types](https://taphome.com/en/docs/script/modbus-data-types/)

