In this article we describe how to read data from Siemens RVD25x and RVD26x heating controllers via M-Bus. These controllers are commonly used in building automation for district heating substations and HVAC systems.
The RVD25x/RVD26x controllers communicate via standard M-Bus physical layer but use a proprietary multi-block data structure. The Weble IoT universal gateway automatically detects these controllers by their manufacturer code (LSZ - Landis+Staefa/Siemens) and activates the extended reading mode.
Configure the M-Bus driver with the controller's primary or secondary address. Once connected, the gateway automatically reads the relevant data blocks and exposes all values as standard M-Bus data points.

Unlike standard M-Bus devices that transmit all data at once, RVD2xx controllers organize data into 13 separate blocks. Only one block can be read at a time. The Weble gateway automatically cycles through the most useful blocks for monitoring:
| Block | Content |
|---|---|
| Device ID | Model identification, error codes, diagnostics |
| Setpoints | Temperature setpoints for heating circuits and DHW |
| Plant I/O | Actual temperatures, pump states, valve positions |
Additional blocks (configuration, weekly schedules, service parameters) are available but not read by default as they rarely change.
The gateway reads the 3 blocks sequentially and concatenates all records into a single stable M-Bus response. Each record has a fixed ID that remains consistent across readings:
| ID Range | Block | Content |
|---|---|---|
| 0-7 | Device ID | Raw M-Bus records (identification) |
| 8-25 | Setpoints | Raw M-Bus records (temperature setpoints) |
| 26-42 | Plant I/O | Raw M-Bus records (actual values) |
| 43-63 | Device ID | Parsed manufacturer data (errors, diagnostics) |
| 64-66 | Setpoints | Parsed manufacturer data (differentials, pressure) |
| 67-83 | Plant I/O | Parsed manufacturer data (pumps, valves, outputs) |
Each record includes a RVD2xxBlock field indicating the source block and a RVD2xxLabel field with the Siemens description.
{
"Id": 2375,
"Manufacturer": "LSZ",
"Medium": "Breaker: Electricity",
"Meters": [
{
"id": 2,
"Unit": "Parameter set identification",
"Value": "RVD260",
"RVD2xxBlock": "DeviceID",
"RVD2xxLabel": "Parameter set identification (model)"
},
{
"id": 29,
"Unit": "Flow temperature (deg C)",
"Tariff": 3,
"Value": 38,
"RVD2xxBlock": "PlantIO",
"RVD2xxLabel": "Flow temp actual HC1"
},
{
"id": 72,
"Unit": "Stroke model HC1 (%)",
"Value": 17,
"RVD2xxBlock": "PlantIO",
"RVD2xxLabel": "Stroke model HC1"
},
{
"id": 77,
"Unit": "Heat circuit pump speed HC1 (%)",
"Value": 100,
"RVD2xxBlock": "PlantIO",
"RVD2xxLabel": "Heat circuit pump speed HC1"
}
]
}
| Data Point | Description |
|---|---|
| Outside temp B9 | Outside temperature sensor |
| Flow temp HC1/HC2 | Flow temperature per heating circuit |
| Return temp HC1/HC2 | Return temperature per heating circuit |
| Room temp HC1/HC2 | Room temperature per heating circuit |
| DHW temp | Domestic hot water temperature |
| Data Point | Description |
|---|---|
| Stroke model HC1/HC2/DHW | Valve position (0-100%) |
| Heat circuit pump HC1/HC2 | Pump speed (0-100%) |
| DHW charging pump | DHW pump speed (0-100%) |
| Collector pump | Solar collector pump (if installed) |
| Data Point | Description |
|---|---|
| Disturbance 1/2 | Error registers (bitmask) |
| Device error system | System error code |
| M-Bus error codes | Communication error history (5 slots) |
| Operating mode | Current mode per circuit (Protection/Reduced/Comfort/Auto) |
| Active limitation | Current limitation status |
Once the heating data is retrieved on the Weble IoT Gateway, it can be used for various applications:
| Model | Description |
|---|---|
| RVD250 | Basic heating controller |
| RVD255 | Heating controller with extended features |
| RVD260 | Advanced heating controller, 2 heating circuits |
| RVD265 | Advanced heating controller with solar support |
null indicate disconnected sensors or unused features%mbus:0/72 for Stroke model HC1)