Add simulator architecture separation and warning system
This commit is contained in:
+20
-55
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user