Digital Addressable Lighting Interface (DALI) is a trademark for network-based products that control lighting. The underlying technology was established by a consortium of lighting equipment manufacturers as a successor for 1-10 V/0–10 V lighting control systems, and as an open standard alternative to several proprietary protocols. The DALI, DALI-2 and D4i trademarks are owned by the lighting industry alliance, DiiA (Digital Illumination Interface Alliance).
DALI is specified by a series of technical standards in IEC 62386. Standards conformance ensures that equipment from different manufacturers will interoperate. The DALI trademark is allowed on devices that comply with the DiiA testing and certification requirements, and are listed as either registered (DALI version-1) or certified (DALI-2) on the DiiA website. D4i certification – an extension of DALI-2 – was added by DiiA in November 2019.
Members of the AG DALI were allowed to use the DALI trademark until the DALI working party was dissolved on 30 March 2017, when trademark use was transferred to DiiA members. Since 9 June 2017, Digital Illumination Interface Alliance (DiiA) certifies DALI products. DiiA is a Partner Program of IEEE-ISTO.
A DALI network consists of at least one application controller and bus power supply (which may be built into any of the products) as well as input devices (e.g. sensors and push-buttons), control gear (e.g., electrical ballasts, LED drivers and dimmers) with DALI interfaces. Application controllers can control, configure or query each device by means of a bi-directional data exchange. The DALI protocol permits addressing devices individually, in groups or via broadcast. 
Each device is assigned a unique short address between 0 to 63, making up to 64 control gear devices and 64 control devices possible in a basic system. Address assignment is performed over the bus using a “commissioning” protocol, usually after all hardware is installed. Data is transferred between devices by means of an asynchronous, half-duplex, serial protocol over a two-wire bus with a fixed data transfer rate of 1200 bit/s.
A single pair of wires comprises the bus used for communication on a DALI network. The network can be arranged in bus or star topology, or a combination of these. Each device on a DALI network can be addressed individually, unlike DSI and 0–10V devices. Consequently, DALI networks typically use fewer wires than DSI or 0–10V systems.
The bus is used for both signal and bus power. A power supply provides up to 250 mA at typically 16 V DC; each device may draw up to 2 mA unless bus-powered.:20,35 While many devices are mains-powered (line-powered), low-power devices such as motion detectors may be powered directly from the DALI bus. Each device has a bridge rectifier on its input so it is polarity-insensitive. The bus is a wired-AND configuration where signals are sent by briefly shorting the bus to a low voltage level. (The power supply is required to tolerate this, limiting the current to 250 mA.)
Although the DALI control cable operates at ELV potential, it is not classified as SELV (Safety Extra Low Voltage) and must be treated as if it has only basic insulation from mains. This has the disadvantage that the network cable is required to be mains-rated, but has the advantage that it may be run next to mains cables or within a multi-core cable which includes mains power. Also, mains-powered devices (e.g., LED drivers) need only provide functional insulation between the mains and the DALI control wires.
The network cable is required to provide a maximum drop of 2 volts along the cable.:19 At 250 mA of supply current, that requires a resistance of ≤ 4 Ω per wire. The wire size needed to achieve this depends on the length of the bus, up to a recommended maximum of 2.5 mm2 at 300 m when using the maximum rating of bus power supply.
The speed is kept low so no termination resistors are required,:21 and data is transmitted using relatively high voltages (0±4.5 V for low and 16±6.5 V for high:19) enabling reliable communications in the presence of significant electrical noise. (This also allows plenty of headroom for a bridge rectifier in each slave.)
Each bit is sent using Manchester encoding (a “1” bit is low for the first half of the bit time, and high for the second, while “0” is the reverse), so that power is present for half of each bit. When the bus is idle, the voltage level is continuously high (which is not the same as a data bit). Frames begin with a “1” start bit, then 8 to 32 data bits in msbit-first order (standard RS-232 is lsbit-first), followed by a minimum of 2.45 ms of idle.
DALI lighting levels are specified by an 8-bit value, with 0 representing off, 1 means 0.1% of full brightness, 254 means full brightness, and other values being logarithmically interpolated, giving a 2.77% increase per step. I.e., a (non-zero) control byte x denotes a power level of 103(x−254)/253.
(A value of 255 is reserved for freezing the current lighting level without changing it.)
This is designed to match human eye sensitivity so that perceived brightness steps are uniform, and to ensure corresponding brightness levels in units from different manufacturers.:21
Devices store 16 programmable output levels as “scenes”. A single broadcast command causes each device to change to its configured level, e.g. dim lights over the audience and bright lights over the stage. (A programmed output level of 255 causes a device not to respond to a given scene.)
A 17th “system failure” scene is triggered by a loss of power (sustained low level) on the DALI bus, to provide a safe fallback if control is lost.
Commands for control gear
Forward frames sent to control gear are 16 bits long, comprising an address byte followed by an opcode byte. The address byte specifies a target device or a special command addressed to all devices.
When addressing a device, the least significant bit of the address byte specifies the interpretation of the opcode byte, with “0” meaning a target (light) level byte follows, and “1” meaning a command follows.
Several important special commands are used to save the data byte to one of the three “data transfer registers” which can be used as a parameter by subsequent commands.