mesh-map/app.py
David Westgate 58c350e051
All checks were successful
Meshtastic Map - See local Meshtastic Nodes / deploy (push) Successful in 1s
add favicon
2025-04-23 22:12:46 +00:00

57 lines
1.5 KiB
Python

from flask import Flask, render_template, jsonify, send_from_directory
import meshtastic.serial_interface
import meshtastic
import threading
import time
import os
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")
elif hasattr(obj, "__dict__"):
return safe_dict(vars(obj)) # Recursively process custom objects
elif hasattr(obj, "to_dict"):
return safe_dict(obj.to_dict()) # If object has a to_dict() method
else:
try:
return str(obj) # Fallback
except Exception:
return None
@app.route("/")
def index():
return render_template("map.html")
@app.route("/nodes")
def nodes():
data = {}
for node_id, node in iface.nodes.items():
data[node_id] = safe_dict(node)
return jsonify({
"myNodeId": MY_NODE_ID,
"nodes": data
})
# Serve favicon
@app.route('/favicon.ico')
def favicon():
return send_from_directory(os.path.join(app.root_path, 'static'),
'favicon.ico', mimetype='image/vnd.microsoft.icon')
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8083)