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>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# 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 160–162 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.
|
||||
Reference in New Issue
Block a user