This commit is contained in:
SpudGunMan
2024-08-08 01:42:27 -07:00
parent 92b7b7ae2a
commit 2673b638bf
3 changed files with 78 additions and 0 deletions
+7
View File
@@ -89,3 +89,10 @@ signalHoldTime = 10
# the following are combined to reset the monitor
signalCooldown = 5
signalCycleLimit = 5
[sentry]
sentry_enabled = True
# holdoff time multiplied by minutes(20) of the watchdog
sentry_holdoff = 9
# channel to send a message to when the watchdog is triggered
secure_channel = 2
+3
View File
@@ -90,6 +90,9 @@ try:
signalHoldTime = config['radioMon'].getint('signalHoldTime', 10) # default 10 seconds
signalCooldown = config['radioMon'].getint('signalCooldown', 5) # default 1 second
signalCycleLimit = config['radioMon'].getint('signalCycleLimit', 5) # default 5 cycles, used with SIGNAL_COOLDOWN
sentry_enabled = config['sentry'].getboolean('enabled', False)
secure_channel = config['sentry'].getint('secure_channel', 2) # default 2
sentry_holdoff = config['sentry'].getint('holdoff', 9) # default 9
except KeyError as e:
print(f"System: Error reading config file: {e}")
print(f"System: Check the config.ini against config.template file for missing sections or values.")
+68
View File
@@ -275,6 +275,50 @@ def get_node_location(number, nodeInt=1, channel=0):
else:
logger.warning(f"System: No nodes found")
return position
def get_closest_nodes(nodeInt=1):
node_list = []
if nodeInt == 1:
if interface1.nodes:
for node in interface1.nodes.values():
if 'position' in node:
try:
latitude = node['position']['latitude']
longitude = node['position']['longitude']
except Exception as e:
logger.error(f"System: Error getting location data for {node['id']}. Error: {e}")
node_list.append({'id': node['id'], 'latitude': latitude, 'longitude': longitude})
# else:
# # request location data
# try:
# logger.debug(f"System: Requesting location data for {node['id']}")
# interface1.sendPosition(destinationId=node['id'], wantResponse=False, channelIndex=publicChannel)
# except Exception as e:
# logger.error(f"System: Error requesting location data for {node['id']}. Error: {e}")
#sort by distance closest to lattitudeValue, longitudeValue
node_list.sort(key=lambda x: (x['latitude']-latitudeValue)**2 + (x['longitude']-longitudeValue)**2)
# return the 3 closest nodes
return node_list[:3]
else:
logger.error(f"System: No nodes found in closest_nodes on interface {nodeInt}")
return ERROR_FETCHING_DATA
if nodeInt == 2:
if interface2.nodes:
for node in interface2.nodes.values():
if 'position' in node:
try:
latitude = node['position']['latitude']
longitude = node['position']['longitude']
except Exception as e:
logger.error(f"System: Error getting location data for {node['id']}. Error: {e}")
node_list.append({'id': node['id'], 'latitude': latitude, 'longitude': longitude})
#sort by distance closest to lattitudeValue, longitudeValue
node_list.sort(key=lambda x: (x['latitude']-latitudeValue)**2 + (x['longitude']-longitudeValue)**2)
# return the 3 closest nodes
return node_list[:3]
else:
logger.error(f"System: No nodes found in closest_nodes on interface {nodeInt}")
return ERROR_FETCHING_DATA
def send_message(message, ch, nodeid=0, nodeInt=1):
if message == "":
@@ -529,3 +573,27 @@ async def watchdog():
except Exception as e:
logger.error(f"System: retrying interface2: {e}")
# Locate Closest Nodes and report them to a secure channel
sentry_enabled = True
secure_channel = 2
if sentry_enabled:
try:
closest_nodes1 = get_closest_nodes(1)
if closest_nodes1 != ERROR_FETCHING_DATA:
for node in closest_nodes1:
if node is not None:
node_name = get_name_from_number(node['id'], 'long', 1)
send_message(f"{node_name} is close to your location", secure_channel, 0, 1)
logger.warning(f"System: {node_name} {node['id']} is close to your location on Interface1")
if interface2_enabled:
closest_nodes2 = get_closest_nodes(2)
if closest_nodes2 != ERROR_FETCHING_DATA:
for node in closest_nodes2:
if node is not None:
node_name = get_name_from_number(node['id'], 'long', 2)
send_message(f"{node_name} is close to your location", secure_channel, 0, 2)
logger.warning(f"System: {node_name} {node['id']} is close to your location on Interface2")
except Exception as e:
logger.error(f"System: Sentry Error: {e}")