Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Send and receive messages via Meshtastic LoRa mesh network. Use for off-grid messaging, mesh network status, reading recent mesh messages, or sending texts via LoRa radio.
Send and receive messages via Meshtastic LoRa mesh network. Use for off-grid messaging, mesh network status, reading recent mesh messages, or sending texts via LoRa radio.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
Control a Meshtastic node via USB for off-grid LoRa mesh communication.
Meshtastic-compatible hardware (RAK4631, T-Beam, Heltec, LilyGo, etc.) USB connection to host machine Python 3.9+ with meshtastic and paho-mqtt packages See references/SETUP.md for full installation guide
Edit CONFIG.md with your node details, MQTT settings, and alert destinations.
┌─────────────────────────────────────────────────────────────┐ │ MQTT Bridge │ ├─────────────────────────────────────────────────────────────┤ │ RECEIVE: mqtt.meshtastic.org (global JSON traffic) │ │ PUBLISH: optional map broker (protobuf) │ │ SOCKET: localhost:7331 (commands: send, status, toggle) │ ├─────────────────────────────────────────────────────────────┤ │ Files: │ │ • /tmp/mesh_messages.txt - received messages log │ │ • /tmp/mesh_nodes.json - cached node positions │ └─────────────────────────────────────────────────────────────┘ ┌─────────────┐ USB ┌─────────────┐ │ LoRa Node │◄────────────►│ Bridge.py │ │ (Radio) │ │ - Serial │ └─────────────┘ │ - Socket │ │ - MQTT │ └──────┬──────┘ │ ┌────────────────────────┼────────────────────────┐ │ │ │ ▼ ▼ ▼ localhost:7331 /tmp/mesh_* MQTT Broker (send commands) (message logs) (mesh traffic)
# Via socket (preferred - works while bridge running) echo '{"cmd":"send","text":"Hello mesh!"}' | nc -w 2 127.0.0.1 7331 # Direct message to specific node echo '{"cmd":"send","text":"Hey!","to":"!abcd1234"}' | nc -w 2 127.0.0.1 7331 # Check status echo '{"cmd":"status"}' | nc -w 2 127.0.0.1 7331 # List RF nodes (seen via radio) echo '{"cmd":"nodes"}' | nc -w 2 127.0.0.1 7331
# Toggle map publishing on/off echo '{"cmd":"map"}' | nc -w 2 127.0.0.1 7331 # Explicitly enable/disable echo '{"cmd":"map","enable":true}' | nc -w 2 127.0.0.1 7331 echo '{"cmd":"map","enable":false}' | nc -w 2 127.0.0.1 7331 # Force immediate position report echo '{"cmd":"map_now"}' | nc -w 2 127.0.0.1 7331
# Recent messages (last 20) tail -20 /tmp/mesh_messages.txt # Filter common noise tail -50 /tmp/mesh_messages.txt | grep -v -E "(Hello!|hey|mqtt-test)"
TIMESTAMP|CHANNEL|SENDER|DISTANCE|TEXT 2026-02-02T12:43:59|LongFast|!433bf114|1572km|Moin moin!
# Status sudo systemctl status meshtastic-bridge # Restart sudo systemctl restart meshtastic-bridge # View logs sudo journalctl -u meshtastic-bridge -f # Stop (needed for direct CLI access) sudo systemctl stop meshtastic-bridge
cron.add({ name: "mesh-monitor", schedule: { kind: "every", everyMs: 300000 }, // 5 min sessionTarget: "isolated", payload: { kind: "agentTurn", message: "Check /tmp/mesh_messages.txt for new messages. Filter out noise (test messages, 'Hello!', 'hey'). Alert me of interesting ones with translations if non-English.", timeoutSeconds: 60, deliver: true, channel: "telegram" // or your channel } })
cron.add({ name: "mesh-digest", schedule: { kind: "cron", expr: "0 8,14,20 * * *", tz: "Europe/Madrid" }, sessionTarget: "isolated", payload: { kind: "agentTurn", message: "Read /tmp/mesh_messages.txt. Create a digest of interesting messages from the last 6 hours. Translate non-English, guess country from distance. Post summary.", timeoutSeconds: 120, deliver: true, channel: "telegram" } })
sessions_spawn({ task: "Monitor /tmp/mesh_messages.txt every 30 seconds. Alert me for interesting messages (not noise). Run for 1 hour.", label: "mesh-monitor", runTimeoutSeconds: 3600 })
Approximate distances for country guessing (adjust for your location): DistanceTypical Regions<500kmNeighboring countries/regions500-1000kmMedium range1000-1500kmLong range1500-2000kmVery long range (likely MQTT relay)>2000kmMQTT-bridged traffic
Map reports can use fuzzy positioning (~2km precision) Position publishing can be toggled off entirely Local RF messages are logged but not shared externally by default Never broadcast precise location in messages
DeviceNotesRAK4631Recommended, reliable USBT-BeamPopular, has GPSHeltec V3Budget optionLilyGo T-EchoE-paper display See references/SETUP.md for hardware-specific setup.
RegionFrequencyTopic RootEurope868 MHzmsh/EU_868/2/jsonAmericas915 MHzmsh/US/2/jsonAustralia/NZ915 MHzmsh/ANZ/2/json
~/.openclaw/skills/meshtastic/ ├── SKILL.md # This file ├── CONFIG.md # Your configuration ├── scripts/ │ └── mesh.py # CLI wrapper └── references/ └── SETUP.md # Installation guide
"Resource temporarily unavailable" Only one process can use serial port at a time Stop bridge before direct CLI: sudo systemctl stop meshtastic-bridge No messages appearing Check MQTT subscription topic matches your region Verify firewall allows outbound port 1883 Check journalctl -u meshtastic-bridge for errors Can't send messages Ensure bridge is running (socket server) Check serial port path in config Try: echo '{"cmd":"status"}' | nc -w 2 127.0.0.1 7331 Considering BLE instead of USB? Don't. USB is far more reliable on Linux. BLE on Linux (BlueZ/bleak) has notification bugs, pairing inconsistencies, and random disconnects. See references/SETUP.md for detailed findings.
Meshtastic Docs MQTT Integration Hardware Options
Messaging, meetings, inboxes, CRM, and teammate communication surfaces.
Largest current source with strong distribution and engagement signals.