Files
istrain 559caead36 istrain-public: from-scratch build of a passive RF train detector
Public community release. The complete working system — DSP + decoders (scripts/),
web dashboard + API (dashboard/), container stack (docker/), config templates (config/) —
plus APOCALYPSE-EDITION.md, the full build guide for a human or a coding agent. GPLv3
(PyEOT dependency). Scrubbed of all secrets, internal IPs, hostnames, and location detail.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 23:19:16 -04:00

2.3 KiB
Raw Permalink Blame History

iSTRAIN — build stages

Primary goal: detect a train blocking your crossing, from passive RF alone. Secondary: capture and learn — radios, trains, hardware, software. Not a toy. This file renders in the dashboard's checklist panel; edit it to track your own build. Full instructions: APOCALYPSE-EDITION.md.

The plan · two radios, two bands

  • Radio A (a Blog V4 is ideal) → rail VHF voice 160162 MHz — RTLSDR-Airband demodulates your pinned road/detector channels at once (your subdivision's AAR channel is the mission).
  • Radio B (any RTL-SDR) → EOT-system UHF hop — 452.9375 (head/BOT) ⇄ 457.9375 (EOT/tail), retune-in-place; ±12.5 kHz DPU neighbors watched inside each dwell.

Stage 0 · Host & dongles

  • Linux host with Docker; base tools installed (rtl-sdr, ffmpeg, python3-numpy)
  • DVB driver blacklisted on the host (config/blacklist-rtl-sdr.conf); lsmod | grep dvb empty
  • Dongles serialized (rtl_eeprom -s …) so services pick them by name
  • NOAA weather RX proves the antenna→dongle→software chain end to end

Stage 1 · Your crossing

  • Railroad + subdivision identified; road channel + neighbors found (cross-checked on 2 sources)
  • Nearby defect-detector mileposts noted (your early-warning tripwires)
  • config/istrain.conf edited with YOUR voice channels

Stage 2 · Bring-up

  • DSP selftests pass (iq_hop.py --selftest, iq_channelize.py --selftest)
  • Stack builds and runs (docker compose --profile radio --profile radio1001 up -d)
  • level.json refreshing; clips landing; dashboard live at :3456
  • First EOT decode on a real train (unit ID + brake psi + motion) 🎉

Stage 3 · Ears & polish

  • Whisper transcription wired (comms band-pass first, VAD on — see APOCALYPSE §7)
  • Squelch tuned to your noise floor (not a textbook number — APOCALYPSE §8)
  • Standing carriers (fixed wayside boosters) identified and carded, not chased

Stage 4 · If you expose it publicly

  • Read APOCALYPSE §10 (security): presentation-node read-only mode, no PUSH_KEY, proxy auth
  • Antenna moved high and away from your computers — the #1 range lever

The habit that makes it work

  • Keep one append-only, numbered observations log. Record findings AND retractions.