Skip to main content

Creative Lighting eDIDIO (DALI/DMX)

Driver: edidio

Local control of the Creative Lighting eDIDIO Series 10 (Control Freak range) Ethernet DALI/DMX lighting controller. One controller drives a whole DMX universe and/or DALI lines; each GEM zone is an individual fixture carrying a fixture_mode (dimmer / rgb / rgbw / dali). The driver reads live channel levels back from the controller for state confirmation.

:::note Not the Art-Net path This driver is distinct from the Art-Net DMX path (generic_dmx / dmx_rgbw). The eDIDIO speaks Protocol Buffers over TLS on TCP 443 with a custom 0xCD | length frame header, a persistent connection, and a keep-alive — it is not an Art-Net node. Use this driver for eDIDIO hardware; use the Art-Net drivers for Enttec ODE / Art-Net nodes. :::

Prerequisites

  • A Creative Lighting eDIDIO Series 10 controller reachable on the LAN from the GEM server.
  • TCP 443 open from the GEM server to the controller (the controller ignores non-0xCD traffic, so port scanners and HTTP probes show nothing).
  • For DMX fixtures: the DMX wiring/addressing already commissioned on the controller. For DALI: a commissioned DALI line with short addresses assigned.

Setup

  1. In GEM, System → Devices → Add Device with driver edidio.
  2. Set ip to the controller's LAN IP (or hostname). Leave port at 443 unless you have changed it.
  3. Save and reload. The driver connects over TLS, reads firmware/hardware/line layout, and logs edidio connected: <id> <name> <ip> <port>.
  4. On first connect the driver runs sync_zones automatically, auto-creating one GEM zone per fixture found in the controller's commissioned Spektra fixture profile. You can re-run it anytime with the sync_zones command.
  5. For fixtures you create by hand, set zone.address and fixture_mode (see below).

Addressing

zone.address depends on the fixture mode:

  • DMX fixtures (fixture_mode = dimmer / rgb / rgbw) — the 1-based starting DMX channel (1–512). dimmer occupies 1 channel, rgb occupies 3 consecutive channels, rgbw occupies 4 (address + the next 3). An rgbw fixture's address therefore cannot exceed 509.
  • DALI fixtures (fixture_mode = dali) — the DALI short address (0–63) on the line set by dali_line.

Attributes

Device

AttributeRequiredDefaultDescription
ipyesController LAN IP or hostname.
portno443Protobuf-over-TLS port.
universe_maskno1Binary mask of DMX universes to drive. Universe 1 = 1, universe 2 = 2, both = 3.
fade_msno0Default DMX fade duration (ms) applied to level/color changes. 0 = instant.
status_poll_msno5000How often to read the controller's DMX level cache and sync each zone's level/color/white/state for changes made outside GEM (keypads, Spektra scenes, another DMX master). 0 disables polling. See Out-of-band sync.
default_subsystemnolightSubsystem sync_zones places auto-created fixtures under (matched by name substring).
secure_usernamenoOnly if the controller has Secure Session enabled (currently stubbed — see below).
secure_passwordnoSecure Session password (encrypted). Only if Secure Session is enabled.

Runtime-populated (read-only, reported by the controller): firmware, hardware, temperature (chip °C), battery (backup battery mV), controller_lines (line types, e.g. dmx,empty).

Zone

AttributeDefaultDescription
fixture_modergbwHow the fixture maps onto the controller: dimmer (1 ch), rgb (3 ch), rgbw (4 ch), or dali (a DALI short address on dali_line).
dali_line1DALI line number (1–8) for fixture_mode = dali.
default_white255White channel level (0–255) used when turning on without a stored color (rgbw only).
fade_msPer-zone fade duration override (ms). 0 = instant. Falls back to the device default.

Runtime-populated (read-only, written by the driver): red, green, blue, white (0–255), color (hex), level (0–100), state (on/off).

Commands

CommandArgsEffect
onaddressTurn the fixture on (restores its last color/level).
offaddressTurn the fixture off.
leveladdress, levelSet brightness 0–100 (hue preserved for color fixtures).
coloraddress, colorSet hex color #RRGGBB (rgb/rgbw fixtures).
whiteaddress, whiteSet the white channel 0–255 (rgbw fixtures).
rgbwaddress, red, green, blue, whiteSet raw R/G/B/W channel values 0–255.
recall_sceneaddress, sceneRecall a DALI scene (0–15) on a dali fixture.
all_onDMX broadcast all configured fixtures to full.
all_offDMX broadcast all configured fixtures off.
sync_zonesAuto-create GEM zones from the controller's Spektra fixture profile. Idempotent.
refreshRe-read firmware, lines, temperature, and battery from the controller.
triggertype, value, index, lineRun an arbitrary eDIDIO TriggerType (advanced).

sync_zones

sync_zones reads the controller's commissioned Spektra fixture profile and the authoritative CONTROLLER_LINES layout, then creates one GEM zone per fixture under the lighting subsystem. It is additive and idempotent:

  • Existing zone addresses are skipped — never modified or removed.
  • Fixtures are deduped by address, so a factory-default profile (every Spektra zone pointing at one fixture) collapses to a single zone.
  • DMX fixtures are created with the matching fixture_mode derived from their channel count; DALI fixtures are created with fixture_mode = dali and the resolved dali_line.
  • Every auto-created zone gets the dmx_rgbw zone control, so it renders with the RGBW color/level UI. That control reads fixture_mode and only shows the white slider for rgbw fixtures (dimmer / rgb / dali show level and color only).

Out-of-band sync

The driver polls the controller's DMX level cache on an interval (status_poll_ms, default 5 s) and reconciles each DMX zone's level / color / white / state with reality, so changes made outside GEM — wall keypads, recalled Spektra scenes, or another DMX master on the line — show up in the UI.

  • Change detection compares the live channels against what GEM expects given the zone's stored attributes. A match means nothing external happened, so the zone's own color/level decomposition is left untouched (a fixture at an arbitrary hue is never "corrected" just because its brightest channel is below full). Only a genuine mismatch rewrites the zone.
  • The poll self-reschedules, survives auto-reconnects, and stops cleanly on disconnect. Set status_poll_ms to 0 to disable it entirely.
  • DMX only. DALI fixtures are skipped — the DALI status cache is unverified against hardware.

Known limitations

  • Weak TLS certificate. The controller uses a self-signed RSA-1024 certificate, so TLS verification is disabled by design.
  • DALI is coded to spec but not hardware-verified. The DALI command/scene paths and DALI zone auto-create follow the eDIDIO/DALI specification but have not been validated against live DALI hardware (the reference unit is DMX-only). The DMX path is verified.
  • all_on / all_off follow the controller's profile. DMX broadcast acts on the controller's Spektra fixture profile, not GEM's per-zone state.
  • Secure Session login is stubbed. The optional device-side "Secure Session" login flow is scaffolded but not implemented. It is not required unless explicitly enabled on the controller; when enabled, unauthenticated requests are rejected with ack unauthorised.

Troubleshooting

SymptomCheck
Device never connectsConfirm TCP 443 is reachable. The eDIDIO ignores non-0xCD traffic, so port scanners / HTTP show nothing; Telnet and Art-Net are usually disabled.
Commands return ack unauthorisedThe controller has Secure Session enabled — that login flow is not yet implemented in this driver.
Wrong channels light upCheck fixture_mode against the fixture's real channel count, and that zone.address is the 1-based starting channel.