fajr-watch/config/station.example.yaml
Aric Camarata b62a361c9a Initial scaffold: turnkey Raspberry Pi twilight observation station
Complete project structure for an automated Fajr/Isha observation appliance:

Hardware:
- BOM for 3 build tiers ($270, $465, $1000)
- 20-unit bulk order spec (~$9,900 for fleet)
- Solar power, weatherproof enclosure, GPS timing

Software:
- Detection engine: multi-channel color analysis + temporal derivative
  tracking on horizon ROI, no fixed brightness threshold
- Capture scheduler: computes twilight windows from coordinates,
  captures every 10s during window, runs detection, uploads results
- Solar position via PyEphem for depression angle at each frame
- Upload sync: hourly cron to central server + CSV export for offline

Provisioning:
- first-boot.sh: one-shot setup script installs all deps, configures
  systemd service, sets up WiFi from station.yaml on boot partition
- Flash SD card, edit station.yaml, plug in, forget

Docs:
- Volunteer host guide: 10-minute installation, plug-and-play
- Hardware BOM with sourcing links
2026-03-23 05:58:38 -04:00

97 lines
2.8 KiB
YAML

# fajr-watch station configuration
# Copy this file to station.yaml and fill in your values.
# On the Pi SD card, place station.yaml in /boot/fajr-watch/station.yaml
station:
# Unique station identifier (lowercase, hyphens ok)
id: "my-station-01"
# GPS coordinates (decimal degrees)
# South latitudes and west longitudes are negative
lat: 41.95
lng: -80.55
# Elevation above sea level in metres
elevation_m: 175
# Horizon type at camera location
# Options: ocean, lake, flat, hills, mountain
horizon: "lake"
# Light pollution environment
# Options: dark (Bortle 1-2), rural (3-4), suburban (5-6), urban (7-9)
environment: "suburban"
# Your name (for data attribution)
host: "Your Name"
# Contact email (not published, used for station health alerts)
contact: "you@example.com"
camera:
# Camera model connected to the Pi
# Options: zwo_asi224, zwo_asi462, zwo_asi662, pi_hq, pi_cam3, pi_cam3_wide
type: "zwo_asi224"
# Lens focal length in mm (for FOV calculation)
lens_mm: 1.8
# Which horizon the camera points at
# Options: east (Fajr only), west (Isha only), allsky (both)
orientation: "allsky"
# Azimuth offset in degrees (0 = camera north is true north)
# Measured clockwise. If your camera's "up" points 30 degrees east of north,
# set this to 30.
azimuth_offset: 0
network:
# WiFi credentials (WPA2)
wifi_ssid: ""
wifi_password: ""
# Optional: additional WiFi networks (tried in order)
# wifi_networks:
# - ssid: "BackupNetwork"
# password: "password2"
# Data upload endpoint
upload_url: "https://api.fajr.watch/v1/upload"
# Upload API key (provided when you register your station)
api_key: ""
capture:
# Seconds between frames during twilight window
interval_s: 10
# How many degrees before/after the expected twilight to start/stop capturing
# Larger margin = more data but more storage. 5 degrees is ~20-30 min extra.
twilight_margin_deg: 5
# Capture RAW images (recommended for scientific quality)
# Set to false for JPEG-only (smaller files, less accurate)
raw_format: true
# Maximum exposure time in seconds
# ZWO cameras support up to 1000s. Pi cameras typically max at 30-60s.
max_exposure_s: 30
# Target mean brightness for auto-exposure (0-255 for 8-bit)
# Lower = darker frames that preserve faint gradients
target_brightness: 80
processing:
# Run detection on-device (true) or upload raw frames for server processing (false)
detect_on_device: true
# Minimum confidence score to accept a detection (0.0 - 1.0)
min_confidence: 0.5
# Keep raw frames after processing
# true = keep all frames (uses more storage, useful for debugging)
# false = keep only the 10 frames around each detection event
keep_raw_frames: false
# Maximum days of local data to retain before cleanup
retention_days: 30