Hey everyone! I wanted to share a project I’ve been working on that might be useful to anyone involved with fire/EMS or who’s ever wondered what those mysterious two-tone pages on scanner feeds actually decode to.
What is it?
Station Assistant is a free, open-source Home Assistant addon that decodes two-tone paging sequences from radio traffic and turns them into automated alerts and displays. Think of it as bringing commercial fire station alerting capabilities into the HA ecosystem.
GitHub: GitHub - lockwoodtechnologysolutions/station_assistant · GitHub
The Problem It Solves
Fire stations use two-tone sequential paging (audible tones in specific A/B frequency pairs) to alert apparatus. Commercial systems like Locution, Bryx, and Active911 can cost $5,000-$20,000+ per station. Small and volunteer departments often can’t justify that cost, so they rely on basic radio speakers and manual processes.
I realized HA’s automation ecosystem could handle this beautifully if we could just decode those tone sequences reliably.
Core Features
Real-Time Two-Tone Decoder
- NumPy-vectorized Goertzel algorithm running in PyAudio callbacks
- Configurable frequency tolerance, detection threshold, input gain (0-20×)
- State machine handles tone timing, gap detection, duplicate cooldown
- Supports up to 5 paging sequences, each with custom A/B tone pairs
Full-Screen Alert Dashboard
- Accessible without HA authentication (perfect for Station displays)
- Shows dispatched unit name, icon, custom alert color
- Multi-unit stacking when multiple apparatus tones hit within a configurable window
- Elapsed timer and countdown-to-idle progress bar
- Dark/light mode toggle
Deep Home Assistant Integration
This is where it gets fun for HA users:
- Fires
two_tone_decodedevents you can use in your own automations - Auto-creates and manages HA automations for each sequence (plays audio, updates sensors, etc.)
- Publishes live sensor entities for decoder status and watchdog heartbeat
- Configure which HA media players get audio playback per sequence
- Leverage HA’s massive device ecosystem for lighting, notifications, garage doors, etc.
Audio Monitor
- Live dBFS meter and per-frequency Goertzel cards
- Visual flash on tone detection
- Device enumeration to find your USB audio input
Detection Log
- SQLite-backed history with configurable retention
- Useful for auditing missed calls or debugging sequences
Why I Built It on Home Assistant
Instead of writing yet another standalone appliance, I wanted to leverage what HA already does brilliantly.
Technical Stack
For those curious:
goertzel.py NumPy vectorized Goertzel detector
decoder.py PyAudio callback loop, SequenceMachine state machine
config_manager.py Sequence CRUD (JSON flat files)
detection_log.py SQLite detection history
ha_client.py HA REST API integration (events, automations, sensors)
stack_manager.py Multi-unit stacking, audio queue, SSE emitter
main.py Flask app (all HTTP routes)
- Python 3.11 on Alpine Linux
- Flask + Flask-SocketIO + Gunicorn + Eventlet
- PyAudio + NumPy for DSP
- s6-overlay for process supervision
- Supports amd64, aarch64, armv7, armhf
Installation
- Settings → Add-ons → Add-on Store
- Click menu (⋮) → Repositories → add:
https://github.com/lockwoodtechnologysolutions/station_assistant
- Find Station Assistant and install
- Configure your USB audio device index
- Start the addon, open via Ingress
First launch runs a setup wizard for department name, weather entity, audio device, and initial tone sequences.
Hardware You’ll Need
- USB audio input device (generic USB sound card)
- Radio/pager/scanner receiver feeding audio into that USB device
- Home Assistant OS or Supervised installation
Use Cases I’ve Seen
- Full station automation - decode page → turn on bay lights → open apparatus doors → start HVAC → announce over whole-house audio
- Station Video displays - Raspberry Pi running Chromium in kiosk mode on the dashboard endpoint
- Notifications - push alerts to HA mobile app, smart watches, Alexa announcements, whatever
- Multi-zone audio - route different apparatus tones to different speaker zones
- Volunteer recall - trigger SMS/push notifications via HA notify integrations
Feedback Welcome!
I’d love to hear:
- What other HA integrations would be useful for fire/EMS workflows?
- Any audio processing improvements for noisy scanner feeds?
- Features you’d want to see?
- Bug reports, PRs, etc. all welcome on GitHub
This is Apache 2.0 licensed - free to use, modify, contribute. Built by firefighters, for firefighters, on top of the amazing platform this community has created.
Thanks for reading! 
Links:
- GitHub: GitHub - lockwoodtechnologysolutions/station_assistant · GitHub
- Commercial tier (for multi-station deployments): https://www.lockwood.tech









