diff --git a/monitor_mesh.py b/monitor_mesh.py new file mode 100644 index 0000000..3caf4bb --- /dev/null +++ b/monitor_mesh.py @@ -0,0 +1,86 @@ +#!/usr/bin/python3 + +import paho.mqtt.client as mqtt +import pymysql +import json + +# MySQL database configuration +servername = "localhost" +username = "meshtastic" +password = "YOUR_PASSWORD_HERE" +dbname = "meshtastic" + +# MQTT broker configuration +broker_address = "192.168.X.X" +broker_port = 1883 +client_id = "mesh-monitor-py" + +# Connect to MySQL database +conn = pymysql.connect(host=servername, user=username, password=password, database=dbname) + +def process_JSON(data, type): + global conn + + sql_columns = "" + sql_values = "" + params = [] + + # Build the SQL column names and values + for field, value in data.items(): + if field != 'payload': + sql_columns += f"`{field}`," + sql_values += "%s," + params.append(value) + + for field, value in data['payload'].items(): + if isinstance(value, list): + field_str = '|'.join([f"node_id:{item['node_id']}:snr:{item['snr']}" for item in 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) + + # Remove trailing commas + sql_columns = sql_columns.rstrip(",") + sql_values = sql_values.rstrip(",") + + # Prepare the SQL statement + sql = f"INSERT INTO `{type}` ({sql_columns}) VALUES ({sql_values})" + cursor = conn.cursor() + cursor.execute(sql, params) + conn.commit() + + print("New record created successfully") + print("") + + cursor.close() + +def on_connect(client, userdata, flags, rc): +# print("Connected to MQTT broker with result code "+str(rc)) + client.subscribe("Meshtastic/2/json/LongFast/!da5ed0a0") + +def on_message(client, userdata, msg): + print(msg.payload.decode()) + print("") + data = json.loads(msg.payload) + known_types = ['traceroute', 'telemetry', 'text', 'neighborinfo', 'nodeinfo', 'position'] + if data['type'] in known_types: + process_JSON(data, data['type']) + + +mqtt_client = mqtt.Client(client_id=client_id) +mqtt_client.on_connect = on_connect +mqtt_client.on_message = on_message + +# print("MySQL connection successful") + +try: + mqtt_client.connect(broker_address, broker_port, 60) + mqtt_client.loop_forever() +except KeyboardInterrupt: + print("\nExiting...") + mqtt_client.disconnect() + conn.close()