Update monitor_mesh.py

This commit is contained in:
brad28b 2024-05-16 10:32:42 +10:00 committed by GitHub
parent be08bccf0e
commit d50c8ae815
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -7,13 +7,16 @@ import json
# MySQL database configuration # MySQL database configuration
servername = "localhost" servername = "localhost"
username = "meshtastic" username = "meshtastic"
password = "YOUR_PASSWORD_HERE" password = "YOUR_PASSWORD"
dbname = "meshtastic" dbname = "meshtastic"
# MQTT broker configuration # MQTT broker configuration
broker_address = "192.168.X.X" broker_address = "192.168.x.x"
broker_port = 1883 broker_port = 1883
client_id = "mesh-monitor-py" client_id = "mesh-monitor-py"
topic = "Meshtastic/2/json/LongFast/!da5ed0a0" # replace !da5ed0a0 with your own Node ID
# You should not need to modify anything beyong here
# Connect to MySQL database # Connect to MySQL database
conn = pymysql.connect(host=servername, user=username, password=password, database=dbname) conn = pymysql.connect(host=servername, user=username, password=password, database=dbname)
@ -32,16 +35,27 @@ def process_JSON(data, type):
sql_values += "%s," sql_values += "%s,"
params.append(value) params.append(value)
for field, value in data['payload'].items(): payload_value = data.get('payload')
if isinstance(value, list): if isinstance(payload_value, dict):
field_str = '|'.join([f"node_id:{item['node_id']}:snr:{item['snr']}" for item in value]) for field, value in payload_value.items():
sql_columns += f"`payload_{field}`," if isinstance(value, list):
sql_values += "%s," if field == 'neighbors':
params.append(field_str) # Extract neighbor information and join into a single string
else: field_str = '|'.join([f"node_id:{item['node_id']}:snr:{item['snr']}" for item in value])
sql_columns += f"`payload_{field}`," else:
sql_values += "%s," field_str = '|'.join(value) # Concatenate array elements into a string
params.append(value) sql_columns += f"`payload_{field}`,"
sql_values += "%s,"
params.append(field_str)
else:
sql_columns += f"`payload_{field}`,"
sql_values += "%s,"
params.append(value)
else:
# Handle the case where payload is not a dictionary with iterable values
sql_columns += "`payload_route`,"
sql_values += "%s,"
params.append(payload_value)
# Remove trailing commas # Remove trailing commas
sql_columns = sql_columns.rstrip(",") sql_columns = sql_columns.rstrip(",")
@ -59,8 +73,7 @@ def process_JSON(data, type):
cursor.close() cursor.close()
def on_connect(client, userdata, flags, rc): def on_connect(client, userdata, flags, rc):
# print("Connected to MQTT broker with result code "+str(rc)) client.subscribe(topic)
client.subscribe("Meshtastic/2/json/LongFast/!da5ed0a0")
def on_message(client, userdata, msg): def on_message(client, userdata, msg):
print(msg.payload.decode()) print(msg.payload.decode())
@ -70,13 +83,10 @@ def on_message(client, userdata, msg):
if data['type'] in known_types: if data['type'] in known_types:
process_JSON(data, data['type']) process_JSON(data, data['type'])
mqtt_client = mqtt.Client(client_id=client_id) mqtt_client = mqtt.Client(client_id=client_id)
mqtt_client.on_connect = on_connect mqtt_client.on_connect = on_connect
mqtt_client.on_message = on_message mqtt_client.on_message = on_message
# print("MySQL connection successful")
try: try:
mqtt_client.connect(broker_address, broker_port, 60) mqtt_client.connect(broker_address, broker_port, 60)
mqtt_client.loop_forever() mqtt_client.loop_forever()