From f1094bb1250ae36e4904e7f6d6c7e21ff619398b Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Tue, 3 Jun 2025 15:29:54 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9A=20Improved=20documentation=20and?= =?UTF-8?q?=20log=20files=20across=20backend=20logs=20=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/database/myp.db | Bin 131072 -> 135168 bytes backend/database/myp.db-shm | Bin 32768 -> 0 bytes backend/database/myp.db-wal | Bin 8272 -> 0 bytes backend/image/README/1748957358500.png | Bin 0 -> 78751 bytes backend/logs/analytics/analytics.log | 3 + backend/logs/app/app.log | 83 ++ backend/logs/auth/auth.log | 856 ++++++++++++++++++ backend/logs/backup/backup.log | 3 + backend/logs/calendar/calendar.log | 1 + backend/logs/dashboard/dashboard.log | 12 + backend/logs/database/database.log | 3 + .../database_cleanup/database_cleanup.log | 9 + .../email_notification/email_notification.log | 3 + .../logs/error_recovery/error_recovery.log | 12 + backend/logs/maintenance/maintenance.log | 6 + .../logs/multi_location/multi_location.log | 6 + backend/logs/myp-install-debug.log | 58 +- backend/logs/myp-install-errors.log | 2 +- backend/logs/myp-install-warnings.log | 2 +- backend/logs/myp-install.log | 103 +-- backend/logs/permissions/permissions.log | 3 + .../logs/printer_monitor/printer_monitor.log | 45 + backend/logs/printers/printers.log | 9 + backend/logs/queue_manager/queue_manager.log | 12 + backend/logs/scheduler/scheduler.log | 223 +++++ backend/logs/security/security.log | 3 + .../shutdown_manager/shutdown_manager.log | 7 + backend/logs/startup/startup.log | 27 + .../logs/system_control/system_control.log | 3 + backend/logs/windows_fixes/windows_fixes.log | 12 + 30 files changed, 1367 insertions(+), 139 deletions(-) delete mode 100644 backend/database/myp.db-shm delete mode 100644 backend/database/myp.db-wal create mode 100644 backend/image/README/1748957358500.png diff --git a/backend/database/myp.db b/backend/database/myp.db index 0dc73407190b7e75d873b891bf99dca8771085fb..fb8c0f46360af004294e97bfdb87d495bfe531d9 100644 GIT binary patch delta 578 zcmYk3%WD%+7{%v08JIL}XM)hGL6{&up_BX0+}UW7iK~i&O@pQpZApl+w!ToiO9Z!K z8FZFyD!5RDwgIz}f*Th?p&R=L6ou}(v7$xrrXwZG3+J5QIp1wG^v0t8GNElLijthS z&V#L$o7`;An{{K=x??a}nY(Y-3YRDAkUo8KcWP49FI6h{igV6`DOOL9=L)s#(6Cczj)clRoNq@Y2#lJXl-2YM@7z*{M8%Zf8 zkP_U4YFGBgxba#0YP5}|b{xJif~6El9*%+888dPs+8;^iV76MFzCF|VmI8L8|B$gO z&!8lYJ!7|HE`uM2CZE<&XKxK?7hdmx$e^ZgD}%2F&c)XH#`JC3c~e)P)e=GT7dZ95 zxZK8V%mt!O&{_sAI2|nf1@EKTOkOw~Wkj&?6L{cQ(Ci#|kV}P4F=P%5T07Dc4HiCu zcTt@2D9<^b2;zT09vtoENKe`(Tw-{a^Sy6h?2!Y)ksgBl3xaIIAnUf0grNLec0xHO hkOxsd%pdN_mkum!%s6#KxZ`ZNW8cEPywly0{Rdvxt4;s_ delta 317 zcmZozz|qjaF+rO30Rsbr!bAmo#s?b{%mg;i7D(lvxPWz&LN>o?NKk~HN1=C=n`?5h zuVZLgWNJ=uR;E)~X=Z7JlV_=Ec$krif39n#Pf$u>SZY<3_v8io78=G@MrKw9 z7J9~pmWGDrMg~Tvx&~&t2F418CRRXXV5w(hX<%w%vdKVDfmx6H+~$P>%-oa3qn8O9 zDHxhs8ChBx8S7aZ8=0DzPCggCjb|-`y{NUiwz{~uB<@sMo;5$p0G{FboR(zqvxT3v6I~#y?$QFC**r-}@O^ F9RS3`UV#7r diff --git a/backend/database/myp.db-shm b/backend/database/myp.db-shm deleted file mode 100644 index 409e146a19cce49301cdcf4fe3541dc1bb03acf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI*Jq|%Z6b8`i{}l?Qf`Z;s*o8!F!4@PcE3g6)g?(r>N}FItUPOly=SyyGGI^P~ za~3eKdmcqjBUL4$Q=~pfbsQI`_HegZ@0asKzqT4LW|Qgqvh9BOecI}tyzliXro%ix+bz0xt#fn=eA( zKLzqjLqdQ60RjXF5FkL{I|Z8GIku?@5FkK+009C72oNAZfWR99t;qkC5CQ}U5FkK+ e009C72oNAZfB*pk1PBlyK!5-N0t5&Uh`0f$>LuL( diff --git a/backend/database/myp.db-wal b/backend/database/myp.db-wal deleted file mode 100644 index bd8b4a6427f2c384c6da79c398cc2cabbb402c29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8272 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 127.0.1.1 -[2025-06-03 14:18:06] === ROBUSTE SYSTEM-UPDATE === +[2025-06-03 15:28:49] === KONFIGURIERE HOSTNAME === +[2025-06-03 15:28:49] ✅ Hostname bereits korrekt: 'raspberrypi' +[2025-06-03 15:28:49] ✅ Hostname-Auflösung funktioniert: raspberrypi -> 127.0.1.1 +[2025-06-03 15:28:49] === ROBUSTE SYSTEM-UPDATE === [FORTSCHRITT] Konfiguriere APT für bessere Zuverlässigkeit... [FORTSCHRITT] Validiere APT-Repositories... -[2025-06-03 14:18:06] ✅ Source-Repositories deaktiviert (nicht benötigt) +[2025-06-03 15:28:49] ✅ Source-Repositories deaktiviert (nicht benötigt) [FORTSCHRITT] Aktualisiere Paketlisten mit Retry... [FORTSCHRITT] Führe System-Upgrade durch... [FORTSCHRITT] Installiere essenzielle System-Tools... @@ -68,8 +68,8 @@ System: Linux raspberrypi 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 [FORTSCHRITT] Installiere Pakete: dbus [FORTSCHRITT] Installiere Pakete: systemd-timesyncd [FORTSCHRITT] Synchronisiere Systemzeit... -[2025-06-03 14:18:15] ✅ Robustes System-Update abgeschlossen -[2025-06-03 14:18:15] === KONFIGURIERE ROBUSTE NETZWERK-SICHERHEIT === +[2025-06-03 15:28:58] ✅ Robustes System-Update abgeschlossen +[2025-06-03 15:28:58] === KONFIGURIERE ROBUSTE NETZWERK-SICHERHEIT === [FORTSCHRITT] Deaktiviere IPv6 (robust)... [FORTSCHRITT] Deaktiviere IPv6 in GRUB... [INFO] IPv6 bereits in GRUB deaktiviert @@ -78,76 +78,3 @@ System: Linux raspberrypi 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 [DEBUG] sysctl-Konfiguration erstellt: /etc/sysctl.d/99-myp-security.conf [FORTSCHRITT] Wende sysctl-Einstellungen an (non-blocking)... [FORTSCHRITT] Versuche komplette sysctl-Datei anzuwenden... -[ERFOLG] ✅ MYP sysctl-Einstellungen erfolgreich angewendet -[DEBUG] Überspringe system-weites sysctl -p (zu riskant) -[FORTSCHRITT] Deaktiviere IPv6 in Netzwerk-Interfaces (vorsichtig)... -[DEBUG] systemd-networkd nicht aktiv - überspringe -[DEBUG] NetworkManager nicht aktiv - überspringe -[DEBUG] IPv6 Einträge in /etc/hosts auskommentiert -[2025-06-03 14:18:15] ✅ Robuste Netzwerk-Sicherheit konfiguriert: -[2025-06-03 14:18:15] 🚫 IPv6 Deaktivierung konfiguriert -[2025-06-03 14:18:15] 🛡️ Netzwerk-Sicherheitsregeln gesetzt -[2025-06-03 14:18:15] 🔒 Basis-Firewall-Schutz aktiviert -[2025-06-03 14:18:15] 📝 Sysctl-Konfiguration erstellt: /etc/sysctl.d/99-myp-security.conf -[2025-06-03 14:18:15] 🔧 Netzwerk-Services entsprechend konfiguriert -[2025-06-03 14:18:15] ⚙️ Einstellungen werden beim nächsten Boot aktiv -[DEBUG] Alternative sysctl-Anwendung: -[DEBUG] - Manuell: sysctl -p /etc/sysctl.d/99-myp-security.conf -[DEBUG] - Automatisch: Beim nächsten Neustart aktiv -[DEBUG] - Verifikation: sysctl net.ipv6.conf.all.disable_ipv6 -[2025-06-03 14:18:15] === ROBUSTE PYTHON-INSTALLATION === -[FORTSCHRITT] Installiere Python 3 und Build-Abhängigkeiten... -[FORTSCHRITT] Installiere Pakete: python3 -[FORTSCHRITT] Installiere Pakete: python3-pip -[FORTSCHRITT] Installiere Pakete: python3-dev -[FORTSCHRITT] Installiere Pakete: python3-setuptools -[FORTSCHRITT] Installiere Pakete: python3-venv -[FORTSCHRITT] Installiere Pakete: python3-wheel -[FORTSCHRITT] Installiere Pakete: build-essential -[FORTSCHRITT] Installiere Pakete: libssl-dev -[FORTSCHRITT] Installiere Pakete: libffi-dev -[FORTSCHRITT] Installiere Pakete: libbz2-dev -[FORTSCHRITT] Installiere Pakete: libreadline-dev -[FORTSCHRITT] Installiere Pakete: libsqlite3-dev -[FORTSCHRITT] Installiere Pakete: libncurses5-dev -[FORTSCHRITT] Installiere Pakete: libncursesw5-dev -[FORTSCHRITT] Installiere Pakete: zlib1g-dev -[FORTSCHRITT] Installiere Pakete: sqlite3 -[FORTSCHRITT] Validiere Python-Installation... -[2025-06-03 14:18:21] ✅ Python Version: 3.11.2 -[FORTSCHRITT] Konfiguriere pip für bessere Zuverlässigkeit... -[FORTSCHRITT] Erstelle systemweite pip-Konfiguration... -[FORTSCHRITT] Konfiguriere pip für alle Benutzer... -[2025-06-03 14:18:21] ✅ pip konfiguriert für Benutzer: user -[FORTSCHRITT] Aktualisiere pip mit Retry... -[2025-06-03 14:18:22] ✅ pip Version: 25.1.1 -[2025-06-03 14:18:22] ✅ Robuste Python-Umgebung installiert -[2025-06-03 14:18:22] === ROBUSTE NODE.JS UND NPM INSTALLATION === -[FORTSCHRITT] Bereinige alte Node.js-Installationen... -[FORTSCHRITT] Installiere Node.js mit Fallback-Strategie... -[FORTSCHRITT] Verwende Debian Repository als Fallback... -[FORTSCHRITT] Installiere Pakete: nodejs npm -[2025-06-03 14:20:04] ✅ Node.js via Debian Repository installiert -[FORTSCHRITT] Validiere Node.js Installation... -[2025-06-03 14:20:04] ✅ Node.js Version: v18.19.0 -[2025-06-03 14:20:04] ✅ npm Version: 9.2.0 -[FORTSCHRITT] Optimiere npm-Konfiguration... -[2025-06-03 14:20:06] ✅ Node.js und npm erfolgreich installiert -[2025-06-03 14:20:06] === TIMEOUT-GESICHERTE SSL-ZERTIFIKATE KONFIGURATION === -[FORTSCHRITT] Installiere SSL-Grundkomponenten... -[FORTSCHRITT] Installiere Pakete: ca-certificates openssl -[FORTSCHRITT] Aktualisiere CA-Zertifikate (timeout-gesichert)... -[ERFOLG] ✅ CA-Zertifikate erfolgreich aktualisiert -[DEBUG] SSL-Verzeichnis erstellt: /usr/local/share/ca-certificates/myp -[FORTSCHRITT] Installiere Mercedes Corporate Zertifikate (timeout-gesichert)... -[FORTSCHRITT] Lade CA-Zertifikate nach Mercedes-Import neu (timeout-gesichert)... -[ERFOLG] ✅ Mercedes-Zertifikate erfolgreich in CA-Store integriert -[FORTSCHRITT] Konfiguriere SSL-Umgebungsvariablen... -[FORTSCHRITT] Validiere SSL-Konfiguration... -[2025-06-03 14:20:11] ✅ SSL-Zertifikate verfügbar: 144 CA-Zertifikate -[FORTSCHRITT] Finalisiere SSL-Konfiguration... -[2025-06-03 14:20:11] ✅ SSL-Zertifikate timeout-gesichert konfiguriert -[DEBUG] SSL-Konfiguration abgeschlossen ohne hängende Prozesse -[2025-06-03 14:20:11] === ROBUSTE PYTHON-PAKETE INSTALLATION === -[FORTSCHRITT] Installiere Python-Pakete mit verbesserter Strategie... -[FORTSCHRITT] Versuche direkte requirements.txt Installation... diff --git a/backend/logs/permissions/permissions.log b/backend/logs/permissions/permissions.log index d9ab6e11..eb807be9 100644 --- a/backend/logs/permissions/permissions.log +++ b/backend/logs/permissions/permissions.log @@ -119,3 +119,6 @@ 2025-06-03 13:23:54 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert 2025-06-03 13:27:15 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert 2025-06-03 14:14:08 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert +2025-06-03 15:19:26 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert +2025-06-03 15:21:44 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert +2025-06-03 15:22:53 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert diff --git a/backend/logs/printer_monitor/printer_monitor.log b/backend/logs/printer_monitor/printer_monitor.log index 371a57b3..855460b0 100644 --- a/backend/logs/printer_monitor/printer_monitor.log +++ b/backend/logs/printer_monitor/printer_monitor.log @@ -3327,3 +3327,48 @@ 2025-06-03 14:14:24 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... 2025-06-03 14:14:24 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Prüfe Status von 2 aktiven Druckern... 2025-06-03 14:14:27 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101 +2025-06-03 15:19:24 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert +2025-06-03 15:19:24 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet +2025-06-03 15:19:26 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung... +2025-06-03 15:19:26 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration +2025-06-03 15:19:26 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103 +2025-06-03 15:19:27 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart... +2025-06-03 15:19:29 - [printer_monitor] printer_monitor - [WARNING] WARNING - ❌ Tapo P110 (192.168.0.103): Steckdose konnte nicht ausgeschaltet werden +2025-06-03 15:19:31 - [printer_monitor] printer_monitor - [WARNING] WARNING - ❌ Tapo P110 (192.168.0.104): Steckdose konnte nicht ausgeschaltet werden +2025-06-03 15:19:31 - [printer_monitor] printer_monitor - [INFO] INFO - 🎯 Steckdosen-Initialisierung abgeschlossen: 0/2 erfolgreich +2025-06-03 15:19:32 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104 +2025-06-03 15:19:38 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 3/6: 192.168.0.100 +2025-06-03 15:19:44 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101 +2025-06-03 15:19:50 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102 +2025-06-03 15:19:56 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 6/6: 192.168.0.105 +2025-06-03 15:20:02 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 36.0s +2025-06-03 15:21:43 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert +2025-06-03 15:21:43 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet +2025-06-03 15:21:45 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart... +2025-06-03 15:21:45 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung... +2025-06-03 15:21:45 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration +2025-06-03 15:21:45 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103 +2025-06-03 15:21:47 - [printer_monitor] printer_monitor - [WARNING] WARNING - ❌ Tapo P110 (192.168.0.103): Steckdose konnte nicht ausgeschaltet werden +2025-06-03 15:21:49 - [printer_monitor] printer_monitor - [WARNING] WARNING - ❌ Tapo P110 (192.168.0.104): Steckdose konnte nicht ausgeschaltet werden +2025-06-03 15:21:49 - [printer_monitor] printer_monitor - [INFO] INFO - 🎯 Steckdosen-Initialisierung abgeschlossen: 0/2 erfolgreich +2025-06-03 15:21:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104 +2025-06-03 15:21:57 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 3/6: 192.168.0.100 +2025-06-03 15:22:03 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101 +2025-06-03 15:22:52 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert +2025-06-03 15:22:52 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet +2025-06-03 15:22:54 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart... +2025-06-03 15:22:54 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung... +2025-06-03 15:22:54 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration +2025-06-03 15:22:54 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103 +2025-06-03 15:22:56 - [printer_monitor] printer_monitor - [WARNING] WARNING - ❌ Tapo P110 (192.168.0.103): Steckdose konnte nicht ausgeschaltet werden +2025-06-03 15:22:56 - [printer_monitor] printer_monitor - [INFO] INFO - 🎯 Steckdosen-Initialisierung abgeschlossen: 0/1 erfolgreich +2025-06-03 15:23:00 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104 +2025-06-03 15:23:06 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 3/6: 192.168.0.100 +2025-06-03 15:23:12 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101 +2025-06-03 15:23:16 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-03 15:23:16 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Prüfe Status von 1 aktiven Druckern... +2025-06-03 15:23:18 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102 +2025-06-03 15:23:24 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 6/6: 192.168.0.105 +2025-06-03 15:23:25 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.103): UNREACHABLE (Ping fehlgeschlagen) +2025-06-03 15:23:25 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Status-Update abgeschlossen für 1 Drucker +2025-06-03 15:23:30 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 36.0s diff --git a/backend/logs/printers/printers.log b/backend/logs/printers/printers.log index a74810da..5d4918b8 100644 --- a/backend/logs/printers/printers.log +++ b/backend/logs/printers/printers.log @@ -6715,3 +6715,12 @@ 2025-06-03 14:14:22 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) 2025-06-03 14:14:24 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check) 2025-06-03 14:14:24 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-03 15:23:16 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-03 15:23:25 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 1 Drucker +2025-06-03 15:23:25 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 9011.59ms +2025-06-03 15:23:26 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-03 15:23:26 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 1 Drucker +2025-06-03 15:23:26 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 0.91ms +2025-06-03 15:23:56 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-03 15:23:56 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 1 Drucker +2025-06-03 15:23:56 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 0.31ms diff --git a/backend/logs/queue_manager/queue_manager.log b/backend/logs/queue_manager/queue_manager.log index 535d7ab2..b032655b 100644 --- a/backend/logs/queue_manager/queue_manager.log +++ b/backend/logs/queue_manager/queue_manager.log @@ -77,3 +77,15 @@ 2025-06-01 21:13:28 - [queue_manager] queue_manager - [INFO] INFO - ⏳ Warte auf Monitor-Thread... 2025-06-01 21:13:33 - [queue_manager] queue_manager - [WARNING] WARNING - ⚠️ Monitor-Thread reagiert nicht - forciere Beendigung 2025-06-01 21:13:33 - [queue_manager] queue_manager - [ERROR] ERROR - ❌ Fehler beim Stoppen des Queue-Managers: cannot set daemon status of active thread +2025-06-03 15:21:49 - [queue_manager] queue_manager - [INFO] INFO - 🚀 Initialisiere neuen Queue-Manager... +2025-06-03 15:21:49 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Zentrale Shutdown-Verwaltung erkannt - deaktiviere lokale Signal-Handler +2025-06-03 15:21:49 - [queue_manager] queue_manager - [INFO] INFO - 🚀 Starte Printer Queue Manager... +2025-06-03 15:21:49 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Queue-Überwachung gestartet (Intervall: 120 Sekunden) +2025-06-03 15:21:49 - [queue_manager] queue_manager - [INFO] INFO - ✅ Printer Queue Manager gestartet +2025-06-03 15:21:49 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestartet +2025-06-03 15:21:49 - [queue_manager] queue_manager - [INFO] INFO - 🔍 Überprüfe 8 wartende Jobs... +2025-06-03 15:21:49 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Stoppe Queue-Manager... +2025-06-03 15:21:49 - [queue_manager] queue_manager - [INFO] INFO - ⏳ Warte auf Monitor-Thread... +2025-06-03 15:21:54 - [queue_manager] queue_manager - [INFO] INFO - 🛑 Shutdown-Signal empfangen - beende Monitor-Loop +2025-06-03 15:21:54 - [queue_manager] queue_manager - [INFO] INFO - 🔚 Monitor-Loop beendet +2025-06-03 15:21:54 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestoppt diff --git a/backend/logs/scheduler/scheduler.log b/backend/logs/scheduler/scheduler.log index ac67a941..75b9c937 100644 --- a/backend/logs/scheduler/scheduler.log +++ b/backend/logs/scheduler/scheduler.log @@ -29998,3 +29998,226 @@ 2025-06-03 14:14:30 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) 2025-06-03 14:14:30 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 6 nicht einschalten 2025-06-03 14:14:30 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-03 15:19:24 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-03 15:19:31 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-03 15:19:31 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-03 15:19:31 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-03 15:19:34 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:19:34 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten +2025-06-03 15:19:34 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-03 15:19:38 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:19:38 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten +2025-06-03 15:19:38 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-03 15:19:40 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:19:40 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-03 15:19:40 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-03 15:19:42 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:19:42 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten +2025-06-03 15:19:42 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-03 15:19:44 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:19:44 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten +2025-06-03 15:19:44 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-03 15:19:46 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:19:46 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 4 nicht einschalten +2025-06-03 15:19:46 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-03 15:19:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:19:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 5 nicht einschalten +2025-06-03 15:19:48 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-03 15:19:50 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:19:50 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 6 nicht einschalten +2025-06-03 15:19:50 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-03 15:19:52 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:19:52 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 9 nicht einschalten +2025-06-03 15:19:52 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-03 15:19:54 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:19:54 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 10 nicht einschalten +2025-06-03 15:19:54 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-03 15:19:57 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:19:57 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 11 nicht einschalten +2025-06-03 15:19:57 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-03 15:19:59 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:19:59 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 12 nicht einschalten +2025-06-03 15:19:59 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-03 15:20:01 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:01 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 13 nicht einschalten +2025-06-03 15:20:01 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-03 15:20:03 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:03 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 14 nicht einschalten +2025-06-03 15:20:03 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-03 15:20:05 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:05 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 15 nicht einschalten +2025-06-03 15:20:05 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-03 15:20:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 16 nicht einschalten +2025-06-03 15:20:08 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-03 15:20:10 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:10 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten +2025-06-03 15:20:10 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-03 15:20:12 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:12 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten +2025-06-03 15:20:12 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-03 15:20:15 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:15 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-03 15:20:15 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-03 15:20:17 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:17 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten +2025-06-03 15:20:17 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-03 15:20:19 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:19 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten +2025-06-03 15:20:19 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-03 15:20:21 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:21 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 4 nicht einschalten +2025-06-03 15:20:21 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-03 15:20:23 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:23 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 5 nicht einschalten +2025-06-03 15:20:23 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-03 15:20:25 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:25 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 6 nicht einschalten +2025-06-03 15:20:25 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-03 15:20:27 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:20:27 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 9 nicht einschalten +2025-06-03 15:20:27 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-03 15:20:29 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:20:29 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 10 nicht einschalten +2025-06-03 15:20:29 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-03 15:20:32 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:20:32 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 11 nicht einschalten +2025-06-03 15:20:32 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-03 15:20:34 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:20:34 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 12 nicht einschalten +2025-06-03 15:20:34 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-03 15:20:36 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:36 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 13 nicht einschalten +2025-06-03 15:20:36 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-03 15:20:38 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:20:38 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 14 nicht einschalten +2025-06-03 15:20:38 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-03 15:21:43 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-03 15:21:49 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-03 15:21:49 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-03 15:21:49 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-03 15:21:51 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:21:51 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten +2025-06-03 15:21:51 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-03 15:21:53 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:21:53 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten +2025-06-03 15:21:53 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-03 15:21:55 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:21:55 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-03 15:21:55 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-03 15:21:57 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:21:57 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten +2025-06-03 15:21:57 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-03 15:21:59 - [scheduler] scheduler - [INFO] INFO - Scheduler gestoppt +2025-06-03 15:21:59 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:21:59 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten +2025-06-03 15:21:59 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-03 15:22:01 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:22:01 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 4 nicht einschalten +2025-06-03 15:22:01 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-03 15:22:52 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-03 15:22:56 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-03 15:22:56 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-03 15:22:56 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-03 15:22:58 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:22:58 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten +2025-06-03 15:22:58 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-03 15:23:00 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:00 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten +2025-06-03 15:23:00 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-03 15:23:02 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:02 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-03 15:23:02 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-03 15:23:04 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:04 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten +2025-06-03 15:23:04 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-03 15:23:06 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:06 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten +2025-06-03 15:23:06 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-03 15:23:08 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:08 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 4 nicht einschalten +2025-06-03 15:23:08 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-03 15:23:10 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:10 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 5 nicht einschalten +2025-06-03 15:23:10 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-03 15:23:13 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:13 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 6 nicht einschalten +2025-06-03 15:23:13 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-03 15:23:15 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:23:15 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 9 nicht einschalten +2025-06-03 15:23:15 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-03 15:23:17 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:23:17 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 10 nicht einschalten +2025-06-03 15:23:17 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-03 15:23:19 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:23:19 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 11 nicht einschalten +2025-06-03 15:23:19 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-03 15:23:21 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:23:21 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 12 nicht einschalten +2025-06-03 15:23:21 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-03 15:23:23 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:23 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 13 nicht einschalten +2025-06-03 15:23:23 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-03 15:23:25 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:25 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 14 nicht einschalten +2025-06-03 15:23:25 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-03 15:23:27 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:27 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 15 nicht einschalten +2025-06-03 15:23:27 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-03 15:23:29 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:29 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 16 nicht einschalten +2025-06-03 15:23:30 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-03 15:23:32 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:33 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten +2025-06-03 15:23:33 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-03 15:23:35 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:35 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten +2025-06-03 15:23:35 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-03 15:23:37 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:37 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-03 15:23:37 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-03 15:23:39 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:39 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten +2025-06-03 15:23:39 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-03 15:23:41 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:41 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten +2025-06-03 15:23:41 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-03 15:23:43 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:43 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 4 nicht einschalten +2025-06-03 15:23:43 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-03 15:23:45 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:45 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 5 nicht einschalten +2025-06-03 15:23:45 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-03 15:23:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 6 nicht einschalten +2025-06-03 15:23:48 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-03 15:23:50 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:23:50 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 9 nicht einschalten +2025-06-03 15:23:50 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-03 15:23:52 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:23:52 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 10 nicht einschalten +2025-06-03 15:23:52 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-03 15:23:54 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:23:54 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 11 nicht einschalten +2025-06-03 15:23:54 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-03 15:23:56 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 15:23:56 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 12 nicht einschalten +2025-06-03 15:23:56 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-03 15:23:58 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:23:58 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 13 nicht einschalten +2025-06-03 15:23:58 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-03 15:24:00 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:24:00 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 14 nicht einschalten +2025-06-03 15:24:00 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-03 15:24:02 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:24:02 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 15 nicht einschalten +2025-06-03 15:24:02 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-03 15:24:04 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:24:04 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 16 nicht einschalten +2025-06-03 15:24:05 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-03 15:24:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:24:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten +2025-06-03 15:24:07 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-03 15:24:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 15:24:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten +2025-06-03 15:24:09 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test diff --git a/backend/logs/security/security.log b/backend/logs/security/security.log index c68712fb..06111dea 100644 --- a/backend/logs/security/security.log +++ b/backend/logs/security/security.log @@ -119,3 +119,6 @@ 2025-06-03 13:23:54 - [security] security - [INFO] INFO - 🔒 Security System initialisiert 2025-06-03 13:27:15 - [security] security - [INFO] INFO - 🔒 Security System initialisiert 2025-06-03 14:14:08 - [security] security - [INFO] INFO - 🔒 Security System initialisiert +2025-06-03 15:19:26 - [security] security - [INFO] INFO - 🔒 Security System initialisiert +2025-06-03 15:21:44 - [security] security - [INFO] INFO - 🔒 Security System initialisiert +2025-06-03 15:22:53 - [security] security - [INFO] INFO - 🔒 Security System initialisiert diff --git a/backend/logs/shutdown_manager/shutdown_manager.log b/backend/logs/shutdown_manager/shutdown_manager.log index 9954e033..1449ff35 100644 --- a/backend/logs/shutdown_manager/shutdown_manager.log +++ b/backend/logs/shutdown_manager/shutdown_manager.log @@ -209,3 +209,10 @@ 2025-06-03 13:24:49 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🏁 System wird beendet... 2025-06-03 13:27:15 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert 2025-06-03 14:14:08 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert +2025-06-03 15:19:26 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert +2025-06-03 15:21:44 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert +2025-06-03 15:21:49 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔄 Starte koordiniertes System-Shutdown... +2025-06-03 15:21:49 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🧹 Führe 6 Cleanup-Funktionen aus... +2025-06-03 15:21:54 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔄 Beende Scheduler mit stop()... +2025-06-03 15:21:59 - [shutdown_manager] shutdown_manager - [INFO] INFO - ✅ Scheduler erfolgreich gestoppt +2025-06-03 15:22:53 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert diff --git a/backend/logs/startup/startup.log b/backend/logs/startup/startup.log index 8a1e5f0c..68635864 100644 --- a/backend/logs/startup/startup.log +++ b/backend/logs/startup/startup.log @@ -1079,3 +1079,30 @@ 2025-06-03 14:14:08 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert 2025-06-03 14:14:08 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert 2025-06-03 14:14:08 - [startup] startup - [INFO] INFO - ================================================== +2025-06-03 15:19:26 - [startup] startup - [INFO] INFO - ================================================== +2025-06-03 15:19:26 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet... +2025-06-03 15:19:26 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)] +2025-06-03 15:19:26 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-03 15:19:26 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-03 15:19:26 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-03T15:19:26.465750 +2025-06-03 15:19:26 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-03 15:19:26 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-03 15:19:26 - [startup] startup - [INFO] INFO - ================================================== +2025-06-03 15:21:44 - [startup] startup - [INFO] INFO - ================================================== +2025-06-03 15:21:44 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet... +2025-06-03 15:21:44 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)] +2025-06-03 15:21:44 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-03 15:21:44 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-03 15:21:44 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-03T15:21:44.681912 +2025-06-03 15:21:44 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-03 15:21:44 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-03 15:21:44 - [startup] startup - [INFO] INFO - ================================================== +2025-06-03 15:22:53 - [startup] startup - [INFO] INFO - ================================================== +2025-06-03 15:22:53 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet... +2025-06-03 15:22:53 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)] +2025-06-03 15:22:53 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-03 15:22:53 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-03 15:22:53 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-03T15:22:53.512773 +2025-06-03 15:22:53 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-03 15:22:53 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-03 15:22:53 - [startup] startup - [INFO] INFO - ================================================== diff --git a/backend/logs/system_control/system_control.log b/backend/logs/system_control/system_control.log index fc0253cf..950f5c0f 100644 --- a/backend/logs/system_control/system_control.log +++ b/backend/logs/system_control/system_control.log @@ -2,3 +2,6 @@ 2025-06-02 15:29:07 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert 2025-06-03 13:18:52 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert 2025-06-03 14:14:08 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert +2025-06-03 15:19:26 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert +2025-06-03 15:21:44 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert +2025-06-03 15:22:53 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert diff --git a/backend/logs/windows_fixes/windows_fixes.log b/backend/logs/windows_fixes/windows_fixes.log index 42e5a0df..4434f77d 100644 --- a/backend/logs/windows_fixes/windows_fixes.log +++ b/backend/logs/windows_fixes/windows_fixes.log @@ -511,3 +511,15 @@ 2025-06-03 14:14:06 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen) 2025-06-03 14:14:06 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet 2025-06-03 14:14:06 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-03 15:19:23 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-03 15:19:23 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen) +2025-06-03 15:19:23 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet +2025-06-03 15:19:23 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-03 15:21:43 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-03 15:21:43 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen) +2025-06-03 15:21:43 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet +2025-06-03 15:21:43 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-03 15:22:51 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-03 15:22:51 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen) +2025-06-03 15:22:51 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet +2025-06-03 15:22:51 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet