mesh-map/app.py
david 30f8a3bc64
All checks were successful
Meshtastic Map - See local Meshtastic Nodes / deploy (push) Successful in 1s
fix crash on bytes
2025-04-13 17:36:48 -07:00

47 lines
1.1 KiB
Python

from flask import Flask, render_template, jsonify
import meshtastic.serial_interface
import meshtastic
import threading
import time
app = Flask(__name__)
node_locations = {}
MY_NODE_ID = "!934f4430"
# MY_NODE_NUM = 2471445552
iface = meshtastic.serial_interface.SerialInterface()
# iface.nodes.clear()
def safe_dict(obj):
if isinstance(obj, dict):
return {k: safe_dict(v) for k, v in obj.items()}
elif isinstance(obj, list):
return [safe_dict(i) for i in obj]
elif isinstance(obj, bytes):
return obj.decode(errors="replace")
else:
return obj
@app.route("/")
def index():
return render_template("map.html")
@app.route("/nodes")
def nodes():
data = {}
nodes = iface.nodes.items()
for node_id, node in nodes:
num = node.get('num')
user = node.get('user')
position = node.get('position')
deviceMetrics = node.get('deviceMetrics')
return jsonify({
# "myNodeNum": MY_NODE_NUM,
"myNodeId": MY_NODE_ID,
"nodes": safe_dict(nodes)
})
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8083)