Setting up a MeshCore Observer¶
What is a MeshCore Observer?¶
A MeshCore Observer is a MeshCore node (repeater, room server, or companion device) that listens to nearby mesh traffic and reports what it hears to an MQTT broker over the internet. ChiMesh uses observer data to power network analysis, coverage mapping, and reliability reporting across the Chicagoland area via CoreScope, Chicagoland MeshCore Live Map, and the ChiMesh Discord MeshCore MQTT Feed. Observers can be configured to share only advertisement packets, enough to appear on the node map, without exposing the contents of other traffic. You can stop sharing data at any time.
Hardware Requirements
Observer firmware is only available for supported devices. Check that your hardware is compatible before proceeding. Not all MeshCore devices support the packet logging firmware required for this setup.
Use Repeater mode whenever possible
Do not use Room Server unless you have a specific reason. It limits mesh participation and provides no benefit over Repeater in most scenarios. If you are unsure which role is right for your setup, ask in the ChiMesh Discord before proceeding.
Choose Your Setup Method¶
There are four ways to run an Observer:
| Method | Best for |
|---|---|
| Native Observer Firmware | Devices that support the MQTT observer firmware natively |
| Computer Bridge (mctomqtt) | Repeater or Room Server connected to a Raspberry Pi or Linux device via USB |
| Companion Bridge | Companion nodes, uses different bridge software configured via the Observer Flasher |
| openHop Repeater | Advanced users — Raspberry Pi or Linux SBC running the openHop Repeater daemon |
Method 1: Native Observer Firmware¶
Step 1: Download and Flash the Firmware¶
Fresh Install¶
Use the MeshCore MQTT Observer Flasher to find, download, and flash the correct firmware for your device. This is an online flasher, select your device variant and follow the prompts to flash directly from your browser.
Merged files will erase everything on your device
Files labeled -merged perform a full flash erase and are for fresh installs only. Flashing a merged file onto a device that already has MeshCore will wipe all settings, keys, and configuration. If you are updating an existing install, always select the non-merged variant.
Updating via OTA¶
You can also update using the OTA update command
From the Command Line under Remote Management, run ota update to trigger an over-the-air update directly without needing the steps below.
If you already have MeshCore running, you can update wirelessly using the companion app and a web browser instead of the web flasher and USB:
- Download the App Firmware
- Before starting the OTA process, visit the MeshCore Observer Flasher
- Select your device, and use the Download button to download the app firmware option
Do not use a merged file
This variant does not erase your flash and is safe for updating an existing install. Do not use a merged file, it will wipe all your settings.
- Open Remote Management
- Open the MeshCore companion app
- Select your node from the contacts list or map
- Scroll down and tap Remote Management
- Enter the admin password when prompted
- Launch the Command Line
- Tap Command Line in the middle of the bottom footer
- Enter
start ota - Click Enter on your keyboard
- Navigate to the OTA Upload Page
- If your node is not connected to Wi-Fi, it will broadcast a
MeshCore-OTAhotspot instead, connect to that and go tohttp://192.168.4.1/update - If your node is already connected to Wi-Fi, it will stay on your existing network:
- Check your node's display for the IP address or if your node does not have a screen, check your router's DHCP table to find the IP address assigned to your node
- Open a browser and go to
http://<node-ip>/update(e.g.http://192.168.1.42/update)
- If your node is not connected to Wi-Fi, it will broadcast a
- Upload the Firmware
- Select and upload your downloaded
.binfile - Wait for the update to complete
- Select and upload your downloaded
- Verify the Update
- Reopen the companion app
- Confirm the firmware version under Remote Management
Step 2: Apply ChiMesh Observer Settings¶
Once your firmware is installed, open the Command Line under Remote Management and enter the following commands:
set timezone America/Chicago
set path.hash.mode 2
set advert.interval 240
set mqtt.iata ORD
set mqtt1.preset analyzer-us
set mqtt2.preset chimesh
If the chimesh preset isn't working, set the connection details manually:
If your firmware version does not have presets or you wish to manually configure the connection details, use the following commands. Run get mqtt2.diag to verify the connection after setup.
set mqtt2.server wss://mqtt.chimesh.org
set mqtt2.port 443
set mqtt2.audience mqtt.chimesh.org
set mqtt2.preset custom
set mqtt.rx on
set mqtt.tx advert
set wifi.ssid your-wifi-network
set wifi.pwd your-wifi-password
Note
Replace your-wifi-network and your-wifi-password with your real Wi-Fi credentials. Do not wrap them in quotes.
set bridge.enabled on
set flood.advert.interval 72
set radio.watchdog 60
If this node is a dedicated observer only (does NOT repeat):
Turning repeat off is for dedicated observers only. If this node is also serving as a mesh repeater, make sure you run the set repeat on command and consider using a lower flood.advert.interval value (72 or 48).
set repeat off
set flood.advert.interval 168
Optional (but encouraged), set to your companion device's public key:
Replace your-primary-companion-device-pub-key with your companion device's actual public key. This helps to correlate repeaters with their owner for better analytics in the analyzers.
set mqtt.owner your-primary-companion-device-pub-key
reboot
Step 3: Configure Observer Alerts (Optional)¶
Note
Observer alerts require firmware version 1.16 or later, available from observer.gessaman.com. Full alert documentation is at observer.gessaman.com/docs.
The ESP32-native MQTT observer firmware can alert you over the LoRa network if it encounters Wi-Fi or broker connectivity issues. Alerts are sent as flooded channel messages to either a hashtag channel or a private channel of your choosing.
Choose an Alert Channel¶
If you choose to use the shared hashtag channel #chimesh-observer-alert, no setup required on the channel itself. Set your companion to receive messages on #chimesh-observer-alert.
If you prefer to use your own private channel, create a private channel via the mobile app, then use the share option on the channel to copy the secret hex key to your clipboard. Save the secret somewhere safe (e.g. a password manager) in case you need to restore it later or add it to a new companion device.
Configure Alerts¶
From the Command Line, run the commands for whichever channel option you chose:
If using the ChiMesh hashtag channel (recommended):
set alert.hashtag #chimesh-observer-alert
If using your own private channel:
set alert.psk <secretkey>
Then, regardless of which option you chose:
set alert.wifi 10
set alert.mqtt 30
set alert on
Once configured, use the alert test command to immediately send a test message and confirm your companion can receive alerts from the firmware:
alert test
Method 2: Computer Bridge (USB + Raspberry Pi)¶
Requirements¶
- Any supported MeshCore repeater or room server node with existing firmware
- A Linux device (Raspberry Pi or similar) with internet access
- USB connection between the node and the Linux device
Step 1: Get Compatible Firmware¶
Your node needs firmware that includes packet logging support. Use the MeshCore Observer Flasher to find and flash the appropriate firmware for your device variant.
Step 2: Connect and Run the Install Script¶
With your node connected to your Linux device via USB, run the following from your terminal:
curl -fsSL https://raw.githubusercontent.com/Cisien/meshcoretomqtt/main/install.sh | bash
When prompted by the install script, select the LetsMesh and ChiMesh presets.
Note
During setup, you will be asked to enter an IATA airport code for your region. For the Chicago area, use ORD. Make sure to use the correct IATA code, it is not the same as an ICAO code.
Note
It may take up to 5 minutes after your observer first connects before it appears in the Observers list. Your node must have an advertisement heard before it will show up in the map or dropdown, but packet data will still be recorded in the meantime.
Method 3: Companion Bridge¶
Unlike repeater or room server nodes, companion observers don't require special firmware. Your standard MeshCore companion build supports packet logging. This method uses different bridge software than mctomqtt and runs on a macOS or Linux device connected to your companion via USB, BLE, or Wi-Fi.
Requirements¶
- A macOS or Linux device (e.g., Raspberry Pi) with internet connectivity
- A MeshCore companion device accessible via USB, BLE, or Wi-Fi
Step 1: Install Node.js LTS¶
First, install NVM (Node Version Manager):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
Close and reopen your terminal, or run the following to activate it immediately:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
Then install Node.js LTS:
nvm install --lts
Step 2: Run the Install Script¶
From your macOS or Linux machine, run:
bash <(curl -fsSL https://raw.githubusercontent.com/agessaman/meshcore-packet-capture/main/install.sh)
Note
meshcore-packet-capture is for companion nodes only. If you have a repeater or room server, use Method 2 instead.
The installer will set up packet capture support for BLE, TCP, and Wi-Fi connections to your companion device.
Step 3: Configure ChiMesh MQTT¶
When prompted during setup, select chimesh from the available presets. The installer will configure the connection details automatically.
For more details, see the meshcore-packet-capture README. For help, reach out on the ChiMesh Discord or the MeshCore Discord.
If the chimesh preset isn't working, set the connection details manually:
- Server:
wss://mqtt.chimesh.org - Port:
443 - Audience:
mqtt.chimesh.org
Note
It may take up to 5 minutes after your observer first connects before it appears in the Observers list. Your node must have an advertisement heard before it will show up in the map or dropdown, but packet data will still be recorded in the meantime.
Method 4: openHop Repeater (Advanced)¶
This method is for advanced users
openHop Repeater requires Linux command-line familiarity, manual YAML configuration, and hardware setup. If you are not comfortable with these, use one of the methods above instead. For help, ask in the ChiMesh Discord before proceeding.
openHop Repeater is a Python-based MeshCore repeater daemon that runs on Linux and publishes to MQTT natively through its config.yaml. It supports direct SPI LoRa HATs, USB modem boards (ESP32/nRF52 running openHop Modem firmware), and TCP-connected modems, and can operate as a dedicated observer that uploads packet activity and mesh health to MQTT without needing the standard MeshCore firmware or any bridge script.
Requirements¶
- A Raspberry Pi or other Linux SBC with internet access
- A supported LoRa radio
- SPI HAT (e.g., Waveshare SX1262 HAT, meshadv, meshadv-mini) connected directly to the Pi
- ESP32 or nRF52 board flashed with openHop Modem firmware connected over USB-CDC or TCP
- CH341 USB-to-SPI adapter wired to an SX1262 module (e.g., for Proxmox LXC deployments)
Step 1: Install openHop Repeater¶
git clone https://github.com/openhop-dev/openhop_repeater.git
cd openhop_repeater
sudo bash ./manage.sh install
The installer will create the config directory at /etc/openhop_repeater/, install the application to /opt/openhop_repeater/, launch an interactive setup wizard for radio hardware selection, and install and enable the openhop-repeater systemd service.
Follow the wizard prompts to select your hardware type and radio preset. For USB modem boards, select the pymc_usb modem (USB-CDC) option. For Wi-Fi or Ethernet modems, select pymc_tcp modem. For a direct SPI HAT, select sx1262.
Step 2: Configure ChiMesh MQTT¶
Open /etc/openhop_repeater/config.yaml and update the mqtt_brokers section:
mqtt_brokers:
iata_code: "ORD"
status_interval: 300
owner: ""
brokers:
- preset: letsmesh
- name: chimesh
enabled: true
host: mqtt.chimesh.org
port: 443
transport: websockets
audience: mqtt.chimesh.org
use_jwt_auth: true
tls:
enabled: true
Note
Replace iata_code with the appropriate IATA airport code for your area. For the Chicago area, use ORD.
Optional (but encouraged), set your owner public key:
The owner field links your observer to your primary companion device for better analytics in the analyzers. Replace the empty string with your companion device's public key.
mqtt_brokers:
owner: "your-primary-companion-device-pub-key"
Step 3: Apply ChiMesh Mesh Settings¶
In the same config.yaml, set the following under the mesh section:
mesh:
unscoped_flood_allow: true
path_hash_mode: 2
loop_detect: minimal
And under repeater, set a reasonable advert interval:
repeater:
send_advert_interval_hours: 4
Step 4: Restart and Verify¶
sudo systemctl restart openhop-repeater
sudo journalctl -u openhop-repeater -f
The web dashboard is available at http://<repeater-ip>:8000 and shows connection status, packet history, and MQTT broker state.
Note
It may take up to 5 minutes after your observer first connects before it appears in the Observers list. Your node must have an advertisement heard before it will show up in the map or dropdown, but packet data will still be recorded in the meantime.
For full configuration options, see the openHop Repeater Configuration Reference. For help, reach out on the Discord.
Additional Notes¶
- These settings are required to appear on ChiMesh(Core) services
set mqtt2.preset chimeshis what connects your observer to the ChiMesh network specifically whileset mqtt1.preset analyzer-usis what connects your observer to the global LetsMesh analyzer and the official MeshCore map- The
mqtt.ownerfield is optional but highly encouraged, it links your observer to your primary companion device
Thank you for supporting ChiMesh.org, we hope to see you on MeshCore MQTT!