Station Assistant - Fire Station Alerting & Two-Tone Paging Decoder for Home Assistant

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

:pager: 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

:rotating_light: 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

:house: Deep Home Assistant Integration

This is where it gets fun for HA users:

  • Fires two_tone_decoded events 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.

:satellite: Audio Monitor

  • Live dBFS meter and per-frequency Goertzel cards
  • Visual flash on tone detection
  • Device enumeration to find your USB audio input

:clipboard: 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

  1. Settings → Add-ons → Add-on Store
  2. Click menu (⋮) → Repositories → add:
   https://github.com/lockwoodtechnologysolutions/station_assistant
  1. Find Station Assistant and install
  2. Configure your USB audio device index
  3. 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! :fire_engine:

Links:

A few screenshots.