Add simulator architecture separation and warning system

This commit is contained in:
root
2026-06-03 00:16:08 -06:00
parent 5f65a7cbb8
commit 06ef856210
5 changed files with 213 additions and 76 deletions
+20 -55
View File
@@ -1,51 +1,8 @@
from flask import Flask, jsonify, render_template, request
import random
import time
from esp32_sim import esp32
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():
@@ -54,48 +11,48 @@ def index():
@app.route("/status")
def status():
return jsonify(fake_status())
return jsonify(esp32.get_status())
@app.route("/battery")
def battery():
return jsonify(fake_status()["battery"])
return jsonify(esp32.get_status()["battery"])
@app.route("/temps")
def temps():
return jsonify(fake_status()["temps"])
return jsonify(esp32.get_status()["temps"])
@app.route("/relays")
def relays():
return jsonify(state["relays"])
return jsonify(esp32.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))
success = esp32.set_relay(name, data.get("state", False))
if not success:
return jsonify({"success": False, "error": "Unknown relay"}), 404
return jsonify({
"success": True,
name: state["relays"][name]
name: esp32.relays[name]
})
@app.route("/network")
def network():
return jsonify(fake_status()["network"])
return jsonify(esp32.get_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
esp32.enable_wifi(minutes)
return jsonify({
"success": True,
@@ -103,5 +60,13 @@ def enable_wifi():
})
@app.route("/vehicle/ignition", methods=["POST"])
def toggle_ignition():
return jsonify({
"success": True,
"ignition_on": esp32.toggle_ignition()
})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)