github Yeraze/meshmonitor v4.5.2
MeshMonitor v4.5.2 — MeshCore Channel Support

4 hours ago

MeshMonitor v4.5.2 — MeshCore Channel Support

A focused follow-up to v4.5.1 — MeshCore TCP Support that closes the last big gap in the MeshCore subsystem: end-to-end channel management from the MeshMonitor UI. Connect a MeshCore Companion and MeshMonitor now reads the device's channel list on connect, displays each channel as its own tab in the MeshCore page with the sent/received messages segregated correctly, and exposes a per-source Configuration UI to add, rename, regenerate the AES-128 secret of, or delete channels — every write goes to the device first and the local mirror is reconciled afterwards. The new send path is channel-idx aware so a message typed in any tab actually reaches that channel instead of falling back to slot 0. Several rough edges from initial real-hardware testing are also smoothed over: the firmware's MAX_CHANNELS placeholders (typically 40 on Companion builds) are filtered out so you only see configured slots, stale empty rows from earlier syncs are auto-cleaned, the DM-view sidebar excludes the channel pseudo-pubkeys and the local node, and the route layer now talks to the correct MeshCore manager registry instead of silently falling back to the Meshtastic singleton. On the Meshtastic side, a long-standing map issue is fixed: per-node position-accuracy boxes now reflect each sending node's own precision_bits instead of the local node's channel setting. The release also flips the changelog links to open in a new tab so a context-switch doesn't blow away the page.

✨ Features

  • #3034MeshCore channel CRUD + connect-time sync (phase 1/3). MeshCoreManager exposes listChannels / setChannel / deleteChannel and mirrors the device's channel list into the shared channels table on every connect. AES-128 secrets are stored base64-encoded in the existing psk column; cleanupInvalidChannels is source-type-aware so MeshCore's higher channel indices survive cleanup.
  • #3038Display device channels in MeshCoreChannelsView (phase 2/3). The hardcoded single "Public" entry is replaced by one tab per device-reported channel. Per-channel filter handles both received and locally-sent messages; the manager's sendMessage and the /api/meshcore/messages/send route both grew an optional channelIdx so non-channel-0 sends actually go to the right channel.
  • #3039Channel create / edit / delete UI (phase 3/3). New MeshCoreChannelsConfigSection mounted inside MeshCoreConfigurationView. Add channel (auto-assigns the lowest free idx, seeds a 16-byte random secret via crypto.getRandomValues), edit, regenerate-secret, and delete. Secret displayed as hex with masked-by-default show/copy toggles. Backend PUT/DELETE /api/channels/:id routes are source-type-aware — MeshCore drops the 0-7 cap, widens name to 31 bytes, and routes the write through the manager.

🐛 Bug Fixes

  • #3033Per-node position precision boxes. Map accuracy boxes now use each sending node's own precision_bits instead of the local MeshMonitor node's channel setting. Removed the local-channel fallback in both the Position and NodeInfo handlers, plus the "smart upgrade/downgrade" logic that was holding onto a stored higher precision for up to 12 hours and refusing legitimate downgrades. Closes #3030.
  • #3040MeshCore channels post-deploy polish. Filters out empty slots so the firmware's MAX_CHANNELS (typically 40 on Companion builds) doesn't leak placeholder rows into the UI; the next sync after upgrade auto-cleans existing leaked rows from the DB. Fixes the route layer to pull the MeshCore manager from the correct meshcoreManagerRegistry instead of the Meshtastic fallback (was producing mcManager.setChannel is not a function). DM-view sidebar now filters out the channel-N synthetic pubkeys and the locally-connected node.

🪟 UX

  • #3037Changelog links open in a new tab so clicking through doesn't unload the page. Closes #3035.

⬆️ Upgrade Notes

  • No migrations. The MeshCore channels feature reuses the existing channels table — Meshtastic-only columns (role, uplinkEnabled, downlinkEnabled, positionPrecision) stay null for MeshCore rows.
  • Existing MeshCore installs: after upgrade, the next connect-time sync will run the new reconcile pass and automatically remove the 38-or-so empty placeholder rows that older builds wrote to the channels table. No manual cleanup needed.
  • Position accuracy boxes will start reflecting each remote node's actual precision_bits. If you had previously seen all boxes mirror your local node's setting, that was the old smart upgrade/downgrade behavior holding stale precision; the new packets will repopulate within minutes.
  • API change (additive): PUT/DELETE /api/channels/:id accept higher channel IDs (>7) when the target source is MeshCore. The Meshtastic 0-7 cap is unchanged.

Issues Resolved

  • #3030 — Position accuracy boxes wrong size
  • #3035 — Open changelog links in new tab

Full Changelog

v4.5.1...v4.5.2

🚀 MeshMonitor v4.5.2

📦 Installation

Docker (recommended):

docker run -d \
  --name meshmonitor \
  -p 8080:3001 \
  -v meshmonitor-data:/data \
  ghcr.io/Yeraze/meshmonitor:4.5.2

🧪 Testing

✅ All tests passed
✅ TypeScript checks passed
✅ Docker images built for linux/amd64, linux/arm64, linux/arm/v7

📋 Changes

See commit history for detailed changes.

Don't miss a new meshmonitor release

NewReleases is sending notifications on new releases.