cd ../
πŸ† Build of the Month
Requires OpenClaw v1.4+|Needs Audio API

How I built an AI Emergency Radio Monitor for $30

By u/RadioNerdβ€’February 28, 2026β€’ 184 comments

I've always been fascinated by ham radio, but sitting around listening to static-filled police scanners waiting for something interesting is exhausting. What if an AI could just listen for me and send me a text when things go sideways?

The Goal

Use a cheap RTL-SDR USB dongle to scan local unencrypted emergency frequencies. Feed the raw audio into OpenClaw for local transcription and NLP analysis. If the AI detects keywords (e.g., "fire", "accident", "dispatch"), it automatically sends a structured alert to my Telegram.

1. Hardware Bill of Materials

Total cost? Less than a decent meal out.

  • RTL-SDR V4 Dongle: ~$29 on Amazon (comes with a basic dipole antenna).
  • Host Machine: Already running my home OpenClaw instance on a Mac Mini M2.
  • Software: rtl_fm for CLI tuning, and OpenClaw v1.4+ for the new async Audio API pipeline.

2. The Software Pipeline

Wiring this up required a bit of bash scripting. We use rtl_fm to lock onto the local dispatch frequency (154.250 MHz) and pipe the squelched audio directly into a format OpenClaw understands.

#!/bin/bash
# Listen to 154.250MHz and pipe raw audio data
rtl_fm -M fm -f 154.250M -s 22050 -l 10 | \
    sox -t raw -r 22050 -e signed -b 16 -c 1 - -t wav - | \
    claw pipe --agent "Radio Analyst" --continuous

In version 1.4, they introduced the --continuous flag for audio pipelines. It buffers audio until 2-second silence, then chunks it to local Whisper for transcription.

3. Crafting the Agent Prompt

The magic happens in the system prompt. I don't want a text message every time a cop pulls someone over β€” I only want critical incidents.

# Radio Analyst System PromptYou are a critical incident analyst monitoring transcribed dispatch audio.

Analyze the transcript. If you detect a major incident (Structure Fire, Multi-vehicle collision, Pursuits, or Active Threats), output JSON:
{ "type": "[Incident Type]", "location": "[Extracted Address]", "severity": 1-10 }

If routine traffic, output EXACTLY: "ROUTINE".

4. Telegram Intercept

I set up a webhook in OpenClaw. Whenever the "Radio Analyst" agent outputs a JSON block (not routine traffic), it forwards the payload via cURL to the Telegram Bot API.

The Result

Last Tuesday, my phone buzzed at 2:00 AM while asleep.

🚨 ALERT: STRUCTURE FIRE Location: 1200 Block of Elm Street Severity: 8/10 Raw Transcript: "Dispatch, Engine 4 on scene at Elm Street. Heavy smoke from second floor. Upgrade to two-alarm."

It worked flawlessly. The entire transcription and NLP analysis happened 100% locally. No cloud API fees, no privacy concerns.


Want to replicate this?

Download the full OpenClaw workflow JSON, bash scripts, and agent personality template from my GitHub repository.