Skip to main content

Modbus TCP

The Modbus TCP network control receiver allows controlling DALI lighting over an IP network using the Modbus TCP protocol. It supports lighting level control, scene recalls, DT8 colour temperature, and commander start/stop.

The DALION acts as a Modbus TCP server. A Modbus TCP client writes to holding registers to control the DALI lighting.

Holding Registers

The DALION exposes 512 holding registers. Each holding register corresponds to a slot in the channel map. The register values range from 0 to 255.

Holding Register Mapping

The 512 holding registers are divided into 4 blocks of 128 registers, one block per DALI channel:

BlockRegistersDALI Channel
00-127Channel 1
1128-255Channel 2
2256-383Channel 3
3384-511Channel 4

Within each block, the register offsets are mapped as follows:

OffsetFunction
0-63Lamp levels (64 lamps)
64-79Group levels (16 groups)
80Broadcast level
81-96Scene recall per group (16 groups)
97Scene recall broadcast
98-113DT8 colour temperature per group (16 groups)
114DT8 colour temperature broadcast
115Commander start (block 0 only, global)
116Commander stop (block 0 only, global)
117-127Reserved

Register Value Format

All register values are unsigned bytes (0–255). The interpretation depends on the register function:

Lamp, Group, and Broadcast Levels (offsets 0–80)

The value is scaled to a lighting percentage: level = value × 100 / 255. A value of 0 turns the light off, 255 sets it to 100%. Changes are applied on every new value (level-triggered).

Scene Recall (offsets 81–97)

The value selects a scene to recall. A value of 0 performs no action. Values 1–16 recall scenes 1 through 16. Values above 16 are ignored. Scene recalls are edge-triggered: the scene is recalled once when the value changes.

DT8 Colour Temperature (offsets 98–114)

The value is linearly interpolated between the configured DT8 Mirek Min and DT8 Mirek Max: mirek = DT8 Mirek Min + value × (DT8 Mirek Max − DT8 Mirek Min) / 255. With the default settings (153–370), a value of 0 corresponds to 6500 K and 255 corresponds to 2700 K. Changes are applied on every new value (level-triggered).

Commander Start / Stop (offsets 115–116)

The value selects a commander. A value of 0 performs no action. Values 1–64 start (offset 115) or stop (offset 116) commanders 1 through 64. These registers are global and only active in block 0. Commander commands are edge-triggered: the command is executed once when the value changes.