---
title: "Intesis IBOX-MBS-DALI"
description: "Control 64 DALI ECG ballasts and 16 DALI groups from TapHome over Modbus RTU with the Intesis IBOX-MBS-DALI gateway. Per-ECG dimming, fade time/rate, power-on and system-failure levels."
url: "https://taphome.com/en/compatibility/intesis-dali/"
language: en
lastmod: 2026-10-08
generator: hugo
ai:
  topics: ["modbus-rtu","lighting","rs485","dali","dali-2","gateway","din-rail"]
  questions: ["How to integrate the Intesis IBOX-MBS-DALI with TapHome?","What does the Intesis DALI TapHome template control?","How to wire RS-485 Modbus RTU from TapHome to the IBOX-MBS-DALI?","How to assign DALI short addresses to ECG ballasts?","Which Intesis DALI gateway variant does the TapHome template support?","Does the TapHome template work with the Intesis IN703DAL0640000 (700 series)?","Why does my DALI bus not respond even though Modbus communication works?"]
---

# Intesis IBOX-MBS-DALI

Communication: Modbus RTU

- [Intesis IBOX-MBS-DALI Product Page (HMS Networks)](https://www.intesis.com/products/protocol-translator/dali-gateways/dali-modbus-server-ibox-mbs-dali)
- [HMS Networks — Intesis Product Family](https://www.hms-networks.com/products/intesis)
- [Intesis IN703DAL0640000 (700 series) User Manual](https://www.intesis.com/docs/user-manual-in703dal0640000)

## Integration guide

The Intesis IBOX-MBS-DALI is a DALI-to-Modbus protocol converter by Intesis (part of HMS Networks) that exposes DALI-2 lighting ballasts and groups as Modbus holding registers. The TapHome template targets the **1-channel RTU variant** (order code **IBMBSDAL0640000**, re-released as **INMBSDAL0640200**) and connects to TapHome over **RS-485 Modbus RTU** on the gateway's Port B.

TapHome sells the newer **700 series** gateway, order code **IN703DAL0640000** (DALI-2 to Modbus TCP & RTU server, 1 DALI channel). According to the manufacturer's user manual (v1.0.11) it uses the same Modbus register map, so this template applies to it as well.

The template covers the full addressable DALI capacity of a single line: **64 individual ECG ballasts** (short addresses 0–63) and **16 DALI groups**. Each ECG supports read-back of actual level (0–100 %), ballast/lamp failure status, and write access to arc power level, power-on level, system-failure level, fade time and fade rate. DALI groups expose write-only broadcast dimmer control. At the module level, four broadcast service actions (All — On, All — Off, All — Set Power-on Level, All — Set System-failure Level) target every ballast on the DALI line in a single Modbus write.

DALI short addresses, group membership, scenes and min/max levels must be pre-configured with the free **Intesis MAPS** commissioning software before TapHome can address individual ballasts — the TapHome template does not perform DALI network discovery or addressing.

## Hardware connection

### Gateway variants

The TapHome template is built for the **1-channel RTU** gateway. The 2-channel variant has an identical register map but does not expose Modbus RTU (TCP only), so it is not compatible with this RS-485 template.

| Order code | DALI channels | ECG capacity | Groups | Modbus RTU | Modbus TCP |
|---|---|---|---|---|---|
| **IN703DAL0640000** (700 series) | **1** | **64** | **16** | **Yes (Port B)** | Yes |
| **IBMBSDAL0640000 / INMBSDAL0640200** | **1** | **64** | **16** | **Yes (Port B)** | Yes |
| IBMBSDAL1280000 / INMBSDAL1280200 | 2 | 128 | 32 | No | Yes |

![Intesis IBOX-MBS-DALI — port layout on the 1-channel (Modbus RTU + TCP) and 2-channel (Modbus TCP only) variants](https://taphome.com/images/compatibility/intesis-dali/connections-overview_hu_e3319bd0a2fc8995.jpg)

> [!NOTE]
> The TapHome template uses the register formula `7000 × channel + 100 × ECG + signal`, evaluated with `channel = 0`. This matches the 1-channel IBOX-MBS-DALI and the 700 series IN703DAL0640000 exactly.


### Connector layout (1-channel IBOX-MBS-DALI)

![IBOX-MBS-DALI 1-channel connector layout — Power, DALI Port A, Ethernet, Console, EIA232/EIA485 Port B](https://taphome.com/images/compatibility/intesis-dali/connectors-ibox-1ch_hu_f931cc500ab15298.jpg)

Top-view of the 1-channel IBOX-MBS-DALI:

- **Power** — 3-pole plug-in screw terminal, 24 VDC ±10 % (+ / − / Earth)
- **Port A / DALI** — 2-pole orange terminal, **A3 (DA+)** and **A4 (DA−)**, 16 VDC DALI supply
- **Ethernet** — 1× RJ45 10/100 Mbps (Modbus TCP)
- **Console** — mini-type B USB 2.0 for Intesis MAPS configuration
- **Port B / Modbus RTU** — **EIA485** 3-pole screw terminal `B1 (B+) / B2 (A−) / B3 (SGND)` **and** **EIA232** SUB-D9 male (alternative)
- **USB** — Type-A USB 2.0 for flash drives only (150 mA max)
- **SWA / SWB** — DIP switches (SWA reserved, SWB controls RS-485 termination and polarization — see Configuration below)

### Power supply

- **Input:** 24 VDC ±10 % on the 3-pole terminal (+, −, Earth)
- **Source:** NEC Class 2 or Limited Power Source (LPS), SELV rated
- **Upstream protection:** 250 V / 6 A circuit breaker required
- **Earth:** May be earthed through the negative terminal only — **never** through the positive terminal

> [!WARNING]
> To avoid earth loops that can damage the gateway and connected equipment, **never use a DC power supply with the positive terminal earthed**. Earth only through the negative terminal, or leave the earth floating.

### RS-485 Modbus RTU wiring (Port B, EIA485)

Connect the TapHome RS-485 bus to the EIA485 terminal block on Port B:

| IBOX-MBS-DALI terminal | Signal | TapHome RS-485 |
|---|---|---|
| **B1** | B+ (D+) | A+ / D+ |
| **B2** | A− (D−) | B− / D− |
| **B3** | SGND (reference ground) | GND |

> [!WARNING]
> **Respect polarity.** B1 = B+ (D+) and B2 = A− (D−). Crossing A/B will silently break communication without any hardware damage.

**Cable specification** (EIA485 limits):

- **Max length:** 1200 m on a single RS-485 segment
- **Max nodes:** 32 devices including the TapHome master and the IBOX-MBS-DALI
- **Termination:** 120 Ω at each bus end — TapHome Core has a built-in 100 Ω resistor on its BUS terminals, so the IBOX-MBS-DALI only needs termination enabled if it sits at the **far end** of the RS-485 segment (see DIP switch SWB below)

> [!TIP]
> If the gateway is installed in the middle of the RS-485 bus (not at an end), leave SWB in the OFF position and do not add external termination.

**EIA232 alternative:** The Port B SUB-D9 male connector provides an EIA232 interface using TX, RX and GND only, with a 15 m maximum cable length. TapHome does not natively support RS-232, so EIA485 is the standard TapHome connection.

### DALI bus wiring (Port A)

Connect the DALI line to the Port A orange 2-pole terminal:

- **A3** — DA+
- **A4** — DA−

The IBOX-MBS-DALI provides **16 VDC (±2 %)** bus voltage, with a guaranteed 235 mA (max 250 mA) of DALI current; the 700 series IN703DAL0640000 guarantees 230 mA (max 250 mA). DALI is polarity-insensitive per the standard, but this internal supply must be enabled in Intesis MAPS before any DALI communication works — see *DALI commissioning* below.

**DALI capacity on a single line** (leave ~10 % headroom for dynamic processes):

- Up to **64 ECG ballasts** (typ. 2 mA each → 128 mA)
- Up to **64 DALI input devices** / **16 recommended** when using push buttons (typ. 5 mA each)
- Example budget: `64 ECGs × 2 mA + 16 sensors × 5 mA = 208 mA < 235 mA × 90 %`
- Example budget for the IN703DAL0640000 (manufacturer's figures): `63 ECGs × 2 mA + 16 sensors × 5 mA = 206 mA < 230 mA × 90 %`

> [!NOTE]
> DALI is an inherently low-speed bus (1200 baud) with a 1.5 s gateway start-up time and a 7 s shutdown time. DALI commands issued from TapHome reach the ballasts with a small but non-zero latency compared to direct wired control.

## Configuration

### DIP switch SWB — RS-485 termination and polarization

The **SWB DIP switch** on the 1-channel IBOX-MBS-DALI controls only the RS-485 bus characteristics — there is **no DIP-switch-based Modbus slave address** on this gateway (slave address is set in Intesis MAPS, see below).

| Position | ON | OFF |
|---|---|---|
| **1** | 120 Ω termination active | Termination inactive |
| **2** | Polarization active | Polarization inactive |
| **3** | Polarization active | Polarization inactive |

- **Position 1 = ON** — enables the internal 120 Ω termination resistor. Use this when the IBOX-MBS-DALI is at the **last** physical position on the RS-485 bus.
- **Positions 2 and 3 = ON** — enable bus biasing (polarization). Use this when no other master on the bus provides biasing. TapHome Core provides biasing on its BUS terminals, so these can usually stay OFF.

> **SWA** is reserved for future use on this hardware revision and has no runtime effect.

### Modbus RTU communication parameters

All RTU parameters are configured in the Intesis MAPS project and must match the TapHome module settings exactly.

| Parameter | Values | Template default |
|---|---|---|
| Baud rate | 1200, 2400, 4800, **9600**, 19200, 38400, 56700, 115200 | **9600** |
| Parity | none, even, odd | **none** |
| Stop bits | 1, 2 | **1** |
| Data bits | 8 | 8 |
| Slave address | 1–247 | Configurable in MAPS |

> [!TIP]
> The Intesis gateway supports Modbus RTU and Modbus TCP **simultaneously** on the 1-channel variant. TapHome uses RTU; a parallel BMS or diagnostic tool can keep reading the same register map over TCP without interfering.

### Enabling Modbus communication

Modbus communication is enabled by loading a valid project onto the gateway with Intesis MAPS (no DIP switches are involved on this model). Short version:

1. Install **Intesis MAPS** on a Windows PC and connect to the gateway via USB Console or Ethernet.
2. Open or create a project based on the `INMBSDAL---0200-Template` (for the 700 series IN703DAL0640000 select the `IN-MBS-DALI-64` template, i.e. the Modbus application).
3. In the **Configuration → Modbus Slave** tab, set baud rate, parity, stop bits and slave address to match TapHome.
4. In the **Configuration → DALI** tab, enable the internal 16 VDC DALI bus power (see *DALI commissioning*).
5. Click **Send** to transfer the configuration; the gateway reboots automatically.
6. Use **Diagnostic → Viewers** to verify Modbus frames on Port B TX/RX.

![Intesis MAPS DALI bus power configuration — enable the 16 VDC DALI supply in the gateway configuration before commissioning](https://taphome.com/images/compatibility/intesis-dali/dali-power-maps-config_hu_60df6e9c055c6bc7.jpg)

### DALI commissioning

**DALI addressing is performed in Intesis MAPS — not in TapHome.** The TapHome template references DALI short addresses 0–63 and group addresses 0–15 by their register offset; physical ballasts and groups must be bound to those addresses first.

High-level commissioning workflow (full procedure in the Intesis user manual, Annex A):

1. In MAPS, open the project for the 1-channel gateway and go to **Configuration → DALI → ECG Channel A**.
2. Click **Commissioning → Scan** to discover ECG ballasts on the DALI bus.
3. For each ballast, assign a **short address (0–63)** via the **Wink** button (blinks the physical ballast for identification) or **Auto Addr.** (sequential automatic assignment).
4. Optionally set per-ECG parameters: **Device Type** (0 = Fluorescent, 1 = Emergency, 6 = LED, …), min / max level, power-on level, system-failure level, scene configuration and **group membership (0–15)**.
5. Click **Commissioning → Set All** to push the configuration from MAPS down to the DALI bus.
6. Click **Send** to transfer the gateway-level configuration (Modbus parameters, signal map) back to the IBOX-MBS-DALI.

After commissioning, ECGs identified by short address in TapHome (e.g. **ECG 5** → register `H:506`) map one-to-one to the physical ballasts. Group membership must also be defined in MAPS for the DALI Group devices to work, although the template exposes per-ECG *Add to DALI Group* / *Remove from DALI Group* service actions that can re-assign group membership at runtime on compatible firmware.

> [!WARNING]
> Per the r1.5 user manual (May 2024), signals 29 and 30 (*Add to DALI Group* / *Remove from DALI Group*) are marked as *Not used* on current firmware. The TapHome template still exposes these actions because they were functional on earlier firmware, but **stable group assignments should be configured in Intesis MAPS**, not written at runtime.
>
> The user manual of the 700 series IN703DAL0640000 (v1.0.11) lists signals 29 and 30 as read/write, so according to the manual the actions should be available on that gateway.

### Register map overview

TapHome uses a single formula for all registers:

```text
H:address = 7000 × channel + 100 × ECG + signal      (individual ECG)
H:address = 7000 × channel + 20 × group + 6400..6415  (DALI group)
H:address = 7000 × channel + 6800..6815              (broadcast)
```

On the 1-channel variant, `channel = 0` always. The template exposes the following register ranges:

| Range | Function | Exposed by template |
|---|---|---|
| `H:0 – H:3` | Ballast/lamp failure bitmask (ECG 63..0, 4× UInt16) | Yes — as module-level failRegister |
| `H:SA+5` | ECG ballast status bitmask (per ECG) | Yes — errors, warnings, info per ECG |
| `H:SA+6` | ECG actual level 0–100 % (read) | Yes — dimmer position feedback |
| `H:SA+7` | ECG device type enum | Yes — as service attribute |
| `H:SA+11..+14` | Power-on / system-failure level, fade time / rate (read) | Yes — as service attributes |
| `H:SA+15` | ECG arc power level 0–100 % (write) | Yes — writelevel, linearly mapped into Min/Max |
| `H:SA+23..+30` | Set fade time/rate, set levels, add/remove from group | Yes — as per-ECG service actions |
| `H:6400 + 20·GR` | Group arc power level 0–100 % (write) | Yes — as write-only DALI Group device |
| `H:6801` | Broadcast Arc Power Off/On (0/100 %) | Yes — as module *All — On* / *All — Off* |
| `H:6812 / H:6813` | Broadcast Set Power-on / System-failure Level | Yes — as module service actions |

Input devices (occupancy sensors, push buttons, light sensors) at addresses `14000 + 640·LINE + 10·IDX + INSTANCE + 1280·SIG` are **not** implemented by this template.

## Device capabilities

### Per-ECG dimming (64 ECG devices)

Each short address 0–63 is exposed as an individual TapHome dimmer device (**ECG 0** through **ECG 63**). Capabilities per ECG:

- **Actual level** — reads `H:SA+6` (0–100 %) as the dimmer position feedback
- **Arc power level** — writes `H:SA+15` (0–100 %), linearly mapped from TapHome's 0–1 dimmer scale into the ballast's configured `[min level, max level]` range
- **Ballast status** — a bitmask on `H:SA+5` drives TapHome diagnostics: *BallFail* and *LampFail* raise errors, *BallLimit*, *Reset* and *PowerCycle* raise warnings, *FadeRun* is surfaced as info, *MissingShortAddr* raises an error
- **Communication fault detection** — the module reads the 64-bit failure bitmask on `H:0 – H:3` and flags individual ECGs as faulty independently of the `H:SA+5` status

### Per-ECG service attributes (read-only metadata)

Each ECG device exposes five service attributes that read its current DALI configuration:

- **Main Device Type** — `H:SA+7` enum (0–8): 0 = Fluorescent, 1 = Emergency, 2 = Discharge, 3 = Halogen, 4 = Incandescent, 5 = Digital signal, 6 = LED, 7 = Switching, 8 = Colour Control
- **Power-on Level [%]** — `H:SA+11` (0–100 %) — level the ballast returns to after DALI bus power-up
- **System-failure Level [%]** — `H:SA+12` (0–100 %) — level the ballast enters on DALI bus failure
- **Fade Time** — `H:SA+13` (0–15) — DALI fade-time index (time to reach a target level on direct arc power writes)
- **Fade Rate** — `H:SA+14` (1–15) — DALI fade-rate index (speed of step up / step down commands)

### Per-ECG service actions (write)

Each ECG also exposes six service actions for online reconfiguration:

- **Set Power-on Level** — writes `H:SA+27` (0–100 %)
- **Set System-failure Level** — writes `H:SA+28` (0–100 %)
- **Set Fade Time** — writes `H:SA+23` (0–15)
- **Set Fade Rate** — writes `H:SA+24` (1–15)
- **Add to DALI Group** — writes `H:SA+29` with the group number (0–15) — see commissioning caveat above
- **Remove from DALI Group** — writes `H:SA+30` with the group number (0–15)

Every write is automatically committed by the template via `H:SA+4 = 1` (Update All ECG Status), which refreshes the gateway's cached read values.

### DALI groups (16 write-only broadcast dimmers)

**DALI Group 0** through **DALI Group 15** are exposed as write-only dimmer devices:

- **Write register:** `H:6400 + 20 × GR` (e.g. Group 0 = `H:6400`, Group 15 = `H:6700`)
- **Behavior:** writing a TapHome dimmer value 0–1 sends `Arc Power Level = Le × 100` to every ECG that is a member of that DALI group
- **No read feedback** — the group signal has no actual-level register, so TapHome tracks the group level from user input only, not from real ballast state

> [!TIP]
> Use groups for rooms or zones where several ballasts dim together. Group membership is configured per-ECG via the ECG service action *Add to DALI Group* or (preferably) in Intesis MAPS.

### Module-level broadcast actions

The main module (**Intesis DALI**) exposes four service actions that address every ballast on the DALI line at once:

- **All — On** — writes `H:6801 = 1`, broadcasting 100 % to every ECG
- **All — Off** — writes `H:6801 = 0`, broadcasting 0 % to every ECG
- **All — Set Power-on Level** — writes `H:6812` (0–100 %) to configure the level all ballasts return to after DALI power-up
- **All — Set System-failure Level** — writes `H:6813` (0–100 %) to configure the level all ballasts enter on DALI bus failure

These are faster than iterating per-ECG writes when all ballasts must reach the same target state (e.g. panic off, morning preset).

## Status LEDs and push buttons

![IBOX-MBS-DALI status LEDs and push buttons — Run, Error, Port A TX/RX (DALI), Port B TX/RX (Modbus RTU), Button A, Button B](https://taphome.com/images/compatibility/intesis-dali/status-leds-buttons_hu_1f972f8353b9228c.jpg)

| LED | State | Meaning |
|---|---|---|
| **Run** | Off / Green | No power / device powered and running |
| **Error** | Off / Red | No error / error condition |
| **Port A Tx / Rx (DALI)** | Off / Blink green / Blink yellow | No activity / TX packet to DALI / RX packet from DALI |
| **Port B Tx / Rx (Modbus RTU)** | Off / Blink green / Blink yellow | No activity / TX packet on RS-485 / RX packet on RS-485 |
| **Button A indicator** | Off / Green | DALI broadcast state: OFF / RECALL_MAX_LEVEL |
| **Button B indicator** | Off / Green | No default function (configurable in MAPS) |

**Button A (DALI A)** — pressing toggles a DALI broadcast between `RECALL_MAX_LEVEL` (100 %) and `OFF`, useful for a quick on-site sanity check of the DALI line without TapHome involvement. After 30 s the Button A LED turns off and the ballasts return to their previous level.

**Button B** — no default function on this gateway; can be configured as an RS-485 action in Intesis MAPS.

## Mounting

### DIN rail (recommended)

![IBOX-MBS-DALI DIN rail mount — EN60715 TH35 standard rail, fixing clips in inward factory position](https://taphome.com/images/compatibility/intesis-dali/mounting-din_hu_6022c12b8152b8d4.jpg)

EN60715 TH35, preferably inside a metallic cabinet connected to earth. Leave the fixing clips in their **inward** factory position, engage the top edge of the rail first, then press down to snap the bottom.

### Wall mount

![IBOX-MBS-DALI wall mount — fixing clips repositioned outward to expose the mounting holes](https://taphome.com/images/compatibility/intesis-dali/mounting-wall_hu_acd54bdbb566e31c.jpg)

1. **Separate the fixing clips** from their original position (for DIN rail mount) by pushing them outward until they click into the wall-mount position.
2. **Use the mounting holes** in the box to fix it to the wall.

### Space and environment

- **Installation space:** allow 130 × 100 × 100 mm (H × W × D) around the device for connectors and cabling. Net dimensions: 90 × 88 × 56 mm (700 series IN703DAL0640000: 90 × 88 × 58 mm).
- **Environment:** IP20, indoor only. Operating temperature 0 °C to +50 °C (user manual) / +60 °C (installation sheet), humidity 5–95 % non-condensing. The 700 series IN703DAL0640000 operates from −10 °C to +60 °C.

## Troubleshooting

### No Modbus communication (Port B Tx/Rx LEDs stay off)

1. **Check RS-485 wiring** — verify B1 (B+) / B2 (A−) polarity against the TapHome RS-485 terminals; crossing them is the most common mistake.
2. **Check SGND** — connect B3 to the TapHome ground. Missing signal ground is the second most common cause of flaky RTU.
3. **Match the serial parameters** — baud rate, parity, stop bits and slave address in TapHome must match the values in the Intesis MAPS project exactly.
4. **Check SWB DIP switches** — if this gateway is at the physical end of the RS-485 bus, set SWB position 1 = ON (120 Ω termination). If it sits in the middle of the bus, set all SWB positions to OFF.
5. **Confirm TCP is not holding the slot** — the gateway allows 5 simultaneous TCP sockets and 1 RTU master; a misconfigured MAPS connection does not block RTU, but it is worth closing MAPS during TapHome debugging.

### Modbus works but DALI ballasts do not respond

1. **Enable the internal DALI bus power** — new gateways ship with DALI power **disabled**. Open Intesis MAPS → *Configuration → DALI → DALI Channel A* and set **Power the DALI bus** = Enabled, then **Send** the configuration. Without bus power the gateway reports a hardware error on any DALI write.
2. **Quick sanity check** — press **Button A** on the gateway. It should broadcast `RECALL_MAX_LEVEL` and toggle every connected ballast on/off. If nothing moves, the DALI bus itself is the problem (wiring, voltage, ballast power).
3. **Run an on-bus scan in MAPS** — *Commissioning → Scan* on DALI Channel A lists every ballast the gateway can see. Missing ballasts usually mean unpowered ECGs, an unassigned DALI short address, or a cut in the DALI bus.
4. **Verify short addresses** — TapHome addresses ECG 5 at register `H:506`; if short address 5 has not been assigned in MAPS, the register exists but the physical ballast is not bound to it.

### A specific ECG reports a fault in TapHome

TapHome surfaces two failure sources for every ECG:

- **Module failRegister (`H:0 – H:3`)** — one bit per ECG. A set bit raises a communication error (the gateway cannot talk to the ballast at all).
- **ECG ballast status (`H:SA+5`)** — a per-ECG bitmask. *BallFail* and *LampFail* raise errors (hardware ballast or lamp failure), *MissingShortAddr* raises an error (the ECG answered, but it has no short address), *BallLimit*, *Reset* and *PowerCycle* raise warnings, *FadeRun* is informational.

Replace the faulty ballast or re-commission the short address in MAPS to clear the fault.

### Write accepted but ballast does not change level

1. **Confirm the ballast is not in fade** — *FadeRun* on `H:SA+5` means the ballast is currently fading; wait for it to finish. Shortening *Fade Time* (`H:SA+23`) reduces the perceived latency.
2. **Check Min / Max Level** — TapHome linearly maps its 0–1 dimmer scale into the `[min level, max level]` window read from the ballast (`H:SA+9 / H:SA+10`). If both are equal, the ballast cannot change level; re-configure min/max in MAPS.
3. **Add/Remove from DALI Group** — on latest r1.5 firmware these per-ECG actions are marked as deprecated; perform group assignments in MAPS instead. The user manual of the 700 series IN703DAL0640000 lists them as read/write.

## Available devices 80

These devices appear in TapHome after import.

Intesis DALI Module

Service Actions

|                                |                                                                                                               |
|--------------------------------|---------------------------------------------------------------------------------------------------------------|
| All — On                       | Broadcasts 100 % arc power to every ballast on the DALI line — panic-on or morning preset in one Modbus write |
| All — Off                      | Broadcasts 0 % arc power to every ballast on the DALI line — panic-off or cleaning preset in one Modbus write |
| All — Set Power-on Level       | Broadcasts a new power-on level (0–100 %) to every ballast — the level they return to after DALI bus power-up |
| All — Set System-failure Level | Broadcasts a new system-failure level (0–100 %) to every ballast — the level they enter on DALI bus failure   |

Read (module)

```taphome
failRegister := modbusr(H, base_modifier + 0, Uint16) + 
(modbusr(H, base_modifier + 1, Uint16) << 16) +
(modbusr(H, base_modifier + 2, Uint16) << 32) +
(modbusr(H, base_modifier + 3, Uint16) << 48)
```

Service Actions

All - On

```taphome
modbusw(H, base_modifier + 6801, uint16, 1);
```

All - Off

```taphome
modbusw(H, base_modifier + 6801, uint16, 0);
```

All - Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
modbusw(H, base_modifier + 6812, uint16, Lvl);
```

All - Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
modbusw(H, base_modifier + 6813, uint16, Lvl);
```

ECG 0 Dimmer Read and write

Individual DALI ballast at short address 0 — dimmer with actual-level feedback, ballast/lamp failure status, arc power write, and per-ECG fade time/rate and power-on / system-failure level configuration

Register: H:6 → H:15 UInt16 Unit: % numeric

Service Attributes

|                      |                                                                                                                                                                   |
|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Main Device Type     | DALI device type — Fluorescent (0), Emergency (1), Discharge (2), Halogen (3), Incandescent (4), Digital signal (5), LED (6), Switching (7) or Colour Control (8) |
| Power-on Level       | Level (0–100 %) the ballast returns to after DALI bus power-up                                                                                                    |
| System-failure Level | Level (0–100 %) the ballast enters on DALI bus failure                                                                                                            |
| Fade Time            | DALI fade-time index (0–15) — time to reach a target level on direct arc power writes                                                                             |
| Fade Rate            | DALI fade-rate index (1–15) — speed of step up / step down commands                                                                                               |

Service Actions

|                          |                                                                                                 |
|--------------------------|-------------------------------------------------------------------------------------------------|
| Set Power-on Level       | Writes a new power-on level (0–100 %) to this ECG                                               |
| Set System-failure Level | Writes a new system-failure level (0–100 %) to this ECG                                         |
| Set Fade Time            | Writes a new DALI fade-time index (0–15) to this ECG                                            |
| Set Fade Rate            | Writes a new DALI fade-rate index (1–15) to this ECG                                            |
| Add to DALI Group        | Assigns this ECG to a DALI group (0–15) so it can be addressed via the group's broadcast dimmer |
| Remove from DALI Group   | Removes this ECG from the specified DALI group (0–15)                                           |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 1 Dimmer Read and write

Register: H:106 → H:115 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 2 Dimmer Read and write

Register: H:206 → H:215 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 3 Dimmer Read and write

Register: H:306 → H:315 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 4 Dimmer Read and write

Register: H:406 → H:415 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 5 Dimmer Read and write

Register: H:506 → H:515 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 6 Dimmer Read and write

Register: H:606 → H:615 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 7 Dimmer Read and write

Register: H:706 → H:715 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 8 Dimmer Read and write

Register: H:806 → H:815 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 9 Dimmer Read and write

Register: H:906 → H:915 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 10 Dimmer Read and write

Register: H:1006 → H:1015 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 11 Dimmer Read and write

Register: H:1106 → H:1115 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 12 Dimmer Read and write

Register: H:1206 → H:1215 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 13 Dimmer Read and write

Register: H:1306 → H:1315 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 14 Dimmer Read and write

Register: H:1406 → H:1415 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 15 Dimmer Read and write

Register: H:1506 → H:1515 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 16 Dimmer Read and write

Register: H:1606 → H:1615 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 17 Dimmer Read and write

Register: H:1706 → H:1715 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 18 Dimmer Read and write

Register: H:1806 → H:1815 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 19 Dimmer Read and write

Register: H:1906 → H:1915 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 20 Dimmer Read and write

Register: H:2006 → H:2015 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 21 Dimmer Read and write

Register: H:2106 → H:2115 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 22 Dimmer Read and write

Register: H:2206 → H:2215 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 23 Dimmer Read and write

Register: H:2306 → H:2315 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 24 Dimmer Read and write

Register: H:2406 → H:2415 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 25 Dimmer Read and write

Register: H:2506 → H:2515 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 26 Dimmer Read and write

Register: H:2606 → H:2615 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 27 Dimmer Read and write

Register: H:2706 → H:2715 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 28 Dimmer Read and write

Register: H:2806 → H:2815 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 29 Dimmer Read and write

Register: H:2906 → H:2915 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 30 Dimmer Read and write

Register: H:3006 → H:3015 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 31 Dimmer Read and write

Register: H:3106 → H:3115 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 32 Dimmer Read and write

Register: H:3206 → H:3215 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 33 Dimmer Read and write

Register: H:3306 → H:3315 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 34 Dimmer Read and write

Register: H:3406 → H:3415 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 35 Dimmer Read and write

Register: H:3506 → H:3515 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 36 Dimmer Read and write

Register: H:3606 → H:3615 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 37 Dimmer Read and write

Register: H:3706 → H:3715 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 38 Dimmer Read and write

Register: H:3806 → H:3815 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 39 Dimmer Read and write

Register: H:3906 → H:3915 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 40 Dimmer Read and write

Register: H:4006 → H:4015 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 41 Dimmer Read and write

Register: H:4106 → H:4115 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 42 Dimmer Read and write

Register: H:4206 → H:4215 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 43 Dimmer Read and write

Register: H:4306 → H:4315 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 44 Dimmer Read and write

Register: H:4406 → H:4415 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 45 Dimmer Read and write

Register: H:4506 → H:4515 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 46 Dimmer Read and write

Register: H:4606 → H:4615 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 47 Dimmer Read and write

Register: H:4706 → H:4715 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 48 Dimmer Read and write

Register: H:4806 → H:4815 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 49 Dimmer Read and write

Register: H:4906 → H:4915 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 50 Dimmer Read and write

Register: H:5006 → H:5015 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 51 Dimmer Read and write

Register: H:5106 → H:5115 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 52 Dimmer Read and write

Register: H:5206 → H:5215 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 53 Dimmer Read and write

Register: H:5306 → H:5315 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 54 Dimmer Read and write

Register: H:5406 → H:5415 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 55 Dimmer Read and write

Register: H:5506 → H:5515 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 56 Dimmer Read and write

Register: H:5606 → H:5615 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 57 Dimmer Read and write

Register: H:5706 → H:5715 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 58 Dimmer Read and write

Register: H:5806 → H:5815 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 59 Dimmer Read and write

Register: H:5906 → H:5915 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 60 Dimmer Read and write

Register: H:6006 → H:6015 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 61 Dimmer Read and write

Register: H:6106 → H:6115 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 62 Dimmer Read and write

Register: H:6206 → H:6215 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

ECG 63 Dimmer Read and write

Register: H:6306 → H:6315 UInt16 Unit: % numeric

Service Attributes

|                           |
|---------------------------|
| Main Device Type          |
| Power On Level \[%]       |
| System Failure Level \[%] |
| Fade Time                 |
| Fade Rate                 |

Service Actions

|                          |
|--------------------------|
| Set Power-on Level       |
| Set System-failure Level |
| Set Fade Time            |
| Set Fade Rate            |
| Add to DALI Group        |
| Remove from DALI Group   |

Read (module)

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
int shift := floor(SA / 32);

if(getbit(failRegister >> 32*shift,SA - 32*shift) = 1, adderror("DALI communication error, Ballast/Lamp Failure"));
if(getbit(status,0) = 1, adderror("Ballast Fail"));
if(getbit(status,1) = 1, adderror("Lamp Fail"));
#if(getbit(status,2) = 1, addwarning("Lamp Power On"));
if(getbit(status,3) = 1, addwarning("Ballast Limit"));
if(getbit(status,4) = 1, addinfo("Fade Run"));
if(getbit(status,5) = 1, addwarning("Reset"));
if(getbit(status,6) = 1, adderror("Missing Short Address"));
if(getbit(status,7) = 1, addwarning("Power Cycle"));
```

Initialize

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 4, uint16, 1);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);
```

Read level

```taphome
var base := base_modifier + (100 * SA);
status := modbusr(H, base + 5, uint16);
level := modbusr(H, base + 6, uint16);
minLevel := modbusr(H, base + 9, uint16);
maxLevel := modbusr(H, base + 10, uint16);

# fade run or updating values or <=1% diff
var diff := abs(level - Le * 100);
if getbit(status,4) or (diff > 0 and diff <= 1) or count > 0
	count := count -1;
	return(le);
else
	if level = 0
		return(0);
	else
		return(linear(level, minLevel, if(minLevel=0, 0, 0.01), maxLevel, 1));
	end
end
```

Write level

```taphome
var base := base_modifier + (100 * SA);
if !isnull(Le)
	count := 2;
	if le = 0
		modbusw(H, base + 15, uint16, 0);
	else
		modbusw(H, base + 15, uint16, linear(le, if(minLevel=0, 0, 0.01), minLevel, 1, maxLevel));
	end
end
#trigger update
modbusw(H, base + 4, uint16, 1);
```

Service Attributes

Main Device Type

```taphome

var base := base_modifier + (100 * SA);

switch(modbusr(H, base + 7, uint16),
0, "Fluorescent",
1, "Emergency",
2, "Discharge",
3, "Halogen",
4, "Incandescent",
5, "Digital signal",
6, "LED",
7, "Switching",
8, "Color control",
255, "Other",
"Unknown")
```

Power On Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 11, uint16);
```

System Failure Level \[%]

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 12, uint16);
```

Fade Time

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 13, uint16);
```

Fade Rate

```taphome
var base := base_modifier + (100 * SA);
modbusr(H, base + 14, uint16);
```

Service Actions

Set Power-on Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 27, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set System-failure Level

Parameters: Level (0–100 Lvl)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 28, uint16, Lvl);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Time

Parameters: Fade Time (0–15 FT)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 23, uint16, FT);
modbusw(H, base + 4, uint16, 1);
```

Set Fade Rate

Parameters: Fade Rate (1–15 FR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 24, uint16, FR);
modbusw(H, base + 4, uint16, 1);
```

Add to DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 29, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

Remove from DALI Group

Parameters: Group (0–15 GR)

```taphome
var base := base_modifier + (100 * SA);
modbusw(H, base + 30, uint16, GR);
modbusw(H, base + 4, uint16, 1);
```

DALI Group 0 Dimmer Read and write

Write-only broadcast dimmer for all ECGs assigned to DALI group 0 — no read feedback, TapHome tracks level from user input only

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 1 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 2 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 3 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 4 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 5 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 6 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 7 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 8 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 9 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 10 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 11 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 12 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 13 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 14 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

DALI Group 15 Dimmer Read and write

UInt16 Unit: % numeric

Write level

```taphome
if !isnull(Le)
	modbusw(H, (20 * GA) + 6400 + base_modifier, uint16, Le * 100);
end
```

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

Possible improvements (40)

- H:6800 Broadcast Arc Power Level — Write 0–100 % to set every ballast on the DALI line to the same arc power level — not exposed as an action; only per-group (6400+20\*GR) and All On/Off (6801) are wired up
- H:6802 Broadcast Step Down / Up — 0 = Step Down, 1 = Step Up applied to all ECGs on the line (step size controlled by each ECG's Fade Rate)
- H:6803 Broadcast Recall Min Level — Write 1 → every ballast jumps to its individually configured Min Level
- H:6804 Broadcast Recall Max Level — Write 1 → every ballast jumps to its individually configured Max Level
- H:6805 Broadcast Go to Scene — Write 0–15 to recall a DALI scene on every ballast (scenes pre-configured in MAPS or via Set Scene action per ECG)
- H:6806 Broadcast Store Current Level as Scene — Write 0–15 to save the current arc power level of every ballast into the selected scene slot
- H:6807 Broadcast Clear/Remove Scene — Write 0–15 to erase the selected scene on every ballast
- H:6808 Broadcast Set Fade Time — Write 0–15 to apply the same fade-time index to every ballast (faster than per-ECG configuration for uniform fades)
- H:6809 Broadcast Set Fade Rate — Write 1–15 to apply the same fade-rate index to every ballast
- H:6810 Broadcast Set Min Level — Write 0–100 % to set the same minimum dim level on every ballast
- H:6811 Broadcast Set Max Level — Write 0–100 % to set the same maximum dim level on every ballast
- H:6814 Broadcast Multicontrol — Compound register — 0=Off, 1=100%, 2=StpUp, 3=StpDwn, 1XX=GoScene(XX), 2XX=StoreScene, 3XX=RmvScene, 1XXX=FdRate, 2XXX=FdTime, 3XXX=MinLvl, 4XXX=MaxLvl, 5XXX=PwrOnLvl, 6XXX=SysFailLvl; enables 'one-write many-ops' for advanced BMS scripting
- H:SA+8 Physical Minimum Level (per ECG) — Hardware-defined minimum dim level per ballast (distinct from user-settable Min Level at +9); read-only
- H:SA+16 Arc Power Off/On (per ECG) — R/W toggle: 0 = Off, 1 = 100 %; TapHome writes arc power level at +15 instead which covers the same capability
- H:SA+17 Step Down/Up (per ECG) — 0 = Step Down, 1 = Step Up — relative dimming per ballast using the stored fade-rate
- H:SA+18 Recall Min Level (per ECG) — Write 1 → this ECG jumps to its Min Level
- H:SA+19 Recall Max Level (per ECG) — Write 1 → this ECG jumps to its Max Level
- H:SA+20 Go to Scene (per ECG) — 0–15 scene recall per ballast
- H:SA+21 Store Current Level as Scene (per ECG) — 0–15 scene save per ballast
- H:SA+22 Clear/Remove Scene (per ECG) — 0–15 scene clear per ballast
- H:SA+25 Set Min Level (per ECG) — 0–100 %; R/W — TapHome reads current min via service attribute Fade Time but does NOT expose a writer for minLevel (template caches the read value into minLevel variable for writelevel linear mapping)
- H:SA+26 Set Max Level (per ECG) — 0–100 %; mirror of the above for maxLevel
- H:SA+31 Multicontrol (per ECG) — Compound write (see Broadcast Multicontrol for encoding) — advanced single-register scripting entry-point per ECG
- H:6401+20\*GR Group Arc Power Off/On — Group-wide 0/100 % toggle; template only exposes Arc Power Level (group writelevel), so ON/OFF is achievable only by writing 0 or 100
- H:6402+20\*GR Group Step Down/Up — Relative dim per group
- H:6403+20\*GR Group Recall Min Level
- H:6404+20\*GR Group Recall Max Level
- H:6405+20\*GR Group Go to Scene — 0–15
- H:6406+20\*GR Group Store Current Level as Scene — 0–15
- H:6407+20\*GR Group Clear/Remove Scene — 0–15
- H:6408+20\*GR Group Set Fade Time — 0–15
- H:6409+20\*GR Group Set Fade Rate — 1–15
- H:6410+20\*GR Group Set Min Level — 0–100 %
- H:6411+20\*GR Group Set Max Level — 0–100 %
- H:6412+20\*GR Group Set Power-on Level — 0–100 %
- H:6413+20\*GR Group Set System-failure Level — 0–100 %
- H:SA+42..+73 Emergency Control Gear (EML) signals — Failure Status, Emergency Mode, Battery Charge, Function/Duration test control, Rated Duration, Prolong Time, Store* parameters — Entire DALI Emergency (Part 202) feature set: SA+42 Failure Status, +43 Emergency Mode, +44 Emergency Status, +45 Battery Charge %, +46..+49 test schedule, +50..+57 timing/level config, +60..+68 trigger writes (Rest, Inhibit, Start/Stop tests, Reset Lamp Time), +69..+73 Store* R/W settings; ECGs of type 1 (Emergency) in this template fall back to the generic Fluorescent/LED script, so none of these are surfaced — dedicated EML template would be needed
- H:SA+80..+93 LED Control Gear (Device Type 6) signals — Failure Status bitmask, Gear Type, Dimming Curve, Operating Modes, Reference Running, Current Protector, Fast Fade Time, Enable/Disable Current Protector, Select Dimming Curve, Store Fast Fade Time — Advanced LED diagnostics and tuning per DALI-2 Part 207; template uses only the common signals (0..28) so LED-specific bits are not exposed even though gateway supports them
- 14000 + 640\*LINE + 10\*IDX + INSTANCE + 1280\*SIG DALI Input Devices (Occupancy, Light sensors, Push buttons, Absolute inputs) — Gateway supports up to 64 DALI input devices per line (recommended 16 with push buttons) — occupancy (0/1/2/3), light level (lux), push-button event bitmask (press/release/short/double/long), absolute input (0–100 % / raw); template exposes NO input devices. Local management (gateway directly drives ECGs from push-button events) is also unused. This is the largest feature gap for IBOX-MBS-DALI integrations that use DALI-native sensors
- H:SA+29 (Add to DALI Group), H:SA+30 (Remove from DALI Group) Add/Remove DALI Group (per ECG) — Firmware-drift deprecation: the r1.5 manual (May 2024) marks signals 29–30 as 'Not used' in the common-signals table, but the TapHome template still exposes them as per-ECG service actions ('Add to DALI Group' / 'Remove from DALI Group') because they were functional on earlier firmware where this template was authored. Behavior on latest firmware should be verified before relying on group-membership-at-runtime writes; configure groups via Intesis MAPS commissioning instead for stable deployments

## 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

- Intesis Modbus Server – DALI User Manual (r1.5, 2024)
  
  [www.hms-networks.com](https://www.hms-networks.com/docs/default-source/products/intesis/manuals-and-guides---manuals/user-manual-inmbsdalxxx0000.pdf) 2026-04-24
  
  [PDF](https://taphome.com/compatibility/devices/intesis-dali/manufacturer/user-manual.pdf)
- IBOX-MBS-DALI Installation Sheet (rev. 1.5)
  
  [cdn.chipkin.com](https://cdn.chipkin.com/assets/uploads/2019/Oct/intesisbox_ibox-mbs-dali_installation_manual_en_14-15-15-02.pdf) 2026-04-24
  
  [PDF](https://taphome.com/compatibility/devices/intesis-dali/manufacturer/installation-manual.pdf)

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/)

## Troubleshooting

Common issues related to this topic:

- [DALI lights switch on by themselves](https://taphome.com/en/troubleshooting/wiring/dali-lights-switch-on-by-themselves/) — DALI lights behind a DALI gateway switch on at minimum or change brightness without any command, usually the same few lights each time. The bus is disturbed for a moment — by the gateway, a short on a branch or a voltage drop.

[View all troubleshooting articles](https://taphome.com/en/troubleshooting/)

