diff --git a/api-backend_blueprint/server.py b/api-backend_blueprint/server.py index 7c3d222..0603bd0 100644 --- a/api-backend_blueprint/server.py +++ b/api-backend_blueprint/server.py @@ -1,5 +1,6 @@ -from flask import Flask, jsonify +from flask import Flask, jsonify, request import requests +import sqlite3 app = Flask(__name__) @@ -10,20 +11,35 @@ printers = [ "192.168.0.12" ] +# SQLite-Datenbank initialisieren +def init_db(): + conn = sqlite3.connect('printers.db') + c = conn.cursor() + c.execute('''CREATE TABLE IF NOT EXISTS printers + (ip TEXT PRIMARY KEY, status TEXT)''') + for printer_ip in printers: + c.execute("INSERT OR IGNORE INTO printers (ip, status) VALUES (?, ?)", (printer_ip, "frei")) + conn.commit() + conn.close() + @app.route('/printer_status', methods=['GET']) def get_printer_status(): printer_status = [] + conn = sqlite3.connect('printers.db') + c = conn.cursor() for printer_ip in printers: + c.execute("SELECT status FROM printers WHERE ip = ?", (printer_ip,)) + status = c.fetchone()[0] + try: - # Sende eine GET-Anfrage an den 3D-Drucker, um den Status abzufragen response = requests.get(f"http://{printer_ip}/api/printer/status") if response.status_code == 200: status_data = response.json() printer_status.append({ "ip": printer_ip, - "status": status_data["status"], + "status": status, "progress": status_data["progress"], "temperature": status_data["temperature"] }) @@ -42,7 +58,39 @@ def get_printer_status(): "temperature": None }) + conn.close() return jsonify(printer_status) +@app.route('/print_job', methods=['POST']) +def submit_print_job(): + print_job = request.json + printer_ip = print_job["printer_ip"] + file_url = print_job["file_url"] + + conn = sqlite3.connect('printers.db') + c = conn.cursor() + c.execute("SELECT status FROM printers WHERE ip = ?", (printer_ip,)) + status = c.fetchone()[0] + + if status == "frei": + try: + response = requests.post(f"http://{printer_ip}/api/print_job", json={"file_url": file_url}) + + if response.status_code == 200: + c.execute("UPDATE printers SET status = 'besetzt' WHERE ip = ?", (printer_ip,)) + conn.commit() + conn.close() + return jsonify({"message": "Druckauftrag gestartet"}), 200 + else: + conn.close() + return jsonify({"message": "Fehler beim Starten des Druckauftrags"}), 500 + except: + conn.close() + return jsonify({"message": "Drucker nicht erreichbar"}), 500 + else: + conn.close() + return jsonify({"message": "Drucker ist nicht frei"}), 400 + if __name__ == '__main__': + init_db() app.run(host='0.0.0.0', port=5000)