Files
istrain-public/dashboard/checklist.md
T
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

42 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.