MQTT & community meshes
Observing beyond radio range
Why MQTT exists in a radio hobby
Your radio hears a few kilometers. Your community's mesh spans a metro. Bridging nodes
uplink their traffic to a shared MQTT broker, and Coop's observer can subscribe to
that broker — so Perch shows the whole city's mesh even when RF only delivers the
neighborhood. Observed packets flow through the same decrypt/decode/capture pipeline and
are tagged via mqtt so you always know what arrived by radio versus internet.
Turning it on
MESH_MQTT_ENABLED=1 \
MESH_MQTT_HOST=mqtt.example.org MESH_MQTT_PORT=1883 \
MESH_MQTT_USER=community MESH_MQTT_PASS=… \
MESH_MQTT_ROOT=msh/US/YourMesh \
coop
| Variable | Default | Meaning |
|---|---|---|
MESH_MQTT_ENABLED | off | 1 starts the observer. |
MESH_MQTT_HOST / _PORT | — | Community broker address. |
MESH_MQTT_USER / _PASS | empty | Broker credentials (most community brokers publish read creds). |
MESH_MQTT_ROOT | — | Root topic, e.g. msh/US/MeshSTL. |
MESH_MQTT_CLIENT_ID | perch-observer | How you appear to the broker. |
MESH_MQTT_DEFAULT_PSK | AQ== | Key tried for unnamed/default-key traffic. |
MESH_MQTT_CHANNEL_KEYS | — | JSON of extra keys: {"MyGroup":"base64psk="} — lets the observer decrypt private channels you belong to. |
Health and counters (received / decoded / decrypt-failed) show on Coop's status page and
in GET /api/mqtt.
Clubs — switching communities in one click
A "club" bundles a broker + root topic + keys. GET /api/clubs lists known
ones; POST /api/clubs/join re-points the observer live. It's how one Perch
install follows whichever community you're visiting.
Etiquette & privacy notes
- Observing is read-only and invisible to the mesh — you're a listener, not a node.
- Uplinking your radio's traffic to a broker is a radio-side setting
(
ok_to_mqtt, uplink/downlink per channel) — separate decision, made on the radio. - Anything on a community broker is effectively public; assume the whole internet can read it, because tools like meshview mean it can.