Add Art-Net / sACN (E1.31) DMX device support

Full-stack implementation of DMX output for stage lighting and LED controllers:
- DMXClient with Art-Net and sACN packet builders, multi-universe splitting
- DMXDeviceProvider with manual_led_count capability and URL parsing
- Device store, API schemas, routes wired with dmx_protocol/start_universe/start_channel
- Frontend: add/settings modals with DMX fields, IconSelect protocol picker
- Fix add device modal dirty check on type change (re-snapshot after switch)
- i18n keys for DMX in en/ru/zh locales

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-13 16:46:40 +03:00
parent 18c886cbc5
commit ff24ec95e6
18 changed files with 607 additions and 7 deletions

View File

@@ -142,8 +142,21 @@
"device.type.ws.desc": "Stream LED data to WebSocket clients",
"device.type.openrgb": "OpenRGB",
"device.type.openrgb.desc": "Control RGB peripherals via OpenRGB",
"device.type.dmx": "DMX",
"device.type.dmx.desc": "Art-Net / sACN (E1.31) stage lighting",
"device.type.mock": "Mock",
"device.type.mock.desc": "Virtual device for testing",
"device.dmx_protocol": "DMX Protocol:",
"device.dmx_protocol.hint": "Art-Net uses UDP port 6454, sACN (E1.31) uses UDP port 5568",
"device.dmx_protocol.artnet.desc": "UDP unicast, port 6454",
"device.dmx_protocol.sacn.desc": "Multicast/unicast, port 5568",
"device.dmx_start_universe": "Start Universe:",
"device.dmx_start_universe.hint": "First DMX universe (0-32767). Multiple universes are used automatically for >170 LEDs.",
"device.dmx_start_channel": "Start Channel:",
"device.dmx_start_channel.hint": "First DMX channel within the universe (1-512)",
"device.dmx.url": "IP Address:",
"device.dmx.url.hint": "IP address of the DMX node (e.g. 192.168.1.50)",
"device.dmx.url.placeholder": "192.168.1.50",
"device.serial_port": "Serial Port:",
"device.serial_port.hint": "Select the COM port of the Adalight device",
"device.serial_port.none": "No serial ports found",