We replaced the beach deck camera with a Reolink Track Mix, a pan-tilt camera with 2 lenses (wide-angle and telephoto).
Our original beach deck camera became invisible on the new home network.The wide-angle PanoramaScootercam gives us 5 views, so we used it to fill the gap. To fully deploy the new camera and temporarily disable the wide view, we’re making changes to the config,yaml file on the Raspberry Pi. This is that, outlined by Claude AI:
TrackMix Migration Checklist
Transitioning from Duo 3 to TrackMix as Primary Camera
Pre-Deployment: TrackMix Camera Setup
Before deploying the new config.yaml, configure these settings in the TrackMix web interface:
1. Verify Network Settings
- [ ] IP Address: 192.168.40.236 (confirmed)
- [ ] Port: 80
- [ ] Username: admin
- [ ] Password: SecretPassword
- [ ] Ping test from Pi:
ping 192.168.40.236
2. Configure Preset Positions
Access the TrackMix web interface and set up 5 presets (0-4):
Recommended Setup:
- [ ] Preset 0: Home/Default position (north or northeast – your primary view)
- [ ] Preset 1: South view (night sky, dawn colors)
- [ ] Preset 2: Southwest view (morning shots)
- [ ] Preset 3: West view (CRITICAL – this is your sunset position for winter)
- [ ] Preset 4: Northwest view (sunset position for summer)
To set presets:
- Log into TrackMix web interface
- Go to Settings → PTZ Settings → Preset Points
- Manually position camera to desired view
- Click “Set” for preset number
- Give it a descriptive name
- Test each preset by clicking “Call”
3. Verify Stream Settings
- [ ] Wide lens (Channel 0) – Main stream set to 3840×2160 @ 25fps
- [ ] Wide lens (Channel 0) – Sub stream set to 640×480 (for previews)
- [ ] Telephoto lens (Channel 1) – Main stream set to 3840×2160 @ 25fps
- [ ] Both streams using H.264 codec
4. Check Camera Time & Timezone
- [ ] Camera timezone set to America/Detroit
- [ ] Time synchronized (NTP enabled)
- [ ] Date/time matches Pi time
Deployment Steps
Step 1: Backup Current Configuration
cd /home/pi/camctl
cp config.yaml config.yaml.backup.$(date +%Y%m%d_%H%M%S)
Step 2: Stop Services
# Stop the controller service
sudo systemctl stop scootercam-controller.service
# Verify it's stopped
sudo systemctl status scootercam-controller.service
Step 3: Deploy New Configuration
# Copy new config.yaml to camctl directory
# (Upload via your preferred method - FTP, SCP, or manual edit)
# Verify the file
cat /home/pi/camctl/config.yaml | head -20
Step 4: Test Configuration Syntax
cd /home/pi/camctl
# Test YAML syntax (if you have PyYAML installed)
python3 -c "import yaml; yaml.safe_load(open('config.yaml'))"
# Should return nothing if successful
Step 5: Test Camera Connectivity
# Test if Python can reach the TrackMix
python3 << EOF
from lib.camera_controller import CameraController
import yaml
config = yaml.safe_load(open('config.yaml'))
cam = CameraController(config['cameras']['ptz'])
print("Camera reachable:", cam.test_connection())
EOF
Step 6: Start Services
# Start the controller service
sudo systemctl start scootercam-controller.service
# Watch the logs for errors
tail -f /home/pi/camctl/scootercam.log
Post-Deployment Testing
Test 1: Manual Snapshot Capture (Critical!)
cd /home/pi/camctl
# Test PTZ snapshot
python3 -c "
from lib.camera_controller import CameraController
import yaml
config = yaml.safe_load(open('config.yaml'))
ptz = CameraController(config['cameras']['ptz'])
# Move to preset 0 and capture
ptz.move_to_preset(0)
import time; time.sleep(3)
img = ptz.capture_snapshot()
if img:
print('✓ PTZ snapshot successful')
else:
print('✗ PTZ snapshot FAILED')
"
Test 2: Verify Frame Capture for Timelapse
# Check that frames are being captured
ls -lth /home/pi/camctl/data/timelapse_frames/ | head -10
# Should see files named like: ptz_20260202_143000.jpg
# Watch for new frames (should appear every 10 seconds)
watch -n 5 'ls -lth /home/pi/camctl/data/timelapse_frames/ | head -5'
Test 3: Check Preset Movement
# Test that presets work
python3 << EOF
from lib.camera_controller import CameraController
import yaml
import time
config = yaml.safe_load(open('config.yaml'))
ptz = CameraController(config['cameras']['ptz'])
print("Testing presets...")
for preset in [0, 1, 2, 3, 4, 0]:
print(f"Moving to preset {preset}")
ptz.move_to_preset(preset)
time.sleep(5)
print("✓ Preset test complete")
EOF
Test 4: Verify FTP Uploads
# Check upload logs
grep "Uploaded" /home/pi/camctl/scootercam.log | tail -10
# Should see entries like:
# Uploaded ptz_snapshot.jpg to /cameras/
# Uploaded ptz_snapshot.webp to /cameras/
Test 5: Check Website Display
- [ ] Visit ScooterCam.net
- [ ] Verify snapshot images are from TrackMix (not Duo 3)
- [ ] Check image timestamp matches current time
- [ ] Verify multiple sizes loaded (1440, 800, 400)
Test 6: Monitor Rolling Timelapse (20 min wait)
# Wait for first compilation (occurs every 20 minutes)
# Check for compiled video
ls -lth /home/pi/camctl/static/timelapse/ | grep rolling
# Should see: ptz_rolling_4hr_20260202_1440.mp4
Monitoring & Verification
Watch System Status
# Monitor logs in real-time
tail -f /home/pi/camctl/scootercam.log
# Filter for errors
tail -f /home/pi/camctl/scootercam.log | grep -i error
# Filter for PTZ activity
tail -f /home/pi/camctl/scootercam.log | grep -i ptz
Check Disk Usage
df -h /home/pi/camctl
# Should stay below 80%
Verify Duo 3 is Disabled
# Check that REO is not uploading
grep "reo" /home/pi/camctl/scootercam.log | tail -20
# Should show "disabled" or no recent activity
Sunset Timelapse Testing (Wait for Sunset!)
Automatic Test:
- [ ] System should automatically start sunset capture ~20 min before sunset
- [ ] Camera should move to preset 3 (winter) or 4 (summer)
- [ ] Frames captured every 3 seconds
- [ ] Continues for ~20 minutes after sunset
- [ ] Camera returns to preset 0 after completion
Check Results:
# After sunset, check for sunset frames
ls -lth /home/pi/camctl/data/timelapse_frames/ | grep sunset
# Check for compiled sunset video
ls -lth /home/pi/camctl/static/timelapse/ | grep sunset
# Should see: ptz_sunset_20260202.mp4
Troubleshooting
Problem: Camera not responding
# Ping test
ping 192.168.40.236
# Check camera web interface (from browser)
http://192.168.40.236
# Verify credentials in config.yaml
grep -A 5 "ptz:" /home/pi/camctl/config.yaml
Problem: Presets not working
- Check preset configuration in camera web interface
- Verify preset numbers 0-4 are defined
- Test manually in camera web UI first
Problem: No frames being captured
# Check frame directory exists
ls -ld /home/pi/camctl/data/timelapse_frames/
# Check permissions
ls -l /home/pi/camctl/data/
# Check logs for errors
grep -i "frame" /home/pi/camctl/scootercam.log | tail -20
Problem: Wrong channel/stream
- Verify channel: 0 in config (wide lens)
- Check stream: “main” in config (full quality)
- Test with channel: 1 if you want telephoto view
Problem: FTP uploads failing
# Test FTP manually
ftp 23.229.41.82
# user: pi_in@scootercam.net
# pass: BeachGlassPi_In
# Check upload logs
grep -i "ftp\|upload" /home/pi/camctl/scootercam.log | tail -30
Rollback Procedure (If Needed)
If something goes wrong:
# Stop service
sudo systemctl stop scootercam-controller.service
# Restore backup
cd /home/pi/camctl
cp config.yaml.backup.YYYYMMDD_HHMMSS config.yaml
# Restart service
sudo systemctl start scootercam-controller.service
# Verify restored
grep "name:" config.yaml
Success Criteria
After 24 hours of operation, verify:
- [X] PTZ snapshots uploading every 10 minutes
- [X] Rolling 4-hour timelapse compiling every 20 minutes
- [X] Sunset timelapse captured and compiled
- [X] No errors in logs
- [X] Disk usage stable (not growing uncontrollably)
- [X] REO/Duo 3 not uploading
- [X] Website showing PTZ images
- [X] Health monitoring email received at 8 AM
Re-enabling Duo 3 (Future)
When ready to re-enable the Duo 3:
- Edit config.yaml:
cameras: reo: enabled: true capture_coordination: cameras: reo: enabled: true - Restart service
- Verify both cameras operating without conflicts
- Monitor timing – PTZ at :00, :10, :20… / REO at :05, :15, :25…
Notes
- Keep config.yaml.backup files for at least 7 days
- Document any preset position changes
- If you change presets in camera UI, update config.yaml comments
- Monitor first sunset timelapse carefully – this is the showpiece!
Questions to Address
- Do you want wide or telephoto for sunset?
- Wide (channel: 0) = full horizon context
- Telephoto (channel: 1) = zoomed sunset detail
- Should rolling timelapse use multiple views?
- Current config rotates through presets during day
- Alternative: stick to one view for consistency
- Live video stream selection?
- Currently set to wide (channel 0, main stream)
- Could use telephoto for detail shots
Let me know if any issues arise during deployment!