Skip to main content

M-Bus Configuration Wizard Downlink

Manual for configuring and managing Acrios Systems M-Bus Converters setup using Configuration Wizard via downlink commands.


Introduction

M-Bus (Meter Bus) is a standard industrial bus for remote meter reading – typically used with water meters, gas meters, heat meters, or electricity meters. The M-Bus converter acts as a gateway: it reads data from devices connected to the M-Bus and forwards it wirelessly (e.g. via LoRaWAN or NB-IoT).

A downlink is a message sent from the server to the device (downstream direction). Through downlinks, the converter can be remotely parametrized – changing its behavior, adding or removing devices, triggering a scan, or restarting the converter – without physical access to the hardware.

This manual provides a comprehensive reference for configuring and managing Acrios Systems M-Bus Converters setup using Configuration Wizard via downlink commands.

LoRaWAN vs NB-IoT difference

Every command in this manual shares a common structure and can be split into two parts. The first part is the command number and the second part is the payload. The command number specifies the command to execute and the payload contains command specific parameters.

LoRaWAN

LoRaWAN has a native fPort field in every frame. The command number is carried in this field, and the payload contains only the command data itself.

fPort:   01
Payload: [command data ...]

NB-IoT

NB-IoT does not have an equivalent application-layer port field. Instead, the command number is encoded as the first byte of the payload – referred to as the command byte. The rest of the payload follows immediately after.

Payload: [command byte (1B)] [command data ...]

General Information

  • Little-endian format: All multi-byte data is in little endian format.
  • Error response 0xEE: If a downlink message is incorrectly formatted (e.g., wrong content or length), the converter will take no action and respond with 0xEE (standard error code).
  • Payload length limit: If the total length of response payload exceeds the maximum allowed (e.g., 51 bytes in LoRaWAN), the converter will discard excess data.

01 - Reset & Set Or Reset Addresses

This command is used to wipe existing addresses or overwrite them with a new list.

Payload Details

Port / command byte: 1 / 0x01

Response: 0xF6 <DEVICE_INFO_1><DEVICE_INFO_2>...<DEVICE_INFO_7> - list of all known devices, where <DEVICE_INFO_X> consists of:

  • Primary Address (1 byte)
  • Secondary Address (4 bytes)
  • Baudrate (2 bytes)

Example:

         |-----------1st Device-----------| |-----------2nd Device-----------| |-----------3rd Device-----------|
0xF6 0xAA 0x12 0x34 0x56 0x78 0x60 0x09 0x19 0xFE 0xDC 0xBA 0x98 0x60 0x09 0xFD 0xFE 0xDC 0xBA 0x98 0x60 0x09
| | |-----------------| |-------| | |-----------------| |-------| | |-----------------| |-------|
| | V V | V V | V V
| V Secondary address Baudrate V Secondary address Baudrate V Secondary address Baudrate
V Primary address Primary address Primary address
Command byte

Mode A: Erase all addresses

Erases all addresses (both primary and secondary). Converter stops reading devices and sends a message indicating no devices are present. Converter remains open to receiving downlink messages.

⚠ WARNING: If "wait for response" is disabled and all addresses are erased, the converter will become unresponsive and unable to resume operation without a manual configuration. In this state, the converter will not read any devices and will not recover automatically.

Payload: 0x01

Payload length: 1 byte

Mode B: Erase all and set new addresses

Which addressing will be used depends on the value of primary address.

Address selection based on Primary Address:

  • 0x00–0xFC: Use Primary Address
  • 0xFD: Use Secondary Address
  • 0xFE: Treated as broadcast; converter still uses Secondary Address
  • 0xFF: Undefined; converter uses Secondary Address

Placeholders for unknown addresses:

  • Primary: 0xFD
  • Secondary: 0x00000000

Payload: <DEVICE_INFO_1><DEVICE_INFO_2>...<DEVICE_INFO_7>

Payload length: N × 7 bytes, where N is number of devices

02 - Set Configuration

This command is used to configure wake-up period, beacon usage, scan modes and VIF/DIF filters.

Payload Details

Port / command byte: 2 / 0x02

Payload:

ByteSizeNameDescription
11Wake-up period (days)0x00–0xFF (0–255)
21Wake-up period (hours)0x00–0xFF (0–255)
31Wake-up period (minutes)0x00–0xFF (0–255)
41useBeacon0x00 = disabled, 0x01 = enabled
51OnStartup Scan Mode0x00 = off, 0x01 = only new devices, 0x02 = add new to current
6–2116VIF/DIF filter indexes (1–16)See below
22–NNVIF/DIF filter definitionsSee below

VIF/DIF filter indexes: 0x00–0xFF (0xFF means no filter applied; else index into bytes 22–N)

  • Each index refers to a corresponding VIF/DIF filter block defined after byte 22.
  • Index value '1' refers to the first VIF/DIF filter block, '2' to the second, and so on.
  • Example: 0x01 0x02 0xFF ... → Device 1 uses VIF/DIF Filter 1, Device 2 uses VIF/DIF Filter 2, Device 3 uses no filter

VIF/DIF Filters Format:

  • Number of filters (1 byte)

  • For each filter:

    • Filter length (1 byte)
    • Filter content (length bytes)
  • Example:

 |-----VIF/DIF Filter 1------| |-----VIF/DIF Filter 2------|
0x01 0x03 0xFA 0x53 0x11 0x02 0x02 0xCC 0xBB 0x02 0xAD 0x1B
| | |------------| | | |-------| | |-------|
| | V | | V | V
| V filter | V filter V filter
V filter length V filter length filter length
Number of filters Number of filters

⚠ WARNING: If any filter is cut off due to max payload size, it (and any remaining filters) will be discarded.

Response:

  • Command byte: 0xFE (1 byte)
  • Entire configuration sent back (N bytes)

03 - Request Configuration

Requests the full configuration.

Payload details

Port / command byte: 3 / 0x03

Payload: 0x01

Payload length: 1 byte

Response: Same format as command 02

04 - Request MBus Scan

Look for new MBus devices.

Payload details

Port / command byte: 4 / 0x04

Payload:

  • 0x01 (keep previously configured devices) or 0x02 (discard previously configured devices)
  • Followed by N baudrates (2 bytes each)

Response:

  • Command byte: 0xF6
  • N × 7 bytes: Discovered device addresses (Primary Address (1 byte), Secondary Address (4 bytes), Baudrate (2 bytes))
    • If only primary responded → secondary = 0x00000000
    • If only secondary responded → primary = 0xFD

Example:

     |-----------1st Device-----------| |-----------2nd Device-----------| |-----------3rd Device-----------|
0xF6 0xAA 0x12 0x34 0x56 0x78 0x60 0x09 0x19 0xFE 0xDC 0xBA 0x98 0x60 0x09 0xFD 0xFE 0xDC 0xBA 0x98 0x60 0x09
| | |-----------------| |-------| | |-----------------| |-------| | |-----------------| |-------|
| | V V | V V | V V
| V Secondary address Baud V Secondary address Baud V Secondary address Baud
V Primary address Primary address Primary address
Command byte

NOTE: The 3rd device used secondary address only (primary = 0xFD)

05 - Request Addresses

Retrieves list of all known addresses.

Payload details

Port / command byte: 5 / 0x05

Payload: 0x01

Response:

  • Command byte: 0xF6
    • N × 7 bytes: List of all known devices, each 7 bytes: (Primary Address (1 byte), Secondary Address (4 bytes), Baudrate (2 bytes))

Example:

     |-----------1st Device-----------| |-----------2nd Device-----------| |-----------3rd Device-----------|
0xF6 0xAA 0x12 0x34 0x56 0x78 0x60 0x09 0x19 0xFE 0xDC 0xBA 0x98 0x60 0x09 0xFD 0xFE 0xDC 0xBA 0x98 0x60 0x09
| | |-----------------| |-------| | |-----------------| |-------| | |-----------------| |-------|
| | V V | V V | V V
| V Secondary address Baud V Secondary address Baud V Secondary address Baud
V Primary address Primary address Primary address
Command byte

06 - Request Version

Requests version of LUA snippets.

Payload details

Port / command byte: 6 / 0x06

Payload: 0x01

Description: Version is a series of numbers that act as indexes into our templates database. Using these indexes in order, the system rebuilds the main code structure by selecting specific predefined code snippets. This process recreates the core program logic but leaves out variable settings like addresses and communication parameters and so on.

Response:

  • Command byte: 0xFA
  • Script version (length is variable)

07 - Request Reset

Restarts the converter.

Payload details

Port / command byte: 6 / 0x06

Payload: 0x01

Response: None

15 - Set Initial Delay

Sets initial M-Bus read delay (in milliseconds). Resets dynamic delay algorithm. Delay will adjust over time dynamically.

Payload details

Port / command byte: 15 / 0x0F

Payload: Value from 1000 to 65535 (2 bytes)

Response:

  • Command byte: 0xFA
  • Current delay of each device (2 bytes per device)

Example:

     |----- Initial delay times of... -----|
|1st dev| |2nd dev| |3rd dev| |4th dev|
0xFA 0x57 0x04 0xAE 0x08 0x05 0x0D 0x5C 0x11

16 - Request Initial Delay

Requests current read delay of each device.

Payload details

Port / command byte: 16 / 0x10

Payload: 0x01

Response:

  • Command byte: 0xFA
  • Current delay of each device (2 bytes per device)

Example:

     |-----|Initial delay times of...|-----|
|1st dev| |2nd dev| |3rd dev| |4th dev|
0xFA 0x57 0x04 0xAE 0x08 0x05 0x0D 0x5C 0x11

25 - Custom Lua Command

Remote execution of Lua scripts.

Payload details

Port / command byte: 25 / 0x17

Payload:

  • Lua script as ASCII
  • Payload length depends on script size

Response: None

30 - Add Device

Adds a new device to the current list without removing any existing ones.

Payload details

Port / command byte: 30 / 0x1E

Payload:

ByteSizeNameDescription
11Primary Address0x00–0xFE (0–254); determines which address type is used
2–54Secondary Address0x00000000–0xFFFFFFFF; 32-bit unique ID
6–72Baudrate0x0000–0xFFFF; communication speed in baud

Address type selection is based on the Primary Address value:

  • 0x00–0xFC → Use Primary Address
  • 0xFD → Use Secondary Address
  • 0xFE → Broadcast (not allowed); converter will use Secondary Address instead

Placeholders for unknown addresses:

  • Primary: 0xFD
  • Secondary: 0x00000000

If a device with same addresses already exists:

  • It will NOT be added again.
  • No error will be returned.

Response:

  • Command byte: 0xF6
  • N × 7 bytes: List of all known devices (Primary Address (1 byte), Secondary Address (4 bytes), Baudrate (2 bytes))