← Back to Skills Marketplace
arsatyants

LoRa CAD air scanner

by Andrey Arsatyants · GitHub ↗ · v1.0.5 · MIT-0
cross-platform ✓ Security Clean
164
Downloads
0
Stars
0
Active Installs
6
Versions
Install in OpenClaw
/install lora-cad-scanner
Description
LoRa Channel Activity Detection (CAD) scanner for LilyGo T3 v1.6 (ESP32-PICO-D4 + SX1276) with HackRF One support. Scans a configurable frequency range using...
README (SKILL.md)

LoRa CAD Scanner

Turns a LilyGo T3 v1.6 + Pi into a persistent LoRa scanner with live OLED display and Telegram alerts.

Hardware

Component Spec
MCU ESP32-PICO-D4 (LilyGo T3 v1.6.1)
LoRa SX1276
Display SSD1306 128×64 OLED
Optional SDR HackRF One (wideband RF recon)

Pin assignments (T3 v1.6.1):

  • LoRa: SCK=5, MISO=19, MOSI=27, SS=18, RST=23, DIO0=26
  • OLED: SDA=21, SCL=22, addr=0x3C (software I2C)

Dependencies

arduino-cli lib install "LoRa"   # v0.8.0+
arduino-cli lib install "U8g2"   # v2.35+
# Core: esp32:esp32 v3.3.7+
pip install pyserial numpy
  • scripts/parse_sweep.py requires: numpy
  • scripts/lora_monitor.py requires: pyserial

Quick Deploy

# 1. Flash the Arduino sketch
cd /path/to/skill
cp scripts/LoRaCADScan.ino ~/Arduino/LoRaCADScan/LoRaCADScan.ino
arduino-cli compile --fqbn esp32:esp32:esp32 ~/Arduino/LoRaCADScan
arduino-cli upload  --fqbn esp32:esp32:esp32 --port /dev/ttyACM0 ~/Arduino/LoRaCADScan

# 2. Start the Pi monitor (background)
nohup python3 scripts/lora_monitor.py > lora_monitor.log 2>&1 &

# 3. Set up Telegram alert cron (OpenClaw)
# See references/setup.md for cron job configuration

Scan Parameters

Defaults (edit in sketch):

  • Range: 433–445 MHz
  • Step: 50 kHz
  • BW: 62.5 / 125 / 250 / 500 kHz
  • SF: 6–12
  • CAD timeout: 400 ms per combination

To change range, edit in LoRaCADScan.ino:

#define FREQ_START   433000000UL
#define FREQ_END     445000000UL
#define FREQ_STEP      50000UL

Limitations and Notes

  • All output/log paths and cron scripts are hardcoded for the default OpenClaw workspace structure (/home/admin/.openclaw/workspace/). For non-standard setups, adjust the path variables in code/sketch before deploying.
  • Requires access to /dev/ttyACM0 (or another LilyGo T3 serial port), and to SDR devices (hackrf_sweep requires hackrf-tools and udev access rights).
  • Telegram alerting is performed via an external OpenClaw cron pipeline; this skill does not integrate a Telegram client or store the token itself.
  • Radio frequency monitoring may be regulated by local law. User is responsible for compliance and consequences.

OLED Layout

┌────────────────────────┐
│ LoRa CAD Scanner       │
├────────────────────────┤
│ 433.150 MHz            │  ← current freq (big)
│ BW: 62k  SF:7  -141dBm │  ← current params + RSSI
│ Pass:3  Ch:2  Hit:12   │  ← stats
├────────────────────────┤
│ HIT 434.950 125k SF9   │  ← last hit
│████████░░░░░░░░░░░░░░░░│  ← progress bar
└────────────────────────┘

Serial Protocol

All output at 115200 baud.

Scan data (continuous):

FREQ_HZ,BW_HZ,SF,RSSI_dBm,CAD(0=clear/1=hit)
433150000,125000,7,-141,0
434950000,62500,9,-138,1   ← hit

15-minute report block:

# REPORT_START
# PASS=12 TOTAL_HITS=5 UNIQUE_CHANNELS=2
NEW,434950000,62500,9,-141,-138,3
OLD,433150000,250000,7,-145,-143,2
# REPORT_END

NEW = first seen since last report. OLD = previously known.

Alert Pipeline

LilyGo serial → lora_monitor.py → lora_alert.txt → OpenClaw cron → Telegram
  • Monitor parses REPORT_START/END blocks
  • Writes lora_alert.txt with formatted message
  • OpenClaw cron (every 2 min) reads the alert file, sends a Telegram notification, and deletes the file
  • Extracted parameters may include DevEUI, DevAddr, frequency coordinates, and other unique LoRa device identifiers; all data is only written inside the local workspace and never sent to external services except by explicit user configuration (Telegram).
  • Known channels are persisted to lora_hits.json

CAD Implementation Note

The LoRa library v0.8.0 does not expose CAD or channelActivityDetection(). CAD is implemented via direct SX1276 register writes:

  • REG_OP_MODE (0x01)0x87 (CAD mode)
  • Poll REG_IRQ_FLAGS (0x12) bit 2 (CadDone) + bit 0 (CadDetected)
  • Timeout: 400 ms

See references/sx1276-cad.md for register details.


Security & Privacy

  • All alerts, log files, and intermediate results are only written within the local workspace.
  • Device unique identifiers (DevEUI, DevAddr, LoRa addresses) may appear in reports—user is responsible for their handling and privacy.
  • Telegram notification is configured and triggered only by explicit user cron script—no token or user credential is stored by this skill.
  • All device addresses discovered are only stored locally and never transmitted unless user configures external delivery.

False Positive Rate

At the noise floor (~−140 dBm), expect ~0–5% false CAD positives per pass. A hit is considered reliable if it appears in ≥2 consecutive passes at the same freq/BW/SF. The monitor tracks count per channel — low-count hits are likely noise.

HackRF Companion Workflow

Use HackRF for initial wideband survey, then focus LilyGo on confirmed bands:

# Wideband sweep with HackRF
hackrf_sweep -f 430:445 -w 25000 -l 32 -g 40 > sweep.csv

# Parse peaks, set FREQ_START/FREQ_END in sketch accordingly
python3 scripts/parse_sweep.py sweep.csv

See references/hackrf-workflow.md for full HackRF + LilyGo workflow.

Usage Guidance
This skill appears to do what it says (LoRa CAD scanning + optional HackRF pre-sweep + Telegram alerts via OpenClaw). Before installing: 1) Be aware of legal/regulatory constraints on RF monitoring in your region. 2) The monitor decodes and stores device identifiers (DevEUI, DevAddr) and may expose location-like fields (TTN Mapper); treat lora_hits.json, lora_scan.log and lora_alert.txt as sensitive. 3) The scripts hardcode /home/admin/.openclaw/workspace — either run/copy the scripts into that workspace or edit paths to match your environment. 4) OpenClaw cron is responsible for sending alerts to Telegram; verify the cron job and Telegram token are configured securely (the skill does not store tokens itself). 5) Review the included decoder if you do not want packet contents or identifiers to be parsed/stored; you can disable decoding or redact fields before writing alerts. If you want extra assurance, run the monitor in an isolated environment first and inspect the files it creates.
Capability Analysis
Type: OpenClaw Skill Name: lora-cad-scanner Version: 1.0.5 The bundle is a functional LoRa Channel Activity Detection (CAD) scanner and packet decoder designed for LilyGo T3 hardware and Raspberry Pi. It includes an Arduino sketch (LoRaCADScan.ino) for hardware-level RF scanning, a Python monitor (lora_monitor.py) for data logging, and a protocol decoder (lora_decoder.py) that identifies LoRaWAN, Meshtastic, and other common IoT protocols. All behaviors, including the creation of local alert files for Telegram notifications, are transparently documented and strictly aligned with the stated purpose of RF monitoring and reconnaissance.
Capability Assessment
Purpose & Capability
Name/description match the included files and runtime instructions: Arduino sketch for SX1276 CAD scanning, Pi monitor + decoder scripts, and optional HackRF support. Required tools (arduino-cli, pyserial, numpy, hackrf tools) are appropriate for the described functionality.
Instruction Scope
Runtime instructions stay within the declared purpose (flash sketch, read serial, parse CAD/packets, write local alerts). Two points to watch: (1) many paths and cron behavior are hardcoded to /home/admin/.openclaw/workspace and the OpenClaw cron pipeline — the operator must configure OpenClaw/cron to actually deliver Telegram alerts; (2) the monitor decodes LoRa payloads (including DevEUI/DevAddr and TTN Mapper coords) and writes logs/alerts locally. These actions are expected for a scanner but are sensitive from a privacy/regulatory perspective.
Install Mechanism
No automated install/spec; this is an instruction-only skill with source files. It asks users to use arduino-cli and pip to install common libraries (LoRa, U8g2, pyserial, numpy) — a proportional and standard approach. No arbitrary downloads or extract-from-URL steps are present.
Credentials
The skill requests no credentials or environment variables, which is appropriate. However it persistently stores decoded identifiers and may include geolocation (TTN Mapper) in alerts and lora_hits.json inside the workspace. Although the skill does not itself send data externally, the OpenClaw cron (user-configured) will forward lora_alert.txt to Telegram — treat these artifacts as sensitive.
Persistence & Privilege
always:false and no special platform privileges are requested. The monitor expects access to /dev/ttyACM0 and optionally to HackRF devices (udev permissions). The skill does not modify other skills or system configs; it writes only into the (hardcoded) OpenClaw workspace.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install lora-cad-scanner
  3. After installation, invoke the skill by name or use /lora-cad-scanner
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.5
lora-cad-scanner 1.0.5 - No file changes detected in this release. - No functional, documentation, or dependency updates.
v1.0.4
No changes detected in this release. - Version 1.0.4 does not introduce any file or documentation changes. - All features and usage remain the same as in the previous version.
v1.0.3
v1.0.3 — No user-facing changes. - No file changes detected in this version. - Skill functionality and documentation remain unchanged.
v1.0.2
- All Russian text in documentation replaced with English for broader accessibility. - Requirements and usage notes clarified with consistent use of English terms. - No changes to functionality or code—documentation only update.
v1.0.1
- Added requirements for numpy (for parse_sweep.py) and explicitly stated pyserial (for lora_monitor.py) in the dependencies section. - Updated dependencies example to include both pyserial and numpy. - Added a new "Limitations and Notes" section describing workspace path requirements, device permissions, lack of built-in Telegram client, and legal responsibility disclaimer. - Added a "Security & Privacy" section outlining local data storage, identifier handling, and Telegram alert privacy. - Some alert pipeline explanations now mention that some extracted LoRa identifiers may appear and are saved locally. - Minor language changes (some phrasing in Russian) for improved clarity regarding setup and operation details.
v1.0.0
LoRa CAD Scanner v1.0.0 - Initial release of lora-cad-scanner for LilyGo T3 v1.6 (ESP32-PICO-D4 + SX1276) with HackRF One support. - Scans configurable frequency bands with multiple LoRa BW/SF settings; results displayed live on OLED. - Detected channels stored in device RAM and reported via Serial (continuous+15 min report blocks). - Telegram alerts for new detections via OpenClaw cron pipeline. - Includes CAD implementation via direct SX1276 register access for compatibility. - Companion workflow integrates HackRF wideband sweeps for targeted scanning.
Metadata
Slug lora-cad-scanner
Version 1.0.5
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 6
Frequently Asked Questions

What is LoRa CAD air scanner?

LoRa Channel Activity Detection (CAD) scanner for LilyGo T3 v1.6 (ESP32-PICO-D4 + SX1276) with HackRF One support. Scans a configurable frequency range using... It is an AI Agent Skill for Claude Code / OpenClaw, with 164 downloads so far.

How do I install LoRa CAD air scanner?

Run "/install lora-cad-scanner" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is LoRa CAD air scanner free?

Yes, LoRa CAD air scanner is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does LoRa CAD air scanner support?

LoRa CAD air scanner is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created LoRa CAD air scanner?

It is built and maintained by Andrey Arsatyants (@arsatyants); the current version is v1.0.5.

💬 Comments