Know every handoff

Architecture & source flow.

Small programs, explicit files, and atomic replacement make the system observable and recoverable.

Current MyAWOS architecture diagram

Weather product pipeline

WeatherLink Live → weather.py → weather.txt ───────────────┐
                                                           ├→ voice converter → generate.sh → current.wav
AWC GFA → get_clouds_from_awc.py → clouds.json ───────────┤
                                                           ├→ text converter → current_sms.txt → PNG
HackRF / Airspy → click_listen.py → USB relay + radio ←────┘

A single snapshot feeds the voice, text, and graphic. Temporary files move into place only after they are complete. A failed station refresh does not touch the last observation, so file age remains honest.

What happens after five clicks

Calibrate

The receiver measures a local noise floor and calculates on/off thresholds.

Qualify

Carrier transitions must satisfy the minimum quiet and click-gap timing.

Count

Five qualified clicks inside the configured window become one accepted request.

Respond

When enabled, receive pauses, PTT closes, the report plays, PTT opens, and receive restarts.

Cool down

A fixed cooldown prevents an immediate repeated transmission.

Source map

FileRole
config.yamlSafe public station, SDR, radio, capture, relay, and safety defaults.
weather.pyDirect WeatherLink fetch, timestamp validation, stale rejection, atomic storage.
get_clouds_from_awc.pyAWC request lock, 30-minute limit, and last-known-good cloud cache.
convert_weather_*.plTransforms one weather/cloud snapshot into spoken and readable products.
awos_to_image.pyRenders the current readable report as a PNG.
weather_loop.shLocks and orchestrates a complete generation cycle.
click_listen.pySDR backends, click state machine, relay PTT, and audio playback.
radio_audio.pyOptional live PCM and captured WAV/JSON metadata.
daily_weather_email.pySunrise scheduling, health, weather/camera, requests, and NBM guidance.
tests/Regression coverage for freshness, rate limiting, capture, scheduling, and transmit control.

Earlier generations

The root, v2, and v4 directories preserve Arduino and analog-detector approaches that helped the project evolve. They are valuable history, but new builds should start in v5-sdr-usb-relay.