Forwards E1.31 lighting data from FPP to the DDP Mobile cloud platform, enabling audience participation in your Christmas light show.
This plugin listens for E1.31 (sACN) packets on your FPP controller and forwards them to a cloud server where viewers can sync their mobile phones to your light show in real-time.
- 🎄 Real-time Sync: Forward E1.31 data to cloud instantly
- 📱 Mobile Friendly: Viewers use any web browser
- 🎨 Multi-Display: Support for single color and multi-pixel displays
- 🔧 Easy Setup: Configure through FPP web interface
- 📊 Live Stats: Monitor packet flow and connection status
- 🔄 Auto-Reconnect: Handles network issues gracefully
- Open FPP web interface
- Go to Content Setup → Plugin Manager
- Search for "DDP Mobile Cloud Connector"
- Click Install
cd /opt/fpp/plugins
git clone https://github.com/yourusername/fpp-plugin-DDP-Mobile.git
cd fpp-plugin-DDP-Mobile
npm install
chmod +x scripts/*.shFirst, deploy the DDP Mobile cloud platform (see main repo documentation):
# Clone main repo
git clone https://github.com/yourusername/ddp-mobile.git
cd ddp-mobile
# Configure
cp .env.example .env
nano .env
# Deploy
docker-compose up -dVisit your admin page (e.g., http://your-server:3000/admin.html):
- Enter show name and email
- Click "Create Show"
- Copy the API Key (not the viewer token!)
In FPP web interface:
- Go to Status/Control → DDP Mobile - Settings
- Paste your API key
- Enter cloud server URL (e.g.,
http://your-server.com:3002) - Set universe number (default: 5)
- Check "Enable DDP Mobile Cloud Connector"
- Click Save Settings
-
Go to Setup → E1.31 Setup
-
Add controller:
- IP: Your FPP IP address
- Port: 5568
- Universe: 5 (or match plugin setting)
- Channels: 510
-
Map elements:
- Single Color: Channels 1-3 (RGB)
- 10-Pixel String: Channels 4-33 (10 pixels × 3 channels)
Give viewers the 6-character token from Step 2:
- They visit:
http://your-server:3000 - Select "Cloud Mode"
- Enter token
- Choose display type
- Enjoy synchronized lights!
- Enable Connector: Turn service on/off
- API Key: Your show's unique API key
- Cloud Server URL: WebSocket server address
- Universe: E1.31 universe to monitor
Monitor real-time stats:
- Service status (running/stopped)
- Packets received/sent
- Error count
- Cloud connection status
- Last update timestamp
The plugin reads specific DMX channels from the selected universe:
| Display Type | Channels | Description |
|---|---|---|
| Single Color | 1-3 | RGB values for full-screen color |
| 10-Pixel String | 4-33 | 10 pixels × 3 channels (RGB) |
Example xLights setup:
Universe 5:
Channel 1-3: Single pixel (RGB) - Full screen color
Channel 4-6: Pixel 1 (RGB)
Channel 7-9: Pixel 2 (RGB)
Channel 10-12: Pixel 3 (RGB)
...
Channel 31-33: Pixel 10 (RGB)
Check API Key:
# View settings
cat /opt/fpp/plugins/fpp-plugin-DDP-Mobile/settings/config.json
# Check if valid
curl http://your-server:3001/api/validate-key/YOUR-API-KEYCheck Logs:
# FPP system logs
tail -f /var/log/messages | grep -i ddp
# Plugin process
ps aux | grep ddp-cloud-connector-
Verify E1.31 output:
- FPP: Status page → Channel Outputs → Verify universe is active
- xLights: Tools → E1.31 Sync → Check packets sent
-
Check universe number:
# Listen for E1.31 packets tcpdump -i any -n udp port 5568 -
Firewall:
# Allow UDP 5568 sudo iptables -A INPUT -p udp --dport 5568 -j ACCEPT
-
Test cloud server:
curl http://your-server:3002/health
-
Check connectivity:
ping your-server.com telnet your-server.com 3002
-
Verify API server:
curl http://your-server:3001/health
-
Validate token:
curl http://your-server:3001/api/validate/TOKEN123
-
Check cloud server logs:
docker-compose logs cloud-server
-
Test WebSocket:
- Open browser console
- Try connecting to
http://your-server:3002 - Check for CORS errors
┌─────────────┐ ┌──────────────────┐ ┌─────────────┐
│ xLights/FPP │ ──E1.31→│ FPP Plugin │ ──WS──→ │Cloud Server │
│ │ │ (This Plugin) │ │ (Rooms) │
└─────────────┘ └──────────────────┘ └─────────────┘
│
│ WS
▼
┌─────────────┐
│ Viewers │
│ (Mobile Web)│
└─────────────┘
fpp-plugin-DDP-Mobile/
├── pluginInfo.json # Plugin metadata
├── menu.inc # FPP menu integration
├── settings.php # Configuration page
├── status.php # Status/monitoring page
├── help.php # Help documentation
├── about.php # About/credits page
├── package.json # Node.js dependencies
├── ddp-cloud-connector.js # Main service
├── scripts/
│ ├── fpp_install.sh # Installation script
│ ├── fpp_uninstall.sh # Uninstallation script
│ ├── preStart.sh # Start service with FPP
│ └── preStop.sh # Stop service with FPP
└── settings/
├── config.json # User configuration
└── stats.json # Runtime statistics
# Navigate to plugin directory
cd /opt/fpp/plugins/fpp-plugin-DDP-Mobile
# Install dependencies
npm install
# Configure settings
nano settings/config.json
# Run manually
node ddp-cloud-connector.jsEnable verbose logging:
// In ddp-cloud-connector.js, add:
const DEBUG = true;
if (DEBUG) console.log('Debug message here');settings.php - Configuration interface
- Saves to:
settings/config.json - Form fields: apiKey, cloudServerUrl, universe, enabled
status.php - Monitoring interface
- Reads from:
settings/stats.json - Updated every 30 seconds by connector
ddp-cloud-connector.js - Main service
- Listens: UDP 5568 (E1.31)
- Connects: WebSocket to cloud server
- Emits:
lighting-dataevents with RGB values
Used by plugin:
GET /api/validate-key/:apiKey- Validate API keyWS /- WebSocket connectionemit('lighting-data', data)- Send lighting update
Network:
- ~40 E1.31 packets/sec (typical)
- ~1 KB/sec bandwidth usage
- <10ms forwarding latency
Resources:
- CPU: <1% on Raspberry Pi 4
- Memory: ~50MB Node.js process
- Disk: <1MB for plugin files
Best Practices:
- Keep API key secret (never share publicly)
- Use HTTPS in production (reverse proxy)
- Restrict firewall to necessary ports
- Regularly update plugin and dependencies
- Monitor logs for suspicious activity
Check for updates:
cd /opt/fpp/plugins/fpp-plugin-DDP-Mobile
git fetch
git statusUpdate plugin:
git pull
npm install
sudo systemctl restart fppd- Issues: https://github.com/yourusername/fpp-plugin-DDP-Mobile/issues
- Discussions: https://github.com/yourusername/fpp-plugin-DDP-Mobile/discussions
- Main Project: https://github.com/yourusername/ddp-mobile
Pull requests welcome! Please:
- Fork the repository
- Create feature branch
- Test on FPP device
- Submit PR with description
MIT License - See LICENSE file
Developed by: DDP Mobile Team
Built with:
- Node.js & Socket.io
- FPP Plugin Framework
- E1.31 (sACN) Protocol
Thanks to:
- Falcon Christmas Community
- FPP Development Team
- xLights Contributors