---
title: "Orno OR-WE-515"
description: "Orno OR-WE-515 single-phase multitariff energy meter with Modbus RTU (RS-485). TapHome reads total energy, 4 tariff counters and live electrical values."
url: "https://taphome.com/en/compatibility/orno-or-we-515/"
language: en
lastmod: 2026-03-27
generator: hugo
ai:
  topics: ["modbus-rtu","electric-meter","rs485","single-phase","energy-metering","din-rail","multitariff"]
  questions: ["How to integrate Orno OR-WE-515 with TapHome?","What does the Orno OR-WE-515 TapHome template measure?","How to connect Orno OR-WE-515 via RS-485 to TapHome?","How to configure time-of-use tariffs on OR-WE-515 via TapHome?","What is the difference between OR-WE-514 and OR-WE-515?","How to change the Modbus slave address and baud rate on OR-WE-515?"]
---

# Orno OR-WE-515

Communication: Modbus RTU

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

## Integration guide

The Orno OR-WE-515 is a DIN-rail mounted single-phase multitariff energy meter that communicates via Modbus RTU over RS-485. At only 18 mm wide (1 DIN module), it measures active energy, reactive energy, voltage, current, power, power factor, and frequency. The key differentiator from the simpler OR-WE-514 is support for 4 independent tariffs (sharp, peak, valley, flat) with configurable time-of-use scheduling and a built-in lithium battery for the real-time clock.

The TapHome template provides 6 devices: a total energy meter with instantaneous power demand, 4 individual tariff energy counters (T1--T4), and an electric current sensor. Module-level service actions allow configuring tariff schedules, setting the RTC clock, changing the Modbus slave address, adjusting the baud rate, and controlling the LCD cycle time -- all remotely via TapHome.

## Hardware connection

### RS-485 wiring

The OR-WE-515 has a 3-terminal RS-485 interface on the right side of the meter. Connect using a daisy-chain topology:

- **Terminal 23 (A)** to A+/D+ on TapHome RS-485
- **Terminal 24 (G)** to GND on TapHome RS-485
- **Terminal 25 (B)** to B-/D- on TapHome RS-485

The remaining terminals handle the power line: **Terminal 1** is L-IN (line input), **Terminal 3** is L-OUT (line output), and the two **N** terminals are for the neutral conductor.

> [!NOTE]
> If the RS-485 converter does not have a G (ground) terminal, the ground connection on terminal 24 can be omitted. However, for reliable communication on longer cable runs, connecting GND is recommended.

> [!WARNING]
> Always disconnect the power supply before installation. The meter handles up to **100 A** through its terminals. Ensure proper wire sizing (up to 25 mm2 screw terminals) and seal the terminal cover after wiring.

## Configuration

### Communication parameters

The default Modbus settings match the TapHome template:

| Parameter | Default | Options |
|-----------|---------|---------|
| Baud rate | 9600 | 1200, 2400, 4800, 9600 |
| Data bits | 8 | Fixed |
| Parity | Even | Fixed (8E1) |
| Stop bits | 1 | Fixed |
| Slave ID | 1 | 1--255 |

> [!WARNING]
> The register description PDF header states "N81" (no parity), but the installation manual and community implementations (Arduino library, AGG Software) consistently confirm **8E1 (Even parity)** as the correct setting. Use Even parity in TapHome.

### 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 in the range 1--255. The TapHome template includes a **Set Slave ID** service action that writes to holding register H:272, allowing remote address changes without physical access to the meter.

### Baud rate

The baud rate can be changed remotely via the **Set Baud Rate** service action. Available options are 1200, 2400, 4800, and 9600 bps. The value is stored in holding register H:273 as an encoded integer (1=1200, 2=2400, 3=4800, 4=9600). After changing the baud rate, update the TapHome module connection settings to match.

## Device capabilities

The template creates 6 devices organized into two groups: energy metering and current measurement. All registers use Modbus function code 03H (holding registers).

### Energy metering

Five ModbusElectricityMeter devices track energy consumption:

- **Total Energy** -- total active energy (H:40960, UInt32 / 100 to kWh) and instantaneous active power demand (H:320, Int32 / 1000 to kW). This device includes 4 service attributes: grid frequency (Hz), reactive power (kVAr), apparent power (kVA), and power factor (0.000--1.000).
- **Tariff T1** -- active energy accumulated during tariff 1 time periods (H:40962, UInt32 / 100 to kWh). Includes a reactive energy service attribute for T1 (kVArh).
- **Tariff T2** -- active energy accumulated during tariff 2 time periods (H:40964, UInt32 / 100 to kWh). Includes a reactive energy service attribute for T2 (kVArh).
- **Tariff T3** -- active energy accumulated during tariff 3 time periods (H:40966, UInt32 / 100 to kWh). Includes a reactive energy service attribute for T3 (kVArh).
- **Tariff T4** -- active energy accumulated during tariff 4 time periods (H:40968, UInt32 / 100 to kWh). Includes a reactive energy service attribute for T4 (kVArh).

The 4 tariff rates correspond to time-of-use pricing: 1 = sharp (highest rate), 2 = peak, 3 = valley (off-peak), 4 = flat. Up to 8 time intervals per day define when each tariff applies.

### Current measurement

- **Electric Current** -- instantaneous line current (H:313, UInt32 / 1000 to A). Includes a voltage service attribute (H:305, V).

### Tariff and clock management

The module exposes 5 service actions for remote configuration:

- **Set Date/Time** -- sets the built-in RTC clock (year, month, day, hour, minutes, seconds). The OR-WE-515 has a lithium battery that maintains the clock during power outages.
- **Set Tariffs** -- configures up to 8 weekday time-of-use intervals. Each interval defines a start time (hour, minute) and a tariff rate (0=disabled, 1=sharp, 2=peak, 3=valley, 4=flat). The default schedule starts tariff 2 (peak) at 07:00 and tariff 3 (valley) at 22:00.
- **Set Slave ID** -- changes the Modbus address (1--255).
- **Set Baud Rate** -- changes the RS-485 communication speed (1200/2400/4800/9600 bps).
- **Set LCD Cycle Time** -- adjusts the automatic display scroll interval (1--120 seconds).

Module-level service attributes show the current slave ID, baud rate, date/time, and the 8 configured time period schedules with their tariff assignments.

> [!TIP]
> The tariff schedule configured via TapHome applies to **weekday** time periods only (registers 0x8100--0x810F). The OR-WE-515 also supports separate weekend (0x8110) and holiday (0x8130) schedules, but these are not exposed in the current template. They can be configured using the Orno software or added as custom Modbus devices in TapHome.

### Additional capabilities

The OR-WE-515 also provides a high-precision voltage register (UInt32, 0.001 V resolution) as an alternative to the UInt16 register used by the template. The meter supports bidirectional measurement (forward and reverse active power), per-tariff export energy counters, combined bidirectional energy totals, total reactive energy across all tariffs, and total harmonic distortion (THD) for both voltage and current. These can be added in a future template update.

## Troubleshooting

### No communication

1. Verify the RS-485 wiring: terminal 23 = A, terminal 25 = B -- swap A and B if communication fails
2. Confirm the parity setting in TapHome is **Even** (8E1), not None
3. Check that the baud rate in TapHome matches the meter (default 9600)
4. Verify the Slave ID in TapHome matches the meter (default 1)
5. For long cable runs, ensure GND (terminal 24) is connected

### Incorrect energy readings

1. Verify the meter's measurement mode -- Option 1 (default) measures active and reactive energy; Option 2 measures forward and backward (bidirectional) energy
2. Tariff counters (T1--T4) only accumulate energy during their assigned time periods -- if all tariff schedules are disabled (set to 0), the tariff counters remain at zero while Total Energy continues to increment
3. The meter constant is configurable (100, 1000, or 2000 imp/kWh) -- the default 1000 imp/kWh matches the template's register scaling

### Reactive energy scaling note

The official register documentation specifies 0.01 kVArh scaling for reactive energy registers, while the TapHome template uses a /1000 divisor for per-tariff reactive energy service attributes. This difference may result in a 10x scaling offset for reactive energy readings. If reactive energy values appear incorrect, verify against the LCD display on the physical meter.

## Available devices 6

These devices appear in TapHome after import.

Orno OR-WE-515 Module

Service Attributes

|                            |                                                                                     |
|----------------------------|-------------------------------------------------------------------------------------|
| Slave ID                   |                                                                                     |
| Baud Rate                  |                                                                                     |
| Date/Time                  | Built-in real-time clock reading — date and time maintained by lithium battery      |
| Time Period 1              | Tariff schedule slot 1 — start time (HH:MM) and rate (sharp, peak, valley, or flat) |
| Time Period 2              | Tariff schedule slot 2 — start time and rate assignment                             |
| Time Period 3              | Tariff schedule slot 3 — start time and rate assignment                             |
| Time Period 4              | Tariff schedule slot 4 — start time and rate assignment                             |
| Time Period 5              | Tariff schedule slot 5 — start time and rate assignment                             |
| Time Period 6              | Tariff schedule slot 6 — start time and rate assignment                             |
| Time Period 7              | Tariff schedule slot 7 — start time and rate assignment                             |
| Time Period 8              | Tariff schedule slot 8 — start time and rate assignment                             |
| Frequency                  |                                                                                     |
| Voltage                    |                                                                                     |
| Split Phase Reactive Power |                                                                                     |

Service Actions

|                    |                                                                                                                    |
|--------------------|--------------------------------------------------------------------------------------------------------------------|
| Set Date/Time      | Set the built-in real-time clock — year, month, day, hour, minutes, seconds                                        |
| Set Tariffs        | Configure up to 8 weekday time-of-use intervals — each with start time and tariff rate (sharp, peak, valley, flat) |
| Set Slave ID       |                                                                                                                    |
| Set LCD Cycle Time | Adjust the automatic LCD display scroll interval (1--120 seconds)                                                  |
| Set Baud Rate      |                                                                                                                    |

Service Attributes

${device\_SlaveId}

```taphome
modbusr(H, 0x110, Int16)
```

${baud\_rate} \[bps]

```taphome
switch(getbyte(modbusr(H, 0x111, Int16),0),0,0,1,1200,2,2400,3,4800,4,9600,"Invalid")
```

${time}

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

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

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

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

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

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

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

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

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

```taphome
round(modbusr(h,0x130,uint16)*0.01)
```

Voltage \[V]

```taphome
round(modbusr(h,0x131,int16)*0.01)
```

Split phase reactive power \[kwar]

```taphome
round(modbusr(h, 0x148,uint32)*0.001*10)/10
```

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)

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

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)

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

Parameters: Parameter1 (1–255 ID)

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

LCD Cycle time

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

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

Baud rate

Parameters: Baud rate

```taphome
modbusw(H,0x111,int16,Br)
```

Electric Current Variable Read-only

Instantaneous single-phase line current (A) with voltage service attribute

Register: H:313 UInt32 Unit: A numeric

Service Attributes

|         |
|---------|
| Voltage |

Read

```taphome
MODBUSR(H, 0x139, UInt32)/1000
```

Service Attributes

Voltage \[V]

```taphome
round(modbusr(H, 0x131, uint16)*0.01)
```

Total Energy Electricity Meter Read-only

Total active energy consumption (kWh) and instantaneous power demand (kW) with grid frequency, reactive power, apparent power, and power factor

Register: H:40960 (readtotalconsumption), H:320 (readdemand) UInt32 / Int32 Unit: kWh / kW numeric

Service Attributes

|                |
|----------------|
| Grid Frequency |
| Reactive Power |
| Apparent Power |
| Power Factor   |

Read total consumption

```taphome
MODBUSR(H, 0xA000, UInt32)/100
```

Read demand

```taphome
MODBUSR(H, 0x140, Int32)/1000
```

Service Attributes

${grid\_frequency} \[Hz]

```taphome
tostring(modbusr(H, 0x130,UInt16)/100, "F2")
```

${reactive\_power} \[kVAr]

```taphome
tostring(modbusr(H, 0x148,Int32)/1000, "F2")
```

${apparent\_power} \[kVA]

```taphome
tostring(modbusr(H, 0x150,Int32)/1000, "F2")
```

${power\_factor}

```taphome
tostring(modbusr(H, 0x158,Int16)/1000, "F2")
```

Tariff T1 Electricity Meter Read-only

Active energy accumulated during tariff 1 (sharp) time periods with reactive energy counter

Register: H:40962 (readtotalconsumption) UInt32 Unit: kWh numeric

Service Attributes

|                       |
|-----------------------|
| Total Reactive Energy |

Read total consumption

```taphome
MODBUSR(H, 0xA002, UInt32)/100
```

Service Attributes

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

```taphome
tostring(modbusr(H, 0xA01E + 2,UInt32)/1000, "F2")
```

Tariff T2 Electricity Meter Read-only

Active energy accumulated during tariff 2 (peak) time periods with reactive energy counter

Register: H:40964 (readtotalconsumption) UInt32 Unit: kWh numeric

Service Attributes

|                       |
|-----------------------|
| Total Reactive Energy |

Read total consumption

```taphome
MODBUSR(H, 0xA004, UInt32)/100
```

Service Attributes

Total Reactive Energy \[kwarh]

```taphome
tostring(modbusr(H, 0xA01E + 4,UInt32)/1000, "F2")
```

Tariff T3 Electricity Meter Read-only

Active energy accumulated during tariff 3 (valley/off-peak) time periods with reactive energy counter

Register: H:40966 (readtotalconsumption) UInt32 Unit: kWh numeric

Service Attributes

|                       |
|-----------------------|
| Total Reactive Energy |

Read total consumption

```taphome
MODBUSR(H, 0xA006, UInt32)/100
```

Service Attributes

Total Reactive Energy

```taphome
tostring(modbusr(H, 0xA01E + 6,UInt32)/1000, "F2")
```

Tariff T4 Electricity Meter Read-only

Active energy accumulated during tariff 4 (flat) time periods with reactive energy counter

Register: H:40968 (readtotalconsumption) UInt32 Unit: kWh numeric

Service Attributes

|                       |
|-----------------------|
| Total Reactive Energy |

Read total consumption

```taphome
MODBUSR(H, 0xA008, UInt32)/100
```

Service Attributes

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

```taphome
tostring(modbusr(H, 0xA01E + 8,UInt32)/1000, "F2")
```

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

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

## 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-514 & OR-WE-515 Register Description
  
  2026-03-27
  
  [PDF](https://taphome.com/compatibility/devices/orno-or-we-515/manufacturer/register-description.pdf)
- Orno OR-WE-512/514/515 Installation Manual
  
  [www.partner.orno.pl](https://www.partner.orno.pl/manuals/OR-WE-512,514,515_manual_EN.pdf) 2026-03-27
  
  [PDF](https://taphome.com/compatibility/devices/orno-or-we-515/manufacturer/installation-manual.pdf)
- AGG Software — OR-WE-514/515 Modbus Register Map
  
  [www.aggsoft.com](https://www.aggsoft.com/serial-data-logger/tutorials/modbus-data-logging/orno-or-we-514-or-we-515.htm) 2026-03-27
- OR\_WE\_Energy\_Meter Arduino Library — Register Definitions
  
  [github.com](https://github.com/CSchoch/OR_WE_Energy_Meter) 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/)

