diff --git a/mesh_bot.py b/mesh_bot.py index 0bce3b9..1c2bea0 100755 --- a/mesh_bot.py +++ b/mesh_bot.py @@ -840,16 +840,15 @@ def onReceive(packet, interface): rxNode = 2 # TELEMETRY packets - global numPacketsRx, numPacketsTx, numPacketsRxErr, numPacketsTxErr if packet.get('decoded') and packet['decoded']['portnum'] == 'TELEMETRY_APP': - #print(f"Telemetry Packet: {packet}") + #print(f"DEBUG TELEMETRY_APP: {packet}") # get the telemetry data telemetry_packet = packet['decoded']['telemetry'] # if telemetry_packet.get('deviceMetrics'): # deviceMetrics = telemetry_packet['deviceMetrics'] - # #print(f"deviceMetrics: {deviceMetrics}") + # #print(f"DEBUG deviceMetrics: {deviceMetrics}") if telemetry_packet.get('localStats'): - #print(f"DEBUG packet {telemetry_packet}") + #print(f"DEBUG localStats: {telemetry_packet}") localStats = telemetry_packet['localStats'] # Check if 'numPacketsTx' and 'numPacketsRx' exist and are not zero if localStats.get('numPacketsTx') is not None and localStats.get('numPacketsRx') is not None and localStats['numPacketsTx'] != -1: @@ -873,6 +872,10 @@ def onReceive(packet, interface): except KeyError: numTotalNodes = (-1, rxNode) print(f"----onReceive() numPacketsTx: {numPacketsTx} numPacketsRx: {numPacketsRx} numOnlineNodes: {numOnlineNodes} numPacketsTxErr: {numPacketsTxErr} numPacketsRxErr: {numPacketsRxErr} numTotalNodes: {numTotalNodes}") + # update the telemetry values + telemetry_values = [numPacketsTx, numPacketsRx, numOnlineNodes, numPacketsTxErr, numPacketsRxErr, numTotalNodes] + update_telemetry(rxNode, telemetry_values) + # BBS DM MAIL CHECKER if bbs_enabled and 'decoded' in packet: message_from_id = packet['from'] diff --git a/modules/system.py b/modules/system.py index b86c186..f09728e 100644 --- a/modules/system.py +++ b/modules/system.py @@ -615,24 +615,45 @@ def onDisconnect(interface): retry_int1 = True elif interface2_enabled and interface2_type == 'ble': retry_int2 = True - -lastTelemetryRequest = [{'interface1': 0, 'interface2': 0, 'lastAlert1': '', 'lastAlert2': ''}] -numPacketsTx, numPacketsRx, numPacketsTxErr, numPacketsRxErr = ([-1, -1],) * 4 -def getNodeTelemetry(nodeID=0, rxNode=0): + +# 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] + +def displayNodeTelemetry(nodeID=0, rxNode=0): interface = interface1 if rxNode == 1 else interface2 - global numPacketsTx, numPacketsRx, numPacketsTxErr, numPacketsRxErr, lastTelemetryRequest - if numPacketsTx[0] != -1: - print(f"onReceive() numPacketsTx: {numPacketsTx} numPacketsRx: {numPacketsRx} numOnlineNodes: {-1} numPacketsTxErr: {numPacketsTxErr} numPacketsRxErr: {numPacketsRxErr} numTotalNodes: {-1}") - - # # throttle the telemetry requests to prevent spamming the device - # if rxNode == 1: - # if time.time() - lastTelemetryRequest[0]['interface1'] < 600: - # return -1 - # lastTelemetryRequest[0]['interface1'] = time.time() - # elif rxNode == 2: - # if time.time() - lastTelemetryRequest[0]['interface2'] < 600: - # return -1 - # lastTelemetryRequest[0]['interface2'] = time.time() + global lastTelemetryRequest + + # throttle the telemetry requests to prevent spamming the device + if rxNode == 1: + if time.time() - lastTelemetryRequest[0]['interface1'] < 600: + return -1 + lastTelemetryRequest[0]['interface1'] = time.time() + elif rxNode == 2: + if time.time() - lastTelemetryRequest[0]['interface2'] < 600: + return -1 + lastTelemetryRequest[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'] # get the telemetry data for a node chutil = round(interface.nodes.get(decimal_to_hex(myNodeNum1), {}).get("deviceMetrics", {}).get("channelUtilization", 0), 1) @@ -666,7 +687,7 @@ def getNodeTelemetry(nodeID=0, rxNode=0): dataResponse += f" Rx#:{numPacketsRx[0]} Tx#:{numPacketsTx[0]}" # Number of nodes - dataResponse += " Nodes:" + str(numTotalNodes) + dataResponse += " Nodes:" + str(numTotalNodes) + " Online:" + str(totalOnlineNodes) # Uptime uptimeSeconds = getPrettyTime(uptimeSeconds) @@ -858,7 +879,7 @@ async def watchdog(): handleMultiPing(0,1) # Telemetry data - int1Data = getNodeTelemetry(0, 1) + int1Data = displayNodeTelemetry(0, 1) if int1Data != -1 and lastTelemetryRequest[0]['lastAlert1'] != int1Data: logger.debug(int1Data + f" Firmware:{firmware}") lastTelemetryRequest[0]['lastAlert1'] = int1Data @@ -887,7 +908,7 @@ async def watchdog(): handleMultiPing(0,2) # Telemetry data - int2Data = getNodeTelemetry(0, 2) + int2Data = displayNodeTelemetry(0, 2) if int2Data != -1 and lastTelemetryRequest[0]['lastAlert2'] != int2Data: logger.debug(int2Data + f" Firmware:{firmware2}") lastTelemetryRequest[0]['lastAlert2'] = int2Data