Skip to content

v4.5.0 — Live RF Coverage Map

Choose a tag to compare

@SimmerV SimmerV released this 10 Jul 23:37
336abf9

Live network coverage, baked server-side — an always-on map layer that shows where your whole mesh can actually be heard, rendered against real terrain and refreshed as nodes move.

New: Live Coverage map layer

Where the interactive Coverage tool answers "what can this pin reach?", the new live layer answers it for every node at once, continuously. A dedicated coverage worker renders each node's predicted RF coverage against real terrain and clutter, composites the results into map tiles, and MeshInfo serves them as a fast, always-on layer — no clicking, no waiting, the same view for everyone.

  • Whole-mesh coverage — every positioned node's ITM (Longley–Rice) margin is computed against real terrain (Tilezen DEM) plus NLCD land-cover, ETH canopy, and JRC/GHS building clutter, then composited into a single coverage surface
  • Per-modem-preset layers — separate coverage for all, LongFast, MediumFast, and the rest; toggle to the preset you care about (nodes grouped by their channel's modem preset)
  • Live over SSE — as nodes move, appear, or age out, only the affected tiles rebake and the layer updates in place — no reload
  • Hover lookup — hover any point to see which nodes reach it, pulled from the same baked data
  • Antenna height from telemetry — each node's height comes from its reported altitude (AGL) instead of a flat assumption; router-role nodes model out to 300 km
  • Modeling — the coverage pill spells out the assumed receiver, and a toggle hides node markers so you can read the paint underneath

Under the hood

  • Incremental bakes — a per-node margin cache re-renders only the nodes that actually moved; a streaming compositor with write-through tile flush keeps worker memory flat regardless of mesh size
  • 100 m paint via per-node slices, parallel render workers, and z5–z11 tile pyramids

Deploying it

  • New coverage-worker service — this release adds a container that does the baking. To turn the layer on: add the coverage-worker service (see docker-compose.yml), set [coverage] enabled = true (+ tile_dir) in config.toml, and MeshInfo serves tiles at /tiles/coverage/{group}/…
  • Tune for your host via COVERAGE_* env — recency window, meters/pixel, DEM size, render-worker count, and recompute floor
  • Terrain-only works out of the box; drop baked output/{landcover,canopy,buildings} in for full clutter fidelity
  • Sized for small hosts — validated on a 16-core dev box and capacity-tested on a 3 vCPU / 4 GB VPS; keep a realistic recency window (e.g. 24 h) so bake cycles stay cheap

Upgrade notes

  • Opt-in, no migrations — if you don't add the coverage-worker service or enable [coverage], nothing changes and the layer simply won't appear. No database migrations or breaking config changes.

Full Changelog: SimmerV/meshinfo@v4.4.0...v4.5.0