mirror of
https://github.com/SpudGunMan/meshing-around.git
synced 2026-08-07 17:32:52 +02:00
enhanceTelemetry
This commit is contained in:
+23
-20
@@ -902,16 +902,16 @@ def onDisconnect(interface):
|
||||
elif interface2_enabled and interface2_type == 'ble':
|
||||
retry_int2 = True
|
||||
|
||||
numPacketsTx, numPacketsRx, numPacketsTxErr, numPacketsRxErr = [0,0], [0,0], [0,0], [0,0]
|
||||
def onReceive(packet, interface):
|
||||
# Priocess the incoming packet, handles the responses to the packet
|
||||
# extract interface defailts from interface object
|
||||
# Priocess the incoming packet, handles the responses to the packet with auto_response()
|
||||
# Sends the packet to the correct handler for processing
|
||||
|
||||
# extract interface details from inbound packet
|
||||
rxType = type(interface).__name__
|
||||
rxNode = 0
|
||||
message_from_id = 0
|
||||
snr = 0
|
||||
rssi = 0
|
||||
hop = 0
|
||||
hop_away = 0
|
||||
|
||||
# Valies assinged to the packet
|
||||
rxNode, message_from_id, snr, rssi, hop, hop_away = 0, 0, 0, 0, 0, 0
|
||||
pkiStatus = (False, 'ABC')
|
||||
isDM = False
|
||||
|
||||
@@ -922,6 +922,8 @@ def onReceive(packet, interface):
|
||||
# Debug print the packet for debugging
|
||||
logger.debug(f"Packet Received\n {packet} \n END of packet \n")
|
||||
|
||||
|
||||
# set the value for the incomming interface
|
||||
if rxType == 'SerialInterface':
|
||||
rxInterface = interface.__dict__.get('devPath', 'unknown')
|
||||
if port1 in rxInterface:
|
||||
@@ -942,18 +944,19 @@ def onReceive(packet, interface):
|
||||
elif interface2_enabled and interface2_type == 'ble':
|
||||
rxNode = 2
|
||||
|
||||
# TELEMETRY
|
||||
# TELEMETRY packets
|
||||
global numPacketsRx, numPacketsTx, numPacketsRxErr, numPacketsTxErr
|
||||
if packet.get('decoded') and packet['decoded']['portnum'] == 'TELEMETRY_APP':
|
||||
#print(f"Telemetry Packet: {packet}")
|
||||
# get the telemetry data
|
||||
telemetry = packet['decoded']['telemetry']
|
||||
if telemetry.get('deviceMetrics'):
|
||||
deviceMetrics = telemetry['deviceMetrics']
|
||||
#print(f"deviceMetrics: {deviceMetrics}")
|
||||
if telemetry.get('localStats'):
|
||||
localStats = telemetry['localStats']
|
||||
if localStats.get('numPacketsTx') and localStats.get('numPacketsRx'):
|
||||
global numPacketsTx, numPacketsRx, numPacketsTxErr, numPacketsRxErr
|
||||
telemetry_packet = packet['decoded']['telemetry']
|
||||
# if telemetry_packet.get('deviceMetrics'):
|
||||
# deviceMetrics = telemetry_packet['deviceMetrics']
|
||||
# #print(f"deviceMetrics: {deviceMetrics}")
|
||||
if telemetry_packet.get('localStats'):
|
||||
localStats = telemetry_packet['localStats']
|
||||
if localStats.get('numPacketsTx') and localStats.get('numPacketsRx') != 0:
|
||||
#print(f"numPacketsTx, numPacketsRx, numPacketsTxErr, numPacketsRxErr: {numPacketsTx}, {numPacketsRx}, {numPacketsTxErr}, {numPacketsRxErr}")
|
||||
# Assign the values and include rxNode
|
||||
numPacketsTx = (localStats['numPacketsTx'], rxNode)
|
||||
numPacketsRx = (localStats['numPacketsRx'], rxNode)
|
||||
@@ -961,10 +964,10 @@ def onReceive(packet, interface):
|
||||
numPacketsTxErr = (localStats['numPacketsTxErr'], rxNode)
|
||||
numPacketsRxErr = (localStats['numPacketsRxErr'], rxNode)
|
||||
except KeyError:
|
||||
numPacketsTxErr = (0, rxNode)
|
||||
numPacketsRxErr = (0, rxNode)
|
||||
numPacketsTxErr = (-1, rxNode)
|
||||
numPacketsRxErr = (-1, rxNode)
|
||||
#airUtilTx = (round(localStats['airUtilTx'], 2), rxNode)
|
||||
|
||||
|
||||
# check for BBS DM for mail delivery
|
||||
if bbs_enabled and 'decoded' in packet:
|
||||
message_from_id = packet['from']
|
||||
|
||||
+16
-16
@@ -668,15 +668,16 @@ def getNodeFirmware(nodeID=0, nodeInt=1):
|
||||
return -1
|
||||
return fwVer
|
||||
|
||||
def getNodeTelemetry(nodeID=0, nodeInt=1):
|
||||
# throttle the telemetry requests to prevent spamming the device
|
||||
def getNodeTelemetry(nodeID=0, rxNode=1):
|
||||
global lastTelemetryRequest, numPacketsTx, numPacketsRx, numPacketsTxErr, numPacketsRxErr
|
||||
if time.time() - lastTelemetryRequest < 600:
|
||||
# throttle the telemetry requests to prevent spamming the device
|
||||
if time.time() - lastTelemetryRequest < 1200:
|
||||
print(f"numPacketsTx, numPacketsRx, numPacketsTxErr, numPacketsRxErr: {numPacketsTx}, {numPacketsRx}, {numPacketsTxErr}, {numPacketsRxErr}")
|
||||
return -1
|
||||
lastTelemetryRequest = time.time()
|
||||
# get the telemetry data for a node
|
||||
dataResponse = ""
|
||||
if nodeInt == 1:
|
||||
if rxNode == 1:
|
||||
chutil = round(interface1.nodes.get(decimal_to_hex(myNodeNum1), {}).get("deviceMetrics", {}).get("channelUtilization", 0), 1)
|
||||
airUtilTx = round(interface1.nodes.get(decimal_to_hex(myNodeNum1), {}).get("deviceMetrics", {}).get("airUtilTx", 0), 1)
|
||||
uptimeSeconds = interface1.nodes.get(decimal_to_hex(myNodeNum1), {}).get("deviceMetrics", {}).get("uptimeSeconds", 0)
|
||||
@@ -685,7 +686,7 @@ def getNodeTelemetry(nodeID=0, nodeInt=1):
|
||||
#numPacketsRx = interface1.nodes.get(decimal_to_hex(myNodeNum1), {}).get("localStats", {}).get("numPacketsRx", 0)
|
||||
#numPacketsTx = interface1.nodes.get(decimal_to_hex(myNodeNum1), {}).get("localStats", {}).get("numPacketsTx", 0)
|
||||
numTotalNodes = len(interface1.nodes)
|
||||
elif nodeInt == 2:
|
||||
elif rxNode == 2:
|
||||
chutil = round(interface2.nodes.get(decimal_to_hex(myNodeNum2), {}).get("deviceMetrics", {}).get("channelUtilization", 0), 1)
|
||||
airUtilTx = round(interface2.nodes.get(decimal_to_hex(myNodeNum2), {}).get("deviceMetrics", {}).get("airUtilTx", 0), 1)
|
||||
uptimeSeconds = interface2.nodes.get(decimal_to_hex(myNodeNum2), {}).get("deviceMetrics", {}).get("uptimeSeconds", 0)
|
||||
@@ -698,20 +699,20 @@ def getNodeTelemetry(nodeID=0, nodeInt=1):
|
||||
return -1
|
||||
|
||||
# packet telemetry
|
||||
if nodeInt == 1:
|
||||
dataResponse += f"Telemetry:{nodeInt} numPacketsTx:{numPacketsTx} numPacketsRx:{numPacketsRx} numPacketsTxErr:{numPacketsTxErr} numPacketsRxErr:{numPacketsRxErr}"
|
||||
if nodeInt == 2:
|
||||
dataResponse += f"Telemetry:{nodeInt} numPacketsTx:{numPacketsTx2} numPacketsRx:{numPacketsRx2} numPacketsTxErr:{numPacketsTxErr2} numPacketsRxErr:{numPacketsRxErr2}"
|
||||
|
||||
|
||||
if numPacketsRx != 0:
|
||||
if numPacketsTx[1] == 1:
|
||||
dataResponse += f"Telemetry:{rxNode} numPacketsTx:{numPacketsTx[0]} numPacketsRx:{numPacketsRx[0]} numPacketsTxErr:{numPacketsTxErr[0]} numPacketsRxErr:{numPacketsRxErr[0]}"
|
||||
elif numPacketsTx[1] == 2:
|
||||
dataResponse += f"Telemetry:{rxNode} numPacketsTx:{numPacketsTx[0]} numPacketsRx:{numPacketsRx[0]} numPacketsTxErr:{numPacketsTxErr[0]} numPacketsRxErr:{numPacketsRxErr[0]} "
|
||||
|
||||
# Channel utilization and airUtilTx
|
||||
dataResponse += " ChUtil%:" + str(round(chutil, 2)) + " AirTx%:" + str(round(airUtilTx, 2))
|
||||
|
||||
if chutil > 40:
|
||||
logger.warning(f"System: High Channel Utilization {chutil}% on Device: {nodeInt}")
|
||||
logger.warning(f"System: High Channel Utilization {chutil}% on Device: {rxNode}")
|
||||
|
||||
if airUtilTx > 25:
|
||||
logger.warning(f"System: High Air Utilization {airUtilTx}% on Device: {nodeInt}")
|
||||
logger.warning(f"System: High Air Utilization {airUtilTx}% on Device: {rxNode}")
|
||||
|
||||
# add packet Rx/Tx info to the response
|
||||
dataResponse += f" Rx#:{numPacketsRx} Tx#:{numPacketsTx}"
|
||||
@@ -728,10 +729,9 @@ def getNodeTelemetry(nodeID=0, nodeInt=1):
|
||||
dataResponse += f" Volt:{round(voltage, 1)}"
|
||||
|
||||
if batteryLevel < 25:
|
||||
logger.warning(f"System: Low Battery Level: {batteryLevel}{emji} on Device: {nodeInt}")
|
||||
logger.warning(f"System: Low Battery Level: {batteryLevel}{emji} on Device: {rxNode}")
|
||||
elif batteryLevel < 10:
|
||||
logger.critical(f"System: Critical Battery Level: {batteryLevel}{emji} on Device: {nodeInt}")
|
||||
|
||||
logger.critical(f"System: Critical Battery Level: {batteryLevel}{emji} on Device: {rxNode}")
|
||||
return dataResponse
|
||||
|
||||
def handleMultiPing(nodeID=0, deviceID=1):
|
||||
|
||||
Reference in New Issue
Block a user