diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3022139 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +venv/ +__pycache__/ +test* +*.old +.venv/ diff --git a/app.py b/app.py new file mode 100644 index 0000000..2ca983c --- /dev/null +++ b/app.py @@ -0,0 +1,71 @@ +""" +moOde Radio Controller +Flask-Webapp zur Steuerung des moOde Audio Players +""" + +import os +import requests +from flask import Flask, jsonify, render_template, request + +# templates/ und static/ immer relativ zur app.py finden, +# egal von welchem Verzeichnis aus gestartet wird +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +app = Flask(__name__, template_folder=os.path.join(BASE_DIR, "templates")) + +# moOde Player IP-Adresse – anpassen! +MOODE_URL = "http://moode.local" + + +def moode_cmd(cmd: str, **kwargs) -> dict: + """Sendet einen Befehl an die moOde-API.""" + try: + params = {"cmd": cmd, **kwargs} + r = requests.get(f"{MOODE_URL}/engine/index.php", params=params, timeout=5) + r.raise_for_status() + try: + return {"ok": True, "data": r.json()} + except Exception: + return {"ok": True, "data": r.text} + except requests.exceptions.ConnectionError: + return {"ok": False, "error": "moOde nicht erreichbar. IP-Adresse prüfen."} + except requests.exceptions.Timeout: + return {"ok": False, "error": "Verbindungs-Timeout."} + except Exception as e: + return {"ok": False, "error": str(e)} + + +@app.route("/") +def index(): + return render_template("index.html", moode_url=MOODE_URL) + + +@app.route("/api/play", methods=["POST"]) +def play(): + result = moode_cmd("play") + return jsonify(result) + + +@app.route("/api/stop", methods=["POST"]) +def stop(): + result = moode_cmd("stop") + return jsonify(result) + + +@app.route("/api/volume", methods=["POST"]) +def volume(): + level = request.json.get("level") + if level is None or not (0 <= int(level) <= 100): + return jsonify({"ok": False, "error": "Ungültige Lautstärke (0–100)."}) + result = moode_cmd("vol.set", level=int(level)) + return jsonify(result) + + +@app.route("/api/status") +def status(): + result = moode_cmd("get_currentsong") + return jsonify(result) + + +if __name__ == "__main__": + print("moOde Controller gestartet → http://localhost:5555") + app.run(debug=True, host="0.0.0.0", port=5555) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a0d407c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +flask>=3.0 +requests>=2.31 diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..0515a30 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,434 @@ + + +
+ + +