diff --git a/mesh_bot.py b/mesh_bot.py index 1c2bea0..c31fd0e 100755 --- a/mesh_bot.py +++ b/mesh_bot.py @@ -848,34 +848,27 @@ def onReceive(packet, interface): # deviceMetrics = telemetry_packet['deviceMetrics'] # #print(f"DEBUG deviceMetrics: {deviceMetrics}") if telemetry_packet.get('localStats'): - #print(f"DEBUG localStats: {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: - # Assign the values and include rxNode - numPacketsTx = (localStats['numPacketsTx'], rxNode) - numPacketsRx = (localStats['numPacketsRx'], rxNode) - try: - numOnlineNodes = (localStats['numOnlineNodes'], rxNode) - except KeyError: - numOnlineNodes = (-1, rxNode) - try: - numPacketsTxErr = (localStats['numPacketsTxErr'], rxNode) - except KeyError: - numPacketsTxErr = (-1, rxNode) - try: - numPacketsRxErr = (localStats['numPacketsRxErr'], rxNode) - except KeyError: - numPacketsRxErr = (-1, rxNode) - try: - numTotalNodes = (localStats['numTotalNodes'], rxNode) - 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) - + # Assign the values to the telemetry dictionary + print(f"DEBUG match: {localStats}") + if localStats.get('numPacketsTx') is not None: + telemetryData[rxNode]['numPacketsTx'] = localStats.get('numPacketsTx') + if localStats.get('numPacketsRx') is not None: + telemetryData[rxNode]['numPacketsRx'] = localStats.get('numPacketsRx') + if localStats.get('numOnlineNodes') is not None: + telemetryData[rxNode]['numOnlineNodes'] = localStats.get('numOnlineNodes') + if localStats.get('numOfflineNodes') is not None: + telemetryData[rxNode]['numOfflineNodes'] = localStats.get('numOfflineNodes') + if localStats.get('numPacketsTxErr') is not None: + telemetryData[rxNode]['numPacketsTxErr'] = localStats.get('numPacketsTxErr') + if localStats.get('numPacketsRxErr') is not None: + telemetryData[rxNode]['numPacketsRxErr'] = localStats.get('numPacketsRxErr') + if localStats.get('numTotalNodes') is not None: + telemetryData[rxNode]['numTotalNodes'] = localStats.get('numTotalNodes') + # 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 f09728e..623ec40 100644 --- a/modules/system.py +++ b/modules/system.py @@ -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: