From 20194265a4aea666b1f4c654f571e1a408eeadf3 Mon Sep 17 00:00:00 2001 From: Jason Michalski Date: Sat, 17 Aug 2024 19:08:39 -0700 Subject: [PATCH] Add popups on the packet details map. --- meshview/templates/packet_details.html | 6 +++-- meshview/web.py | 34 ++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/meshview/templates/packet_details.html b/meshview/templates/packet_details.html index 4e4b237..dca2fca 100644 --- a/meshview/templates/packet_details.html +++ b/meshview/templates/packet_details.html @@ -50,8 +50,10 @@ iconUrl: 'data:image/png;base64,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', iconSize: [32, 32], }); - {% for u in uplinked_cord %} - L.marker({{u | tojson}}, {icon: radioTower}).addTo(markers); + {% for u in uplinked_nodes %} + var m = L.marker([{{u.lat}}, {{u.long}}], {icon: radioTower}); + m.bindPopup('[{{u.short_name}}] {{u.long_name}}
Hops: {{u.hops}}
SNR: {{u.snr}}
RSSI: {{u.rssi}}'); + m.addTo(markers); details_map.fitBounds(markers.getBounds().pad(.7)); {% endfor %} diff --git a/meshview/web.py b/meshview/web.py index 53c6d93..c77d013 100644 --- a/meshview/web.py +++ b/meshview/web.py @@ -397,6 +397,16 @@ async def events(request): except ConnectionResetError: return +@dataclass +class UplinkedNode: + lat: float + long: float + long_name: str + short_name: str + hops: int + snr: float + rssi: float + @routes.get("/packet_details/{packet_id}") async def packet_details(request): @@ -408,16 +418,30 @@ async def packet_details(request): if packet.from_node and packet.from_node.last_lat: from_node_cord = [packet.from_node.last_lat * 1e-7 , packet.from_node.last_long * 1e-7] - uplinked_cord = [] + uplinked_nodes = [] for p in packets_seen: if p.node.last_lat: - uplinked_cord.append([p.node.last_lat * 1e-7 , p.node.last_long * 1e-7]) + if p.topic.startswith('mqtt-meshtastic-org'): + hops = 666 + else: + hops = p.hop_start - p.hop_limit + uplinked_nodes.append( + UplinkedNode( + lat=p.node.last_lat * 1e-7, + long=p.node.last_long * 1e-7, + long_name=p.node.long_name, + short_name=p.node.short_name, + hops=hops, + snr=p.rx_snr, + rssi=p.rx_rssi, + ) + ) map_center = None if from_node_cord: map_center = from_node_cord - elif uplinked_cord: - map_center = uplinked_cord[0] + elif uplinked_nodes: + map_center = [uplinked_nodes[0].lat, uplinked_nodes[0].long] template = env.get_template("packet_details.html") return web.Response( @@ -425,7 +449,7 @@ async def packet_details(request): packets_seen=packets_seen, map_center=map_center, from_node_cord=from_node_cord, - uplinked_cord=uplinked_cord, + uplinked_nodes=uplinked_nodes, ), content_type="text/html", )