Software-defined emergency alerting, engineered like a broadcast appliance.
EAS Station™ is an open-source, Raspberry Pi-class replacement for commercial EAS encoder/decoders — integrating CAP ingest, SAME audio synthesis, SDR verification, and multi-channel distribution into one disciplined stack.
Compliance & Safety
Read this before you plug anything in. All five apply at once.
Development-Only
Experimental and not FCC-certified — use only in controlled lab and training environments for now. A certification path may be opening: the FCC's PS Docket No. 25-224 proposes to permit software-defined EAS, and EAS Station™ has filed comments in support. That filing is a first step, not approval — treat the system as experimental until any such rules take effect.
No Live RF Leakage
The station emits valid SAME headers and attention tones. Never couple experimental output to on-air RF, STL, or streaming chains without explicit authorization — it will trigger downstream facilities.
Real Enforcement, Real Money
iHeartMedia: $1M consent decree (2015, Bobby Bones). Olympus Has Fallen trailer: $1.9M settlement. Misuse is traceable and can include equipment seizure and license revocation.
Ethics & Accountability
This project exists to strengthen public warning readiness, not to be weaponized. The maintainer will cooperate with authorities against misuse. Treat every generated signal with the gravity of a live alert.
Real Semantics, Not Entertainment
EAS Station™ models the real operational behavior of certified EAS hardware — it is not a content-creation toolkit. Do not use it to author fictional or fabricated EAS workflows, and do not use its output in films, trailers, TV, podcasts, streaming, video games, prank/creepypasta content, or any other entertainment or media production. The Olympus Has Fallen trailer case (above) is the canonical proof that "it's just fiction" is not a defense.
Mission & Scope
CAP in, verified broadcast out — with the paper trail to prove it.
Primary Goal
Give emergency communications teams an automated CAP-to-EAS workflow — from ingestion through broadcast verification — with complete compliance documentation at every stage.
Drop-In Replacement Roadmap
Deliver the nine roadmap pillars — baseband capture, deterministic playout, hardware control, security, resilience, turnkey deployment, compliance analytics, unified documentation, and certification readiness — so the platform mirrors commercial decoders on commodity hardware.
Key Features
- CAP Feed Aggregation
- SAME Audio Generation
- PostGIS Spatial Intelligence
- SDR Verification
- Automatic RWT Scheduling
- LED Sign Integration
- Custom Display Screens & VFD Graphics
- MDC1200 Selective Calling
- Received-Alert Purge & Storage Reclaim
- Security Center — unified Traffic Analytics, malicious-login monitoring, application-wide IP bans (allowlist/blocklist, with country/city geolocation) & fail2ban host-firewall enforcement in one tabbed page
- Firewall — one page to open, scope (by subnet) and close every host-firewall port the station manages (baseline, LAN NTP, Icecast), with a one-click fix for a drifted baseline; the platform's implementation of FCC 26-38's network-segmentation requirement (47 CFR § 11.35(d)(3))
- Search Settings — find any configuration field by its name or its currently-stored value from the Settings hub's own search box, without ever exposing an encrypted credential in a result
- Animated Video Alert Export — a social-ready MP4 share card that plays the radar loop from before a weather alert was issued and reveals the warning polygon only at the alert's real issuance time, never earlier
- Map Tiles — optional CARTO Dark Matter basemap for the alert share card, a cleaner dark map than the default OpenStreetMap tiles; falls back automatically with no key configured
- API Dashboard — live request volume, latency and error rates for every /api/* route, broken out per route rather than lumped into a single count
- Encrypted Credential Storage — every stored API key, streaming/SMTP password, and MFA secret is encrypted at rest, with peppered (not just salted) admin password hashing
- Stratum 1 GPS Time Source
- Live Dashboard Status Strip
- Uptime & Reliability Diagnostics (watchdog, heartbeat, backup verification, clock sync, feed-loss alarm)
- Relay Interlock Groups (mutual exclusion between GPIO relays)
- GPIO Input Pins (physical buttons that trigger actions like Run RWT Now)
Software Stack
Boring, battle-tested pieces wired together deliberately.
Application Framework
Data & Spatial Layer
Servers & Deployment
Streaming, SDR & Audio
Scientific & Signal Processing
Authentication & Notifications
Timekeeping (Stratum 1)
Hardware Platform
Frontend Libraries (vendored locally)
Separated Service Architecture
Dedicated services with clear ownership — fault isolation by design.
app
Flask web UI, REST API, dashboards. No hardware access. Reads metrics from Redis.
sdr-service
SDR capture, FM demodulation, SAME decoding, Icecast streaming. USB access.
hardware: network
nmcli proxy, DNS, hostname, link diagnostics. Port 5101.
hardware: zigbee
zigpy-znp coordinator, join window, paired devices. USB serial. Port 5102.
hardware: gps
GPSManager, NMEA + PPS, trend archive. UART. Port 5103.
hardware: displays
OLED, LED sign, VFD, screen rotation manager. I2C / SPI / serial. Port 5104.
hardware: gpio
GPIO controller, tower light, NeoPixel, status indicators, relay interlock groups for mutual exclusion, and input-pin triggers (e.g. a physical Run RWT Now button). GPIO. Port 5105.
noaa-poller / ipaws-poller
CAP feed polling, XML parsing, deduplication. Writes to PostgreSQL.
Redis
Real-time metrics, waveforms, command pub/sub. 5 s TTL on live data.
PostgreSQL + PostGIS
Persistent storage for alerts, boundaries, configs, and compliance logs.
eas-station-hardware.target.The Alert Pipeline
Four stages, one flow — CAP to verified broadcast.
1 · Ingestion
CAP feed polling, message parsing, and validation.
2 · Processing
SAME encoding, audio generation, content composition.
3 · Distribution
Multi-channel output, hardware control, scheduling. Lower-priority alerts can be held for a configurable hold-off timer with operator approve/cancel before airing — Immediate/Extreme alerts always bypass it.
4 · Verification
SDR monitoring, compliance analytics, audit trails.
MDC1200 Selective Calling
EAS breaks squelch only where it should — and identifies itself on every radio it reaches.
EAS Station™ is the first open-source EAS encoder to natively support MDC1200 selective calling — Motorola's 1200-baud FFSK signalling protocol for Land Mobile Radio (LMR) systems. When EAS alerts are forwarded into a two-way radio dispatch system, MDC1200 ensures they are correctly identified on subscriber displays, selectively routed to authorised radios, and cleanly terminated — exactly as a Motorola infrastructure device would behave.
Pre-Alert PTT-ID
An MDC1200 PTT-ID packet transmits before the SAME header burst. Every subscriber radio on the channel displays EAS Station™'s unit ID the moment the transmission opens — no ambiguity about the source.
Selective Unmuting
Motorola-compatible subscribers programmed with EAS Station™'s unit ID break squelch automatically. Radios on the same channel that aren't configured for that ID stay silent — no alert fatigue on channels not intended for EAS.
Clean Post-Alert Close
After the EOM burst, a second MDC1200 packet (op 0x00) cleanly releases the call on every subscriber. The radio's display doesn't latch indefinitely, and the call list logs a complete, properly terminated entry.
Invisible to SAME Decoders
MDC1200 packets sit entirely outside the SAME burst window — before the first header and after the final EOM. Downstream ENDECs and EAS monitors receive a fully conformant SAME signal with no interference.
Dispatch Console Logging
Every EAS transmission appears in the radio system's call list with EAS Station™'s unit ID, timestamp, and call duration — providing a hardware-level audit trail alongside the software compliance logs.
Fully Configurable
Unit ID, op-code, and argument accept decimal or 0x-hex values. Pre and post positions auto-select complementary op-codes (PTT-ID pre / PTT-ID post), and the entire profile can be switched to None, Bell, Beep, or DTMF with a single setting.
Stratum 1 GPS-Disciplined Time
Real broadcast-grade timing hardware — the station is the reference clock, not a client of one.
EAS Station™ ships with first-class support for a GPS/PPS HAT that turns the station itself into a true stratum 1 NTP server. chrony consumes a multi-GNSS NMEA fix and the hardware Pulse-Per-Second edge as a kernel refclock, so every alert timestamp, every audit log entry, and every SAME header JJJHHMM field is locked to the satellites — accurate to sub-microsecond, with no upstream internet time required and no drift when the WAN is down.
Multi-GNSS Receiver
Uputronics GPS/RTC HAT with the u-blox MAX-M8Q tracks GPS, GLONASS, Galileo and BeiDou concurrently — fast cold-start, robust urban-canyon performance, and a clean 1 Hz NMEA stream at 9600 baud over the Pi UART.
Hardware PPS Edge
A discrete Pulse-Per-Second line wired to BCM 18 (Uputronics) or BCM 4 (Adafruit) is exposed to the kernel as a /dev/pps0 device and consumed by chrony as a refclock. Sub-microsecond rising-edge accuracy beats any internet NTP source.
True Stratum 1 NTP
With GPS time as the reference and PPS as the on-time marker, chronyc tracking reports Stratum: 1 and offsets in the microseconds. The dashboard's GPS card surfaces fix mode, satellite count, HDOP, and a live PPS pill so the lock can be proven at a glance.
Battery-Backed RTC
An on-HAT RV-3028-C7 (current revisions) or DS3231 (older boards) keeps the system clock disciplined across power cycles even before GPS lock returns. The kernel's `rtc0` is sourced from the HAT, not the SBC's bus, so cold-boots come up with a sane wall clock.
Air-Gap Friendly
The reference is the sky, not pool.ntp.org. EAS Station™ holds stratum 1 with no internet at all — critical for field deployments, EOC roll-outs, COW trailers, and any site that loses transit during the very emergency the station is meant to cover.
One-Click Setup
Admin → Hardware Settings → GPS probes every prerequisite — RTC overlay, PPS device, gpsd / chrony / util-linux-extra packages, /boot/firmware/config.txt overlays, chrony's selected source — and offers a Run button per remediation step. Even seeding the RTC after a coin-cell change is a single click.
sent, effective, expires and onset fields whose math has to match the wall clock. A station that drifts seconds against NIST is a station whose RWT logs and compliance trail eventually cease to match the real world. EAS Station™ owns its time at the hardware level.
See the GPS HAT Setup guide for board options, wiring, and the manual configuration steps the admin UI automates.
Uptime & Reliability Diagnostics
Catching the failures a plain "is the process still running?" check misses.
A life-safety appliance can't stop at restarting a crashed process. EAS Station™ layers five additional checks on top of standard systemd Restart=always to catch deadlocks, dead feeds, unproven backups, clock drift, and total box failure — reachable from Settings → Uptime Heartbeat, Admin → Backups, and System Health.
Hang Watchdog
The audio-processing and alert-poller services send WATCHDOG=1 heartbeats to systemd from their main loop. A process that's still running but deadlocked — not just crashed — now gets killed and restarted automatically.
Outbound Uptime Heartbeat
Every other health check here is inward-facing — a page someone has to look at. This one pings an external monitor (e.g. healthchecks.io) on a schedule, so total power, network, or OS failure still raises an alarm from outside the box.
Inbound Tickstem Uptime Monitor
The opposite direction from the outbound heartbeat: Tickstem polls this box's public /health endpoint from the outside. Created, paused, resumed, and deleted from Settings → Uptime Monitoring via Tickstem's own API — no need to leave this appliance to manage it.
healthchecks.io Per-Service Heartbeats
A third outbound direction alongside the heartbeat above, but one check per critical service instead of one combined ping — a missed ping on healthchecks.io's side names the exact subsystem that failed. Managed from the same Settings → Uptime Monitoring page via a healthchecks.io account API key.
Backup Restore Verification
A backup that's never been restored isn't a proven backup. This restores the latest backup into a throwaway scratch database, sanity-checks it, and always drops it afterward — run on demand or automatically after every backup.
Clock/NTP Drift Monitoring
SAME timing and Required Weekly Test scheduling both depend on correct system time. The Clock Sync card on System Health tracks chrony/NTP offset and raises a compliance alert on drift or loss of sync.
Combined Feed-Loss Alarm
NOAA and IPAWS polling staleness are tracked independently, so a live feed never masks a dead one. An alert fires only when both feeds have stalled past a configurable threshold.
Maintainer
One operator, four disciplines, one lab.
Timothy Kramer / KR8MER
Project Lead · Putnam County, Ohio
Timothy.Kramer@easstation.com (419) 890-1890
Sole maintainer of EAS Station™ — amateur radio operator with deep roots in public safety and mission-critical communications. The project pairs disciplined engineering with experimental emergency communications research.
Emergency Service
Amateur Radio
Licensed since 2004; General Class upgrade in 2025. Active in Skywarn and emergency communications nets.
Public Safety
17 years as a deputy sheriff — first-hand familiarity with Motorola mission-critical infrastructure and public warning workflows.
Electrician
Full-time electrical panel electrician. Brings hands-on hardware discipline and methodical troubleshooting to every layer.
Home Laboratory
Professional-grade radios, RTL-SDR capture nodes, digital paging decoders, and networking gear — used to validate every release.
Data Sources & Acknowledgments
Standing on public data and open-source shoulders.
Geographic Data
Alert & Protocol Sources
Open Source Community
AMPR Network Notice
Non-commercial use only · AMPR 44.0.0.0/8.
This site may be accessible via the AMPRNet (44.0.0.0/8), the globally routed IPv4 space allocated to the amateur radio community by the Amateur Radio Digital Communications (ARDC) foundation. Per FCC Part 97, ARDC policy, and AMPRNet allocation terms, this service is strictly non-commercial — no for-profit transactions, no commercial advertising.
- Operated by a licensed amateur radio operator (KR8MER) for non-commercial research, experimentation, and emergency communications training.
- AMPRNet use remains consistent with FCC Part 97 non-commercial requirements.
- Commercial use of the 44.0.0.0/8 block is prohibited under ARDC and FCC policy.
- Gateway registration and routing comply with AMPRNet gateway policies.
See ampr.org for AMPRNet policy and 47 CFR Part 97 for amateur radio regulations.
Support the Project
Free and open source — donations keep development going.
EAS Station is built and maintained as open-source software. If the platform is useful to you — in the lab, the shack, or the classroom — you can support continued development with a one-time or monthly donation on Ko-fi.
Additional Resources
Jump straight to docs and external references.