diff --git a/docs/RELAY_CONFIG_EXAMPLES.md b/docs/RELAY_CONFIG_EXAMPLES.md new file mode 100644 index 0000000..a6ba9a7 --- /dev/null +++ b/docs/RELAY_CONFIG_EXAMPLES.md @@ -0,0 +1,345 @@ +# ESP32 Relay Configuration Examples + +Example configurations for integrating ESP32 relay controller with Moonlight Drive-In. + +## Basic Configuration + +Add this to your `config.py`: + +```python +# ESP32 Bluetooth Relay Controller Configuration +RELAY_CONFIG = { + # Enable/disable relay automation + 'enabled': True, + + # Automatic theatre lighting control + 'auto_theatre_lights': True, # Auto dim lights during movies + 'light_dim_delay': 5, # Seconds before dimming (default 5) + + # Automatic speaker power control + 'auto_speaker_power': True, # Auto power speakers during playback + + # Serial port configuration + # None = auto-detect (recommended) + # Or specify: 'COM4' (Windows) or '/dev/rfcomm0' (Linux) + 'relay_port': None, + + # Relay function mapping (relay numbers 1-8) + # Customize these to match your wiring + 'relay_mapping': { + 'HOUSE_LIGHTS': 1, + 'SCREEN_LIGHTS': 2, + 'MARQUEE_LIGHTS': 3, + 'SPEAKER_POWER': 4, + 'PROJECTOR_POWER': 5, + 'EFFECT_LIGHTS': 6, + 'CONCESSION_LIGHTS': 7, + 'PARKING_LIGHTS': 8, + } +} +``` + +## Minimal Configuration (Manual Control Only) + +For manual relay control via web interface only: + +```python +RELAY_CONFIG = { + 'enabled': True, + 'auto_theatre_lights': False, # Disable auto light control + 'auto_speaker_power': False, # Disable auto speaker control + 'relay_port': None, +} +``` + +## Custom Relay Mapping + +If your relays are wired differently: + +```python +RELAY_CONFIG = { + 'enabled': True, + 'auto_theatre_lights': True, + 'auto_speaker_power': True, + 'light_dim_delay': 3, # Faster dimming + + # Custom wiring + 'relay_mapping': { + 'HOUSE_LIGHTS': 2, # Changed from relay 1 to 2 + 'SCREEN_LIGHTS': 1, # Changed from relay 2 to 1 + 'MARQUEE_LIGHTS': 3, + 'SPEAKER_POWER': 4, + 'PROJECTOR_POWER': 5, + 'EFFECT_LIGHTS': 6, + 'CONCESSION_LIGHTS': 7, + 'PARKING_LIGHTS': 8, + } +} +``` + +## Linux Configuration + +For Linux systems with Bluetooth serial: + +```python +RELAY_CONFIG = { + 'enabled': True, + 'auto_theatre_lights': True, + 'auto_speaker_power': True, + + # Specify the RFCOMM device + 'relay_port': '/dev/rfcomm0', # Or /dev/ttyUSB0 + + 'relay_mapping': { + # ... same as above + } +} +``` + +## Advanced Timing Configuration + +Customize automation timing: + +```python +RELAY_CONFIG = { + 'enabled': True, + 'auto_theatre_lights': True, + 'auto_speaker_power': True, + + # Longer delay before dimming + 'light_dim_delay': 10, # Wait 10 seconds before dimming + + # For testing/debugging + 'relay_port': 'COM4', # Explicitly set port + + 'relay_mapping': { + # ... as needed + } +} +``` + +## Fewer Relays Configuration + +If using only 4 relays instead of 8: + +```python +RELAY_CONFIG = { + 'enabled': True, + 'auto_theatre_lights': True, + 'auto_speaker_power': True, + + # Map only the relays you're actually using + 'relay_mapping': { + 'HOUSE_LIGHTS': 1, + 'SCREEN_LIGHTS': 2, + 'SPEAKER_POWER': 3, + 'EFFECT_LIGHTS': 4, + # Relays 5-8 not configured (unused) + } +} +``` + +## Complete Example with All Settings + +Full configuration with all options: + +```python +# ============================================ +# ESP32 Bluetooth Relay Controller +# ============================================ + +RELAY_CONFIG = { + # Master enable/disable + 'enabled': True, + + # Automation features + 'auto_theatre_lights': True, # Auto control lights + 'auto_speaker_power': True, # Auto control speakers + 'light_dim_delay': 5, # Delay before dimming (seconds) + + # Connection settings + 'relay_port': None, # Auto-detect (or specify COM4, etc.) + + # Relay assignments + # Adjust these numbers to match your physical wiring + 'relay_mapping': { + 'HOUSE_LIGHTS': 1, # Main overhead lights + 'SCREEN_LIGHTS': 2, # Screen border/backlight + 'MARQUEE_LIGHTS': 3, # Entrance sign lights + 'SPEAKER_POWER': 4, # Audio amplifier power + 'PROJECTOR_POWER': 5, # Video projector + 'EFFECT_LIGHTS': 6, # Special effects/RGB + 'CONCESSION_LIGHTS': 7, # Snack bar area + 'PARKING_LIGHTS': 8, # Outdoor parking area + }, + + # Advanced options (optional) + 'reconnect_attempts': 3, # Auto-reconnect tries + 'command_timeout': 2.0, # Command timeout (seconds) +} + +# ============================================ +# Usage Examples +# ============================================ + +# Enable automation +# - Lights dim 5 seconds after movie starts +# - Speakers power on during playback +# - Lights come back up when movie ends + +# Disable automation (manual control only) +# Set auto_theatre_lights and auto_speaker_power to False + +# Custom timing +# Increase light_dim_delay for longer warning before dimming +# (Gives audience more time to get seated) + +# Manual port specification +# Use 'relay_port' if auto-detection doesn't work +# Windows: 'COM3', 'COM4', etc. +# Linux: '/dev/rfcomm0', '/dev/ttyUSB0', etc. +``` + +## Integration Code Examples + +### Access Relay Controller in Your Code + +```python +# In mpv_seamless_player.py or other module +from theatre_automation import TheatreAutomation, RelayFunction +import config + +# Initialize +self.theatre = None +if config.RELAY_CONFIG.get('enabled', False): + self.theatre = TheatreAutomation(config.RELAY_CONFIG) + self.theatre.connect() + +# Before playing movie +if self.theatre: + self.theatre.movie_starting(is_trailer=False) + +# After movie ends +if self.theatre: + self.theatre.movie_ended(is_trailer=False) + +# Manual control +if self.theatre: + self.theatre.set_relay(RelayFunction.HOUSE_LIGHTS, False) + +# Clean shutdown +if self.theatre: + self.theatre.closing_sequence() + self.theatre.disconnect() +``` + +### Web API Integration + +```python +# In web_interface.py + +from theatre_automation import TheatreAutomation, RelayFunction +import config + +# Initialize at app startup +theatre = None +if config.RELAY_CONFIG.get('enabled'): + theatre = TheatreAutomation(config.RELAY_CONFIG) + theatre.connect() + +# Add routes +@app.route('/api/relay//') +def control_relay(function_name, state): + if theatre and theatre.connected: + func = RelayFunction[function_name.upper()] + state_bool = (state.lower() == 'on') + theatre.set_relay(func, state_bool) + return jsonify({'success': True}) + return jsonify({'error': 'Not connected'}), 503 +``` + +## Troubleshooting Configurations + +### Connection Issues + +```python +# Try explicit port specification +RELAY_CONFIG = { + 'enabled': True, + 'relay_port': 'COM4', # Change to your actual port + # ... rest of config +} +``` + +### Debugging + +```python +# Enable detailed logging +import logging +logging.basicConfig(level=logging.DEBUG) + +# Test connection separately +from esp32_relay_controller import ESP32RelayController +relay = ESP32RelayController() +relay.connect('COM4') # Your port +``` + +### Timing Issues + +```python +# Increase delays if relays switch too quickly +RELAY_CONFIG = { + 'enabled': True, + 'light_dim_delay': 10, # Longer delay + 'command_timeout': 5.0, # Longer timeout + # ... rest of config +} +``` + +## Testing Your Configuration + +1. **Basic Connection Test**: + ```bash + python esp32_relay_controller.py + ``` + +2. **Automation Test**: + ```bash + python theatre_automation.py + ``` + +3. **Full Integration Test**: + ```bash + # With relay automation enabled in config + python start_web_player.bat + ``` + +## Quick Reference + +| Setting | Default | Description | +|---------|---------|-------------| +| `enabled` | False | Master enable switch | +| `auto_theatre_lights` | True | Auto dim lights | +| `auto_speaker_power` | True | Auto power speakers | +| `light_dim_delay` | 5 | Delay before dimming (seconds) | +| `relay_port` | None | Serial port (auto-detect if None) | +| `relay_mapping` | See above | Relay number assignments | + +## Safety Notes + +- Test with non-critical loads first +- Verify wiring before enabling automation +- Keep manual overrides accessible +- Use appropriate fuses for all loads +- Follow local electrical codes + +--- + +**See Also:** +- `docs/ESP32_RELAY_INTEGRATION.md` - Complete integration guide +- `esp32_relay_controller.py` - Low-level controller code +- `theatre_automation.py` - High-level automation logic +- ESP32 firmware repository - Hardware setup + +**Version:** 1.0 +**Last Updated:** December 2025