How I got Art-Net + DMX302 DMX dimmers working with LED lighting in Home Assistant (step-by-step + config)

Hi everyone,

I’ve been struggling with Art-Net → DMX → dimmable LEDs in Home Assistant for quite some time. There are bits and pieces on the forum (ESPHome solutions, custom components, etc.), but I couldn’t find one clear, step-by-step post that covered exactly my setup: a cheap Ethernet Art-Net DMX converter + DMX302 trailing-edge dimmers + Philips Warm Glow GU10s + some non-dimmable LEDs.

So here is my full working setup, including why I chose certain things, how to test hardware first (very important!), and the exact config that finally worked for me.

Why this setup & why DMX302?
I wanted a good dimmer that is also capable to modern LEDs (especially Warm Glow).

I chose the DMX302 (3-channel dimmer, ~€20-30 on AliExpress) because:

  • Good LED capable dimmer
  • 3 independent channels per module
  • DIN-rail mountable
  • Supports up to ~1A per channel (enough for 2–3 GU10s)
  • Daisy-chainable via DMX
  • DMX302 has passive passthrough: DMX in → out even when unpowered. My living room uses 3 separate phases, so if one group fails, the others still provide light. Each group has 2–3 GU10s.
  • Cheap and reliable for home use
  • I don’t have a direct link to a DMX302 seller. Please search DMX302 on Aliexpress. www.aliexpress.com/w/wholesale-DMX302.html

I did not want to build my own ESP8266/ESP32 Art-Net node (like ESP8266 Artnet to DMX : 11 Steps (with Pictures) - Instructables) because I wanted stable Ethernet and no custom enclosures/soldering.

I ended up buying this Ethernet Art-Net to DMX converter:
https://nl.aliexpress.com/item/1005007171403305.html
(the 50EUR 2 port model, Art-net Mini 2 Ports, works great, has LCD, I am not supported by this link. feel free to find another seller.)

Step 1: Test hardware first (strongly recommended!)

Before fighting HA, make sure Art-Net → DMX → lamps actually work.

I used this tiny Python script (artnet_test.py) to send raw Art-Net packets (no HA involved):

import socket
import time

IP = "192.168.1.100"      # ← your Art-Net controller IP
PORT = 6454               # Art-Net default
UNIVERSE = 1              # your universe

def send_dmx_packet(ch1, ch2, ch3):
    header = (
        b'Art-Net\x00',
        b'\x00\x50',
        b'\x00\x0e',
        b'\x00\x00',
        bytes([UNIVERSE % 256, UNIVERSE // 256]),
        b'\x02\x00'
    )
    dmx_data = bytes([ch1, ch2, ch3]) + bytes(509)
    packet = b''.join(header) + dmx_data

    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.sendto(packet, (IP, PORT))
    sock.close()

print("Setting channels 1-3 to 255 (full on)")
send_dmx_packet(255, 255, 255)
time.sleep(5)

print("Setting channels 1-3 to 0 (off)")
send_dmx_packet(0, 0, 0)
print("Test done.")

Run with: python artnet_test.py

Important notes:

  • Make sure your DMX302 display shows A001 (start address 1)
  • If you want channels 4-6, set the second DMX302 to A004 and change script above.First channel has address 4, second 5, and last 6. The third DMX302 should have A007. A+1+(Unit nr-1)*3. Starting with unit 1.
  • VPNs (WireGuard, etc.) can block local traffic – disable them during testing!
  • If nothing happens → swap D+/D- on one side (very common issue)

Once lamps respond → hardware is good.

Step 2: Home Assistant integration

  1. Install HACS (if not already)

  2. Add the custom repository:

  3. Install the integration:

    • HACS → + Explore & Download Repositories
    • Search for “Art-net LED Lighting for DMX”
    • Open it → Download
  4. Restart Home Assistant (Settings → System → Restart)

  5. (Optional but recommended) For nice sliders:

    • HACS → Frontend → Search “slider-entity-row”
    • Install → restart Home Assistant

Step 3: configuration.yaml

My exact working config (universe 1, short fade on dimmable, instant on/off on non-dimmable):

light:
  - platform: artnet_led
    host: 192.168.1.100
    port: 6454
    max_fps: 10                     # less network spam during fade
    refresh_every: 0                # no unnecessary refreshes
    node_type: artnet-direct
    universes:
      1:
        send_partial_universe: true
        output_correction: quadratic  # smoother LED dimming curve
        devices:
          - channel: 1
            name: "LED Group 1"
            type: dimmer
            transition: 0.2           # short fade (200 ms)
            channel_size: 8bit

          - channel: 2
            name: "LED Group 2"
            type: dimmer
            transition: 0             # instant on/off for non-dimmable LED
            channel_size: 8bit

          - channel: 3
            name: "LED Group 3"
            type: dimmer
            transition: 0.2
            channel_size: 8bit

Step 4: Dashboard card (Lovelace)

My current card with nice sliders (using slider-entity-row):

type: entities
title: Dimmer Groups
entities:
  - type: custom:slider-entity-row
    entity: light.led_group_1
    name: Group 1 (Warm Glow)
    icon: mdi:lightbulb-variant
    toggle: true
    slider: true
    hide_state: false
    step: 5

  - entity: light.led_group_2
    name: Group 2 (on/off only)
    icon: mdi:light-switch

  - type: custom:slider-entity-row
    entity: light.led_group_3
    name: Group 3 (incandescent-ready)
    icon: mdi:lightbulb
    toggle: true
    slider: true
    hide_state: true          # gray when unavailable
    step: 5

Note about Group 2: I had non-dimmable LED GU10s connected to channel 2, so I made it a simple on/off switch (no slider). If you have dimmable lamps on all channels, you can change it to a normal slider-entity-row just like the others. This is just to show what’s possible with mixed lamp types.

Extra tips I learned the hard way

  • Terminator issue: Many cheap DMX302 units have an internal 160Ω terminator on the output. When chaining two units → effective 80Ω (not ideal, but no problem). For 1–2 units short cable → ok. For more → open all DMX302 units and desolder the 160Ω resistor inside and add an external 120Ω resistor on the very last DMX output. But if you only use 1 or 2, just leave the resistors and don’t put the additional 120Ω resistor at the second DMX out.
  • D+ / D- swapped: super common – try swapping once if no response.
  • Universe: My converter uses universe 1 for first output (not 0). Test with the Python script first!
  • Non-dimmable on dimmer: Use transition: 0 and treat as switch. Works fine as long as you never dim it.

This setup is stable, low network load, and gives nice dimming on Warm Glow and instant on/off on cheap LEDs.

Good luck and have fun with your dimmers!

With kind regards,
Erik

Hi all,

I wanted to explain why the DMX302 trailing-edge dimmer works so well with LEDs (unlike many cheap leading-edge modules), and also cover the small modification needed when connecting multiple units to the same DMX universe.

  1. Trailing Edge vs Leading Edge – Why It Matters for LEDs
    LEDs prefer trailing edge dimming. Here’s the quick reason:
  • Leading edge dimming cuts the AC waveform at the start → sharp voltage spike → high inrush current → flickering, buzzing, short lifespan, or even damage on LEDs. These dimmers are TRIAC based.
  • Trailing edge cuts at the end of the cycle → much smoother, very low inrush → stable, flicker-free dimming. These dimmers are high voltage MOSFET based. Not your average low voltage MOSFET (like 2N7002 or BSS138).

Trailing edge usually requires two high-voltage MOSFETs per channel (one for each half-cycle). The DMX302 has three channels, so it uses two rows of MOSFETs (6 in total) – exactly what you see in the photo.

I’m pretty confident (without having measured it) that this is trailing edge – perfect for modern high voltage LED strips, bulbs, or fixtures.

  1. Daisy-Chaining Multiple DMX302 Units – The Termination Resistor Issue
    Each DMX302 comes with a built-in 120 Ω termination resistor between D+ and D– (standard DMX practice for the end device).
  • 1 unit → perfect, leave it as-is.
  • 2 units → in a daisy chain, but this is two times 160 Ohm parallel = ~80 Ω effective (160 Ohm total resistance between D+ and D-, 120 Ohm termination and 20 Ohm in series with D+ and 20 Ohm in series with D-). Often still works with short cables, but can cause signal issues on longer runs.
  • 3+ units → definitely remove the internal resistors from all but (optionally) the last one.

Best practice:

  • Remove the 120 Ω resistor from all units except possibly the very last one in the chain. This is mostly recommended for all people that don’t have a conventional 120 Ohm resistor laying around. I am hardware engineer, so I have these on stock.
  • Or even better: remove it from all units and add one proper 120 Ω resistor externally across D+ / D– out at the very end of the line.

To check: measure resistance between D+ and D–.

  • ~160 Ω → resistor is present
  • ~30 kΩ or open → resistor removed

How to modify (only if you’re comfortable soldering SMD!):



Desolder the tiny 120 Ω SMD resistor carefully. You can always put it back if needed.

After mod & re-assembly:

  • Make sure the PCB is inserted correctly into the housing (it only fits one way, but double-check – wrong orientation could connect 230 V to DMX lines!).
  • Verify continuity: D+ IN → D+ OUT, D– IN → D– OUT.

If you leave the resistor in the last unit only, clearly label that device as “END OF LINE” so it doesn’t get mixed up later.

Disclaimer: This is just my experience-based advice. Mod at your own risk – I’m not liable for any damage or mistakes. Only do this if you know what you’re doing.

Quick note on how to properly daisy-chain the DMX302 units:

  • Connect the Art-Net universe 1 output (DMX512) to the DMX IN of unit 1 (use D+ and D–, and connect GND if your controller provides it – highly recommended for better noise immunity).
  • Then connect DMX OUT of unit 1 to DMX IN of unit 2.
  • DMX OUT of unit 2 to DMX IN of unit 3, and so on.

Make sure the last unit in the chain has a 120 Ω termination resistor across D+ and D– (DMX out). This prevents signal reflections and keeps the DMX line clean (no interference or glitches).

If you removed the internal 120 Ω resistor from all units, add an external 120 Ω resistor between D+ and D– at the very end (on the last unit’s OUT terminals, or on a separate plug if you prefer).

Quick check (only do this when everything is powered OFF and disconnected!):

  • If you did NOT connect the DIN plug to the Art-Net controller → you should measure around 160 Ω between D+ and D- in of the first unit (or 120 Ohm with resistor on D+ and D- on DMX out of the last unit)
  • If you did connect the Artnet controller → you might see something closer to 60 Ω, because the artnet controller has also a 120 Ohm resistor.

Just make sure the chain ends with proper termination – that’s the key to stable multi-unit operation.
Please make sure that the addresses are right. unit 1: A001, unit 2: A004, unit 3: A007, etc.

Questions? Experiences with this dimmer? Happy to discuss!

Cheers,
Erik

Great guide! I must however be stupid, because I can’t find anything related to Art-Net or DMX in HACS…

Found it! A custom repo had to be added: GitHub - Breina/ha-artnet-led: DMX lighting Integration for Home Assistant. Using the HA Color Mode update and Pyartnet library to control lights in multiple DMX universes over ethernet with the Art-Net protocol. · GitHub

Hi,

Sorry for the late reply, and thanks for your comment. You’re absolutely right — it wasn’t possible to find it directly in HACS.

I’ve updated the instructions above to clarify this.

Good luck with the DMX302 integration!

Best regards,
Erik

About to embark on doing some of this project, just the DMX ArtNet node part, as I have an existing dimmer which seems to be OK with LED loads - nice to know good dimmers exist though! Also odd is the permanently soldered in termination resistor, usually that would be a switch/jumper option - a note about solding it off, and to make it easier, you can also snip the resistor off with a pair of precision snips, done that a few times in the past!

Very interesting, thanks for sharing. I am exploring light control (mostly 24V CCT LED strips) with Home Assistant without wireless connections and since the KNX/DALI approach is way too expensive I settled on cheap DMX512 controllers for dimming. So HA doesn’t “speak” DMX directly but only through an Artnet converter?