🔴 Node-RED — Flow Documentation
Node-RED runs on forest-mac1 (10.50.0.30) and serves as the integration layer between Home Assistant, Chataigne, FPP players, projectors, and the dashboard.
Installed Packages
| Package | Version |
| @flowfuse/node-red-dashboard | 1.30.0 |
| node-red-contrib-sacn | 0.0.9 |
| node-red-contrib-home-assistant-websocket | 0.80.3 |
| node-red-contrib-osc | 1.1.0 |
| node-red-contrib-network-tools | 2.3.5 |
Flows Overview
| # | Flow Name | Protocol | Purpose |
| 1 | Projector Simple Control | TCP | Power on/off the projector via serial-over-TCP |
| 2 | Projector Power & Status Pull | HTTP | Poll projector status page every 30 s |
| 3 | FPP Command Presets per Endpoint | HTTP GET | Trigger ALL ON / ALL OFF across FPP players |
| 4 | Chataigne MasterStates OSC | OSC / sACN | Send AllOn / AllOff to Chataigne & direct DMX |
| 5 | Butterfly Projection | WebSocket | Send OFF command to forest-mac2 |
| 6 | Flow 1 — Network Performance Monitor | ICMP | Ping 64 devices, build dashboard |
| 7 | Flow 2 — MadMapper OSC Listener | OSC (UDP) | Listen for MadMapper telemetry on port 9090 |
Flow: Projector Simple Control
Sends TCP commands to the projector at 10.50.0.5:10000.
Command Sequences
| Action | Step | Command | Notes |
| Power ON | 1 | 0000\r | Wake / handshake |
| 2 | Wait 3 s | Stagger delay |
| 3 | C00\r | Power ON command |
| Power OFF | 1 | 0000\r | Wake / handshake |
| 2 | Wait 2 s | Stagger delay |
| 3 | C01\r | Power OFF command |
⚠️
Stagger delay is critical. The projector will not accept the power command if sent immediately after the handshake. Always wait the specified delay.
Trigger Sources
| Source | Entity / Event | Action |
| Home Assistant | input_boolean.butterfly_wings ON | Power ON sequence |
| Home Assistant | input_boolean.butterfly_wings OFF | Power OFF sequence |
| Chataigne | ProjectorOn | Power ON sequence |
| Chataigne | ProjectorOff | Power OFF sequence |
| Home Assistant | switch.dmx_power | Power ON/OFF |
| Home Assistant | input_boolean (lasers) | Power ON/OFF |
Mac WebSocket Targets
| Target | IP | Port | Protocol |
| Mac1 (forest-mac1) | 10.50.0.30 | 8080 | WebSocket |
| Mac2 (forest-mac2) | 10.50.0.31 | 8080 | WebSocket |
| Mac3 (forest-mac3) | 10.50.0.32 | 8080 | WebSocket |
| Mac4 (forest-mac4) | 10.50.0.33 | 8080 | WebSocket |
HA Virtual Entities
| Entity Name | Type | Purpose |
Forest Power | Switch | Master on/off — triggers FPP ALL ON/OFF across all endpoints |
DMX Power | Switch | Toggle DMX power relay |
ButterflyProjector | Switch | Toggle butterfly projector (Epson DHT8000 via TCP) |
Butterfly Laser | Button | Trigger butterfly laser command via WebSocket to Mac2 |
Flower Projector | Button | Trigger flower projector reboot via WebSocket to Mac3 |
Flower Laser | Button | Trigger flower laser command via WebSocket to Mac3 |
Fire Projector | Button | Trigger fire projector reboot via WebSocket to Mac4 |
Saloon Lasers | Button | Trigger saloon laser command |
Reboot Forest | Button | Trigger full forest reboot sequence |
Stop Forest | Button | Trigger stop-forest sequence |
Flow: Projector Power & Status Pull
Polls GET http://10.50.0.5/power.htm every 30 seconds and parses the status code from the response body.
Status Code Parser
| Code (hex) | Meaning |
00 | ON — Normal operation |
04 | OFF — Power management |
08 | OFF — Normal |
10 | Service needed |
20 | Cooling down |
21 | Cooling down (variant) |
24 | Cooling down (variant) |
28 | Cooling down (variant) |
2C | Cooling down (variant) |
40 | Starting up |
80 | OFF (variant) |
81 | OFF (variant) |
88 | OFF (variant) |
8C | OFF (variant) |
HA Entities Updated
| Entity ID | Type | Value |
input_boolean.projector_power | Boolean | ON if code = 00, else OFF |
input_text.projector_status | Text | Human-readable status string |
input_text.projector_power_status | Text | Raw hex code from response |
Flow: FPP Command Presets per Endpoint
Sends HTTP GET requests to all FPP player endpoints to trigger preset commands. Slot 1 = ALL ON, Slot 2 = ALL OFF.
FPP Endpoints
| Device | IP | Endpoint Pattern |
| forest-pix1 | 10.50.0.11 | http://10.50.0.11/api/command/... |
| forest-pix2 | 10.50.0.12 | http://10.50.0.12/api/command/... |
| forest-pix3 | 10.50.0.13 | http://10.50.0.13/api/command/... |
| forest-pix4 | 10.50.0.14 | http://10.50.0.14/api/command/... |
| forest-pix5 | 10.50.0.15 | http://10.50.0.15/api/command/... |
| forest-minipix1 | 10.50.0.20 | http://10.50.0.20/api/command/... |
| forest-minipix2 | 10.50.0.21 | http://10.50.0.21/api/command/... |
| forest-minipix3 | 10.50.0.22 | http://10.50.0.22/api/command/... |
| forest-minipix5 | 10.50.0.24 | http://10.50.0.24/api/command/... |
Trigger Sources
Triggered by the Forest Power HA switch (Slot 1 = ALL ON, Slot 2 = ALL OFF), or by Chataigne MasterStates. When triggered, also sends ON / OFF over WebSocket to forest-mac1 (10.50.0.30:8080).
Flow: Chataigne MasterStates OSC
Sends OSC messages to Chataigne on localhost:8000.
| OSC Address | Value | Action |
/MasterStates/AllOn | 1 | Activate AllOn state in Chataigne |
/MasterStates/AllOff | 1 | Activate AllOff state in Chataigne |
Also sends sACN directly to 10.50.0.145 (Welcome DMX6) on port 6454 — Universe 3, Channel 1, Value 250 — for DMX control independently of Chataigne.
Flow: Butterfly Projection
Sends an OFF command via WebSocket to forest-mac2 (10.50.0.31:8080) to disable the butterfly projection.
Wings State Bridge
Bidirectional state sync between Chataigne (via Mac1 WebSocket) and Home Assistant:
| Direction | Trigger | Action |
| Chataigne → HA | ProjectorOn / ProjectorOff received on Mac1 WebSocket | Calls input_boolean.butterfly_wings turn_on / turn_off |
| HA → Chataigne | input_boolean.butterfly_wings state change | Sends WingsOn / WingsOff to Mac1 WebSocket |
Flow 1: Network Performance Monitor
Pings 64 devices every 60 seconds. Results are displayed on the Node-RED dashboard.
Dashboard Pages
| Page | Path | Content |
| Control | /dashboard/Control | HA entity buttons, projector controls, master power |
| Status | /dashboard/page4 | Network Status grid — per-device ping results |
Thresholds
| Metric | Warning Threshold |
| Latency | > 100 ms |
| Packet Loss | > 5% |
| Availability | < 95% |
Dashboard uses an 8-column grid layout with individual tiles per device.
Flow 2: MadMapper OSC Listener
Listens on UDP port 9090 for OSC messages from MadMapper.
OSC Mappings
| OSC Address | Description |
/madmapper/play/state | Playback state (playing / stopped) |
/madmapper/project/name | Current project name |
/madmapper/output/enabled | Output enabled flag |
/madmapper/fps | Current frame rate |
ℹ️
MadMapper is considered offline if no OSC message is received within 8 seconds.
WebSocket Architecture Summary
| Source | Target | Port | Direction | Purpose |
| Node-RED | forest-mac1 | 8080 | Bidirectional | FPP ON/OFF relay, Wings state bridge (WingsOn/WingsOff) |
| Node-RED | forest-mac2 | 8080 | Outbound | Butterfly Projector + Butterfly Laser commands |
| Node-RED | forest-mac3 | 8080 | Outbound | Flower Projector + Flower Laser commands |
| Node-RED | forest-mac4 | 8080 | Outbound | Fire Projector commands |
| Chataigne | Node-RED | /ws/timer | Inbound | WebSocket listener for show control triggers |
| Home Assistant | Node-RED | WS API | Bidirectional | Entity state changes & service calls |
Action Items
| # | Item | Priority | Status |
| 1 | Confirm all 64 ping targets are current | Medium | Open |
| 2 | Add error handling for projector TCP timeout | High | Open |
| 3 | Document sACN universe mapping to Welcome DMX6 | Medium | Done — Universe 3, Ch 1, Val 250 |
| 4 | Verify MadMapper OSC port is not conflicting with other listeners | Low | Open |
| 5 | Add dashboard alerts for projector cooling-down states | Medium | Open |