Skip to content

A professional Emergency Alert System (EAS) platform for monitoring, broadcasting, and verifying NOAA and IPAWS alerts

License

AGPL-3.0, Unknown licenses found

Licenses found

AGPL-3.0
LICENSE
Unknown
LICENSE-COMMERCIAL
Notifications You must be signed in to change notification settings

KR8MER/eas-station

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

EAS Station EAS Station

License: AGPL v3 Commercial License

Python Flask FastAPI SQLAlchemy PostgreSQL + PostGIS Redis

Systemd Gunicorn Nginx Bootstrap Leaflet

A professional Emergency Alert System (EAS) platform for monitoring, broadcasting, and verifying NOAA and IPAWS alerts

EAS Station is a software-defined drop-in replacement for commercial EAS encoder/decoder hardware, built on commodity hardware like Raspberry Pi. It provides comprehensive alert processing with FCC-compliant SAME encoding, multi-source aggregation, PostGIS spatial intelligence, SDR verification, and integrated LED signage.


!!! warning "IMPORTANT: Laboratory Use Only" EAS Station is experimental software for research and development. It is not FCC-certified and must only be used in controlled test environments. Never use for production emergency alerting.


✨ Key Features

Feature Description
🌐 Multi-Source Ingestion NOAA Weather, IPAWS federal alerts, and custom CAP feeds
πŸ“» FCC-Compliant SAME Specific Area Message Encoding per FCC Part 11
πŸ—ΊοΈ Geographic Intelligence PostGIS spatial filtering with county/state/polygon support
πŸ“‘ SDR Verification Automated broadcast verification with RTL-SDR/Airspy
πŸ”’ Built-in HTTPS Automatic SSL/TLS with Let's Encrypt, nginx reverse proxy
🎨 Modern Web UI Responsive Bootstrap 5 interface with real-time updates
⚑ Hardware Integration GPIO relay control, LED signs, multiple audio outputs

πŸ—οΈ Architecture

Separated Systemd Service Design - Modern, reliable, production-grade architecture:

graph TB
    subgraph External["External Sources"]
        NOAA[NOAA Weather<br/>CAP Feeds]
        IPAWS[FEMA IPAWS<br/>CAP Feeds]
        RF[RF Signals<br/>162 MHz]
    end

    subgraph Services["Systemd Services"]
        POLL[eas-station-poller<br/>Alert Polling]
        WEB[eas-station-web<br/>Flask + Gunicorn]
        SDR[eas-station-sdr<br/>SDR Hardware]
        AUDIO[eas-station-audio<br/>EAS Monitoring]
        HW[eas-station-hardware<br/>GPIO/Displays]
    end

    subgraph Infrastructure["Infrastructure"]
        DB[(PostgreSQL 17<br/>+ PostGIS 3.4)]
        REDIS[(Redis 7<br/>Cache + IPC)]
        NGINX[nginx<br/>HTTPS Proxy]
    end

    subgraph Output["Outputs"]
        TX[FM Transmitter]
        UI[Web Browser]
        LED[LED Signs]
    end

    NOAA --> POLL
    IPAWS --> POLL
    RF --> SDR
    
    POLL --> DB
    WEB --> DB
    WEB --> REDIS
    SDR --> REDIS
    AUDIO --> REDIS
    
    NGINX --> WEB
    WEB --> UI
    HW --> TX
    HW --> LED
    
    style External fill:#3b82f6,color:#fff
    style DB fill:#8b5cf6,color:#fff
    style WEB fill:#10b981,color:#fff
    style AUDIO fill:#f59e0b,color:#000
    style UI fill:#6366f1,color:#fff
Loading

Benefits:

  • βœ… Reliable - Services isolated (web crashes don't affect audio/SDR)
  • βœ… Simple - No container orchestration, standard systemd
  • βœ… Fast - Direct hardware access, dedicated resources per service
  • βœ… Debuggable - Separate logs via journalctl, independent restart

Project Structure

eas-station/
β”œβ”€β”€ app.py                      # Main Flask application
β”œβ”€β”€ *_service.py                # Service entry points (EAS, SDR, hardware, audio)
β”œβ”€β”€ wsgi.py                     # WSGI server entry point
β”œβ”€β”€ app_core/                   # Core business logic
β”‚   β”œβ”€β”€ audio/                  # Audio processing and EAS monitoring
β”‚   β”œβ”€β”€ radio/                  # SDR radio management
β”‚   β”œβ”€β”€ auth/                   # Authentication and RBAC
β”‚   └── models.py               # Database models
β”œβ”€β”€ app_utils/                  # Utility modules
β”‚   β”œβ”€β”€ eas.py                  # SAME encoding/generation
β”‚   β”œβ”€β”€ eas_decode.py           # SAME decoding
β”‚   └── eas_tts.py              # Text-to-speech synthesis
β”œβ”€β”€ webapp/                     # Web application routes and templates
β”‚   β”œβ”€β”€ admin/                  # Admin routes and API
β”‚   └── templates/              # Jinja2 HTML templates
β”œβ”€β”€ poller/                     # CAP feed polling service
β”œβ”€β”€ static/                     # Frontend assets (CSS, JS, images)
β”œβ”€β”€ scripts/                    # Utility and maintenance scripts
β”‚   β”œβ”€β”€ debug/                  # Debug and testing scripts
β”‚   β”œβ”€β”€ fixes/                  # One-time fix scripts
β”‚   β”œβ”€β”€ diagnostics/            # Diagnostic tools
β”‚   └── maintenance/            # Database and system maintenance
β”œβ”€β”€ tests/                      # Comprehensive test suite (80+ files)
β”œβ”€β”€ docs/                       # Documentation
β”‚   β”œβ”€β”€ guides/                 # Setup and user guides
β”‚   β”œβ”€β”€ architecture/           # Architecture documentation
β”‚   └── FUTURE_ENHANCEMENTS.md  # Planned enhancements
└── legacy/                     # Archived code for reference

**Key Files:**
- `app.py` - Main web application and Flask initialization
- `eas_service.py` - EAS monitoring service (subscribes to Redis audio)
- `sdr_hardware_service.py` - SDR hardware USB access (publishes IQ samples)
- `hardware_service.py` - GPIO, displays, and Zigbee hardware
- `eas_monitoring_service.py` - Audio processing and EAS monitoring

πŸš€ Quick Start

Interactive Installation

git clone https://github.com/KR8MER/eas-station.git && \
cd eas-station && \
sudo bash install.sh

The installer uses an interactive TUI (raspi-config style) to collect all configuration:

  • πŸ‘€ Administrator account (username, password, email)
  • πŸ–₯️ System settings (hostname, domain, EAS originator, station callsign)
  • πŸ“ Location & timezone (state, county, optional FIPS codes)
  • πŸ“‘ Alert sources (NOAA, IPAWS with poll intervals)
  • 🎡 Audio/streaming (Icecast with auto-generated passwords)
  • πŸ”Œ Hardware (GPIO, LED signs, VFD displays)

Then automatically:

  • βœ… Installs all dependencies (PostgreSQL, Redis, Python, nginx, etc.)
  • βœ… Generates secure SECRET_KEY and passwords
  • βœ… Creates configuration file with your settings
  • βœ… Initializes the database schema
  • βœ… Starts all services
  • βœ… Configures HTTPS with self-signed certificate

All configuration is done during installation - no post-install wizard needed!

πŸ’‘ Debian Trixie (Testing): Fully supported! The installer auto-detects your OS version and installs compatible packages. Python 3.13 is fully supported with the latest dependency updates.

Uninstallation

To completely remove EAS Station from your system:

cd eas-station
sudo bash uninstall.sh

The uninstall script will:

  • βœ… Stop and remove all EAS Station services
  • βœ… Remove application files and logs
  • βœ… Optionally remove PostgreSQL database
  • βœ… Optionally remove dependencies (PostgreSQL, Redis, Nginx, etc.)

Access Your Station

Open your web browser and navigate to:

Accept the self-signed certificate warning (safe for initial setup).

Log in with the administrator account you created during installation - your station is ready!

Optional: Fine-Tune Configuration

All essential settings are configured during installation, but you can:

  1. Advanced Features - Use the web-based setup wizard at /setup for:

    • FIPS code lookup from county names
    • Auto-derive zone codes from FIPS codes
    • Interactive builders with validation
  2. Reconfigure Anytime - Use sudo eas-config for raspi-config style TUI

  3. Manual Editing - Edit /opt/eas-station/.env for advanced settings

πŸ’‘ Production SSL: sudo certbot --nginx -d your-domain.com

System Requirements

  • OS: Debian 12 (Bookworm), Debian 13 (Trixie), Ubuntu 22.04+, or Raspberry Pi OS
  • CPU: 2+ cores (4+ recommended)
  • RAM: 2GB minimum (4GB+ recommended)
  • Storage: 20GB minimum (50GB+ recommended for alerts database)
  • Network: Internet connection for alert polling

Key Benefits

  • βœ… Native Performance - Runs directly on host OS
  • βœ… Direct Hardware Access - SDR, GPIO, and audio devices work natively
  • βœ… Standard Linux Management - Familiar systemd service control
  • βœ… Interactive Setup - raspi-config style TUI for easy configuration
  • βœ… All-in-One Install - Complete configuration during installation
  • βœ… Reconfigurable - Change settings anytime with sudo eas-config

Alternative: Bootable ISO

Build a pre-configured bootable ISO for dedicated hardware:

cd eas-station
sudo bash scripts/build-iso.sh
# Burn to USB: sudo dd if=eas-station-*.iso of=/dev/sdX bs=4M status=progress

πŸ“– Full Guide: See docs/installation/README.md for detailed installation, upgrades, configuration, and troubleshooting.

Installation Notes for Debian Trixie

Debian 13 (Trixie) is the current testing distribution and is fully supported:

  • Python 3.13: All dependencies updated to support Python 3.13 (gevent 25.9.1+, pytest 9.0+, etc.)
  • PostgreSQL: Works with PostgreSQL 15, 16, or 17 with PostGIS 3.3 or 3.4
  • Package availability: All required packages are available in Trixie repositories
  • Testing status: While Trixie is "testing", it's stable enough for development and lab use

If you encounter any package availability issues on Trixie, the installer will attempt to install from Debian Backports or skip optional packages gracefully.

πŸ“š Documentation

graph TD
    START{What do you<br/>want to do?}
    START -->|Install & Setup| SETUP[πŸ“– Quick Start Guide<br/>Installation]
    START -->|Configure Hardware| HW[πŸ“‘ SDR Setup<br/>🎧 Audio Sources<br/>πŸ”Œ GPIO/Displays]
    START -->|Daily Operations| OPS[πŸ“˜ User Guide<br/>πŸ› οΈ Admin Interface<br/>πŸ“Š Monitoring]
    START -->|Development| DEV[πŸ’» Developer Guide<br/>πŸ—οΈ Architecture<br/>🎨 Frontend Docs]
    START -->|Troubleshooting| TROUBLE[πŸ”§ SDR Issues<br/>🌐 Network/504<br/>πŸ—„οΈ Database]

    SETUP --> DOCS[πŸ“š Full Documentation<br/>92 Documents]
    HW --> DOCS
    OPS --> DOCS
    DEV --> DOCS
    TROUBLE --> DOCS

    style START fill:#3b82f6,color:#fff
    style DOCS fill:#10b981,color:#fff
    style TROUBLE fill:#f59e0b,color:#000
Loading

Quick Links

For... Start Here
First Time Setup Setup Instructions β†’ Quick Start
Radio Configuration SDR Setup Guide
Daily Operations User Guide
Deployment Installation Guide
Development Developer Guide
Remote Development (VSCode) VSCode Setup Guide - 5-minute setup!
Debugging on Pi PyCharm Remote Debugging Guide

πŸ“– Complete Documentation Index - Searchable topics and detailed guides

πŸ“‘ API Endpoints

EAS Station exposes a comprehensive REST API for automation and integrations:

Tip: All API routes are namespaced under /api/. Use the X-API-Key header generated from the Configuration β†’ API Keys page.

πŸ—οΈ Architecture

graph TB
    subgraph External["External Sources"]
        SRC[Alert Sources<br/>NOAA, IPAWS]
        RF[RF Signals<br/>SDR Receivers]
    end

    subgraph Services["Systemd Services"]
        POLL[Alert Poller<br/>Unified CAP Polling]
        WEB[Web Application<br/>Flask + FastAPI]
        SDR_SVC[SDR Service<br/>Radio Hardware]
        AUDIO_SVC[Audio Service<br/>EAS Monitoring]
        HW_SVC[Hardware Service<br/>GPIO/Displays]
    end

    subgraph Infrastructure["Infrastructure"]
        DB[(PostgreSQL 17<br/>+ PostGIS 3.4)]
        REDIS[(Redis 7<br/>Cache + Pub/Sub)]
        NGINX[nginx<br/>HTTPS + Proxy]
    end

    subgraph Output["Outputs"]
        TX[FM Transmitter<br/>GPIO Control]
        UI[Web Browser<br/>HTTPS]
        LED[LED Signs<br/>RS-232]
        STREAM[Audio Streams<br/>Icecast]
    end

    SRC -->|CAP XML| POLL
    RF --> SDR_SVC
    
    POLL -->|Store Alerts| DB
    WEB -->|Query Data| DB
    WEB -->|Commands| REDIS
    SDR_SVC -->|Metrics| REDIS
    AUDIO_SVC -->|Decode| REDIS
    
    NGINX -->|Reverse Proxy| WEB
    WEB --> UI
    HW_SVC -->|Relay Control| TX
    HW_SVC -->|Messages| LED
    SDR_SVC -->|Demod Audio| STREAM
    
    style External fill:#3b82f6,color:#fff
    style DB fill:#8b5cf6,color:#fff
    style WEB fill:#10b981,color:#fff
    style AUDIO_SVC fill:#f59e0b,color:#000
    style UI fill:#6366f1,color:#fff
Loading

Core Components

Component Technology Purpose
Web Application Flask 3.1 + FastAPI 0.124 + Bootstrap 5 User interface and REST API
Alert Poller Python asyncio Unified NOAA/IPAWS CAP monitoring
Database PostgreSQL 17 + PostGIS 3.4 Spatial data storage and queries
SDR Service SoapySDR + RTL-SDR/Airspy Radio reception and demodulation
Audio Service Python + ALSA EAS decoding and monitoring
Hardware Service RPi.GPIO + lgpio GPIO relay, OLED, VFD, LED control
Web Server Gunicorn 23.0 + nginx WSGI server + HTTPS termination
Cache & IPC Redis 7 Real-time metrics and pub/sub messaging

🎯 Use Cases

Broadcasters

  • Replace $5,000-$7,000 commercial encoders
  • Multi-station coordination
  • Automated compliance logging

Amateur Radio

  • Emergency communications testing
  • Alert relay networks
  • Training and education

Alert Distribution

  • Custom alert distribution
  • Geographic targeting
  • Integration with existing systems

Developers

  • CAP protocol experimentation
  • Alert system research
  • Custom integrations

βš™οΈ System Requirements

Recommended Hardware

Component Specification
Compute Raspberry Pi 5 (8GB) or equivalent x86
Control Multi-relay GPIO HAT
Audio USB sound card or Pi HAT
SDR RTL-SDR v3 or Airspy
Storage External SSD (50GB+)

Software Requirements

Operating System:

  • Debian 12 (Bookworm) or Debian 13 (Trixie)
  • Ubuntu 22.04 LTS or newer
  • Raspberry Pi OS (based on Debian Bookworm/Trixie)
  • Python 3.11, 3.12, or 3.13
  • PostgreSQL 14+ with PostGIS 3+
  • Redis 7+

System Package Dependencies

Core System Packages (all Debian/Ubuntu versions including Trixie):

# Build tools and Python development
python3 python3-pip python3-venv python3-dev
build-essential gcc g++ make

# Database and spatial extensions
postgresql postgresql-contrib postgis
postgresql-17-postgis-3  # or postgresql-16-postgis-3 on older systems

# Networking and web services
redis-server nginx certbot python3-certbot-nginx

# Audio processing
ffmpeg espeak libespeak-ng1

# Development libraries
libpq-dev libev-dev libevent-dev libffi-dev libssl-dev

# USB and hardware support
libusb-1.0-0 libusb-1.0-0-dev usbutils ca-certificates

# Version control and utilities
git curl wget

Optional Packages (for SDR and hardware features):

# SDR receiver support (RTL-SDR, Airspy)
python3-soapysdr soapysdr-tools
soapysdr-module-rtlsdr soapysdr-module-airspy
libairspy0 librtlsdr0

# Raspberry Pi GPIO support (Pi only)
python3-lgpio  # Preferred on Pi 5

Python Package Requirements (installed via pip in virtual environment):

  • Flask 3.1.2 - Web framework
  • FastAPI 0.124.2 - Async API framework
  • SQLAlchemy 2.0.45 - Database ORM
  • gevent 25.9.1+ - WSGI async support (Python 3.13 compatible)
  • redis 7.1.0 - Redis client
  • psutil 7.1.3 - System monitoring
  • numpy 2.3.5 - Numerical processing for SDR
  • Pillow 12.0.0 - Image processing for displays
  • pytest 9.0.2 - Testing framework

πŸ“˜ Complete dependency list: See requirements.txt for all 50+ Python packages

πŸ“˜ Automated Installation: The installation script (install.sh) installs all required and optional dependencies automatically.

πŸ“˜ Manual Installation: See Setup Instructions for step-by-step installation guide.

πŸ› οΈ Configuration

Edit .env with your settings:

# Core settings
SECRET_KEY=generate-with-python-secrets-module
POSTGRES_HOST=localhost
POSTGRES_PASSWORD=your-secure-password

# Your location
DEFAULT_COUNTY_NAME=Your County
DEFAULT_STATE_CODE=XX
DEFAULT_ZONE_CODES=XXZ001,XXC001

# Enable broadcast (optional)
EAS_BROADCAST_ENABLED=false
EAS_ORIGINATOR=WXR
EAS_STATION_ID=YOURCALL

Configuration file location: /opt/eas-station/.env

After editing, restart services:

sudo systemctl restart eas-station.target

See Configuration Guide for complete reference.

πŸ“Š System Diagrams

Professional flowcharts and block diagrams illustrating system architecture and workflows:

Alert Processing Pipeline

Alert Processing Pipeline
CAP ingestion, validation, and storage workflow

Broadcast Workflow

EAS Broadcast Workflow
SAME generation and transmission process

SDR Setup Flow

SDR Setup & Configuration
Complete radio receiver setup guide

Audio Source Routing

Audio Source Architecture
Multi-source audio routing and monitoring

Hardware Deployment

Hardware Deployment Architecture
Raspberry Pi 5 reference configuration with peripherals

πŸ“– View all architectural diagrams β†’

πŸ“Š Screenshots

Dashboard

Main Dashboard

Admin Panel

Administration Panel

🀝 Contributing

We welcome contributions! Please see:

Development

# Clone repository
git clone https://github.com/KR8MER/eas-station.git
cd eas-station

# Set up environment
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# Configure database
cp .env.example .env
# Edit .env with local database settings

# Run development server
python app.py

πŸ†˜ Support

Quick Diagnostics:

Alert Self-Test: Open Tools β†’ Alert Verification and use the built-in Alert Self-Test panel to replay bundled RWT captures and confirm your configured FIPS codes still trigger activations.

βš–οΈ Legal & Compliance

!!! danger "FCC Compliance Warning" EAS Station generates valid EAS SAME headers and attention tones. Unauthorized broadcast violates FCC regulations and can result in substantial fines:

- 2015 iHeartMedia: [$1M settlement](https://docs.fcc.gov/public/attachments/DA-15-199A1.pdf)
- 2014 Multiple Networks: [$1.9M settlement](https://docs.fcc.gov/public/attachments/DA-14-1097A1.pdf)

Always work in shielded test environments. Never connect to production broadcast chains.

See Terms of Use and FCC Compliance for details.

πŸ“ˆ Roadmap

Current development focuses on:

  • βœ… Core Features: Multi-source ingestion, SAME encoding, geographic filtering
  • βœ… System Diagnostics: Web-based validation and health checking tool
  • βœ… Stream Profiles: Multi-bitrate Icecast streaming configuration
  • πŸ”„ Hardware Parity: Advanced relay control, multi-receiver coordination
  • ⏳ Certification: FCC Part 11 compliance documentation
  • ⏳ Advanced Features: Cloud sync, mobile app, multi-site coordination

See Feature Roadmap for complete details.

Recent Additions (November 2025)

  • Stream Profile Manager (/settings/stream-profiles) - Configure multiple Icecast streams with different bitrates and formats
  • Quick Start Guide - 15-minute deployment guide with common scenarios and troubleshooting

See Changelog for detailed documentation of recent changes.

πŸ“œ License

EAS Station is available under dual licensing:

Open Source License (AGPL v3)

For open-source projects and non-commercial use, EAS Station is licensed under the GNU Affero General Public License v3 (AGPL-3.0).

Key requirements:

  • βœ… Free to use, modify, and distribute
  • βœ… Must keep source code open
  • βœ… Must share modifications if you deploy as a web service
  • βœ… Must retain copyright and attribution notices
  • ❌ Cannot remove author attribution or rebrand

See LICENSE file for full AGPL terms.

Commercial License

For proprietary/closed-source use without AGPL obligations, a Commercial License is available.

Benefits:

  • βœ… No source code disclosure requirements
  • βœ… Integration into proprietary systems
  • βœ… Priority support and updates
  • βœ… Custom development assistance

Contact for commercial licensing: See LICENSE-COMMERCIAL for details.


Copyright & Attribution

Copyright (c) 2025 Timothy Kramer (KR8MER)
EAS Station - https://github.com/KR8MER/eas-station

IMPORTANT: All derivative works must retain attribution to the original author. Rebranding or removing attribution is prohibited under both licenses. See NOTICE file for complete terms.

Why Dual Licensing?

  • For hobbyists & open-source: Free to use under AGPL
  • For commercial use: Option to license without copyleft obligations
  • For everyone: Protects the author's rights and prevents unauthorized rebranding

πŸ™ Acknowledgments

  • NOAA/NWS - Weather alert data and CAP specifications
  • FEMA/IPAWS - National alert system integration
  • PostGIS Team - Spatial database technology
  • Putnam County GIS Office - Geographic boundary data (Greg Luersman, GIS Coordinator)
  • U.S. Census Bureau - FIPS codes and TIGER/Line boundary data
  • Flask Community - Web framework
  • RTL-SDR Project - Software-defined radio tools
  • Amateur Radio Community - Testing and feedback

πŸ“ž Resources

Resource Link
Documentation docs/
NOAA CAP API https://www.weather.gov/documentation/services-web-api
IPAWS https://www.fema.gov/emergency-managers/practitioners/integrated-public-alert-warning-system
FCC Part 11 https://www.ecfr.gov/current/title-47/chapter-I/subchapter-A/part-11
PostGIS https://postgis.net/documentation/

πŸ› οΈ Technology Stack

Click to expand complete technology stack

Backend Framework

  • Flask 3.1.2 - Primary web framework for UI and REST API
  • FastAPI 0.124.2 - Modern async API framework (parallel deployment)
  • Gunicorn 23.0 - Production WSGI server
  • Uvicorn 0.38.0 - ASGI server with WebSocket support
  • nginx - HTTPS termination and reverse proxy

Database & Caching

  • PostgreSQL 17 - Primary relational database
  • PostGIS 3.4 - Geographic/spatial data extension
  • SQLAlchemy 2.0.45 - Python ORM and database toolkit
  • GeoAlchemy2 0.18.1 - PostGIS integration for SQLAlchemy
  • Alembic 1.17.2 - Database migration management
  • Redis 7.1 - Cache, pub/sub messaging, and IPC

Frontend

  • Bootstrap 5.3.0 - Responsive UI framework
  • Leaflet 1.9.4 - Interactive mapping library
  • Chart.js - Data visualization and metrics
  • Socket.IO - Real-time bidirectional communication
  • Jinja2 3.1.6 - Template rendering engine

Audio & SDR

  • SoapySDR - Software-defined radio abstraction layer
  • RTL-SDR / Airspy - Radio receiver hardware support
  • ALSA - Advanced Linux Sound Architecture
  • Icecast - Audio streaming server
  • numpy - Audio signal processing
  • scipy - Digital signal processing

Hardware Integration

  • RPi.GPIO / lgpio - Raspberry Pi GPIO control
  • pyserial - Serial port communication (LED signs, VFD)
  • smbus2 - I2C bus interface (OLED displays)

Alert Processing

  • lxml - Fast XML parsing for CAP feeds
  • requests 2.32.5 - Synchronous HTTP client
  • httpx 0.28.1 - Async HTTP client with connection pooling
  • certifi 2025.11.12 - Updated CA bundle for SSL/TLS
  • pytz 2025.2 - Timezone handling

System & Monitoring

  • psutil 7.1.3 - System resource monitoring
  • python-dotenv 1.2.1 - Environment variable management
  • Systemd - Service orchestration and management
  • journalctl - Centralized logging

Development & Testing

  • pytest - Testing framework
  • black - Code formatting
  • flake8 - Linting
  • mypy - Static type checking

Python Runtime

  • Python 3.11 / 3.12 / 3.13 - Tested on all three versions
  • Debian 12 (Bookworm) - Primary target OS
  • Debian 13 (Trixie) - Fully supported
  • Ubuntu 22.04+ - Compatible
  • Raspberry Pi OS - Optimized support

Made with β˜• and πŸ“» for Amateur Radio Emergency Communications
73 de KR8MER πŸ“‘

About

A professional Emergency Alert System (EAS) platform for monitoring, broadcasting, and verifying NOAA and IPAWS alerts

Topics

Resources

License

AGPL-3.0, Unknown licenses found

Licenses found

AGPL-3.0
LICENSE
Unknown
LICENSE-COMMERCIAL

Stars

Watchers

Forks

Releases

No releases published

Contributors 5