KYKB — Base & MQTT Gateway
Active!f688dea8ThinkNode M2 (ESP32-S3)
Indoor home base and the fleet's single MQTT gateway — the one door between the RF mesh and the internet. Temporary hardware pending the RAK WisMesh Station HP.
Commissioned September 12, 2026Notes updated September 12, 2026
Radio
- Hardware
- ThinkNode M2 (ESP32-S3)
- Firmware
- 2.7.26
- Role
- CLIENT_MUTE
- Region
- US
- Modem preset
- MEDIUM_FAST
- Frequency slot
- —
- Hop limit
- 5
- TX power
- 30 dBm
- Node ID
- !f688dea8
- MQTT
- mqtt.meshtastic.org:1883 (TLS off, root msh/US/FL)
Power
- Source
- mains
- Solar
- —
- Battery
- —
- Chemistry
- —
- Notes
- Bare board, no battery, on a UPS USB jack. Write reliability tracks power — confirm 100% before any wireless config, or use serial.
Site
- Deployment
- fixed-indoor
- Area
- Boca Raton, FL
- Grid square
- —
- Elevation
- —
- Fixed position
- yes
- Position precision
- 13 bits (fuzzed)
Remote admin
- Master slot
- M2 (admin master)
- Public key
- 7CDjTOmJVFaNrf+KNd1+eYZYQ7mIjMN43xtwDx8N3nY=
Other
- GPS mode
- NOT_PRESENT — fixed node, position set manually
- Coordinates
- decoy cluster point, not the real location
- Wi-Fi
- enabled — required for MQTT
- NTP
- meshtastic.pool.ntp.org
- MQTT uplink / downlink
- on / off (single gateway, no loops)
- Map reporting
- on, precision 13 (~4 km), decoy coordinates
- Heap
- ~250 KB ceiling, PSRAM 0 — why TLS, JSON and S&F stay off
Note on COM ports:
COM##numbers here are examples — your port will differ. On Windows check Device Manager → Ports (COM & LPT); on macOS/Linux use the/dev/tty.*,/dev/ttyUSB*, or/dev/ttyACM*path.
⚠ The power rule — read this first
This node’s write reliability tracks its power. The M2 must read 100% power (getting full, clean power) to reliably accept configuration commands over wireless (Wi-Fi/
--host). At anything less than 100%, it may silently drop or fail commands over wireless — the CLI reports success, but the node never reboots and nothing persists (a re-read shows the old value).Why: it’s a bare board with no battery to buffer power. On a marginal USB supply the radio and config commits become unreliable. This is the root cause of every “Wi-Fi write failed on KYKB” symptom.
Practical rules:
- Before any wireless config, confirm the node shows 100% power. If it’s lower, fix the power source first — or use serial.
- Serial (USB) always works because the cable supplies solid power. When in doubt, configure over serial.
--get securityover the network also returns the private key in the clear — another reason to read/write security over serial.
Purpose & Role
KYKB has two jobs:
- Home base — an always-on indoor node on the local network.
- The single MQTT gateway — the only node that connects the mesh to the Internet, bridging RF traffic to the public MQTT broker and the map. All other KYK nodes are RF-only.
Because a dedicated ROUTER (KYKR) already covers the area, KYKB does not relay — it’s a quiet client (CLIENT_MUTE) that happens to hold the gateway connection. The full single-gateway / uplink-on / one-downlink design and the loop-prevention reasoning are in the Gateway & MQTT Architecture doc; this page is the node config.
1. Configuration (verified over serial)
| Section | Setting | Value | Purpose |
|---|---|---|---|
| Device | role | CLIENT_MUTE | Doesn’t relay — won’t compete with the router (KYKR) |
| Device | node_info_broadcast_secs | 10800 | NodeInfo every 3 h |
| Position | fixed_position | true | Stationary base |
| Position | gps_mode | NOT_PRESENT | Fixed node; position set manually, no GPS chase |
| Position | (coordinates) | decoy cluster point | Not the real location; shares one map pin with router |
| Network | wifi_enabled | true | On — this node needs the network for MQTT |
| Network | ntp_server | meshtastic.pool.ntp.org | Public time source |
| LoRa | region / preset | US / MEDIUM_FAST | Must match the mesh |
| LoRa | hop_limit | 5 | Fleet standard |
| LoRa | tx_power | 30 | — |
| Channel 0 | position_precision | 13 (~4 km) | Public map presence, not real location |
| Power | (defaults) | always-on indoor | No aggressive sleep |
MQTT (gateway settings) — full rationale in the Gateway doc; the node-level facts, all verified:
- MQTT enabled, broker
mqtt.meshtastic.org:1883(explicit port), rootmsh/US/FL, encryption on, JSON off. - TLS off (port 1883). On this ESP32 hardware the TLS handshake exhausts RAM and the node silently stops publishing.
- map_reporting on,
map_report_settings.position_precision13 (~4 km) — present on the public map, but blurred and at the decoy coordinates, not the real location. - Primary channel uplink on, downlink off (single gateway, no loops).
MQTT config standard (fleet-wide): any node doing MQTT must use the explicit port :1883 and have TLS off — the known performance/stability fix on this hardware. KYKB is compliant.
2. CLI Procedure (serial — see the power rule)
Configure KYKB over USB serial, not Wi-Fi. Before any wireless config confirm the node reads 100% power (see the power rule above); on a marginal supply wireless writes silently fail. Serial always works. Every committed write reboots the node; wait 60–90 s. COM## is an example — check Device Manager.
Step 1 — core config (one transaction, one reboot):
meshtastic --port COM21 --begin-edit --set device.role CLIENT_MUTE --set device.node_info_broadcast_secs 10800 --set position.fixed_position true --set lora.region US --set lora.modem_preset MEDIUM_FAST --set lora.hop_limit 5 --set lora.tx_power 30 --commit-edit
Step 2 — public channel precision (approximate location):
meshtastic --port COM21 --begin-edit --ch-index 0 --ch-set module_settings.position_precision 13 --commit-edit
Step 3 — MQTT gateway (the single-gateway settings):
meshtastic --port COM21 --set mqtt.enabled true
meshtastic --port COM21 --set mqtt.address mqtt.meshtastic.org:1883
meshtastic --port COM21 --set mqtt.tls_enabled false
meshtastic --port COM21 --set mqtt.encryption_enabled true
meshtastic --port COM21 --set mqtt.json_enabled false
meshtastic --port COM21 --set mqtt.map_report_settings.position_precision 13
Primary channel uplink on / downlink off is the loop-safe gateway setting (see the Gateway doc). Leave TLS off — the ESP32 TLS handshake exhausts RAM.
Step 4 — admin keys (this node is a master; it holds the other two — see the Admin Keys section). Set one key per command, over serial; if the list is ever wrong, clear with --set security.admin_key 0 first, then re-add.
Then verify (Section 6).
3. Channels
| Index | Name | Precision | Notes |
|---|---|---|---|
| 0 | (primary) | 13 (~4 km) | Public, approximate location |
| 1 | (private) | 32 (full) | Excluded from public docs |
| 2 | — | — | No Reach-Ed on this node (it’s the gateway, not a contact node) |
4. The heap reality
KYKB shares the ThinkNode ~250 KB heap ceiling and reports Total PSRAM: 0 (the advertised 8 MB is not usable). Consequences that shape its config:
- TLS can’t run (RAM) → port 1883, TLS off.
- JSON off, Store-and-Forward off to keep heap headroom.
- Low-heap warnings have needed JSON off, S&F off, downlink off, and a NodeDB reset to clear.
This — plus the no-battery power fragility — is why it’s a stopgap gateway.
5. Remote Admin Keys
KYKB is a master (M2). Under the “every node carries all masters except its own” rule, it holds the other two:
- M1 / handheld:
base64:hytoF5RjxNLoFVmWDPu43kr185CKiwivBKfnuguf/Fs= - M5 / travel:
base64:4VyAwe95ytDwLrWEUYaQDNeLbGg7QEOX5oO/g1NyqGg=
Set over serial, one key at a time — the admin-key list is the write most prone to corruption over wireless on this node (it produced empty/duplicate slots earlier, which traces back to the same power/wireless issue). See the Admin-Key ADR.
6. Verification (over serial)
meshtastic --port COM21 --get device --get position --get lora --get network
meshtastic --port COM21 --get mqtt
meshtastic --port COM21 --get security
meshtastic --port COM21 --info | findstr /i "precision Index role"
Expected: role CLIENT_MUTE; wifi_enabled true; lora hop 5 / MEDIUM_FAST / US; Channel 0 precision 13; mqtt enabled, address mqtt.meshtastic.org:1883, TLS off (absent tls_enabled line = off), map_report precision 13, uplink on / downlink off; admin_key lists M1 + M5 (no empties); hwModel THINKNODE_M2.
If a value is wrong and a wireless --set “succeeds” but doesn’t stick — check the node reads 100% power, then redo over serial.
7. Note: KYKB is temporary
KYKB (ThinkNode M2) is the gateway for now — a bare board, no battery, on a UPS USB jack, indoor-only, at the edge of its heap as a gateway and power-fragile without a battery. It will be replaced by the RAK WisMesh Station HP (RAK8623), a Linux meshtasticd host with room for Mosquitto, Node-RED, and Store-and-Forward, for better stability as the permanent single gateway. When the RAK is in service, KYKB reverts to a plain client or spare. The gateway architecture doesn’t change with the swap — only the hardware under the “gateway” box.
8. Operating Notes
- Confirm 100% power before any wireless config; otherwise use serial. Wireless writes fail on a marginal supply because it’s a battery-less board.
- It’s the single MQTT gateway — keep it the only downlinker (loop prevention; see Gateway doc).
- MQTT standard:
:1883+ TLS off (compliant). - It’s a master (M2): set admin keys over serial only; lock with a non-default BLE PIN.
- Temporary until the RAK WisMesh Station HP arrives.