What an observer does
It’s a normal MeshCore node that also has WiFi: it hears packets over LoRa and forwards them to an MQTT broker, which is what feeds the maps and analyzers. The firmware we use is the Flex MQTT-bridge build by agessaman — it gives a node six MQTT slots, so one observer can feed several networks at once. This setup uses two: mqtt1 for RF Lab (CoreScope, over WebSocket) and mqtt2 for MeshMapper.
The whole thing flashes from your browser with the MeshCore Observer Flasher — no toolchain, no command line to install.
What you need
- A WiFi-capable LoRa board (ESP32-class) — Heltec V3/V4, Station G2, Xiao S3 WIO, RAK boards and more. The observer needs WiFi to reach the broker.
- The antenna for your board — attach it before powering on.
- Chrome or Edge (the flasher uses Web Serial), and your WiFi name + password.
Flash the firmware
-
Open the Observer Flasher
Go to observer.gessaman.com in Chrome or Edge and plug your board in with USB.
-
Pick board, build & role
Under Choose device select your board, then the MQTT Observer firmware (the Flex build), and set the role to Repeater (or Room Server). On a brand-new board, do a full erase first.
-
Flash, then open the console
Let it finish, then open the flasher’s Serial Console (any serial terminal works too) — that’s where you’ll paste the config next.
Configure it for RF Lab
In the Serial Console, set the node up and point its broker slots at the analyzers — RF Lab goes in slot mqtt1. Fill in the <…> placeholders; the commented line is for restores only.
set name <OBSERVER_NAME> # max 23 characters set owner.info <OWNER_INFO> # e.g. Join us on Discord at join.rflab.io password <NODE_PASSWORD> # the node’s admin password set lat <LAT> # decimal degrees, e.g. 43.0746 set lon <LON> # e.g. -89.3841 # set prv.key <PRIVATE_KEY> ← ONLY when restoring a saved node set wifi.ssid <SSID> # it uplinks over WiFi set wifi.pwd <PASS> set repeat off # use this if you do not want it to act as a repeater set radio 910.525,62.5,7,5 # RF Lab radio preset (freq,BW,SF,CR) set path.hash.mode 2 # advert path hash size set tx 22 # TX power in dBm — your call set mqtt.iata <IATA> # your 3-letter airport code, e.g. MSN # slot 1 — RF Lab / CoreScope set mqtt1.preset rflab # slot 2 — MeshMapper set mqtt2.preset meshmapper reboot
The radio line must match the mesh. set radio 910.525,62.5,7,5 is the RF Lab preset — 910.525 MHz, 62.5 kHz bandwidth, spreading factor 7, coding rate 5. An observer only hears a network it’s tuned to, so if this doesn’t match, it’ll log nothing useful.
Leave set prv.key out unless you’re restoring. The private key is the node’s identity — treat it like a master password: never share or post it. A fresh node makes its own; only paste a key when you’re bringing back a node you previously backed up.
The lines you’ll tweak
- name — how it shows on the mesh and maps (23 characters max).
- owner.info — free text others can see; a nice spot to point people at the community (e.g. Join us on Discord at join.rflab.io).
- password — sets the node’s admin password. Remember it.
- lat / lon — the node’s location in decimal degrees, so the maps can place it.
- repeat — set
offif you do not want it to act as a repeater (a pure listener); your call. - tx — transmit power in dBm; set to suit your board, antenna and local rules.
- mqtt.iata — your nearest airport code (Madison is
MSN); use whatever fits your location.
- Presetrflab
- Serverwss://mqtt.rflab.io
- Port443
- Loginnone (open)
The rflab preset fills in the WebSocket server and audience for you — nothing to type, no username or password. MeshMapper’s meshmapper preset works the same way.
Confirm it’s feeding
After the reboot, log back in with your password and check WiFi, then the uplink:
get wifi.status # should show connected, with an IP get mqtt.status # should report connected get mqtt1.diag # the last error if RF Lab (slot 1) won’t connect
Within a few minutes your node should start showing up on CoreScope as an observer, with packets flowing in. If mqtt.status isn’t connected, double-check the WiFi lines and that mqtt1 is set to the rflab preset.
Update your observer
Already running an observer? Just update it with the Observer Flasher to pick up the latest build and the new rflab preset.
Feeding the mesh?
Tell us your observer’s name in #meshcore — we’ll watch for it on the map.