← Nodes

KYKN — Travel & Work Office

Active

ThinkNode M5 (ESP32-S3)

Portable node for the work office and out-of-town travel. Quiet at home so it never competes with the router; promoted to CLIENT at the office.

Commissioned September 12, 2026Notes updated September 12, 2026

  • portable
  • admin-master
  • travel

Radio

Hardware
ThinkNode M5 (ESP32-S3)
Firmware
2.7.26
Role
CLIENT_MUTE
Region
Modem preset
Frequency slot
Hop limit
5
TX power
Node ID
MQTT
off

Power

Source
battery
Solar
Battery
Chemistry
Notes
Wi-Fi off by default — it is the main drain on this node.

Site

Deployment
portable
Area
Grid square
Elevation
Fixed position
no
Position precision

Remote admin

Master slot
M5 (admin master)
Public key
4VyAwe95ytDwLrWEUYaQDNeLbGg7QEOX5oO/g1NyqGg=

Other

GPS update interval
120 s
Smart broadcast
on, 100 m minimum
Position broadcast
3600 s (firmware floor)
Wi-Fi
disabled by default, credentials retained
NTP
meshtastic.pool.ntp.org
Map reporting
off — does not publish location publicly

Note on COM ports: The COM## numbers in this guide are the author’s own, shown as examples — your port will differ. On Windows, open Device Manager → Ports (COM & LPT) with the node plugged in to find the COM number your device enumerated as, and use that in place of the example in every command. On macOS/Linux the equivalent is a /dev/tty.*, /dev/ttyUSB*, or /dev/ttyACM* path. Always confirm your own port before running these commands.

Purpose & Design Intent

This profile is for a member’s portable node — one that rides along on trips and sits at a work office, not a fixed home station.

A key assumption: the home site already has a dedicated ROUTER node. Because a router is already covering the home area, this node does not relay at home — it is left as a quiet client (CLIENT_MUTE) so it doesn’t compete with the home router on the air. When the node is at the office, away from the home router, it can be temporarily promoted to a relaying role so it helps other office nodes reach each other (see Alterations).

Battery is a priority. GPS runs, but Wi-Fi is disabled by default; it draws almost nothing until you deliberately turn it on to reach the node over the network.


1. Target Configuration (verified)

Section Setting Value Purpose
Device role CLIENT_MUTE Quiet client; doesn’t relay near the home router
Device node_info_broadcast_secs 10800 NodeInfo every 3 h
Position fixed_position false Node moves — must not be pinned
Position gps_mode ENABLED Live GPS
Position gps_update_interval 120 Fix cadence, seconds
Position position_broadcast_smart_enabled true Send position when it actually moves
Position broadcast_smart_minimum_distance 100 Metres moved before a smart send
Position position_broadcast_secs 3600 Stationary heartbeat (see note)
Network wifi_enabled false Off by default to save battery; credentials retained
Network ntp_server meshtastic.pool.ntp.org Public time source; works anywhere
MQTT map_reporting_enabled false Does not publish its location to the public map

Firmware-floor note: On this firmware the M5 will not hold position_broadcast_secs below 3600 or broadcast_smart_minimum_interval_secs below 300. Lower values are accepted by the CLI, then revert on the next reboot. These are treated as the working floors — smart broadcast (movement-based) does the real work while travelling, and 3600 s is only the idle heartbeat. Do not keep re-trying lower values.


2. CLI Procedure (Windows CMD, serial)

Before starting

  1. Disconnect the phone app from the node (Bluetooth + serial together makes writes unreliable).
  2. Connect by USB; confirm the COM port in Device Manager (COM16 at time of writing).
  3. Every committed write reboots the node — wait 60–90 s before the next command. If the port drops mid-run, that’s the reboot; wait and re-run the same command.

Step 1 — Config transaction (one reboot)

meshtastic --port COM16 --begin-edit --set device.role CLIENT_MUTE --set position.fixed_position false --set position.gps_mode ENABLED --set position.gps_update_interval 120 --set position.position_broadcast_smart_enabled true --set position.broadcast_smart_minimum_distance 100 --set mqtt.map_reporting_enabled false --set network.ntp_server meshtastic.pool.ntp.org --commit-edit

Step 2 — Wait for reboot, then verify (Section 4).

Step 3 — Confirm Wi-Fi is off (default, but check)

meshtastic --port COM16 --set network.wifi_enabled false

CLI rules learned on this hardware

  • --begin-edit … --commit-edit batches multiple --set fields into a single reboot over serial. The multi-field timeout problem only appears over RF (remote --dest), not on the serial cable.
  • A large transaction may ack but silently drop one or two fields. Always verify with --get, then re-send any missed field one at a time.
  • --get prints only non-default fields. A missing fixed_position or wifi_enabled line means it’s at its default (false) — absence is not failure.
  • position_broadcast_secs and broadcast_smart_minimum_interval_secs will not hold below their firmware floors (3600 / 300); accept them.

3. iOS / Android App Procedure (Meshtastic app)

Use if a cable isn’t available. A GUI save rewrites the whole section, so re-verify with the CLI when you can.

Connect to the node over Bluetooth, then:

Settings → Radio Configuration → Device

  • Device Role: Client Mute
  • Node Info Broadcast Interval: 3 hours
  • Save

Settings → Radio Configuration → Position

  • GPS Mode: Enabled
  • Fixed Position: Off
  • GPS Update Interval: 2 minutes
  • Smart Position: On
  • Minimum Distance: 100 m
  • Position Broadcast Interval: leave at default (1 hour — the node won’t accept lower)
  • Save

Settings → Radio Configuration → Network

  • WiFi Enabled: Off
  • (Leave the stored SSID / password in place so it’s one toggle to bring Wi-Fi back)
  • NTP Server: meshtastic.pool.ntp.org
  • Save

Settings → Module Configuration → MQTT

  • Map Reporting: Off
  • Save

Each save reboots the node; wait for it to reconnect before the next section.


4. Verification

Commands

meshtastic --port COM16 --get position --get network
meshtastic --port COM16 --get mqtt
meshtastic --port COM16 --info | findstr /i "wifi role"

Expected values

role: CLIENT_MUTE
position.gps_mode: 1            (ENABLED)
position.gps_update_interval: 120
position.position_broadcast_smart_enabled: True
position.broadcast_smart_minimum_distance: 100
position.position_broadcast_secs: 3600      (firmware floor)
network.ntp_server: meshtastic.pool.ntp.org
wifiEnabled: false
  • fixed_position should be absent (= false). If it prints True, re-send --set position.fixed_position false.
  • map_report_settings / map reporting should be off — the node must not publish location to the public map.
  • hwModel should read THINKNODE_M5 and hasWifi: true — confirms you’re on the right node.

Field check

  • role = CLIENT_MUTE
  • fixed_position absent (false)
  • gps_mode = 1, gps_update_interval = 120
  • smart position on, min distance = 100
  • wifi_enabled = false, SSID/PSK still stored
  • ntp = public pool
  • map reporting off

5. Alterations (run as your situation changes)

A. Turn Wi-Fi on / off (battery vs. network access)

Wi-Fi is off by default. Turn it on only when you need to reach the node over the network; turn it back off to save battery.

ON:   meshtastic --port COM16 --set network.wifi_enabled true
OFF:  meshtastic --port COM16 --set network.wifi_enabled false

On the road you’ll usually do this in the app instead: Settings → Radio Configuration → Network → WiFi Enabled.

Important: the node stores one Wi-Fi network at a time. The toggle only connects where that stored SSID exists (e.g. your home network). At the office, a hotel, or anywhere new, set that location’s SSID and password first, then enable Wi-Fi:

meshtastic --port COM16 --set network.wifi_ssid "<network name>"
meshtastic --port COM16 --set network.wifi_psk "<password>"
meshtastic --port COM16 --set network.wifi_enabled true

B. Promote to a relaying role at the office (and revert when leaving)

At the office — away from the home router — you can let this node relay for other office nodes. Revert it before bringing it home, so it doesn’t compete with the home router.

AT THE OFFICE:  meshtastic --port COM16 --set device.role CLIENT
LEAVING/HOME:   meshtastic --port COM16 --set device.role CLIENT_MUTE

Each reboots the node. Run over whichever transport you have (USB serial, Bluetooth in the app, or over the network if Wi-Fi is on).


6. Remote Admin Keys (applied & verified)

This node can be administered remotely by the fleet’s admin (“master”) nodes using Meshtastic PKC admin. It carries the public keys of the other two masters — not its own, since a node never needs its own admin key. See the global Admin-Key ADR for the full model and rationale.

KYKN (M5) holds:

  • M1 / handheld: base64:hytoF5RjxNLoFVmWDPu43kr185CKiwivBKfnuguf/Fs=
  • M2 / base: base64:7CDjTOmJVFaNrf+KNd1+eYZYQ7mIjMN43xtwDx8N3nY=

Applied (one transaction, one reboot):

meshtastic --port COM16 --begin-edit --set security.admin_key "base64:hytoF5RjxNLoFVmWDPu43kr185CKiwivBKfnuguf/Fs=" --set security.admin_key "base64:7CDjTOmJVFaNrf+KNd1+eYZYQ7mIjMN43xtwDx8N3nY=" --commit-edit

Repeated --set security.admin_key appends to the list (it does not overwrite). Verify:

meshtastic --port COM16 --get security

Confirmed output lists both keys under security.admin_key. These are public keys — safe to publish. Only the matching private key, held on the handheld/base, can actually administer this node.


7. Private Channel (set up on the device, then share by QR)

This document intentionally does not include private channel keys or names. To add a private/group channel, create it once on a device in the Meshtastic app (Settings → Channels → add a channel, give it a name and let it generate a key), then share it to other members by having them scan the channel QR code the app produces. That copies the channel — name and encryption key — onto their node without anyone typing or publishing the key.


8. Operating Notes

  • Keep Wi-Fi off unless you need network access — it’s the main battery drain on this node.
  • Default role is CLIENT_MUTE; only promote to CLIENT at the office, and always revert before coming home.
  • The node reports position live while moving (smart broadcast) and once an hour when parked.
  • It does not report its location to the public map.
  • Any time the app writes to the node, re-run the Section 4 verification when you’re next on a cable.