mirror of
https://github.com/SpudGunMan/meshing-around.git
synced 2026-08-08 18:03:33 +02:00
telemetry
This commit is contained in:
+28
-39
@@ -617,43 +617,36 @@ def onDisconnect(interface):
|
||||
retry_int2 = True
|
||||
|
||||
# Telemetry Functions
|
||||
lastTelemetryRequest = {}
|
||||
|
||||
def initialize_telemetry():
|
||||
lastTelemetryRequest[0] = {'interface1': 0, 'interface2': 0, 'lastAlert1': '', 'lastAlert2': ''}
|
||||
lastTelemetryRequest[1] = {'numPacketsTx': 0, 'numPacketsRx': 0, 'numOnlineNodes': 0, 'numPacketsTxErr': 0, 'numPacketsRxErr': 0, 'numTotalNodes': 0}
|
||||
lastTelemetryRequest[2] = {'numPacketsTx': 0, 'numPacketsRx': 0, 'numOnlineNodes': 0, 'numPacketsTxErr': 0, 'numPacketsRxErr': 0, 'numTotalNodes': 0}
|
||||
|
||||
initialize_telemetry()
|
||||
def update_telemetry(interface_id, telemetry_data):
|
||||
global lastTelemetryRequest
|
||||
# update the telemetry data for the interface
|
||||
for i in range(len(telemetry_data)):
|
||||
if telemetry_data[i] != -1:
|
||||
lastTelemetryRequest[interface_id][i] = telemetry_data[i]
|
||||
telemetryData = {}
|
||||
def initialize_telemetryData():
|
||||
telemetryData[0] = {'interface1': 0, 'interface2': 0, 'lastAlert1': '', 'lastAlert2': ''}
|
||||
telemetryData[1] = {'numPacketsTx': 0, 'numPacketsRx': 0, 'numOnlineNodes': 0, 'numPacketsTxErr': 0, 'numPacketsRxErr': 0, 'numTotalNodes': 0}
|
||||
telemetryData[2] = {'numPacketsTx': 0, 'numPacketsRx': 0, 'numOnlineNodes': 0, 'numPacketsTxErr': 0, 'numPacketsRxErr': 0, 'numTotalNodes': 0}
|
||||
# indented to be called from the main loop
|
||||
initialize_telemetryData()
|
||||
|
||||
def displayNodeTelemetry(nodeID=0, rxNode=0):
|
||||
interface = interface1 if rxNode == 1 else interface2
|
||||
global lastTelemetryRequest
|
||||
global telemetryData
|
||||
|
||||
# throttle the telemetry requests to prevent spamming the device
|
||||
if rxNode == 1:
|
||||
if time.time() - lastTelemetryRequest[0]['interface1'] < 600:
|
||||
if time.time() - telemetryData[0]['interface1'] < 120:
|
||||
return -1
|
||||
lastTelemetryRequest[0]['interface1'] = time.time()
|
||||
telemetryData[0]['interface1'] = time.time()
|
||||
elif rxNode == 2:
|
||||
if time.time() - lastTelemetryRequest[0]['interface2'] < 600:
|
||||
if time.time() - telemetryData[0]['interface2'] < 120:
|
||||
return -1
|
||||
lastTelemetryRequest[0]['interface2'] = time.time()
|
||||
telemetryData[0]['interface2'] = time.time()
|
||||
|
||||
# some telemetry data is not available in python-meshtastic?
|
||||
# bring in values from the last telemetry request for the node
|
||||
numPacketsTx = lastTelemetryRequest[rxNode]['numPacketsTx'], 1
|
||||
numPacketsRx = lastTelemetryRequest[rxNode]['numPacketsRx'], 1
|
||||
numPacketsTxErr = lastTelemetryRequest[rxNode]['numPacketsTxErr'], 1
|
||||
numPacketsRxErr = lastTelemetryRequest[rxNode]['numPacketsRxErr'], 1
|
||||
numTotalNodes = lastTelemetryRequest[rxNode]['numTotalNodes']
|
||||
totalOnlineNodes = lastTelemetryRequest[rxNode]['numOnlineNodes']
|
||||
numPacketsTx = telemetryData[rxNode]['numPacketsTx']
|
||||
numPacketsRx = telemetryData[rxNode]['numPacketsRx']
|
||||
numPacketsTxErr = telemetryData[rxNode]['numPacketsTxErr']
|
||||
numPacketsRxErr = telemetryData[rxNode]['numPacketsRxErr']
|
||||
numTotalNodes = telemetryData[rxNode]['numTotalNodes']
|
||||
totalOnlineNodes = telemetryData[rxNode]['numOnlineNodes']
|
||||
|
||||
# get the telemetry data for a node
|
||||
chutil = round(interface.nodes.get(decimal_to_hex(myNodeNum1), {}).get("deviceMetrics", {}).get("channelUtilization", 0), 1)
|
||||
@@ -667,13 +660,9 @@ def displayNodeTelemetry(nodeID=0, rxNode=0):
|
||||
|
||||
dataResponse = f"Telemetry:{rxNode}"
|
||||
|
||||
# packet telemetry
|
||||
if numPacketsTx[1] == 1:
|
||||
dataResponse += f" numPacketsTx:{numPacketsTx[0]} numPacketsRx:{numPacketsRx[0]} numPacketsTxErr:{numPacketsTxErr[0]} numPacketsRxErr:{numPacketsRxErr[0]}"
|
||||
elif numPacketsTx[1] == 2:
|
||||
dataResponse += f" numPacketsTx:{numPacketsTx[0]} numPacketsRx:{numPacketsRx[0]} numPacketsTxErr:{numPacketsTxErr[0]} numPacketsRxErr:{numPacketsRxErr[0]}"
|
||||
else:
|
||||
dataResponse += f" numPacketsTx:-1 numPacketsRx:-1 numPacketsTxErr:-1 numPacketsRxErr:-1"
|
||||
# packet info telemetry
|
||||
dataResponse += f" numPacketsRx:{numPacketsRx} umPacketsRxErr:{numPacketsRxErr} numPacketsTxErr:{numPacketsTxErr} numPacketsTx:{numPacketsTx}"
|
||||
|
||||
# Channel utilization and airUtilTx
|
||||
dataResponse += " ChUtil%:" + str(round(chutil, 2)) + " AirTx%:" + str(round(airUtilTx, 2))
|
||||
|
||||
@@ -684,10 +673,10 @@ def displayNodeTelemetry(nodeID=0, rxNode=0):
|
||||
logger.warning(f"System: High Air Utilization {airUtilTx}% on Device: {rxNode}")
|
||||
|
||||
# add packet Rx/Tx info to the response
|
||||
dataResponse += f" Rx#:{numPacketsRx[0]} Tx#:{numPacketsTx[0]}"
|
||||
dataResponse += f" Rx#:{numPacketsRx} Tx#:{numPacketsTx}"
|
||||
|
||||
# Number of nodes
|
||||
dataResponse += " Nodes:" + str(numTotalNodes) + " Online:" + str(totalOnlineNodes)
|
||||
dataResponse += " totalNodes:" + str(numTotalNodes) + " Online:" + str(totalOnlineNodes)
|
||||
|
||||
# Uptime
|
||||
uptimeSeconds = getPrettyTime(uptimeSeconds)
|
||||
@@ -856,7 +845,7 @@ async def handleSentinel(deviceID=1):
|
||||
handleSentinel_loop += 1
|
||||
|
||||
async def watchdog():
|
||||
global retry_int1, retry_int2, lastTelemetryRequest
|
||||
global retry_int1, retry_int2, telemetryData
|
||||
int1Data, int2Data = "", ""
|
||||
while True:
|
||||
await asyncio.sleep(20)
|
||||
@@ -880,9 +869,9 @@ async def watchdog():
|
||||
|
||||
# Telemetry data
|
||||
int1Data = displayNodeTelemetry(0, 1)
|
||||
if int1Data != -1 and lastTelemetryRequest[0]['lastAlert1'] != int1Data:
|
||||
if int1Data != -1 and telemetryData[0]['lastAlert1'] != int1Data:
|
||||
logger.debug(int1Data + f" Firmware:{firmware}")
|
||||
lastTelemetryRequest[0]['lastAlert1'] = int1Data
|
||||
telemetryData[0]['lastAlert1'] = int1Data
|
||||
|
||||
if retry_int1:
|
||||
try:
|
||||
@@ -909,9 +898,9 @@ async def watchdog():
|
||||
|
||||
# Telemetry data
|
||||
int2Data = displayNodeTelemetry(0, 2)
|
||||
if int2Data != -1 and lastTelemetryRequest[0]['lastAlert2'] != int2Data:
|
||||
if int2Data != -1 and telemetryData[0]['lastAlert2'] != int2Data:
|
||||
logger.debug(int2Data + f" Firmware:{firmware2}")
|
||||
lastTelemetryRequest[0]['lastAlert2'] = int2Data
|
||||
telemetryData[0]['lastAlert2'] = int2Data
|
||||
|
||||
if retry_int2:
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user