MeshMonitor v4.12.5
This release completes the MeshCore Virtual Node command surface: a companion app (meshcore-flutter) connected to a MeshMonitor Virtual Node can now do nearly everything it could against a physically-attached node. Building on 4.12.4's config forwarding, the app can now send self-adverts, log in to remote nodes, trace paths, and request LPP telemetry — each relayed to the real node with the correct Sent→async-push handshake and correlated the way the app expects — and the node's raw RX feed is bridged to apps as a LogRxData push so channel-finder and packet-inspection tools work through the VN. All of this was validated end-to-end against live hardware. On the LoRa side, the modem-preset picker now filters presets that would be illegal for the selected region and warns when picking a licensed amateur-radio region, with RegionCode values 33–37 added. A batch of MeshCore fixes lands too: clock sync now sets the repeater to the real current time, repeater SNR is scaled correctly (quarter-dB /4), a saved static position no longer clobbers live GNSS fixes, and initial auto-connect retries with backoff. Rounding it out: per-node free-text notes, conversation content search, an automation MeshCore scope condition, a guard against a bad saved regex bricking automations, plus dependency and translation updates.
Features
- MeshCore Virtual Node — app can send adverts, log in, trace paths, and request telemetry (#3904):
SendSelfAdvert(#3959);SendLogin→LoginSuccess,SendTracePath→TraceData,SendTelemetryReq→TelemetryResponse(#3961). Hardware-validated. - MeshCore Virtual Node — raw RX feed bridged to apps as a
LogRxData(0x88) push (#3964, closes #3963). - LoRa region legality — filter modem presets by region legality (#3936) and warn on licensed amateur-radio regions (#3930) (#3924).
- Nodes — per-node free-text notes field (#3932, closes #3921).
- Messages — search conversations by content, extended to MeshCore DMs (#3931, #3935, closes #3922).
- MeshCore packet-log export — decode unencrypted packet data (#3939, closes #3937).
- Automation — MeshCore scope condition + self-origin guard (#3920, closes #3914).
Bug Fixes
- MeshCore:
clock syncnow sets the repeater to the real current time (#3957, closes #3954). - MeshCore: repeater SNR was reported 4× too high — now scaled by /4 (#3956, closes #3955).
- MeshCore: static contact position no longer clobbers live GNSS telemetry fixes (#3909).
- MeshCore: initial auto-connect now retries with backoff (#3919).
- Automation: a stored bad
filterNameRegexcan no longer brick automations (#3938, closes #3934). - Automation: send/request actions can now reach MeshCore sources (#3917, closes #3915).
- Config: add RegionCode values 33–37 + fix ITU2_2M label (#3928, closes #3927).
- Map: show direct-heard SNR in the node hover tooltip (#3929, closes #3925).
- Dashboard map: collapse toggle for the Features panel (#3913, closes #3912).
- Hardware: rename hwModel 128 to
MESH_TRACKER_X1(#3958, closes #3952). - PirateWeatherADV example script: "read operation timed out" under Timed Events — timeouts bumped, 30s kill-timeout docs corrected (#3942).
Dependencies
- Bumped the production-dependencies group (8 updates) plus
@types/node,globals,@typescript-eslint/parser,puppeteer, andtsx(#3945, #3946, #3948, #3949, #3950, #3951).
Translations
- Updated from Hosted Weblate (#3601). Thanks to the translators. 🌍
Issues Resolved
#3904, #3963, #3954, #3955, #3952, #3934, #3927, #3924, #3925, #3922, #3921, #3937, #3915, #3914, #3912
Full Changelog: v4.12.4...v4.12.5
🚀 MeshMonitor v4.12.5
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:4.12.5🧪 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.