From 30ac20daf7bd508b8c44d9256a00c806950bb5d9 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Fri, 20 Jun 2025 11:34:40 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=89=20Refactor=20backend=20structure?= =?UTF-8?q?=20&=20updates=20=F0=9F=93=9A=F0=9F=94=A7=F0=9F=92=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/backend/database/myp.db | Bin 94208 -> 0 bytes backend/backend/package.json | 0 backend/blueprints/admin_unified.py | 2 +- backend/logs/app/app.log | 1 + .../hardware_integration.log | 2 + .../utilities_collection.log | 6 ++ .../hardware_integration.cpython-311.pyc | Bin 39932 -> 41203 bytes .../utilities_collection.cpython-311.pyc | Bin 13462 -> 13454 bytes backend/utils/hardware_integration.py | 87 ++++++++++++------ 9 files changed, 68 insertions(+), 30 deletions(-) delete mode 100644 backend/backend/database/myp.db create mode 100644 backend/backend/package.json diff --git a/backend/backend/database/myp.db b/backend/backend/database/myp.db deleted file mode 100644 index 55c6e5dc56f0b8e975740dabdb93cd313ce1a531..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94208 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 diff --git a/backend/backend/package.json b/backend/backend/package.json new file mode 100644 index 000000000..e69de29bb diff --git a/backend/blueprints/admin_unified.py b/backend/blueprints/admin_unified.py index cf5c37359..7b1f8e869 100644 --- a/backend/blueprints/admin_unified.py +++ b/backend/blueprints/admin_unified.py @@ -3119,7 +3119,7 @@ def api_admin_system_health(): # Prüfe wichtige Verzeichnisse important_dirs = [ 'backend/uploads', - 'backend/database', + 'database', 'backend/logs' ] diff --git a/backend/logs/app/app.log b/backend/logs/app/app.log index fa8ef39c3..f5e9b6d7d 100644 --- a/backend/logs/app/app.log +++ b/backend/logs/app/app.log @@ -63687,3 +63687,4 @@ WHERE users.role = ?] 2025-06-20 11:19:33 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Steckdosen (alle auf 'aus' = frei)... 2025-06-20 11:19:33 - [app] app - [INFO] INFO - [STARTUP] ℹ️ Keine Steckdosen zur Initialisierung gefunden 2025-06-20 11:19:33 - [app] app - [INFO] INFO - [STARTUP] 🌐 Server startet auf http://: +2025-06-20 11:26:38 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: database/myp.db diff --git a/backend/logs/hardware_integration/hardware_integration.log b/backend/logs/hardware_integration/hardware_integration.log index fea6974e5..12ec86539 100644 --- a/backend/logs/hardware_integration/hardware_integration.log +++ b/backend/logs/hardware_integration/hardware_integration.log @@ -3833,3 +3833,5 @@ 2025-06-20 11:19:24 - [hardware_integration] hardware_integration - [INFO] INFO - 🎯 DruckerSteuerung initialisiert - BACKEND ÜBERNIMMT KONTROLLE 2025-06-20 11:19:31 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen 2025-06-20 11:19:33 - [hardware_integration] hardware_integration - [INFO] INFO - 🎯 DruckerSteuerung initialisiert - BACKEND ÜBERNIMMT KONTROLLE +2025-06-20 11:26:38 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen +2025-06-20 11:26:38 - [hardware_integration] hardware_integration - [INFO] INFO - 🎯 DruckerSteuerung initialisiert - BACKEND ÜBERNIMMT KONTROLLE diff --git a/backend/logs/utilities_collection/utilities_collection.log b/backend/logs/utilities_collection/utilities_collection.log index 79dd21143..4ba96e3fb 100644 --- a/backend/logs/utilities_collection/utilities_collection.log +++ b/backend/logs/utilities_collection/utilities_collection.log @@ -1341,3 +1341,9 @@ 2025-06-20 11:19:22 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) 2025-06-20 11:19:31 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert 2025-06-20 11:19:31 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-20 11:26:37 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-20 11:26:37 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-20 11:28:08 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-20 11:28:08 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-20 11:28:56 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-20 11:28:56 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) diff --git a/backend/utils/__pycache__/hardware_integration.cpython-311.pyc b/backend/utils/__pycache__/hardware_integration.cpython-311.pyc index 3ae845705f64b991607d156c809ad402e93819ee..02a3e2e36dda0b6bec3849a8fa48cc000a703ddb 100644 GIT binary patch delta 12171 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 H{^9=vVX77B delta 10977 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 diff --git a/backend/utils/__pycache__/utilities_collection.cpython-311.pyc b/backend/utils/__pycache__/utilities_collection.cpython-311.pyc index 130f38a11e30d69f561595ada0d7efdb15c0e0ac..003c601bc7ec779cc0ec1c9098a09b44dc9c1681 100644 GIT binary patch delta 36 rcmbQ1*_X+?oR^o20SL-9LNhLI{<%5w|9 delta 44 zcmeCnoR-PEoR^o20SJ`-gk;>@$oqngQ#>g#IXg8kMSt@*w$;pxx| 0 else 'warning', + 'system_status': 'healthy' if gesamt_verfügbar > 0 else 'warning' if gesamt_belegt > 0 else 'critical', 'timestamp': datetime.now().isoformat(), 'tapo_verfügbar': TAPO_AVAILABLE } @@ -413,12 +428,26 @@ class DruckerSteuerung: if not drucker.plug_ip: return 'unknown' - # Echter Hardware-Status prüfen - KEINE SIMULATION! + # Echter Hardware-Status prüfen mit korrekter Logik: + # - Steckdose nicht erreichbar = offline + # - Steckdose an = drucker belegt + # - Steckdose aus = drucker verfügbar - # Ping-Test zur Steckdose - if self._ping_test(drucker.plug_ip): - return 'online' - else: + # Status über Tapo-API abrufen + try: + reachable, power_status = self.check_outlet_status(drucker.plug_ip, drucker.id) + + if not reachable: + return 'offline' # Steckdose nicht erreichbar + elif power_status == 'on': + return 'belegt' # Steckdose an = Drucker läuft/belegt + elif power_status == 'off': + return 'verfügbar' # Steckdose aus = Drucker verfügbar + else: + return 'unknown' # Unbekannter Status + + except Exception as e: + hardware_logger.warning(f"⚠️ Status-Prüfung für {drucker.name} fehlgeschlagen: {e}") return 'offline' def _ping_test(self, ip: str, timeout: int = 3) -> bool: