Add WiFi controls to Chauvet DJ fog machine with an ESP-01

Turned out to be quite easy to integrate my Chauvet DJ fog machine into Home Assistant - required obviously for an appropriate Halloween automation.

My machine came with a wireless remote controller dongle - I swapped the guts of this with my ESP, which fits easily inside the original housing for a professional look.

What you need:

I’ll assume you know how to set up an ESP-01 in HA, tons of guides, see here. Once you wire this up, align the blue led of the ESP with one of the holes in the housing, and the red led of the regulator in the other, and you’ve got a nice pro-looking wifi controller.

The cable for this controller contains just 4 pins on a DIN connector:

  • yellow - gnd, to 3.3v regulator and esp01 gnd
  • red - 5v, to 3.3vin on regulator. Regulator 3.3v out to esp01 3v3
  • blue - pull down to gnd for fog. Connected to esp01 GPIO0. Configured as HA switch
  • green - ready (heated). Connected to esp01 GPIO3 (RX). Reported as binary sensor

The blue wire turns on the fog when pulled to ground. Configure this as a Switch in HA.
The green wire indicates the machine is ready to produce fog (heated). Report this as a Binary Sensor in HA.

Here’s my ESP config:

substitutions:
  name: smoke
  friendly_name: smoke

esphome:
  name: "${name}"
  friendly_name: "${friendly_name}"

esp8266:
  board: esp01_1m
  restore_from_flash: false

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "......"

ota:
  password: "..."

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Smoke Fallback Hotspot"
    password: "..."

captive_portal:

# Minimal flash writes, once per day
preferences:
  flash_write_interval: 1440min

# Blink LED for status...
light:
  - platform: status_led
    # ...but don't expose it to HA
    internal: true
    name: status light
    id: blueled
    pin:
      # ESP-01 pin 2 controls blue led
      number: 2
      inverted: yes
    restore_mode: ALWAYS_OFF

script:
  - id: heartbeat
    mode: single
    then:
      - light.toggle: blueled
      - delay: 30 ms
      - light.toggle: blueled

# Heartbeat while connected to HA
interval:
  - interval: 5s
    then:
      if:
        condition:
          api.connected:
        then:
          - script.execute: heartbeat

text_sensor:
  # Expose ESPHome version as sensor
  - platform: version
    name: ESPHome Version
    disabled_by_default: True
  # Expose WiFi information as sensors
  - platform: wifi_info
    ip_address:
      name: IP
    mac_address:
      name: Mac Address

sensor:
  # Report uptime every 10 min
  - platform: uptime
    name: Uptime
    filters:
      - throttle: 600s
    disabled_by_default: True
  # Report wifi signal strength every 5 min if changed  
  - platform: wifi_signal
    name: WiFi Signal
    update_interval: 300s
    filters:
      - delta: 10%
  # Input voltage to esp
  - platform: adc
    pin: VCC
    name: VCC Voltage
    update_interval: 5s
    filters:
      - delta: 5%
    disabled_by_default: True

# Pin assignments
# https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/
# 3v3 |  | RX, GPIO3 - high at boot
# RST |  | GPIO0 - flash if low on boot
# EN  |  | GPIO2 - blue led on if pulled down, must be high at boot
# TX  |  | GND
#  ^ GPIO1 - debug out at boot

# Fog machine Chauvet DJ wireless remote controller FC-W
# 4 pins on a DIN connector
# yellow - gnd, to 3.3v regulator and esp01 gnd
# red - 5v, to 3.3vin on regulator. Regulator 3.3v out to esp01 3v3
# blue - pull down to gnd for fog. Connected to esp01 GPIO0. Configured as HA switch
# green - ready (heated). Connected to esp01 GPIO3 (RX). Reported as binary sensor

binary_sensor:
  # Connectivity sensor
  - platform: status
    name: connected
    device_class: connectivity
  # Fog machine is heated
  - platform: gpio
    name: fogger ready
    device_class: power
    pin:
      number: 3
      mode:
        input: True
        pullup: True
    on_press:
      then:
        - light.turn_on: blueled
    on_release:
      then:
        - light.turn_off: blueled

# GPIO0 turns on the smoke when pulled low
output:
  - platform: gpio
    pin: 
      number: GPIO0
      inverted: true
    id: fogger

button:
  # Reboot the ESP
  - platform: restart
    name: reboot
  # Trigger fog production
  - platform: output
    name: fogger
    icon: mdi:weather-fog
    output: fogger
    duration: 1500ms
2 Likes

A shame there is no way to integrate DMX into HA.

Would it be possible using artnet?

I use artnet already for this. I use homeassistant as part of a haunted attraction, and i use homeassistant as part of live sound/lighting gigs.

When certain events occur, like someone passing a motion detector, or a certain timer goes off, home assistant sends an artnet value to my lighting system (qlc++) to activate or toggle scenes.

Works like a charm.