Meshtastic Detection
by @autume
Receive DETECTION_SENSOR_APP alerts from Meshtastic LoRa devices via USB. When the remote sensor GPIO triggers (preset target detected), store the event and...
clawhub install meshtastic-detectionπ About This Skill
name: meshtastic-detection description: Receive DETECTION_SENSOR_APP alerts from Meshtastic LoRa devices via USB. When the remote sensor GPIO triggers (preset target detected), store the event and alert the user immediately. metadata: {"openclaw": {"os": ["darwin", "linux"], "requires": {"anyBins": ["python3.12", "python3.11", "python3.10", "python3"]}, "emoji": "π‘"}}
Meshtastic Detection Skill
Receive detection sensor alerts from a remote Meshtastic device over LoRa. When the remote device's GPIO pin triggers (preset target detected), the event is stored locally and requires immediate user notification via feishu.
Prerequisites
meshtastic and pypubsub packages (venv at {baseDir}/venv)usb_receiver.py daemon runningcd {baseDir} && ./setup.sh{baseDir}/references/SETUP.mdArchitecture
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β USB Receiver Daemon β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β LISTEN: DETECTION_SENSOR_APP only (GPIO trigger events) β
β STORE: data/sensor_data.jsonl (append per detection) β
β LATEST: data/latest.json (most recent detection) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ USB ββββββββββββββββ
β LoRa Node βββββββββββββββΊβ usb_receiver β
β (Radio) β β daemon β
βββββββββββββββ ββββββββ¬ββββββββ
β
βββββββββββββββββΌββββββββββββββββ
β β β
βΌ βΌ βΌ
sensor_cli.py event_monitor.py OpenClaw cron
(query data) (check alerts) (feishu alert)
Quick Reference
Run the Receiver
cd {baseDir}
source venv/bin/activate
python scripts/usb_receiver.py --port /dev/cu.usbmodem1CDBD4A896441
Check for New Alerts
cd {baseDir}
./venv/bin/python scripts/event_monitor.py
Every DETECTION_SENSOR_APP record = high-priority alert. Output:
{
"alerts": [{"priority": "high", "sender": "!1dd29c50", "text": "alert detected", "received_at": "...", "channel": "ch0", "portnum": "DETECTION_SENSOR_APP"}],
"summary": "π¨ 3 new detection alert(s) from 3 record(s)",
"alert_count": 3,
"new_records": 3
}
Query Historical Data
python scripts/sensor_cli.py latest
python scripts/sensor_cli.py stats --since 24h
python scripts/sensor_cli.py query --since 1h
Data Format
Each record in data/sensor_data.jsonl:
{"received_at": "2026-03-04T11:07:06+00:00", "sender": "!1dd29c50", "channel": "ch0", "portnum": "DETECTION_SENSOR_APP", "data": {"type": "detection", "text": "alert detected"}}
Only DETECTION_SENSOR_APP messages are captured. This portnum means the remote sensor's GPIO pin was triggered β a preset target has been detected. Every detection event requires immediate user alert.
All other message types (TEXT_MESSAGE_APP, telemetry, position, etc.) are ignored.
Log Rotation
sensor_data.jsonl is automatically rotated at 5 MB (keeps 2 archive files, total max ~15 MB). Rotation is transparent β event_monitor auto-resets offset, sensor_cli reads across archives.
Monitoring & Alerts
Cron Job (Active)
The cron job runs event_monitor.py every 60 seconds and delivers alerts to feishu:
# Check status
openclaw cron listView run history
openclaw cron runs --id Manual test
openclaw cron run Edit config
openclaw cron edit --timeout-seconds 60 --to
Cron message template (for reference):
Run this command and report the output:
cd {baseDir} && ./venv/bin/python scripts/event_monitor.py
β If alert_count > 0, tell me how many alerts, the latest sender and time.
If alert_count is 0, reply: ζζ ζ°εθ¦γ
Key settings:
timeoutSeconds: 60 (agent needs ~20-40s)channel: feishudelivery.to: ou_16c6dc8bda8ac97abfd0194568edee59Alert Behavior
All DETECTION_SENSOR_APP events are treated as high priority. No rule configuration needed β every detection triggers an immediate alert. The alert message includes:
Configuration
Edit CONFIG.md to customize:
feishu (configured in OpenClaw)Common Conversation Patterns
User asks about recent detections: > "What was detected in the last hour?"
Run: cd {baseDir} && ./venv/bin/python scripts/sensor_cli.py query --since 1h
User asks for statistics: > "Give me a summary of detections today"
Run: cd {baseDir} && ./venv/bin/python scripts/sensor_cli.py stats --since 24h
User asks about system status: > "Is the sensor still working?"
Run: cd {baseDir} && ./venv/bin/python scripts/sensor_cli.py status
Files
{baseDir}/
βββ SKILL.md # This file (agent instructions + metadata)
βββ CONFIG.md # User configuration
βββ setup.sh # One-click setup
βββ scripts/
β βββ usb_receiver.py # USB serial daemon (DETECTION_SENSOR_APP only)
β βββ event_monitor.py # Incremental alert monitor
β βββ sensor_cli.py # Query CLI
βββ data/
β βββ sensor_data.jsonl # Detection records (auto-rotated at 5 MB)
β βββ latest.json # Most recent detection
β βββ monitor_state.json # Monitor byte offset + seen hashes
βββ references/
βββ SETUP.md # Detailed installation guide
Troubleshooting
"No records found"
usb_receiver.py is runningls /dev/cu.usb*"Resource temporarily unavailable"
lsof /dev/cu.usbmodem*Receiver connects but no data appears
DETECTION_SENSOR_APP messages (other types are ignored)--debug to see all packets: python scripts/usb_receiver.py --port ... --debugCron job times out or fails delivery
openclaw cron runs --id openclaw cron edit --timeout-seconds 60 openclaw cron edit --to βοΈ Configuration
Edit CONFIG.md to customize:
feishu (configured in OpenClaw)π Tips & Best Practices
"No records found"
usb_receiver.py is runningls /dev/cu.usb*"Resource temporarily unavailable"
lsof /dev/cu.usbmodem*Receiver connects but no data appears
DETECTION_SENSOR_APP messages (other types are ignored)--debug to see all packets: python scripts/usb_receiver.py --port ... --debugCron job times out or fails delivery
openclaw cron runs --id openclaw cron edit --timeout-seconds 60 openclaw cron edit --to