Observers

Connect an observer

Stream what your node hears to the BxMesh broker, so it shows up on the live map. Pick your software below; each guide takes you from login to a connected observer.

Before you start

You need a login. Apply at observers.bxmesh.net with a username and your email. Once it's approved, your password arrives by email: keep it to yourself.

One connection per login. If a second box connects with the same login, it takes over and the first one drops. Run two observers? Ask for two logins.

The radio must be on Bathurst's Australia (Mid) profile: 915.075 MHz, 125 kHz, SF9, CR 4/5.

The one ruleObservers listen only. They never send, bridge or auto-reply. The broker enforces it: a login can only send its packets and status, and can't receive anything back.
The broker
Hostmqtt.bxmesh.net
Port443
TransportMQTT over WebSockets, with TLS (wss)
Path/  (openHop's /mqtt works too)
LoginYour username and password
What to send
Packetsmeshcore/BHS/<public key>/packets
Statusmeshcore/BHS/<public key>/status
IATA codeBHS
FormatLetsMesh-compatible JSON, as openHop and meshcoretomqtt publish
Set-up guides

Pick your software

openHop

The pyMC Repeater, renamed. Set up in its web dashboard.

openHop runs your repeater and publishes what it hears. You set the broker up in its web dashboard, on the Observer page.

  1. Open your repeater's dashboard and choose Configuration › Observer in the side menu.

    Screenshot to come: the Observer page, Observer Status and Broker Settings
    The Observer page.
  2. Click Edit Settings.

  3. Under Observer Setup, set IATA Code to BHS. Leave Status Interval at 300 seconds. Owner Companion Pubkey and Email are optional.

  4. Under Broker Settings, click Add. (From Template lists other networks' brokers; ours isn't one of them.)

  5. Fill in the Add Broker form, then click Done:

    Namebxmesh
    FormatLetsmesh
    EnabledOn
    TransportWebsockets
    Use JWT AuthOff
    Hostmqtt.bxmesh.net
    Port443
    Username<your username>
    Password<your password>
    Retain StatusOn
    InsecureOff
    Publish NeighboursOff
    Screenshot to come: the Add Broker form, filled in
    The Add Broker form.
  6. Click Save Settings.

  7. Check Observer Status: Handler shows Active and the bxmesh broker shows as connected. Your node appears on CoreScope within a few minutes.

    Screenshot to come: Observer Status with the bxmesh broker connected
    Connected.

There's no path or TLS switch to set: openHop connects with TLS on by default, at /mqtt, which our broker accepts.

Editing the file instead

Add the broker under mqtt_brokers in /etc/openhop_repeater/config.yaml (keep any brokers you already have in the brokers list), then restart with sudo systemctl restart openhop-repeater.

config.yaml
mqtt_brokers:
  iata_code: "BHS"
  brokers:
    - name: bxmesh
      enabled: true
      host: mqtt.bxmesh.net
      port: 443
      transport: websockets
      format: letsmesh
      username: <your username>
      password: <your password>
      retain_status: true
      tls:
        enabled: true
        insecure: false

meshcoretomqtt

A Raspberry Pi or Linux box bridging a node over USB.

meshcoretomqtt reads the packet log from a MeshCore node plugged in by USB, so the node needs firmware built with packet logging. It runs on a Raspberry Pi or any Linux machine with Python 3.11 or newer.

  1. Install it. The installer creates an mctomqtt user and service, and asks about brokers: you can skip its presets, as ours goes in the file in the next step.

    Install
    curl -fsSL https://raw.githubusercontent.com/Cisien/meshcoretomqtt/main/install.sh | sudo bash
  2. Put our broker in /etc/mctomqtt/config.d/99-user.toml, the file updates never overwrite:

    /etc/mctomqtt/config.d/99-user.toml
    [general]
    iata = "BHS"
    
    [[broker]]
    name = "bxmesh"
    enabled = true
    server = "mqtt.bxmesh.net"
    port = 443
    transport = "websockets"
    keepalive = 60
    qos = 0
    retain = true
    
    [broker.tls]
    enabled = true
    verify = true
    
    [broker.auth]
    method = "password"
    username = "<your username>"
    password = "<your password>"

    retain = true is right: meshcoretomqtt retains only its online/offline status, never packets. Leave remote serial off (it is by default): our logins can't receive commands, so it would only log refusals.

  3. Restart it and check it's running:

    Restart
    sudo systemctl restart mctomqtt
    sudo systemctl status mctomqtt

MeshCore observer firmware

An ESP32 node that streams over Wi-Fi by itself.

The MQTT observer firmware turns an ESP32 node into an observer with no computer attached: it joins your Wi-Fi and publishes straight to the broker.

  1. Flash it with the MeshCore Observer Flasher: choose MQTT Observer Firmware and your device, from Chrome or Edge.

  2. Open a console: USB serial at 115200 baud, or a repeater admin login from the companion app.

  3. Set the radio, the name, the region, Wi-Fi and our broker. Values run to the end of the line: no quotes.

    Commands
    set radio 915.075,125,9,5
    set name <your observer's name>
    set mqtt.iata BHS
    set wifi.ssid <your Wi-Fi network>
    set wifi.pwd <your Wi-Fi password>
    
    set mqtt3.preset custom
    set mqtt3.server wss://mqtt.bxmesh.net:443/
    set mqtt3.username <your username>
    set mqtt3.password <your password>
    
    reboot
  4. After it restarts, check it joined Wi-Fi and connected:

    Check
    get link.status
    get mqtt.status
Broker slotsSlots 1 and 2 start on Let's Mesh's US and EU analyzers. Boards with PSRAM can use all six slots, so slot 3 is free. Without PSRAM a board manages two secure slots at most: put ours in slot 2 instead (mqtt2 in place of mqtt3).