Add desktop simulator

This commit is contained in:
root
2026-06-02 23:56:36 -06:00
parent f61011a285
commit a7d007d1c5
4 changed files with 291 additions and 0 deletions
+107
View File
@@ -0,0 +1,107 @@
from flask import Flask, jsonify, render_template, request
import random
import time
app = Flask(__name__)
state = {
"relays": {
"starlink": False,
"fridge": True
},
"wifi_override_until": 0
}
def fake_status():
starlink_on = state["relays"]["starlink"]
wifi_override_active = time.time() < state["wifi_override_until"]
return {
"timestamp": int(time.time()),
"battery": {
"soc": random.randint(76, 84),
"voltage": round(random.uniform(13.0, 13.4), 2),
"current": round(random.uniform(-8.0, -3.0), 1),
"remaining_ah": round(random.uniform(76.0, 84.0), 1),
"runtime_hours": round(random.uniform(9.5, 14.0), 1),
"temperature_f": round(random.uniform(70.0, 82.0), 1)
},
"temps": {
"fridge_zone_1": round(random.uniform(34.0, 38.0), 1),
"fridge_zone_2": round(random.uniform(8.0, 16.0), 1),
"rear_seat": round(random.uniform(72.0, 86.0), 1),
"outside": round(random.uniform(80.0, 96.0), 1)
},
"relays": state["relays"],
"network": {
"wifi_enabled": starlink_on or wifi_override_active,
"wifi_override_active": wifi_override_active,
"rs485_connected": True,
"starlink_enabled": starlink_on
}
}
@app.route("/")
def index():
return render_template("index.html")
@app.route("/status")
def status():
return jsonify(fake_status())
@app.route("/battery")
def battery():
return jsonify(fake_status()["battery"])
@app.route("/temps")
def temps():
return jsonify(fake_status()["temps"])
@app.route("/relays")
def relays():
return jsonify(state["relays"])
@app.route("/relay/<name>", methods=["POST"])
def set_relay(name):
if name not in state["relays"]:
return jsonify({"success": False, "error": "Unknown relay"}), 404
data = request.get_json(force=True)
state["relays"][name] = bool(data.get("state", False))
return jsonify({
"success": True,
name: state["relays"][name]
})
@app.route("/network")
def network():
return jsonify(fake_status()["network"])
@app.route("/network/wifi", methods=["POST"])
def enable_wifi():
data = request.get_json(force=True)
minutes = int(data.get("minutes", 10))
state["wifi_override_until"] = time.time() + minutes * 60
return jsonify({
"success": True,
"expires_minutes": minutes
})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)