#!/usr/bin/env python import time import meshtastic import meshtastic.serial_interface from meshtastic.protobuf import mesh_pb2, portnums_pb2, telemetry_pb2 dest = '!173ea329' interface = meshtastic.serial_interface.SerialInterface() position = interface.getMyNodeInfo()["position"] lat = position.get("latitude", "-") lon = position.get("longitude", "-") pos_time = position.get("time", -1) start_time = time.time() def on_trace_response(p): UNK_SNR = -128 traceroute = p["decoded"]["traceroute"] snr_towards = traceroute["snrTowards"][0] / 4 if traceroute["snrTowards"][0] != UNK_SNR else "-" snr_back = traceroute["snrBack"][0] / 4 if traceroute["snrBack"][0] != UNK_SNR else "-" result_time = time.time() print(f"OK,{start_time},{result_time},{pos_time},{lat},{lon},{snr_towards},{snr_back}") interface._acknowledgment.receivedTraceRoute = True def ping(): r = mesh_pb2.RouteDiscovery() interface.sendData( r, destinationId=dest, portNum=portnums_pb2.PortNum.TRACEROUTE_APP, wantResponse=True, onResponse=on_trace_response, channelIndex=0, hopLimit=1, ) success = interface._timeout.waitForTraceRoute(1, interface._acknowledgment) if not success: result_time = time.time() print(f"EE,{start_time},{result_time},{pos_time},{lat},{lon},-,-") ping()