← All projects Project

WELCO: DALI Lighting Control System for BESA

10 Haziran 2026

Node.js MQTT DALI LoRaWAN

For BESA, I built WELCO, a system that remotely monitors and controls luminaires that speak the DALI (Digital Addressable Lighting Interface) protocol. It runs as an always-on Node.js production service.

What it does

  • Listens to status coming from DALI gateways/controllers over MQTT, and sends on/off commands at the fixture level while reading back status.
  • Detects and surfaces faults/anomalies (a fixture not responding, an unexpected state, etc.).
  • Works together with LoRaWAN-connected field panels, extending lighting control to facilities with wide, low-power wireless coverage.

Link to production

When a fixture gets a serial number on the production line, a separate bridge service automatically registers it with WELCO; units pulled off the line or decommissioned are removed the same way. This keeps production and field monitoring/control in sync without manual work (see the Production Infrastructure write-up for details).

For field integration testing (LoRaWAN + DALI panel), a separate local copy of the WELCO backend runs on a Raspberry Pi 4 panel — changes are tried there first, then rolled out to the real production server.

A minimal illustration

A tiny MQTT example capturing the idea, unrelated to the real code:

const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://localhost:1883');

client.on('connect', () => client.subscribe('dali/+/status'));

client.on('message', (topic, payload) => {
  console.log(topic, JSON.parse(payload.toString()));
});

function setPower(fixtureId, on) {
  client.publish(`dali/${fixtureId}/set`, JSON.stringify({ on }));
}