108 lines
2.5 KiB
Python
108 lines
2.5 KiB
Python
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)
|