πŸ“‘ PUW Region

Observer Node Setup Guide

Configure a MeshCore observer node to uplink packet data to the Palouse Mesh analytics network.

Not recommended for first-time users β€” set up a companion or repeater first.

On this page

  1. Firmware & Connection
  2. Radio & Power Configuration
  3. System & Timezone
  4. Identity & Security
  5. Location Coordinates
  6. Wireless Uplink (Wi-Fi)
  7. Packet Forwarding
  8. MQTT Telemetry & Routing
  9. Path Hash Mode
  10. Hierarchical Region Mapping
  11. Reboot
  12. Announce & Confirm on Network

PUW Region Only

This guide configures your node to connect to the Palouse Mesh private MQTT broker β€” infrastructure maintained for the PUW region (Palouse, Clearwater, and surrounding southeast Washington / north-central Idaho). If you're outside this region, please do not follow this guide β€” the broker at mqtt.jordanfstop.com is not open to the public and capacity is limited.

If you're already running a room server or observer node β€” especially one pointing to LetsMesh β€” replace it with this setup. This is the current recommended configuration for PUW region observers.

Already Running a Room Server on LetsMesh?

We strongly encourage migrating to this setup. LetsMesh has been effectively unmaintained β€” the developer has been AWOL and the service may go offline without warning. Nodes pointing only to LetsMesh are one outage away from going dark.

This guide sets up your node to feed MeshMapper and the Palouse Mesh broker (Beacon + CoreScope) β€” locally maintained infrastructure that isn't going anywhere.

Note for Repeater Observer Users

This firmware is community-maintained. The observer and room server roles are stable and well-suited for telemetry deployments. However, the repeater functionality is experimental β€” if your node is a high-traffic or critical repeater, stock MeshCore firmware is the safer choice. For nodes where observing is the primary purpose, this firmware is the right tool.

Before You Flash β€” Choose Your Role

Both are observer nodes β€” both uplink to MQTT and use the same radio settings. The Repeater Observer also rebroadcasts packets to extend mesh range. The Room Server Observer instead stores message history so companions can sync missed messages when they reconnect. Choose based on what you need the node to do beyond observing.

Repeater Observer

Rebroadcasts packets to extend mesh range while simultaneously observing and uplinking to MQTT. Note: repeater functionality in this firmware is experimental β€” see above.

Find your device β†’ select repeater_observer_mqtt

Room Server Observer

Stores message history so companions can sync missed messages. Requires stable power and more flash/RAM.

Find your device β†’ select room_server_observer_mqtt

Follow Steps in Order

Each step builds on the last β€” especially the region hierarchy commands, which must be entered in the exact sequence shown. Skipping or reordering steps will result in a misconfigured node.

1
Firmware & Connection

Go to observer.gessaman.com, find your specific hardware (e.g. Heltec V3, Heltec V4, LilyGo T-LoRa), and select the repeater_observer_mqtt or room_server_observer_mqtt variant matching your role above. Follow the on-screen steps to flash.

Once flashed, connect to the console via the Console button at meshcore.io/flasher. The remaining steps below are entered as commands there.

2
Radio & Power Configuration

Frequency, bandwidth, and spreading factor must match exactly across all nodes on the network β€” these define the physical-layer channel and a mismatch means nodes cannot hear each other at all.

# US/Canada LoRa preset β€” 910.525 MHz, BW62.5, SF7, CR5
set radio 910.525,62.5,7,5
set tx 22
Coding Rate (CR) β€” the last parameter β€” does not need to match between nodes and can be tuned independently per device. Leave it at 5 (the default) for most nodes. Higher values add error correction at the cost of airtime:
  • CR 5 (default) β€” fastest, least overhead. Best for most nodes with decent signal.
  • CR 6–7 β€” moderate error correction. Useful for marginal links.
  • CR 8 β€” maximum error correction, slowest. For noisy environments or very long distance hops.
Never change Freq, BW, or SF. CR is the only radio parameter you should consider adjusting.
3
System & Timezone

Set the timezone before configuring anything else to ensure accurate timestamps in message history and telemetry logs.

set timezone America/Los_Angeles
4
Identity & Security

Set the node name and IATA code for telemetry routing.

set name [LOCATION-SITE-OWNER]
set mqtt.iata PUW
4.5 β€” Identity Migration (optional)

If replacing or upgrading an existing node and want to preserve its network footprint β€” packet history, known contacts, map position β€” inject the private key from the old device before rebooting.

set prv.key [128-character hex key from old node]
Room Server only: Set a guest password that companions will enter when joining the room. This is separate from the admin password β€” guests only need the guest password for normal access.
set guest.password [CHANGE]
5
Location Coordinates

Setting coordinates places your node on the network map and improves routing telemetry. The easiest way is through the observer.gessaman.com β†’ Repeater Setup interface β€” connect your device and look for the location / coordinates fields. Alternatively, set them directly via the console:

set lat [decimal latitude]
set lon [decimal longitude]

For residential deployments, consider offsetting your coordinates by a block or two for privacy.

6
Wireless Uplink (Wi-Fi)
Wi-Fi is required. Without a working Wi-Fi connection, the node cannot reach any MQTT broker β€” observing and telemetry will not function at all. Confirm the network name and password are correct before continuing.

Provide your local Wi-Fi credentials. This is the backhaul that carries RF traffic to the MQTT brokers. Do not use quotes around values.

set wifi.ssid [your network name]
set wifi.pwd [your password]
7
Packet Forwarding (optional β€” please read)
Repeater Observer only. Skip this step for Room Servers β€” companions require the server to repeat traffic.

If deployed as a receive-only observer (PCB antenna, dense RF environment, or coverage-only role), disable forwarding to prevent unnecessary airtime congestion.

set repeat off
8
MQTT Telemetry & Routing
Heltec V3 (PSRAM variant) β€” slot limit: The V3 with PSRAM only supports 2 MQTT slots. Use mqtt1 for MeshMapper and mqtt2 for the Palouse Mesh broker instead of slots 3 and 4 shown below. All other commands are identical.
Slots 1 and 2 are typically occupied by LetsMesh presets. Since LetsMesh is effectively dead, it's fine to overwrite them β€” or leave them in place if you don't need the slots. They won't cause problems either way.
8.1 β€” Slot 3 Β· MeshMapper

Uses the built-in meshmapper preset to feed MeshMapper β€” a public LoRa mesh analytics network. No server address needed; the preset has it baked in.

set mqtt3.preset meshmapper
8.2 β€” Slot 4 Β· Palouse Mesh Private Broker

Bridges to mqtt.jordanfstop.com over secure WebSockets. This feeds Beacon and CoreScope β€” the local Palouse Mesh analytics dashboards.

set mqtt4.preset custom
set mqtt4.server wss://mqtt.jordanfstop.com
set mqtt4.port 443
9
Path Hash Mode VERY STRONGLY ENCOURAGED

Controls how many bytes are used to represent each hop in a packet's path. The firmware value is zero-indexed β€” so set path.hash.mode 1 selects 2-byte hashing, not 1-byte.

Command value Bytes per hop Unique values Notes
mode 0 1 byte 256 Default β€” collisions on any real network
mode 1 βœ“ 2 bytes 65,536 Recommended for PUW region
mode 2 3 bytes 16,777,216 Higher overhead, large networks only
set path.hash.mode 1
10
Hierarchical Region Mapping
Repeater and observer nodes only. If you're running a companion/client device, skip this step β€” region tags are configured on infrastructure nodes, not phones or handhelds.

Tells the mesh where this node sits geographically, so traffic can be scoped appropriately. Requires firmware v1.16.0+. This follows the proposed PNW region scope practice.

region def west pnw wa e-wa puw|e-wa geg
region save

When someone sends a message scoped to puw, only repeaters that explicitly carry puw will forward it. There is no automatic inheritance β€” a node carrying wa but not puw will not forward puw-scoped traffic. Every ancestor in the chain must be listed so this node participates at each level of scope.

Why each tag is included

west Root of the tree β€” Western US and SW Canada. Lets this node forward mesh-wide announcements. Without it, west-scoped traffic won't pass through.
pnw Pacific Northwest (WA, OR, ID, MT, BC). Lets this node forward cross-state regional traffic. Without it, pnw-scoped messages β€” emergencies, nets, region-wide announcements β€” stop here.
wa Washington state. Lets this node forward statewide traffic. Carrying pnw alone is not enough β€” wa-scoped messages need wa explicitly.
e-wa Eastern Washington β€” this side of the Cascades. Lets this node forward traffic scoped to the eastern half of the state without it reaching the Seattle side.
puw|e-wa Pullman–Moscow / Palouse area (PUW = Pullman–Moscow Regional Airport). The primary local scope β€” this is the tag most messages on Palouse Mesh will use. The |e-wa sets its parent; geg follows as a second child of the same parent.
geg Spokane metro (GEG = Spokane International Airport). High-site nodes on the Palouse have line-of-sight into the Spokane area, so carrying geg lets them serve both communities. Included while region scoping adoption is still early β€” will be revisited once the broader network is more consistent.
region save Commits the tree to persistent memory. Without this, the entire hierarchy is lost on reboot.
Older firmware (v1.14.x and earlier): region def is not available. Use region put <tag> <parent> for each level instead, and after each one run region allowf <tag> to add it to the flood list. On v1.15.0+, region put enables flooding by default so allowf is not needed. On v1.16.0+, use region def as shown above.
Region names are administrative β€” they never appear in packets. Use gessaman.com/meshcore/regions/ to generate a config for a different location or site type.
Default region scope: Leave your node's default region scope at the firmware default for now. No one in the PUW network has standardized on a default yet β€” further coordination is needed before changing this setting. Only the region def hierarchy above is being adopted at this time.
11
Reboot

A full restart is required to initialize the radio and network stack with the committed configuration.

reboot

After reboot, verify the configuration is active before moving on:

12
Announce & Confirm on Network

Send an advertisement to announce your node and trigger it to appear in dashboards. This can be done from the serial console, meshmonitor web UI, or any connected interface:

advert

Then confirm your node is live in three places:

CoreScope β€” Palouse Mesh Observer List (confirms slot 4)
Open map.palouse-mesh.net/#/observers and look for your node name. It should appear Online with a recent Last Update timestamp. CoreScope is fed by mqtt.jordanfstop.com β€” appearing here confirms slot 4 is delivering data to the Palouse Mesh broker.
Beacon β€” Palouse Mesh Analytics (also confirms slot 4)
Open beacon.palouse-mesh.net and check that packets from your node are appearing. Beacon subscribes to the same mqtt.jordanfstop.com broker β€” either CoreScope or Beacon appearing is sufficient to confirm slot 4 is live.
MeshMapper β€” Observer Badge (confirms slot 3)
Open puw.meshmapper.net, use the region dropdown, and select Observers. Your node should appear with an M badge β€” this confirms slot 3 (meshmapper preset) is feeding data independently of slot 4.

The LM badge next to your node reflects slots 1 & 2 (LetsMesh presets). If you didn't configure those slots, it will show disconnected or stale β€” that's expected and fine. The M badge is the one to verify.

Resources

Node Setup
Dashboards
Community