MeshDash Docs
R2.0
/
Home Frontend Guide Analysis Tools

Analysis Tools

Frontend Guide meshshark traceroute compare analytics packet analyser bpf filter snr history chart time range
MeshShark packet analyser, Traceroute, Node Comparison, and Analytics — how each tool works and what data it uses.

MeshShark (Packet Analyser)

MeshShark is a Wireshark-inspired live packet capture view. It shows every packet received by MeshDash with full decoding and filtering.

Live vs History Mode

CAPTURING (live)
New packets arrive via SSE packet events in real time. Buffer shows up to the in-memory limit.
LOAD DB (history)
Loads packets from GET /api/packets/history. Useful for post-event analysis. Live capture pauses.
CLEAR
Clears the in-view buffer (does not delete database records).

BPF Filter Syntax

The filter bar supports a custom Berkeley Packet Filter (BPF)-style syntax. Multiple terms are ANDed together:

FilterExampleEffect
type:Xtype:MessageShow only packets of this app type
src:Xsrc:!aabbccddShow packets from this sender
dst:Xdst:^allShow packets to this recipient
snr>Nsnr>-5SNR above threshold
snr<Nsnr<10SNR below threshold
text:Xtext:helloSearch decoded payload text
ch:Nch:0Channel index match

Protocol Type Pills

Quick-filter buttons at the top filter by packet type: ALL / MESSAGE / POSITION / TELEMETRY / NODE_INFO / ROUTING. Each shows a live count of packets of that type in the current buffer.

Column Sorting

Click any column header to sort by that column. Click again to reverse. Columns: No., Time, Δt (delta from previous packet), Src, Dst, Ch, Protocol, SNR, Hops, Payload.

Detail Pane

Click any row to select it. The resizable detail pane at the bottom shows three columns:

  • Raw JSON Object — the full packet object with syntax-highlighted JSON. Copy button in header.
  • Decoded Metadata — key-value pairs: portnum, payload text, position fields, telemetry values, etc.
  • Radio Layer — SNR, RSSI, hop limit, hop start, hops consumed, source detection result and confidence score.

The detail pane is resizable by dragging the sh-resizer bar between the table and pane.

Node Sidebar

Left sidebar lists all nodes that have emitted packets in the current buffer, ordered by packet count. Clicking a node filters the table to only show packets from that node. An SNR sparkline at the bottom shows the most recent 20 SNR readings from the selected node.


Traceroute

Sends a live traceroute request to a target node and visualises the path.

Running a Trace

  1. Enter a node ID in the !xxxxxxxx format, or click a node from the list below
  2. Set the hop limit (1–7, default 5)
  3. Click TRACE ROUTE

The frontend calls POST /api/traceroute/run and waits up to 60 seconds. A status line shows Waiting for response… while in progress.

Result View

On success, the RESULT tab shows each hop with:

  • Hop number and direction (→ towards target, ← back)
  • Node ID and name (looked up from meshState.nodes)
  • SNR per hop segment (from snrTowards / snrBack arrays, divided by 4 for dB conversion)
  • Direct link indicator if no intermediate hops
  • Final RSSI and SNR for the received response packet

Map Tab

If all nodes in the trace have GPS coordinates, the MAP tab shows the route plotted on a Leaflet map with colour-coded segments. If any node has no coordinates, a warning bar lists the missing nodes.

History

Previous traceroutes are loaded from GET /api/traceroutes and shown in the left panel history list. Clicking a history entry re-renders the result for that trace.


Node Comparison

Compare up to 4 nodes side-by-side with globally-linked Y-axes so charts are visually comparable.

Selecting Nodes

Click any of the four slot buttons (ALPHA / BETA / GAMMA / DELTA). A searchable dropdown appears — type to filter by name or node ID. Click a node to assign it. Click the ✕ on a filled slot to remove it.

Time Range

Buttons select the lookback window: 24H / 3D / 7D / 30D. On change, all data is re-fetched concurrently for all selected nodes.

Chart Layout

The grid is dynamically sized: if 2 nodes are selected, it's a 2-column grid; 3 nodes = 3 columns; 4 = 4. Each row is a different metric. Metrics rendered (if data exists): Battery, Voltage, SNR, RSSI, Channel Utilisation, Temperature, Altitude.

The Y-axis min/max is computed globally across all selected nodes for each metric, so the axes are linked. This means a battery chart in column A and column B share the same scale, making visual comparison meaningful.

Each node's series is colour-coded: green, cyan, amber, purple (the same colours as the slot buttons).

Data Sources

For each selected node, three parallel requests are made: /api/nodes/{id}/history/telemetry, /api/nodes/{id}/history/positions, and /api/nodes/{id}/history/packets.


Analytics

Historical charts for network-wide and per-node metrics over time.

The analytics view loads data from GET /api/metrics/averages for network-wide SNR/RSSI averages, and /api/nodes/{id}/history/telemetry for per-node views.

A time range selector lets you choose how far back to look. Charts are rendered with Chart.js time-series axes.

Network-Wide Charts

The top section shows average SNR and RSSI across all non-local nodes over time, from GET /api/metrics/averages. These averages are computed every 5 minutes by a background worker and stored in the average_metrics_history table. The chart gives a historical view of overall mesh RF quality trends.

Per-Node Telemetry Charts

Select a node from the sidebar to view its individual telemetry history. Available series: battery level, voltage, channel utilisation, air util TX, temperature, humidity, barometric pressure (if environment sensor present), and uptime (reboots show as drops to 0).

Time Range

A range picker selects 1h, 6h, 24h, 7d, or 30d lookback windows. Changing the range re-fetches and re-renders all charts. The fetch uses the start query parameter on the history endpoints.