From 9e07448319bb180f5588b7d0f590469d70b57dbe Mon Sep 17 00:00:00 2001 From: SpudGunMan Date: Fri, 26 Jul 2024 00:37:26 -0700 Subject: [PATCH] fix Lheard/Sitrep --- mesh_bot.py | 4 ++- modules/system.py | 85 +++++++++++++++++++++-------------------------- 2 files changed, 41 insertions(+), 48 deletions(-) diff --git a/mesh_bot.py b/mesh_bot.py index 6928daf..390a391 100755 --- a/mesh_bot.py +++ b/mesh_bot.py @@ -64,7 +64,9 @@ def auto_response(message, snr, rssi, hop, message_from_id, channel_number, devi elif "solar" in message.lower(): bot_response = drap_xray_conditions() + "\n" + solar_conditions() elif "lheard" in message.lower() or "sitrep" in message.lower(): - bot_response = "Last heard:\n" + str(get_node_list(deviceID)) + bot_response = "Last heard:\n" + str(get_node_list(1)) + if interface2_enabled: + bot_response += "\nPort2:\n" + str(get_node_list(2)) elif "whereami" in message.lower(): location = get_node_location(message_from_id, deviceID) where = where_am_i(str(location[0]),str(location[1])) diff --git a/modules/system.py b/modules/system.py index f0ee3f8..bef2380 100644 --- a/modules/system.py +++ b/modules/system.py @@ -90,9 +90,9 @@ def log_timestamp(): def decimal_to_hex(decimal_number): return f"!{decimal_number:08x}" -def get_name_from_number(number, type='long', RXnodeId=1): +def get_name_from_number(number, type='long', nodeInt=1): name = "" - if RXnodeId == 1: + if nodeInt == 1: for node in interface1.nodes.values(): if number == node['num']: if type == 'long': @@ -104,10 +104,10 @@ def get_name_from_number(number, type='long', RXnodeId=1): else: pass else: - name = str(decimal_to_hex(number)) # If long name not found, use the ID as string + name = str(decimal_to_hex(number)) # If name not found, use the ID as string return name - if RXnodeId == 2: + if nodeInt == 2: for node in interface2.nodes.values(): if number == node['num']: if type == 'long': @@ -119,41 +119,32 @@ def get_name_from_number(number, type='long', RXnodeId=1): else: pass else: - name = str(decimal_to_hex(number)) + name = str(decimal_to_hex(number)) # If name not found, use the ID as string return name return number def get_node_list(nodeInt=1): - - if interface1.nodes: - node_list = [] - short_node_list = [] - for node in interface1.nodes.values(): - # ignore own - if node['num'] != myNodeNum2 or node['num'] != myNodeNum: - node_name = get_name_from_number(node['num'], 'long', nodeInt) - snr = node.get('snr', 0) + # Get a list of nodes on the device + node_list = [] + short_node_list = [] + if nodeInt == 1: + if interface1.nodes: + for node in interface1.nodes.values(): + # ignore own + if node['num'] != myNodeNum2 or node['num'] != myNodeNum: + node_name = get_name_from_number(node['num'], 'long', nodeInt) + snr = node.get('snr', 0) - # issue where lastHeard is not always present - last_heard = node.get('lastHeard', 0) - - # make a list of nodes with last heard time and SNR - item = (node_name, last_heard, snr) - node_list.append(item) - - node_list.sort(key=lambda x: x[1], reverse=True) - #print (f"Node List: {node_list[:5]}\n") - - # make a nice list for the user - for x in node_list[:5]: - short_node_list.append(f"{x[0]} SNR:{x[2]}") - - node1_list = "\n".join(short_node_list) - node1 = (f"Port1:\n{node1_list}") - - if interface2_enabled: - node_list = [] - short_node_list = [] + # issue where lastHeard is not always present + last_heard = node.get('lastHeard', 0) + + # make a list of nodes with last heard time and SNR + item = (node_name, last_heard, snr) + node_list.append(item) + else: + print (f"{log_timestamp()} System: No nodes found") + return ERROR_FETCHING_DATA + if nodeInt == 2: if interface2.nodes: for node in interface2.nodes.values(): # ignore own @@ -167,20 +158,20 @@ def get_node_list(nodeInt=1): # make a list of nodes with last heard time and SNR item = (node_name, last_heard, snr) node_list.append(item) - - node_list.sort(key=lambda x: x[1], reverse=True) - #print (f"Node List: {node_list[:5]}\n") - - # make a nice list for the user - for x in node_list[:5]: - short_node_list.append(f"{x[0]} SNR:{x[2]}") - - node2_list = "\n".join(short_node_list) - node2 = (f"\n Port2:\n{node2_list}") - else: - node2 = "" + else: + print (f"{log_timestamp()} System: No nodes found") + return ERROR_FETCHING_DATA - return node1 + node2 + node_list.sort(key=lambda x: x[1], reverse=True) + #print (f"Node List: {node_list[:5]}\n") + + # make a nice list for the user + for x in node_list[:5]: + short_node_list.append(f"{x[0]} SNR:{x[2]}") + + node1_list = "\n".join(short_node_list) + + return node1_list def get_node_location(number, nodeInt=1): # Get the location of a node by its number from nodeDB on device