Scanner listening is a bad use of a human: hours of static for a few seconds that matter. An RTL-SDR dongle plus local transcription turns that into a filter β the agent listens continuously and messages you only when it hears an actual incident.
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 your 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: Any always-on machine already running OpenClaw. An Apple Silicon Mac Mini or a mid-range Linux box both have headroom for this.
- 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" --continuousIn 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 system prompt is what makes this usable. Without a strict filter you get a notification for every routine traffic stop, and you will mute it within a day. Define what counts as critical and force everything else to a single token you can discard.
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
Configure a webhook in OpenClaw. Whenever the "Radio Analyst" agent emits a JSON block rather than the ROUTINE sentinel, it forwards the payload via cURL to the Telegram Bot API.
The Result
A triggered alert arrives looking like this:
Transcription and analysis both run on the host β no audio leaves the machine, and there is no per-minute API bill to watch.