from flask import Flask, jsonify, request import requests import sqlite3 from dotenv import load_dotenv import os load_dotenv() printers = os.getenv('PRINTER_IPS').split(',') app = Flask(__name__) # 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: 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, "progress": status_data["progress"], "temperature": status_data["temperature"] }) else: printer_status.append({ "ip": printer_ip, "status": "Fehler bei der Abfrage", "progress": None, "temperature": None }) except: printer_status.append({ "ip": printer_ip, "status": "Drucker nicht erreichbar", "progress": None, "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)