Get node packet info

This commit is contained in:
michaelachrisco 2024-06-13 14:09:22 -07:00
parent b9d09f2209
commit d2a6a14519
2 changed files with 94 additions and 11 deletions

79
main.py
View file

@ -4,10 +4,15 @@ import meshtastic
import meshtastic.tcp_interface import meshtastic.tcp_interface
from pubsub import pub from pubsub import pub
from send_to_irc import SendMsgBot from send_to_irc import SendMsgBot
import json
from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE,SIG_DFL)
MESSAGE_FILE = "message.txt" MESSAGE_FILE = "message.txt"
def send_message_from_mesh(): def send_message_from_mesh():
print('send_message_from_mesh')
if os.path.exists(MESSAGE_FILE): if os.path.exists(MESSAGE_FILE):
with open(MESSAGE_FILE, 'r') as file: with open(MESSAGE_FILE, 'r') as file:
message = file.read().strip() message = file.read().strip()
@ -20,13 +25,39 @@ def send_message_from_mesh():
# Connect to the XMPP server and start processing XMPP stanzas. # Connect to the XMPP server and start processing XMPP stanzas.
xmpp.connect() xmpp.connect()
xmpp.process(forever=False) xmpp.process(forever=True)
# Clear the file after sending the message # Clear the file after sending the message
open(MESSAGE_FILE, 'w').close() open(MESSAGE_FILE, 'w').close()
print('done sending')
def onReceive(packet, interface): def onReceive(packet, interface):
# called when a packet arrives # called when a packet arrives
print('******************************************')
nodes = interface.nodesByNum
# fromNode = nodes[packet['from']]
# toNode = nodes[packet['to']]
# TODO: REFACTOR, THIS IS UGLY AS F
message = ''
if packet['from'] in nodes:
fromNode = nodes[packet['from']]
message += f"From SN: {fromNode['user']['shortName']} LN: {fromNode['user']['longName']} \n"
# print(f"From SN: {fromNode['user']['shortName']} LN: {fromNode['user']['longName']}")
if packet['to'] in nodes:
toNode = nodes[packet['to']]
message += f"To SN: {toNode['user']['shortName']} LN: {toNode['user']['longName']} \n"
# print(f"To SN: {toNode['user']['shortName']} LN: {toNode['user']['longName']}")
else:
message += f"To SN: Unknown LN: Unknown \n"
if message:
print(message)
# print(f"To SN: {toNode['user']['shortName']} LN: {toNode['user']['longName']}")
# fromNode = interface.getNode(nodeId=packet['from'])
# print(fromNode.getLongName())
# toNode = interface.getNode(nodeId=packet['to'])
if 'decoded' in packet: if 'decoded' in packet:
print('decoded') print('decoded')
decoded = packet['decoded'] decoded = packet['decoded']
@ -38,34 +69,50 @@ def onReceive(packet, interface):
app_name = decoded['portnum'] app_name = decoded['portnum']
if app_name == 'TELEMETRY_APP': if app_name == 'TELEMETRY_APP':
with open(MESSAGE_FILE, 'w') as file: with open(MESSAGE_FILE, 'w') as file:
file.write(message)
file.write(f"TELEMETRY_APP: ") file.write(f"TELEMETRY_APP: ")
file.write(str(packet)) # file.write(str(packet))
print('Telemetry found') print('TELEMETRY_APP found')
elif app_name == 'POSITION_APP': elif app_name == 'POSITION_APP':
with open(MESSAGE_FILE, 'w') as file: with open(MESSAGE_FILE, 'w') as file:
file.write(message)
file.write(f"POSITION_APP: ") file.write(f"POSITION_APP: ")
file.write(str(packet)) # file.write(str(packet))
print('Position found') print('POSITION_APP found')
elif app_name == 'NODEINFO_APP':
with open(MESSAGE_FILE, 'w') as file:
file.write(message)
file.write(f"NODEINFO_APP: ")
# file.write(str(packet))
print('NODEINFO_APP found')
else: else:
print('Not a recodnized portnum message') print('Not a recognized portnum message')
print(packet) print(packet)
if 'decoded' in packet and 'text' in packet['decoded']: if 'decoded' in packet and 'text' in packet['decoded']:
print(packet) # print(packet)
message = packet['decoded']['text'] txt_message = packet['decoded']['text']
# Write message to file # Write message to file
with open(MESSAGE_FILE, 'w') as file: with open(MESSAGE_FILE, 'w') as file:
file.write(message) file.write(message)
file.write(txt_message)
# Notify send_message function # Notify send_message function
# pub.sendMessage('send_to_irc') # pub.sendMessage('send_to_irc')
print(f"text message here: {message}") print(f"text message here: {txt_message}")
else: else:
print('Not the text message') print('Not the text message')
print(packet) # print(packet)
# def onReceive2(packet, interface2):
# onReceive(packet, interface2)
def onConnection(interface, topic=pub.AUTO_TOPIC):
pass
pub.subscribe(onConnection, "meshtastic.connection.established")
# Subscribe send_message function to the send_to_irc topic # Subscribe send_message function to the send_to_irc topic
@ -73,12 +120,22 @@ def onReceive(packet, interface):
# This does not work ATM, so doing a quick workaround. # This does not work ATM, so doing a quick workaround.
# Initialize the meshtastic interface # Initialize the meshtastic interface
interface = meshtastic.tcp_interface.TCPInterface(hostname='192.168.1.102') # repeater interface = meshtastic.tcp_interface.TCPInterface(hostname='192.168.1.104') # mobile
# interface = meshtastic.tcp_interface.TCPInterface(hostname='192.168.1.102') # repeater
interface.showInfo()
# # interface.getNode()
# tables = interface.showNodes()
# nodes = interface.nodesByNum
# print(nodes)
# interface.getNode()
# interface = meshtastic.tcp_interface.TCPInterface(hostname='192.168.1.104') # mobile
# send message from client ip to repeater. # send message from client ip to repeater.
# Subscribe onReceive function to the meshtastic.receive topic # Subscribe onReceive function to the meshtastic.receive topic
pub.subscribe(onReceive, "meshtastic.receive") pub.subscribe(onReceive, "meshtastic.receive")
# pub.subscribe(onReceive2, "meshtastic.receive")
# Keep the script running to process incoming messages # Keep the script running to process incoming messages
try: try:
while True: while True:

26
run_script.sh Executable file
View file

@ -0,0 +1,26 @@
#!/bin/bash
# Set the maximum number of retries
max_retries=5
retries=0
while [ $retries -lt $max_retries ]; do
# Run your Python script
python main.py
# Check the exit code of the Python script
if [ $? -ne 0 ]; then
echo "Error occurred. Retrying..."
retries=$((retries + 1))
else
echo "Script executed successfully."
retries=0
break
fi
done
if [ $retries -eq $max_retries ]; then
echo "Max retries reached. Exiting."
exit 1
fi