meshrange/scripts/ping.py

44 lines
1.3 KiB
Python
Executable File

#!/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()