🔴 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 | 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 63 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 ID | Type | Purpose |
button.nodered_projector_on | Button | Trigger projector power ON |
button.nodered_projector_off | Button | Trigger projector power OFF |
button.nodered_fpp_all_on | Button | Trigger FPP ALL ON |
button.nodered_fpp_all_off | Button | Trigger FPP ALL OFF |
switch.nodered_dmx_power | Switch | Toggle DMX power relay |
switch.nodered_butterfly_wings | Switch | Toggle butterfly projection |
switch.nodered_lasers | Switch | Toggle laser enable |
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
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 button.nodered_fpp_all_on and button.nodered_fpp_all_off from Home Assistant, or by Chataigne MasterStates.
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) 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.
Flow 1: Network Performance Monitor
Pings 63 devices every 60 seconds. Results are displayed on the Node-RED dashboard at /Control.
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) |
/project/name | Current project name |
/output/enabled | Output enabled flag |
/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 | Outbound | Local control commands |
| Node-RED | forest-mac2 | 8080 | Outbound | Butterfly projection control |
| Node-RED | forest-mac3 | 8080 | Outbound | Show control relay |
| Node-RED | forest-mac4 | 8080 | Outbound | Show control relay |
| Chataigne | Node-RED | Various | Inbound | Trigger events from show control |
| Home Assistant | Node-RED | WS API | Bidirectional | Entity state changes & service calls |
Action Items
| # | Item | Priority | Status |
| 1 | Confirm all 63 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 | Open |
| 4 | Verify MadMapper OSC port is not conflicting with other listeners | Low | Open |
| 5 | Add dashboard alerts for projector cooling-down states | Medium | Open |