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