mirror of
https://github.com/dpup/meshstream.git
synced 2026-03-28 17:42:37 +01:00
feat(topology): track mesh node connections and render as map polylines
Add passive topology tracking from four sources with confidence ranking: - Zero-hop MQTT observations (continuous, per-gateway, highest frequency) - Traceroute replies (RouteDiscovery, full path + SNR data) - NeighborInfo packets (self-reported neighbor SNR) - relay_node inferred links (1-hop packets with known relay) Backend: add rx_snr (field 62) and rx_rssi (field 63) to meshstream Data proto; extract from MeshPacket in decoder.go; regenerate Go bindings. Frontend: - topologySlice: LinkObservation model, per-direction confidence merge, 24h TTL pruning, 2000-edge cap, Redux-pure (timestamp from payload) - aggregatorSlice: add hopsFromGateway to NodeData - __root.tsx: dispatch processTopologyPacket after each SSE message - NetworkMap: render polylines colored by SNR (green/yellow/red/gray), dimmed at 0.4 opacity for viaMqtt edges; Links toggle button in legend - NodeDetail: Connections section showing per-edge SNR, source badge, viaMqtt badge, and last-seen time 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -112,6 +112,8 @@ func DecodeMessage(payload []byte, topicInfo *meshtreampb.TopicInfo) *meshtreamp
|
||||
data.ViaMqtt = packet.GetViaMqtt()
|
||||
data.NextHop = packet.GetNextHop()
|
||||
data.RelayNode = packet.GetRelayNode()
|
||||
data.RxSnr = packet.GetRxSnr()
|
||||
data.RxRssi = packet.GetRxRssi()
|
||||
|
||||
// Process the payload
|
||||
if packet.GetDecoded() != nil {
|
||||
|
||||
Reference in New Issue
Block a user