📚 Improved database logs and setup files 🎉

This commit is contained in:
2025-06-03 13:45:48 +02:00
parent 598c42437d
commit 1e475cdd84
11 changed files with 765 additions and 183 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -146,3 +146,4 @@ FROM jobs LEFT OUTER JOIN users AS users_1 ON users_1.id = jobs.user_id LEFT OUT
2025-06-02 15:19:34 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 16 von 16 (Seite 1)
2025-06-02 15:19:34 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 16 von 16 (Seite 1)
2025-06-02 15:20:02 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 16 von 16 (Seite 1)
2025-06-03 13:31:45 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 16 von 16 (Seite 1)

View File

@ -1,4 +1,32 @@
=================================================================
MYP Installation DEBUG Log - 2025-06-03 13:34:06
MYP Installation DEBUG Log - 2025-06-03 13:38:42
=================================================================
[2025-06-03 13:38:42] DEBUG von setup.sh:449
Debian erkannt über /etc/debian_version: 12.11
---
[2025-06-03 13:38:42] DEBUG von setup.sh:517
Kein Raspberry Pi erkannt. Hardware-Info:
---
[2025-06-03 13:38:42] DEBUG von setup.sh:518
- Device Tree: nicht verfügbar
---
[2025-06-03 13:38:42] DEBUG von setup.sh:519
- CPU Hardware: nicht verfügbar
---
[2025-06-03 13:38:42] DEBUG von setup.sh:559
Vollständige Kernel-Info: Linux raspberrypi 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 GNU/Linux
---
[2025-06-03 13:38:43] DEBUG von setup.sh:615
DNS-Test Details: Teste DNS für 8.8.8.8: Erfolg mit nslookup.
---
[2025-06-03 13:38:43] DEBUG von setup.sh:716
Externe IP ermittelt über ifconfig.me: 163.116.178.31
---

View File

@ -1,4 +1,4 @@
=================================================================
MYP Installation FEHLER Log - 2025-06-03 13:34:06
MYP Installation FEHLER Log - 2025-06-03 13:38:42
=================================================================

View File

@ -1,4 +1,4 @@
=================================================================
MYP Installation WARNUNGEN Log - 2025-06-03 13:34:06
MYP Installation WARNUNGEN Log - 2025-06-03 13:38:42
=================================================================

View File

@ -1,10 +1,73 @@
=================================================================
MYP Installation Log - 2025-06-03 13:34:06
MYP Installation Log - 2025-06-03 13:38:42
Script Version: 4.1.0
System: Linux raspberrypi 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 GNU/Linux
=================================================================
[2025-06-03 13:34:06] === MODUS: ROBUSTE ABHÄNGIGKEITEN-INSTALLATION FÜR MANUELLES TESTEN ===
[2025-06-03 13:34:06] ✅ Root-Berechtigung bestätigt
[2025-06-03 13:34:06] === SYSTEM-RESSOURCEN PRÜFUNG ===
[FORTSCHRITT] Verfügbarer RAM: MB
[2025-06-03 13:38:42] === MODUS: ROBUSTE ABHÄNGIGKEITEN-INSTALLATION FÜR MANUELLES TESTEN ===
[2025-06-03 13:38:42] ✅ Root-Berechtigung bestätigt
[2025-06-03 13:38:42] === SYSTEM-RESSOURCEN PRÜFUNG ===
[FORTSCHRITT] Prüfe RAM...
[FORTSCHRITT] Verfügbarer RAM: 24031MB
[ERFOLG] ✅ Ausreichend RAM verfügbar (24031MB)
[FORTSCHRITT] Prüfe Festplattenplatz...
[FORTSCHRITT] Verfügbarer Festplattenplatz: 12,5GB (12825MB)
[ERFOLG] ✅ Ausreichend Festplattenplatz verfügbar (12,5GB)
[FORTSCHRITT] Prüfe CPU...
[FORTSCHRITT] CPU: 8 Kern(e) - 11th Gen Intel(R) Core(TM) i7-11850H @ 2.50GHz
[ERFOLG] ✅ CPU-Information erfolgreich ermittelt
[2025-06-03 13:38:42] ✅ System-Ressourcen-Prüfung abgeschlossen
[FORTSCHRITT] Prüfe Debian/Raspbian-System...
[DEBUG] Debian erkannt über /etc/debian_version: 12.11
[2025-06-03 13:38:42] ✅ Debian/Raspbian-basiertes System erkannt (Version: 12.11)
[FORTSCHRITT] Prüfe Raspberry Pi Hardware...
[INFO] 💻 Standard-PC/Server System (kein Raspberry Pi)
[DEBUG] Kein Raspberry Pi erkannt. Hardware-Info:
[DEBUG] - Device Tree: nicht verfügbar
[DEBUG] - CPU Hardware: nicht verfügbar
[FORTSCHRITT] Prüfe System-Architektur...
[INFO] 📐 System-Architektur: x86_64
[INFO] → 64-Bit x86 Architektur erkannt
[FORTSCHRITT] Prüfe Kernel-Version...
[INFO] 🐧 Kernel-Version: 6.1.0-37-amd64
[DEBUG] Vollständige Kernel-Info: Linux raspberrypi 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 GNU/Linux
[2025-06-03 13:38:42] ✅ System-Analyse abgeschlossen
[FORTSCHRITT] Prüfe Internetverbindung (erweiterte Methoden)...
[FORTSCHRITT] Teste DNS-Auflösung...
[DEBUG] DNS-Test Details: Teste DNS für 8.8.8.8: Erfolg mit nslookup. 
[ERFOLG] ✅ Internetverbindung verfügbar
[INFO] 🔍 Erkannt via: DNS-Auflösung (nslookup: 8.8.8.8)
[FORTSCHRITT] Ermittle externe IP-Adresse...
[INFO] 🌐 Externe IP: 163.116.178.31
[DEBUG] Externe IP ermittelt über ifconfig.me: 163.116.178.31
[2025-06-03 13:38:43] === KONFIGURIERE HOSTNAME ===
[2025-06-03 13:38:43] ✅ Hostname bereits korrekt: 'raspberrypi'
[2025-06-03 13:38:43] ✅ Hostname-Auflösung funktioniert: raspberrypi -> 127.0.1.1
[2025-06-03 13:38:43] === ROBUSTE SYSTEM-UPDATE ===
[FORTSCHRITT] Konfiguriere APT für bessere Zuverlässigkeit...
[FORTSCHRITT] Validiere APT-Repositories...
[2025-06-03 13:38:43] ✅ Source-Repositories deaktiviert (nicht benötigt)
[FORTSCHRITT] Aktualisiere Paketlisten mit Retry...
[FORTSCHRITT] Führe System-Upgrade durch...
[FORTSCHRITT] Installiere essenzielle System-Tools...
[FORTSCHRITT] Installiere Pakete: ca-certificates
[FORTSCHRITT] Installiere Pakete: gnupg
[FORTSCHRITT] Installiere Pakete: curl
[FORTSCHRITT] Installiere Pakete: wget
[FORTSCHRITT] Installiere Pakete: git
[FORTSCHRITT] Installiere Pakete: nano
[FORTSCHRITT] Installiere Pakete: htop
[FORTSCHRITT] Installiere Pakete: rsync
[FORTSCHRITT] Installiere Pakete: unzip
[FORTSCHRITT] Installiere Pakete: sudo
[FORTSCHRITT] Installiere Pakete: systemd
[FORTSCHRITT] Installiere Pakete: lsb-release
[FORTSCHRITT] Installiere Pakete: apt-transport-https
[FORTSCHRITT] Installiere Pakete: software-properties-common
[FORTSCHRITT] Installiere Pakete: bc
[FORTSCHRITT] Installiere Pakete: dbus
[FORTSCHRITT] Installiere Pakete: systemd-timesyncd
[FORTSCHRITT] Synchronisiere Systemzeit...
[2025-06-03 13:38:53] ✅ Robustes System-Update abgeschlossen
[2025-06-03 13:38:53] === KONFIGURIERE ERWEITERTE NETZWERK-SICHERHEIT ===
[FORTSCHRITT] Deaktiviere IPv6...

View File

@ -6711,3 +6711,4 @@
2025-06-02 15:31:02 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-02 15:31:02 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 2 Drucker
2025-06-02 15:31:02 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 1.42ms
2025-06-03 13:31:45 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)

View File

@ -29766,3 +29766,207 @@
2025-06-03 13:34: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC58C0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:34:46 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten
2025-06-03 13:34:46 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test
2025-06-03 13:34: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC4D10>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:34:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten
2025-06-03 13:34:48 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test
2025-06-03 13:34: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC4F30>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:34:50 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten
2025-06-03 13:34:50 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test
2025-06-03 13:34:52 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5AE0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:34:52 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten
2025-06-03 13:34:52 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test
2025-06-03 13:34:54 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CD56E00>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:34:54 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 4 nicht einschalten
2025-06-03 13:34:54 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test
2025-06-03 13:34:56 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CD56F10>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:34:56 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 5 nicht einschalten
2025-06-03 13:34:56 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test
2025-06-03 13:34: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(<urllib3.connection.HTTPConnection object at 0x000002446CD567A0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:34:58 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 6 nicht einschalten
2025-06-03 13:34:58 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi
2025-06-03 13:35:01 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC4C00>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:35:01 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 9 nicht einschalten
2025-06-03 13:35:01 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi
2025-06-03 13:35:03 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC59D0>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:35:03 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 10 nicht einschalten
2025-06-03 13:35:03 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee
2025-06-03 13:35:05 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5590>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:35:05 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 11 nicht einschalten
2025-06-03 13:35:05 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee
2025-06-03 13:35:07 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC67A0>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:35:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 12 nicht einschalten
2025-06-03 13:35:07 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2
2025-06-03 13:35: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6BE0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 13 nicht einschalten
2025-06-03 13:35:09 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2
2025-06-03 13:35:11 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6F10>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:11 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 14 nicht einschalten
2025-06-03 13:35:11 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test
2025-06-03 13:35:14 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5370>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:14 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 15 nicht einschalten
2025-06-03 13:35:14 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test
2025-06-03 13:35:16 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5E10>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:16 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 16 nicht einschalten
2025-06-03 13:35:17 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test
2025-06-03 13:35: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5D00>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:19 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten
2025-06-03 13:35:19 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test
2025-06-03 13:35: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(<urllib3.connection.HTTPConnection object at 0x000002446CD56AD0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:21 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten
2025-06-03 13:35:21 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test
2025-06-03 13:35: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(<urllib3.connection.HTTPConnection object at 0x000002446CD559D0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:23 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten
2025-06-03 13:35:23 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test
2025-06-03 13:35: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(<urllib3.connection.HTTPConnection object at 0x000002446CC1F8A0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:25 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten
2025-06-03 13:35:25 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test
2025-06-03 13:35: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6CF0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:27 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten
2025-06-03 13:35:27 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test
2025-06-03 13:35: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6AD0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:29 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 4 nicht einschalten
2025-06-03 13:35:29 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test
2025-06-03 13:35:31 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5E10>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:31 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 5 nicht einschalten
2025-06-03 13:35:31 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test
2025-06-03 13:35:33 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5040>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:33 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 6 nicht einschalten
2025-06-03 13:35:33 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi
2025-06-03 13:35:36 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC7020>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:35:36 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 9 nicht einschalten
2025-06-03 13:35:36 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi
2025-06-03 13:35:38 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6140>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:35:38 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 10 nicht einschalten
2025-06-03 13:35:38 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee
2025-06-03 13:35:40 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC7130>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:35:40 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 11 nicht einschalten
2025-06-03 13:35:40 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee
2025-06-03 13:35:42 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC4E20>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:35:42 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 12 nicht einschalten
2025-06-03 13:35:42 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2
2025-06-03 13:35: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(<urllib3.connection.HTTPConnection object at 0x000002446CD56CF0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:44 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 13 nicht einschalten
2025-06-03 13:35:44 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2
2025-06-03 13:35: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(<urllib3.connection.HTTPConnection object at 0x000002446CD567A0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:46 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 14 nicht einschalten
2025-06-03 13:35:46 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test
2025-06-03 13:35: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(<urllib3.connection.HTTPConnection object at 0x000002446CD56F10>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 15 nicht einschalten
2025-06-03 13:35:48 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test
2025-06-03 13:35: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC7130>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:51 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 16 nicht einschalten
2025-06-03 13:35:52 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test
2025-06-03 13:35:54 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6690>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:54 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten
2025-06-03 13:35:54 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test
2025-06-03 13:35:56 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC7020>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:56 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten
2025-06-03 13:35:56 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test
2025-06-03 13:35: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5040>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:35:58 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten
2025-06-03 13:35:58 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6E00>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:00 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten
2025-06-03 13:36:00 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6360>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:02 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten
2025-06-03 13:36:02 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6CF0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:05 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 4 nicht einschalten
2025-06-03 13:36:05 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC57B0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 5 nicht einschalten
2025-06-03 13:36:07 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC4F30>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 6 nicht einschalten
2025-06-03 13:36:09 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi
2025-06-03 13:36:12 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CD56E00>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:36:12 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 9 nicht einschalten
2025-06-03 13:36:12 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi
2025-06-03 13:36:14 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CD568B0>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:36:14 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 10 nicht einschalten
2025-06-03 13:36:14 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee
2025-06-03 13:36:16 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CC1F8A0>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:36:16 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 11 nicht einschalten
2025-06-03 13:36:16 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee
2025-06-03 13:36:18 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5AE0>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:36:18 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 12 nicht einschalten
2025-06-03 13:36:18 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2
2025-06-03 13:36:20 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5480>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:20 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 13 nicht einschalten
2025-06-03 13:36:20 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2
2025-06-03 13:36:22 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5D00>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:22 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 14 nicht einschalten
2025-06-03 13:36:22 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test
2025-06-03 13:36:24 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5370>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:24 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 15 nicht einschalten
2025-06-03 13:36:24 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test
2025-06-03 13:36:26 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5E10>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:26 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 16 nicht einschalten
2025-06-03 13:36:27 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6580>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:29 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten
2025-06-03 13:36:29 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6BE0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:32 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten
2025-06-03 13:36:32 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6140>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:34 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten
2025-06-03 13:36:34 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CD56AD0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:36 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten
2025-06-03 13:36:36 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CD56F10>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:38 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten
2025-06-03 13:36:38 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CD567A0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:40 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 4 nicht einschalten
2025-06-03 13:36:40 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6BE0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:42 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 5 nicht einschalten
2025-06-03 13:36:42 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6580>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:44 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 6 nicht einschalten
2025-06-03 13:36:44 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi
2025-06-03 13:36:46 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC6360>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:36:46 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 9 nicht einschalten
2025-06-03 13:36:46 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi
2025-06-03 13:36:48 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5370>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:36:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 10 nicht einschalten
2025-06-03 13:36:48 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee
2025-06-03 13:36:51 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5D00>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:36:51 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 11 nicht einschalten
2025-06-03 13:36:51 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee
2025-06-03 13:36:53 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5480>, 'Connection to 192.168.0.104 timed out. (connect timeout=2)'))
2025-06-03 13:36:53 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 12 nicht einschalten
2025-06-03 13:36:53 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5AE0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:55 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 13 nicht einschalten
2025-06-03 13:36:55 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5590>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:57 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 14 nicht einschalten
2025-06-03 13:36:57 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test
2025-06-03 13:36: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC59D0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:36:59 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 15 nicht einschalten
2025-06-03 13:36:59 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test
2025-06-03 13:37: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(<urllib3.connection.HTTPConnection object at 0x000002446CD567A0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:37:01 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 16 nicht einschalten
2025-06-03 13:37:02 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test
2025-06-03 13:37: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(<urllib3.connection.HTTPConnection object at 0x000002446CD56E00>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:37:05 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten
2025-06-03 13:37:05 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test
2025-06-03 13:37: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(<urllib3.connection.HTTPConnection object at 0x000002446CC1F8A0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:37:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten
2025-06-03 13:37:07 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test
2025-06-03 13:37: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC56A0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:37:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten
2025-06-03 13:37:09 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test
2025-06-03 13:37:11 - [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(<urllib3.connection.HTTPConnection object at 0x000002446CDC59D0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:37:11 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten
2025-06-03 13:37:11 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test
2025-06-03 13:37: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5590>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:37:13 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten
2025-06-03 13:37:13 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test
2025-06-03 13:37: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(<urllib3.connection.HTTPConnection object at 0x000002446CDC5AE0>, 'Connection to 192.168.0.103 timed out. (connect timeout=2)'))
2025-06-03 13:37:15 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 4 nicht einschalten
2025-06-03 13:37:15 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test

View File

@ -348,67 +348,220 @@ check_root() {
check_system_resources() {
log "=== SYSTEM-RESSOURCEN PRÜFUNG ==="
# RAM prüfen
local ram_mb=$(free -m | awk '/^Mem:/{print $2}')
progress "Verfügbarer RAM: ${ram_mb}MB"
# RAM prüfen (robuster)
progress "Prüfe RAM..."
local ram_mb=""
if [ -n "$ram_mb" ] && [ "$ram_mb" -eq "$ram_mb" ] 2>/dev/null && [ "$ram_mb" -lt 512 ]; then
warning "⚠️ Wenig RAM verfügbar (${ram_mb}MB) - Installation könnte langsam sein"
elif [ -n "$ram_mb" ] && [ "$ram_mb" -eq "$ram_mb" ] 2>/dev/null; then
success "✅ Ausreichend RAM verfügbar (${ram_mb}MB)"
# Verschiedene Methoden zur RAM-Ermittlung
if command -v free >/dev/null 2>&1; then
ram_mb=$(free -m 2>/dev/null | awk '/^Mem:/{print $2}' 2>/dev/null || echo "")
fi
# Fallback über /proc/meminfo
if [ -z "$ram_mb" ] && [ -f "/proc/meminfo" ]; then
ram_mb=$(grep '^MemTotal:' /proc/meminfo 2>/dev/null | awk '{print int($2/1024)}' 2>/dev/null || echo "")
fi
if [ -n "$ram_mb" ] && [ "$ram_mb" -gt 0 ] 2>/dev/null; then
progress "Verfügbarer RAM: ${ram_mb}MB"
if [ "$ram_mb" -lt 512 ] 2>/dev/null; then
warning "⚠️ Wenig RAM verfügbar (${ram_mb}MB) - Installation könnte langsam sein"
else
success "✅ Ausreichend RAM verfügbar (${ram_mb}MB)"
fi
else
warning "⚠️ RAM-Größe konnte nicht ermittelt werden"
debug "RAM-Ermittlung fehlgeschlagen: free-Output: $(free -m 2>&1 || echo 'Befehl nicht verfügbar')"
fi
# Festplattenplatz prüfen
local disk_free_gb=$(df / | awk 'NR==2{printf "%.1f", $4/1024/1024}')
progress "Verfügbarer Festplattenplatz: ${disk_free_gb}GB"
# Festplattenplatz prüfen (robuster ohne bc)
progress "Prüfe Festplattenplatz..."
local disk_free_gb=""
local disk_free_mb=""
# Konvertiere zu Ganzzahl für Vergleich (GB * 10 für eine Dezimalstelle)
local disk_free_int=$(echo "$disk_free_gb * 10" | bc 2>/dev/null | cut -d. -f1)
local min_required_int=20 # 2.0 GB * 10
if [ -z "$disk_free_int" ] || [ "$disk_free_int" -lt "$min_required_int" ]; then
warning "⚠️ Wenig Festplattenplatz verfügbar (${disk_free_gb}GB)"
if command -v df >/dev/null 2>&1; then
# Hole Festplattenplatz in MB
disk_free_mb=$(df / 2>/dev/null | awk 'NR==2{print int($4/1024)}' 2>/dev/null || echo "")
if [ -n "$disk_free_mb" ] && [ "$disk_free_mb" -gt 0 ] 2>/dev/null; then
# Berechne GB ohne bc (einfache Division)
disk_free_gb=$(awk -v mb="$disk_free_mb" 'BEGIN{printf "%.1f", mb/1024}' 2>/dev/null || echo "$((disk_free_mb/1024))")
progress "Verfügbarer Festplattenplatz: ${disk_free_gb}GB (${disk_free_mb}MB)"
# Prüfe ob mindestens 2GB verfügbar (2048 MB)
if [ "$disk_free_mb" -lt 2048 ] 2>/dev/null; then
warning "⚠️ Wenig Festplattenplatz verfügbar (${disk_free_gb}GB)"
else
success "✅ Ausreichend Festplattenplatz verfügbar (${disk_free_gb}GB)"
fi
else
warning "⚠️ Festplattenplatz konnte nicht ermittelt werden"
debug "Disk-Ermittlung fehlgeschlagen: df-Output: $(df / 2>&1 || echo 'Befehl nicht verfügbar')"
fi
else
success "✅ Ausreichend Festplattenplatz verfügbar (${disk_free_gb}GB)"
warning "⚠️ df-Befehl nicht verfügbar - kann Festplattenplatz nicht prüfen"
fi
# CPU prüfen
local cpu_count=$(nproc)
local cpu_model=$(grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2 | xargs)
progress "CPU: $cpu_count Kern(e) - $cpu_model"
# CPU prüfen (robuster)
progress "Prüfe CPU..."
local cpu_count=""
local cpu_model=""
log "✅ System-Ressourcen validiert"
# CPU-Anzahl ermitteln
if command -v nproc >/dev/null 2>&1; then
cpu_count=$(nproc 2>/dev/null || echo "")
fi
if [ -z "$cpu_count" ] && [ -f "/proc/cpuinfo" ]; then
cpu_count=$(grep -c '^processor' /proc/cpuinfo 2>/dev/null || echo "")
fi
# CPU-Modell ermitteln
if [ -f "/proc/cpuinfo" ]; then
cpu_model=$(grep "model name" /proc/cpuinfo 2>/dev/null | head -1 | cut -d: -f2 2>/dev/null | sed 's/^[[:space:]]*//' 2>/dev/null || echo "Unbekannt")
fi
if [ -n "$cpu_count" ] && [ "$cpu_count" -gt 0 ] 2>/dev/null; then
progress "CPU: $cpu_count Kern(e) - $cpu_model"
success "✅ CPU-Information erfolgreich ermittelt"
else
progress "CPU: Unbekannte Anzahl Kerne - $cpu_model"
warning "⚠️ CPU-Kern-Anzahl konnte nicht ermittelt werden"
debug "CPU-Ermittlung fehlgeschlagen: nproc-Output: $(nproc 2>&1 || echo 'Befehl nicht verfügbar')"
fi
log "✅ System-Ressourcen-Prüfung abgeschlossen"
}
check_debian_system() {
if [ ! -f /etc/debian_version ]; then
error "Dieses Skript ist nur für Debian/Raspbian-Systeme geeignet!"
progress "Prüfe Debian/Raspbian-System..."
# Robuste Debian-Erkennung
local is_debian=false
local debian_version="Unbekannt"
# Verschiedene Methoden zur Debian-Erkennung
if [ -f /etc/debian_version ]; then
debian_version=$(cat /etc/debian_version 2>/dev/null | head -1 | tr -d '\n\r' || echo "Unbekannt")
is_debian=true
debug "Debian erkannt über /etc/debian_version: $debian_version"
fi
local debian_version=$(cat /etc/debian_version 2>/dev/null || echo "Unbekannt")
log "✅ Debian/Raspbian-System erkannt (Version: $debian_version)"
# Prüfe auf Raspberry Pi
if [ -f /proc/device-tree/model ]; then
local pi_model=$(cat /proc/device-tree/model 2>/dev/null | tr -d '\0' || echo "Unbekannt")
info "Raspberry Pi Modell: $pi_model"
# Raspberry Pi spezifische Optimierungen
if [[ "$pi_model" =~ "Raspberry Pi" ]]; then
progress "Aktiviere Raspberry Pi spezifische Optimierungen..."
export RASPBERRY_PI_DETECTED=1
# Fallback über os-release
if [ "$is_debian" = false ] && [ -f /etc/os-release ]; then
local os_id=$(grep '^ID=' /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"' || echo "")
if [[ "$os_id" =~ ^(debian|raspbian|ubuntu)$ ]]; then
is_debian=true
local os_version=$(grep '^VERSION=' /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"' || echo "Unbekannt")
debian_version="$os_id $os_version"
debug "Debian-basiertes System erkannt über os-release: $debian_version"
fi
fi
# Architektur prüfen
local arch=$(uname -m)
info "System-Architektur: $arch"
# Fallback über lsb_release
if [ "$is_debian" = false ] && command -v lsb_release >/dev/null 2>&1; then
local lsb_id=$(lsb_release -si 2>/dev/null | tr '[:upper:]' '[:lower:]' || echo "")
if [[ "$lsb_id" =~ ^(debian|raspbian|ubuntu)$ ]]; then
is_debian=true
debian_version="$lsb_id $(lsb_release -sr 2>/dev/null || echo 'Unbekannt')"
debug "Debian-basiertes System erkannt über lsb_release: $debian_version"
fi
fi
# Kernel-Version prüfen
local kernel=$(uname -r)
info "Kernel-Version: $kernel"
if [ "$is_debian" = false ]; then
warning "⚠️ System ist möglicherweise nicht Debian/Raspbian-basiert!"
warning "⚠️ Installation wird fortgesetzt, könnte aber fehlschlagen"
debug "System-Erkennung fehlgeschlagen. Verfügbare Info:"
debug " - /etc/debian_version: $([ -f /etc/debian_version ] && echo 'vorhanden' || echo 'nicht vorhanden')"
debug " - /etc/os-release: $([ -f /etc/os-release ] && grep '^ID=' /etc/os-release 2>/dev/null || echo 'nicht verfügbar')"
debug " - lsb_release: $(command -v lsb_release >/dev/null 2>&1 && lsb_release -si 2>/dev/null || echo 'nicht verfügbar')"
else
log "✅ Debian/Raspbian-basiertes System erkannt (Version: $debian_version)"
fi
# Prüfe auf Raspberry Pi (robuster)
progress "Prüfe Raspberry Pi Hardware..."
local is_raspberry_pi=false
local pi_model="Unbekannt"
# Methode 1: Device Tree Model
if [ -f /proc/device-tree/model ]; then
pi_model=$(cat /proc/device-tree/model 2>/dev/null | tr -d '\0\n\r' | head -c 100 || echo "")
if [[ "$pi_model" =~ [Rr]aspberry.*[Pp]i ]]; then
is_raspberry_pi=true
debug "Raspberry Pi erkannt über device-tree: $pi_model"
fi
fi
# Methode 2: CPU Info
if [ "$is_raspberry_pi" = false ] && [ -f /proc/cpuinfo ]; then
local cpu_hardware=$(grep '^Hardware' /proc/cpuinfo 2>/dev/null | cut -d: -f2 | sed 's/^[[:space:]]*//' | head -1 || echo "")
local cpu_model=$(grep '^Model' /proc/cpuinfo 2>/dev/null | cut -d: -f2 | sed 's/^[[:space:]]*//' | head -1 || echo "")
if [[ "$cpu_hardware" =~ [Bb][Cc][Mm] ]] || [[ "$cpu_model" =~ [Rr]aspberry.*[Pp]i ]]; then
is_raspberry_pi=true
pi_model="$cpu_model ($cpu_hardware)"
debug "Raspberry Pi erkannt über cpuinfo: $pi_model"
fi
fi
if [ "$is_raspberry_pi" = true ]; then
info "🍓 Raspberry Pi erkannt: $pi_model"
progress "Aktiviere Raspberry Pi spezifische Optimierungen..."
export RASPBERRY_PI_DETECTED=1
debug "Raspberry Pi Optimierungen aktiviert"
else
info "💻 Standard-PC/Server System (kein Raspberry Pi)"
debug "Kein Raspberry Pi erkannt. Hardware-Info:"
debug " - Device Tree: $([ -f /proc/device-tree/model ] && cat /proc/device-tree/model 2>/dev/null | tr -d '\0' || echo 'nicht verfügbar')"
debug " - CPU Hardware: $(grep '^Hardware' /proc/cpuinfo 2>/dev/null | cut -d: -f2 | sed 's/^[[:space:]]*//' || echo 'nicht verfügbar')"
fi
# System-Architektur prüfen (robuster)
progress "Prüfe System-Architektur..."
local arch=""
if command -v uname >/dev/null 2>&1; then
arch=$(uname -m 2>/dev/null || echo "Unbekannt")
info "📐 System-Architektur: $arch"
# Architektur-spezifische Hinweise
case "$arch" in
"aarch64"|"arm64")
info " → 64-Bit ARM Architektur erkannt"
;;
"armv7l"|"armv6l")
info " → 32-Bit ARM Architektur erkannt"
;;
"x86_64"|"amd64")
info " → 64-Bit x86 Architektur erkannt"
;;
"i386"|"i686")
info " → 32-Bit x86 Architektur erkannt"
;;
*)
warning "⚠️ Unbekannte Architektur: $arch"
;;
esac
else
warning "⚠️ uname-Befehl nicht verfügbar - kann Architektur nicht ermitteln"
fi
# Kernel-Version prüfen (robuster)
progress "Prüfe Kernel-Version..."
local kernel=""
if command -v uname >/dev/null 2>&1; then
kernel=$(uname -r 2>/dev/null || echo "Unbekannt")
info "🐧 Kernel-Version: $kernel"
debug "Vollständige Kernel-Info: $(uname -a 2>/dev/null || echo 'Nicht verfügbar')"
else
warning "⚠️ Kernel-Version konnte nicht ermittelt werden"
fi
log "✅ System-Analyse abgeschlossen"
}
check_internet_connection() {
@ -416,51 +569,132 @@ check_internet_connection() {
local connection_ok=false
local test_method=""
local debug_info=""
# Methode 1: DNS-Auflösung zuerst (schnellster Test)
# Methode 1: DNS-Auflösung (robuster)
progress "Teste DNS-Auflösung..."
local dns_hosts=("google.com" "cloudflare.com" "github.com" "8.8.8.8")
local dns_hosts=("8.8.8.8" "1.1.1.1" "google.com" "cloudflare.com")
for host in "${dns_hosts[@]}"; do
if nslookup "$host" >/dev/null 2>&1; then
connection_ok=true
test_method="DNS-Auflösung (nslookup: $host)"
break
elif getent hosts "$host" >/dev/null 2>&1; then
connection_ok=true
test_method="DNS-Auflösung (getent: $host)"
break
debug_info="${debug_info}Teste DNS für $host: "
# Teste nslookup
if command -v nslookup >/dev/null 2>&1; then
if timeout 10 nslookup "$host" >/dev/null 2>&1; then
connection_ok=true
test_method="DNS-Auflösung (nslookup: $host)"
debug_info="${debug_info}Erfolg mit nslookup. "
break
fi
debug_info="${debug_info}nslookup fehlgeschlagen. "
fi
# Teste getent hosts
if [ "$connection_ok" = false ] && command -v getent >/dev/null 2>&1; then
if timeout 8 getent hosts "$host" >/dev/null 2>&1; then
connection_ok=true
test_method="DNS-Auflösung (getent: $host)"
debug_info="${debug_info}Erfolg mit getent. "
break
fi
debug_info="${debug_info}getent fehlgeschlagen. "
fi
# Teste ping als Fallback
if [ "$connection_ok" = false ] && command -v ping >/dev/null 2>&1; then
if timeout 5 ping -c 1 "$host" >/dev/null 2>&1; then
connection_ok=true
test_method="Netzwerk-Verbindung (ping: $host)"
debug_info="${debug_info}Erfolg mit ping. "
break
fi
debug_info="${debug_info}ping fehlgeschlagen. "
fi
done
# Methode 2: HTTP/HTTPS-Tests
debug "DNS-Test Details: $debug_info"
# Methode 2: HTTP/HTTPS-Tests (robuster)
if [ "$connection_ok" = false ]; then
progress "Teste HTTP/HTTPS-Verbindungen..."
local http_urls=("http://detectportal.firefox.com/success.txt" "https://www.google.com" "http://httpbin.org/get")
local http_urls=("http://connectivitycheck.gstatic.com/generate_204" "http://detectportal.firefox.com/success.txt" "https://www.google.com")
for url in "${http_urls[@]}"; do
debug_info="Teste HTTP für $url: "
# Teste curl
if command -v curl >/dev/null 2>&1; then
if curl -s --connect-timeout 10 --max-time 15 "$url" >/dev/null 2>&1; then
if timeout 15 curl -s --connect-timeout 8 --max-time 12 --fail "$url" >/dev/null 2>&1; then
connection_ok=true
test_method="HTTP/HTTPS (curl: $url)"
debug_info="${debug_info}Erfolg mit curl. "
break
fi
elif command -v wget >/dev/null 2>&1; then
if wget -q --timeout=10 --tries=1 "$url" -O /dev/null 2>/dev/null; then
debug_info="${debug_info}curl fehlgeschlagen. "
fi
# Teste wget
if [ "$connection_ok" = false ] && command -v wget >/dev/null 2>&1; then
if timeout 15 wget -q --timeout=8 --tries=1 --spider "$url" 2>/dev/null; then
connection_ok=true
test_method="HTTP/HTTPS (wget: $url)"
debug_info="${debug_info}Erfolg mit wget. "
break
fi
debug_info="${debug_info}wget fehlgeschlagen. "
fi
debug "HTTP-Test Details: $debug_info"
done
fi
# Methode 3: APT-Repository-Test
# Methode 3: Lokale Netzwerk-Interface Prüfung
if [ "$connection_ok" = false ]; then
progress "Teste APT-Repository-Zugang..."
if apt-get update -qq 2>/dev/null; then
progress "Prüfe lokale Netzwerk-Interfaces..."
local has_network_interface=false
# Prüfe ob aktive Netzwerk-Interfaces vorhanden sind
if command -v ip >/dev/null 2>&1; then
local active_interfaces=$(ip route show default 2>/dev/null | awk '{print $5}' | head -1)
if [ -n "$active_interfaces" ]; then
has_network_interface=true
local interface_ip=$(ip route get 1.1.1.1 2>/dev/null | awk '{print $7}' | head -1 || echo "Unbekannt")
info " 📡 Aktives Interface: $active_interfaces (IP: $interface_ip)"
debug "Netzwerk-Interface gefunden: $active_interfaces mit IP $interface_ip"
fi
fi
# Fallback über ifconfig
if [ "$has_network_interface" = false ] && command -v ifconfig >/dev/null 2>&1; then
local active_interfaces=$(ifconfig 2>/dev/null | grep -E '^[a-zA-Z]' | grep -v '^lo' | head -1 | cut -d: -f1)
if [ -n "$active_interfaces" ]; then
has_network_interface=true
info " 📡 Interface erkannt: $active_interfaces"
debug "Netzwerk-Interface über ifconfig gefunden: $active_interfaces"
fi
fi
if [ "$has_network_interface" = true ]; then
warning "⚠️ Netzwerk-Interface aktiv, aber Internet nicht erreichbar"
warning " → Möglicherweise Firewall, Proxy oder DNS-Problem"
else
warning "⚠️ Keine aktiven Netzwerk-Interfaces gefunden"
warning " → Bitte prüfen Sie die Netzwerk-Konfiguration"
fi
fi
# Methode 4: APT-Repository-Test (nur als letzter Test)
if [ "$connection_ok" = false ]; then
progress "Teste APT-Repository-Zugang (kann länger dauern)..."
# Sehr kurzer APT-Test ohne Update
if timeout 30 apt-get -qq --print-uris update 2>/dev/null | grep -q 'http'; then
connection_ok=true
test_method="APT-Repository-Zugang"
test_method="APT-Repository-Konfiguration"
debug "APT-Repositories scheinen konfiguriert zu sein"
else
debug "APT-Repository-Test fehlgeschlagen"
fi
fi
@ -469,17 +703,35 @@ check_internet_connection() {
success "✅ Internetverbindung verfügbar"
info " 🔍 Erkannt via: $test_method"
# Zusätzliche Informationen
# Zusätzliche Informationen (robust)
if command -v curl >/dev/null 2>&1; then
local external_ip=$(curl -s --connect-timeout 5 ifconfig.me 2>/dev/null || curl -s --connect-timeout 5 ipinfo.io/ip 2>/dev/null || echo "Unbekannt")
if [ "$external_ip" != "Unbekannt" ]; then
info " 🌐 Externe IP: $external_ip"
progress "Ermittle externe IP-Adresse..."
local external_ip=""
local ip_services=("ifconfig.me" "ipinfo.io/ip" "icanhazip.com")
for service in "${ip_services[@]}"; do
external_ip=$(timeout 8 curl -s --connect-timeout 5 "$service" 2>/dev/null | head -1 | tr -d '\n\r' || echo "")
if [ -n "$external_ip" ] && [[ "$external_ip" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
info " 🌐 Externe IP: $external_ip"
debug "Externe IP ermittelt über $service: $external_ip"
break
fi
done
if [ -z "$external_ip" ]; then
debug "Externe IP konnte nicht ermittelt werden"
fi
fi
else
warning "⚠️ Keine Internetverbindung erkannt"
info " → Installation wird fortgesetzt, aber Downloads könnten fehlschlagen"
warning " → Bitte prüfen Sie die Netzwerkverbindung!"
# Debug-Informationen bei fehlgeschlagener Verbindung
debug "Internet-Verbindungstest fehlgeschlagen. System-Info:"
debug " - DNS-Server: $(cat /etc/resolv.conf 2>/dev/null | grep nameserver | head -3 || echo 'Nicht verfügbar')"
debug " - Default Route: $(ip route show default 2>/dev/null || echo 'Nicht verfügbar')"
debug " - Network Interfaces: $(ip addr show 2>/dev/null | grep -E '^[0-9]+:' | cut -d: -f2 | tr -d ' ' | grep -v lo | head -3 || echo 'Nicht verfügbar')"
fi
}
@ -895,145 +1147,152 @@ install_nodejs_npm() {
# =========================== NETZWERK-SICHERHEIT ===========================
configure_network_security() {
log "=== KONFIGURIERE ERWEITERTE NETZWERK-SICHERHEIT ==="
log "=== KONFIGURIERE ROBUSTE NETZWERK-SICHERHEIT ==="
# IPv6 vollständig deaktivieren
progress "Deaktiviere IPv6..."
# IPv6 vorsichtig deaktivieren
progress "Deaktiviere IPv6 (robust)..."
# IPv6 in GRUB deaktivieren
if [ -f /etc/default/grub ]; then
cp /etc/default/grub /etc/default/grub.backup
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="[^"]*/& ipv6.disable=1/' /etc/default/grub
sed -i 's/GRUB_CMDLINE_LINUX="[^"]*/& ipv6.disable=1/' /etc/default/grub
update-grub 2>/dev/null || true
# IPv6 in GRUB deaktivieren (nur wenn GRUB vorhanden)
if [ -f /etc/default/grub ] && command -v update-grub >/dev/null 2>&1; then
progress "Deaktiviere IPv6 in GRUB..."
if cp /etc/default/grub /etc/default/grub.backup 2>/dev/null; then
# Prüfe ob ipv6.disable bereits gesetzt ist
if ! grep -q "ipv6.disable=1" /etc/default/grub; then
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="[^"]*/& ipv6.disable=1/' /etc/default/grub 2>/dev/null || true
sed -i 's/GRUB_CMDLINE_LINUX="[^"]*/& ipv6.disable=1/' /etc/default/grub 2>/dev/null || true
if timeout 30 update-grub >/dev/null 2>&1; then
success "✅ IPv6 in GRUB deaktiviert"
else
warning "⚠️ GRUB-Update fehlgeschlagen"
debug "GRUB-Update Fehler: $(update-grub 2>&1 || echo 'Befehl fehlgeschlagen')"
fi
else
info "IPv6 bereits in GRUB deaktiviert"
fi
else
warning "⚠️ GRUB-Backup konnte nicht erstellt werden"
fi
else
info "GRUB nicht verfügbar oder kein update-grub - überspringe"
fi
# IPv6 in sysctl deaktivieren
cat >> /etc/sysctl.conf << 'EOF'
# IPv6 und Netzwerk-Sicherheit in sysctl konfigurieren (robust)
progress "Erstelle robuste sysctl-Konfiguration..."
# Backup der bestehenden sysctl.conf
if [ -f /etc/sysctl.conf ]; then
cp /etc/sysctl.conf /etc/sysctl.conf.backup.$(date +%Y%m%d_%H%M%S) 2>/dev/null || true
fi
# Erstelle separate sysctl-Datei für MYP (sicherer)
local myp_sysctl_file="/etc/sysctl.d/99-myp-security.conf"
# Nur kritische und kompatible Einstellungen setzen
cat > "$myp_sysctl_file" << 'EOF'
# ===================================================================
# MYP Netzwerk-Sicherheitskonfiguration
# MYP Basis-Sicherheitskonfiguration (kompatibel)
# ===================================================================
# IPv6 vollständig deaktivieren
# IPv6 deaktivieren (nur wenn unterstützt)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# IP-Spoofing-Schutz aktivieren
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Source-Routing deaktivieren (verhindert IP-Spoofing)
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# ICMP-Redirects ignorieren (verhindert Man-in-the-Middle)
# Grundlegende Netzwerk-Sicherheit
net.ipv4.ip_forward = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
# Secure ICMP-Redirects ignorieren
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# SYN-Flood-Schutz aktivieren
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5
# TCP-RFC-Compliance (verhindert aggressive Paketwiederholungen)
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 15
net.ipv4.tcp_orphan_retries = 3
# TCP-Window-Skalierung optimieren (geringere Netzwerkauslastung)
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 65536 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 5000
# Broadcast-Pings ignorieren (verhindert Smurf-Angriffe)
# ICMP-Sicherheit
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Bogus ICMP-Antworten ignorieren
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Paketweiterleitung verhindern (Router-Funktionalität deaktivieren)
net.ipv4.ip_forward = 0
# Source Routing deaktivieren
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Martian-Pakete loggen (verdächtige Pakete)
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
EOF
# TCP-Timestamps deaktivieren (verhindert Fingerprinting)
net.ipv4.tcp_timestamps = 0
# TCP-SACK deaktivieren (verhindert bestimmte Angriffe)
net.ipv4.tcp_sack = 0
# TCP-Keepalive optimieren
net.ipv4.tcp_keepalive_time = 7200
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 75
# Memory-Limits für Netzwerk-Buffers
net.core.rmem_default = 262144
net.core.wmem_default = 262144
# Schutz vor Time-Wait-Assassination
net.ipv4.tcp_rfc1337 = 1
# Teste ob die Datei geschrieben werden konnte
if [ -f "$myp_sysctl_file" ]; then
success "✅ Basis-sysctl-Konfiguration erstellt"
debug "sysctl-Konfiguration erstellt: $myp_sysctl_file"
else
warning "⚠️ sysctl-Konfigurationsdatei konnte nicht erstellt werden"
return
fi
# Optional: Erweiterte Einstellungen nur wenn Raspberry Pi
if [ "${RASPBERRY_PI_DETECTED:-0}" = "1" ]; then
progress "Füge Raspberry Pi spezifische Optimierungen hinzu..."
cat >> "$myp_sysctl_file" << 'EOF'
# ===================================================================
# RASPBERRY PI PERFORMANCE-OPTIMIERUNGEN FÜR WEBAPP
# RASPBERRY PI PERFORMANCE-OPTIMIERUNGEN (optional)
# ===================================================================
# Memory Management für schwache Hardware optimieren
# Memory Management für schwache Hardware
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.vfs_cache_pressure = 50
vm.min_free_kbytes = 8192
vm.overcommit_memory = 1
# CPU Scheduler für bessere Responsivität
kernel.sched_min_granularity_ns = 10000000
kernel.sched_wakeup_granularity_ns = 15000000
kernel.sched_migration_cost_ns = 5000000
# Filesystem Performance
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
# Memory Compaction für bessere Speichernutzung
vm.compact_memory = 1
# OOM Killer weniger aggressiv
vm.oom_kill_allocating_task = 0
vm.panic_on_oom = 0
# Kernel Preemption für bessere Interaktivität
kernel.sched_rt_runtime_us = 950000
kernel.sched_rt_period_us = 1000000
# I/O Scheduler Optimierungen für SD-Karte
# (wird später per udev-Regel angewendet)
EOF
debug "Raspberry Pi Optimierungen zur sysctl-Konfiguration hinzugefügt"
fi
# Sysctl-Einstellungen sofort anwenden
sysctl -p || warning "Einige sysctl-Einstellungen konnten nicht angewendet werden"
# Sysctl-Einstellungen vorsichtig anwenden
progress "Wende sysctl-Einstellungen an..."
# IPv6 in Netzwerk-Interfaces deaktivieren
progress "Deaktiviere IPv6 in Netzwerk-Interfaces..."
# Versuche sysctl-Einstellungen einzeln anzuwenden (robuster)
if sysctl -p >/dev/null 2>&1; then
success "✅ Alle sysctl-Einstellungen erfolgreich angewendet"
else
warning "⚠️ Einige sysctl-Einstellungen konnten nicht angewendet werden"
debug "sysctl -p Fehlerausgabe: $(sysctl -p 2>&1 || echo 'Befehl fehlgeschlagen')"
# Versuche kritische Einstellungen einzeln (IPv6 deaktivieren)
progress "Wende kritische Einstellungen einzeln an..."
local critical_settings=(
"net.ipv6.conf.all.disable_ipv6=1"
"net.ipv6.conf.default.disable_ipv6=1"
"net.ipv4.ip_forward=0"
"net.ipv4.tcp_syncookies=1"
)
local applied_count=0
for setting in "${critical_settings[@]}"; do
if sysctl -w "$setting" >/dev/null 2>&1; then
((applied_count++))
debug "Erfolgreich angewendet: $setting"
else
debug "Fehlgeschlagen: $setting"
fi
done
if [ $applied_count -gt 0 ]; then
success "$applied_count kritische sysctl-Einstellungen angewendet"
else
warning "⚠️ Keine sysctl-Einstellungen konnten angewendet werden"
fi
fi
# Für systemd-networkd
if systemctl is-enabled systemd-networkd 2>/dev/null; then
mkdir -p /etc/systemd/network
cat > /etc/systemd/network/99-disable-ipv6.network << 'EOF'
# IPv6 in Netzwerk-Interfaces deaktivieren (robust)
progress "Deaktiviere IPv6 in Netzwerk-Interfaces (vorsichtig)..."
# Für systemd-networkd (nur wenn aktiv)
if systemctl is-enabled systemd-networkd >/dev/null 2>&1 && systemctl is-active systemd-networkd >/dev/null 2>&1; then
progress "Konfiguriere systemd-networkd für IPv6-Deaktivierung..."
if mkdir -p /etc/systemd/network 2>/dev/null; then
cat > /etc/systemd/network/99-disable-ipv6.network << 'EOF'
[Match]
Name=*
@ -1041,12 +1300,23 @@ Name=*
IPv6AcceptRA=no
LinkLocalAddressing=no
EOF
systemctl restart systemd-networkd 2>/dev/null || true
if systemctl restart systemd-networkd >/dev/null 2>&1; then
success "✅ systemd-networkd IPv6 deaktiviert"
else
warning "⚠️ systemd-networkd Neustart fehlgeschlagen"
fi
else
warning "⚠️ systemd-networkd Verzeichnis konnte nicht erstellt werden"
fi
else
debug "systemd-networkd nicht aktiv - überspringe"
fi
# Für NetworkManager
if systemctl is-enabled NetworkManager 2>/dev/null; then
cat > /etc/NetworkManager/conf.d/99-disable-ipv6.conf << 'EOF'
# Für NetworkManager (nur wenn aktiv)
if systemctl is-enabled NetworkManager >/dev/null 2>&1 && systemctl is-active NetworkManager >/dev/null 2>&1; then
progress "Konfiguriere NetworkManager für IPv6-Deaktivierung..."
if mkdir -p /etc/NetworkManager/conf.d 2>/dev/null; then
cat > /etc/NetworkManager/conf.d/99-disable-ipv6.conf << 'EOF'
[main]
plugins=keyfile
@ -1056,11 +1326,26 @@ unmanaged-devices=none
[connection]
ipv6.method=ignore
EOF
systemctl restart NetworkManager 2>/dev/null || true
if systemctl restart NetworkManager >/dev/null 2>&1; then
success "✅ NetworkManager IPv6 deaktiviert"
else
warning "⚠️ NetworkManager Neustart fehlgeschlagen"
fi
else
warning "⚠️ NetworkManager Verzeichnis konnte nicht erstellt werden"
fi
else
debug "NetworkManager nicht aktiv - überspringe"
fi
# IPv6 in /etc/hosts auskommentieren
sed -i 's/^::1/#::1/' /etc/hosts 2>/dev/null || true
# IPv6 in /etc/hosts auskommentieren (vorsichtig)
if [ -f /etc/hosts ]; then
if sed -i.backup 's/^::1/#::1/' /etc/hosts 2>/dev/null; then
debug "IPv6 Einträge in /etc/hosts auskommentiert"
else
debug "IPv6 Einträge in /etc/hosts konnten nicht geändert werden"
fi
fi
log "✅ Erweiterte Netzwerk-Sicherheit konfiguriert:"
log " 🚫 IPv6 vollständig deaktiviert"