github Yeraze/meshmonitor v4.9.0

8 hours ago

MeshMonitor v4.9.0

A feature release focused on keeping your mesh healthy and your automations polite. v4.9.0 adds low-battery alerts for monitored nodes and an airtime-utilization cutoff that automatically pauses bot automations (auto-traceroute, auto-announce, timers, and more) whenever the connected node's Channel Utilization climbs above a threshold — so bots back off while real people are using the channel and resume once it quiets down. The Device Info telemetry graphs gain a time-range selector (15m–7d) with averaging that scales correctly across long windows on every database backend. Automation templates pick up a new {LAST_HOP} variable that resolves the last relay node. The per-source ignore list is now authoritative, re-applying the ignore flag (and re-pushing it to the radio) when a device drops it. On the fixes side, MQTT environment telemetry is visible again (keys now match serial ingestion, with a migration to repair history), and a PostgreSQL GROUP BY bug in the new averaged telemetry query — which returned HTTP 500 on Postgres deployments — was caught by the release system tests and fixed, with a Postgres regression test added to standard CI so it can't recur.

Features

  • Low-battery alerts for monitored nodes (#3310, closes #3305) — notify via Apprise / Web Push / Desktop when a monitored node's battery drops below a configurable threshold.
  • Airtime-utilization cutoff (#3311) — a "Cutoff Airtime Utilization Threshold" on the Automation page pauses all transmitting automations while the mesh is busy; live status banner, manual sends never blocked.
  • Telemetry time-range selector + scalable averaging (#3312) — 15m–7d window selector on the Device Info graphs, remembered per browser, with averaging that no longer truncates long windows.
  • {LAST_HOP} automation variable (#3320, closes #3318) — resolves the last relay node (short name → hex byte → unknown) in autoresponder/auto-ack templates.
  • Ignored-node auto-reapply (#3313, closes #2601) — the per-source ignore list is authoritative; re-applies and re-pushes the ignore flag when a device's node DB drops it.
  • MeshCore chat date separators (#3319, closes #3316) — separators between messages from different days.

Bug Fixes

  • Averaged telemetry graph query on PostgreSQL (#3327) — fixed an HTTP 500 from GET /api/telemetry/:nodeId on Postgres (GROUP BY functional-dependency error); added a Postgres regression test to pr-tests CI.
  • MQTT telemetry key normalization (#3315, closes #3314) — MQTT environment metrics now use the canonical keys serial uses, with a migration to repair existing rows, so they show in the graphs.
  • Unified source node count (#3323, closes #3321) — include MeshCore nodes in the count.
  • Apprise configuration (#3325, closes #3324) — fixed a UNIQUE constraint error when configuring Apprise for a second source.
  • MeshCore packet-log timestamps (#3317) — widened meshcore_packet_log timestamp/createdAt to BIGINT.
  • API rate limiter (#3309, closes #3308) — exempt RFC 1918 / loopback IPs so local/reverse-proxy traffic isn't throttled.
  • PWA chat input (#3307) — removed dead space below the chat input in the installed PWA.
  • MeshCore sidebar icons (#3306) — use lucide icons matching the MQTT/Meshtastic styling.

Issues Resolved

#3305, #3308, #3314, #3316, #3318, #3321, #3324, #2601


Full changelog: v4.8.3...v4.9.0

🚀 MeshMonitor v4.9.0

📦 Installation

Docker (recommended):

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

🧪 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.