Help & Operations Guide
Complete documentation for operating and maintaining your EAS Station
Quick Navigation
Jump directly into the workflows you open most often.
Operations Flow
-
1
Monitor & Capture
CAP polling + SDR ingest keep alerts flowing in.
-
2
Analyze & Verify
Rule filters, analytics, and operator review.
-
3
Broadcast & Notify
Builder, audio playout, GPIO, and displays.
-
4
Audit & Improve
Archive, compliance, and analytics feedback.
Safety Expectations
- Isolated Networks: Operate the stack in isolated development or staging networks disconnected from broadcast transmitter controls.
- No Live Credentials: Do not ingest live IPAWS credentials, dispatch feeds, or mission-critical telemetry into this environment.
- Validated Workflows: Validate any workflows on certified FCC equipment before using them in real-world alerting scenarios.
- Legal Review: Review the repository Terms of Use and Privacy Policy with your operators prior to onboarding.
Getting Started
-
Review DocumentationThe About page covers system goals, core services, and the complete software stack.
-
Run Installation ScriptRun
cd bare-metal && sudo bash scripts/install.shto install all dependencies and set up systemd services. -
Configure EnvironmentEdit
/opt/eas-station/.env, set secure secrets, and update database connection details. -
Start ServicesRun
sudo systemctl start eas-station.targetto launch all EAS Station services.
Routine Operations
Navigate to http://<host>:5000 in a modern browser.
Log in with administrator credentials created during initial setup.
- Open the Dashboard to view active CAP products on the interactive map.
- Use the Statistics tab to analyze severity, event types, and historical counts.
- Check System Health for CPU, memory, disk, receiver, and audio pipeline heartbeat metrics.
- Navigate to Alert Verification (
/admin/alert-verification) to inspect delivery timelines and per-target outcomes. - Upload captured WAV or MP3 files to decode SAME bursts directly in the browser.
- Store decoded results for future comparison from the sidebar list.
Importing Boundary Data
The system supports two methods for importing geographic boundary data:
- GeoJSON Files: Upload GeoJSON files directly via the "Upload Files" tab
- Shapefiles: Upload ESRI Shapefiles (ZIP archives with .shp, .shx, .dbf files) or import existing shapefiles from the server
Using Shapefiles
Navigate to Admin → Upload Files and scroll to the "Upload Shapefiles" section:
- View Server Files: Click "Refresh List" to see shapefiles already on the server (e.g., in
/streams and ponds) - Import Existing: Click "Import" next to any complete shapefile to convert and load it into the database
- Upload New: Upload a ZIP file containing all shapefile components and select the boundary type
streams and ponds directory.
Supported Boundary Types
- 🌊 Rivers & Streams - Linear water features
- 💧 Lakes & Ponds - Area water bodies
- ⚡ Electric Providers - Utility service areas
- 🏘️ Villages & Townships - Municipal boundaries
- 🏫 School Districts
- 🔥 Fire Districts
- 🚑 EMS Districts
- 🚆 Railroads - Rail corridors
- 📞 Telephone Providers
- 🗺️ County Outlines
Additional Configuration
- Alert Configuration: Set up alert routing and notification preferences in the admin panel
- Filter Settings: Configure geographic and event-based alert filtering
- Intersection Calculation: After uploading boundaries, calculate intersections via Operations → Calculate Intersections
US County Boundaries (IPAWS SAME Coverage)
The County Boundaries page
(Admin → County Boundaries)
manages the Census TIGER/Line county shapefile used to draw highlighted county
outlines on IPAWS alert coverage maps. IPAWS/NWS alerts carry 6-digit SAME
geocodes (e.g. 039137) instead of polygon geometry; EAS Station
converts those codes to county outlines by looking up this table.
Page Workflow
Sections are ordered top-to-bottom for a natural workflow:
-
Status Cards — Shows whether the
us_county_boundariestable exists, how many counties are loaded, how many states, and whether the bundled Census shapefile is present. - Load County Boundaries — Import data from the bundled Census shapefile (≈3,235 counties, optionally filtered to one state) or upload a custom ZIP shapefile.
-
Loaded States — Table listing every state that has county data
in the database. Each row has two action buttons:
- View on Map — loads that state's county outlines on the interactive map directly below this table.
- Delete — removes all county records for that state.
- County Boundary Map — Interactive Leaflet map. Use the state dropdown in the card header to choose a state, or click the button in the Loaded States table to jump directly to a state. Click any county outline to see its name, GEOID, and SAME code. Use Clear to reset the map.
- Search Counties — Real-time search by county name, 5-digit GEOID, or state abbreviation. Clicking a result loads that state on the map.
- Table Lookup / Diagnostics — Enter one or more 6-digit SAME codes or 5-digit GEOIDs (comma-separated) to verify they are present in the database. Useful for confirming coverage before an activation.
- Toggle Auto Start or Enabled to control which receivers the radio manager spins up during poller runs.
- Use the action menu to request synchronized IQ/PCM captures.
- Captured files are surfaced alongside status updates in the compliance dashboard.
Manage and control all display outputs from a unified interface.
- Unified Dashboard: Access LED sign, VFD display, and OLED screen controls from one central page
- Status Monitoring: View connection status and current content for all displays at a glance
- Quick Actions: Jump to full control pages for detailed configuration and testing
- Recent Activity: See a consolidated feed of all display output history
- Individual Controls: Access advanced features like LED animations, VFD graphics, and OLED screen rotation
/displays
Create dynamic content templates for LED signs and VFD displays with API data integration.
- Screen Templates: Define custom layouts with variable substitution from API endpoints like
/api/system_status,/api/alerts, and/api/monitoring/radio - LED Displays: Configure text content (4 lines × 20 chars) with color, animation mode, and speed settings
- VFD Graphics: Build graphical screens with progress bars, VU meters, text, shapes, and images on 140×32 pixel displays
- Screen Rotation: Set up automatic cycling between multiple screens with configurable durations
- Dynamic Data: Display system health, CPU/memory usage, alert counts, network info, signal strength, and more
- Priority Management: Emergency screens override rotation; alerts pause normal displays
/screens
Accessible from the top navigation once logged in. Use the browser-based workflow to:
- Pick a state or territory
- Choose county/parish or statewide SAME codes
- Select originator code (EAS, CIV, WXR, PEP)
- Choose from authorized 47 CFR §11.31(d-e) event types
- Preview the SAME header in real-time
- Generate complete packages with SAME bursts, attention tones, and narration
python tools/generate_sample_audio.py
Before alert text is sent to the TTS engine it passes through a four-layer normalization pipeline that converts abbreviated and machine-formatted text into natural spoken language.
The Four Layers
-
Time expansion — compact clock times are converted
to fully-spoken equivalents so every TTS backend gives the same
natural result.
1100 PM→ eleven o'clock PM ·9:30 AM→ nine thirty AM -
NWS-specific cleanup — three rules handle
formatting conventions unique to NOAA/NWS alert text:
- Alternate-timezone slash notation — NWS writes
/5 PM CDT/to show a deadline in a second timezone; the slashes are stripped so TTS does not read them literally. - Saint abbreviation —
ST.is expanded to Saint before proper nouns (e.g. Saint Joseph). - Indiana county disambiguation — NWS appends the
state code
INafter a county name that appears in more than one watch state (e.g.ALLEN IN→ ALLEN Indiana,CASS IN→ CASS Indiana). The substitution is applied only when the preceding word is a recognised Indiana county name and the following word is not a directional word or state name, so common phrases like IN EFFECT and section headers like IN MICHIGAN are never altered.
- Alternate-timezone slash notation — NWS writes
-
Built-in acronym table — hard-coded expansions
for EAS/NWS tokens, all US timezone abbreviations, and US state
codes used as county-name markers:
NWS→ National Weather Service ·EDT→ Eastern Daylight Time ·MI→ Michigan ·OH→ Ohio ·AFD→ Air Force Depot · and more - Custom pronunciation dictionary — your own word-substitution rules, applied last and longest-first so multi-word entries are never masked by shorter ones.
Accessing the Tools
-
TTS Settings & Pronunciation Preview —
Navigate to Admin → TTS Settings or visit
/admin/tts. Paste any alert text into the Pronunciation Preview panel to see exactly what the TTS engine will receive before going live. -
Custom Pronunciation Rules —
Navigate to Admin → TTS Settings then click
Pronunciation Dictionary, or visit
/admin/tts/pronunciation. Add entries for place names, call letters, or any term your TTS engine mispronounces. Rules support optional case-sensitive matching and a note field for documentation.
Required Weekly Test (RWT) broadcasts can be automatically scheduled to run on specific days and time windows.
Accessing Weekly Test Automation
- Navigate to Broadcast → Weekly Test Automation from the navigation menu
- Or visit
/rwt-scheduledirectly
Configuration Options
- Enable/Disable: Toggle automatic RWT broadcasts on or off
- Days of Week: Select which days to send RWT (Monday through Sunday)
- Time Window: Set start and end times (e.g., 8:00 AM to 4:00 PM)
- Coverage: The scheduler always follows the shared Default RWT Counties list that sits next to the form—update it once and Quick RWT, manual defaults, and automation all stay aligned.
EAS_ORIGINATOR and EAS_STATION_ID environment variables that also feed the Broadcast Builder console.
RWT Broadcast Behavior
Automatic RWT broadcasts are designed to be lean and FCC-compliant:
- No TTS Narration: RWT contains only SAME headers and EOM tones
- No Attention Tones: Silent except for required signaling
- Once Per Day: Only one RWT sent per configured day
- Time Window: Broadcasts only during configured hours
- Logged: All broadcasts stored in database for compliance tracking
Testing Your Configuration
Use the "Send Test RWT Now" button to immediately trigger a test broadcast and verify your configuration.
Troubleshooting
- Check Logs: Run
sudo journalctl -u eas-station-web.service -fto see service startup messages. - Database Connection: Verify
POSTGRES_*settings in/opt/eas-station/.envmatch your database deployment. - Secret Key: Ensure
SECRET_KEYis set to a non-empty value. - Port Conflicts: Confirm port 5000 isn't already in use.
- PostGIS Extension: Ensure your database has the PostGIS extension enabled:
CREATE EXTENSION IF NOT EXISTS postgis; - Spatial Indexes: Check that boundary tables have spatial indexes for performance.
- Geometry Types: Verify imported GeoJSON files use valid geometry types.
- Audio Drivers: Verify sound card drivers are working on the host system.
- File Permissions: Check that the application has write access to audio output directories.
- Azure Speech: If using Azure TTS, verify API keys and regional endpoints.
- Serial Connection: Verify the serial port device exists and is accessible.
- Protocol Settings: Check that baud rate and protocol settings match your sign model.
- Network Access: Ensure the application can reach the sign's IP address if using network control.
Reference Commands
Service Management
# View logs
sudo journalctl -u eas-station-web.service -f
# Restart services
sudo systemctl restart eas-station.target
# Check service status
sudo systemctl status eas-station.target
Database Operations
# Reset database
python tools/reset_database.py
# Check health
python tools/check_db_health.py
Audio & Testing
# Generate test audio
python tools/generate_sample_audio.py
# Test receivers
python tools/test_receivers.py
System Status
# System health
curl http://localhost:5000/api/system_health
# Version info
curl http://localhost:5000/version
Getting Help
-
1Check Documentation: Review this guide and the About page for system information.
-
2Review Logs: Run
sudo journalctl -u eas-station.target -fto identify error messages. -
3Check System Health: Visit System Health for status overview.
-
4Search Issues: Look for similar problems on GitHub Issues.
-
5Create New Issue: Provide logs, configuration (redact secrets), and steps to reproduce.
Trusted Field Resources
Curated references from NOAA, FEMA IPAWS, and ARRL to keep operations sharp.
NOAA Weather Service
Primary CAP documentation, glossary, and sample payloads.
FEMA IPAWS Lab
Interoperability, architecture, and test schedule references.
ARRL Field Playbooks
ARES task books, ICS-213 templates, and readiness checklists.