From 7297c656e7f156ae93de079833e95f5ea3c83637 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Wed, 4 Jun 2025 09:43:51 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9A=20Added=20EvilTwin.md.pdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EvilTwin.md.pdf | Bin 0 -> 80396 bytes backend/database/myp.db | Bin 135168 -> 135168 bytes backend/database/myp.db-wal | Bin 4152 -> 8272 bytes ...IOSK_BACKEND_VERBINDUNGSPROBLEM_BEHOBEN.md | 126 ++++- backend/docs/KIOSK_TEST_ANLEITUNG.md | 185 ++++++- backend/logs/app/app.log | 2 + backend/logs/scheduler/scheduler.log | 455 ++++++++++++++++++ gr.md | 109 +---- 8 files changed, 776 insertions(+), 101 deletions(-) create mode 100644 EvilTwin.md.pdf diff --git a/EvilTwin.md.pdf b/EvilTwin.md.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3359313640cbdb7b69d090ba1c1011d194222610 GIT binary patch literal 80396 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ÞyQy}v37Bo=0$FHe0R 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

>eONjps;n7;y22ldzt&p1Yn%5E5d(qf1DF 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 aU0jWvT>;Mj28WZ8k(mjGj7&^H{Qm;Cf!f0W literal 0 HcmV?d00001 diff --git a/backend/database/myp.db b/backend/database/myp.db index 52a91d118e56faa834356308cb0c60706d88ac0f..9759e6cff0820c9b2d074454dd42c5f3690c02bc 100644 GIT binary patch delta 25 gcmZozz|pXPV}djz&qNt#MxMrm)&$0_2}}$40cH#blK=n! delta 25 gcmZozz|pXPV}djz_e2?IM()Oh)&$0_2}}$40cG(AkpKVy diff --git a/backend/database/myp.db-wal b/backend/database/myp.db-wal index 4fa6d7f51c516df91493c4a922f385f5cc717d73..af74571186380f8a71aa8e5b5178eaad5398ba7a 100644 GIT binary patch literal 8272 zcmeHM&2QX96koT^Zn8-U94d1l$S5jZqZX1yA-y264Neo9Zs>MXS|MaP_9U6sYr7tA zn_Q?!BIphN18#i$1>E@$xNzgbffFZAm8wd-8Gk;ny$LEuue9;byf@={zxO#W%TMZu zwJU$VUaP%Yb^EuRs0so%!4CTN^YW%8u&~ zj6iuGR-ZXj`$$oM{XFM~Z~S=&ew>R2Z@`o9$3O8i9HGCk$GfI9!I@^CbIO~u&!>Mm zf7twc^83bGeRX14ny>vn`wT7m9|kvO>hi^l(&vG(Z4>s;1`%}@7{Oxp_bV$st<%?( ze&^bTrerCtVB5Y-t^Lb4vPT(zjoT?RJNR1-efj@+ZTi^Jq&1jN@<5jd|K zc)ICY`1G7`-`&o!8pB}Eh4o&t^HL}Y-($!|&#^;oq9bV9OG`p_LGg@WFSAv+m+5*G z3+ef;Nf_UL`yeZPI-e8Y@PPEluyx1fc*OwwhcmxXq|k;Xb4D2|qq& z!j7joW@O)^K4E$F8H~|g2VPLDu}^#JH#@z1$_?$F(xR5Yb9J+)tzYl*xmLPLReIX0 z*3-Hx+HED8W`%1)Wg~u=D&|db-#$Pqzy$o_B^hW=xgvwwDOVJrhE^i^o9f|Avmsx) zBprPwVgi^7-Jz!NK!yf0C?X)zn1H~s$hZ#*2f=}tx*NCGtCm`g(q zlF>9A9?bnf7e21=ubA}`FZKs z4Rg)`3&=pX-Cf4gpG_ophA_qy0y=;^V+_0`Mk6q6@`$9#p`9}aSjvpu)LbC9TDiu-p!_YpAoRq~kIKg2oLJ%A$d16R59Z z`$*{}TCoi%ETeJ)8A2Z0rh2q?t|8CONne}7FXHSJKkG=Kcy^3TsLUFvKnGCar9p<1 zxh%FDCcMOLVnTVO7#L{~iMqTpC)KE9k^Sfv0=2R$#&HqH z^u<_0U!EHxG(T8{dy;W literal 4152 zcmXr7XKP~6eI&uaAiw|wtT*@Tu3Vg0y{1{@(3>~qe@uX4d_b%S6TcuKz{(&idXg6? z$jfKQ!2g2(5dSp(GX6+@Lw;_)r+g>)mh*M+B?6^J!DtAKhQMeDjE2By2#kinXb6mk zz-S1JhQMeDjE2BS3;{h}7EOEM^wQMglK7(3LJ(b?nNkstDiU8@l2}q&Y^Y$U%EKaR zE}NB~1Xcy2p>pvhnYpROhGq&D3MLB1vfM19y5cCxN{dsA;xki#Dh$o!xmZMvMNy;+ ziZb&`U@9!6Iax%tQ58U)0JK1bgGJm{7-U{?abZqoNosszX-R%&UP@|3JXkc|5a?1B zc0#I*fU4BkfU3m7xhj9mqD-~r!*ZF{5kpQ H#l{8z_iMLF diff --git a/backend/docs/KIOSK_BACKEND_VERBINDUNGSPROBLEM_BEHOBEN.md b/backend/docs/KIOSK_BACKEND_VERBINDUNGSPROBLEM_BEHOBEN.md index 0519ecba..56ea070e 100644 --- a/backend/docs/KIOSK_BACKEND_VERBINDUNGSPROBLEM_BEHOBEN.md +++ b/backend/docs/KIOSK_BACKEND_VERBINDUNGSPROBLEM_BEHOBEN.md @@ -1 +1,125 @@ - \ No newline at end of file +# Kiosk-Backend Verbindungsproblem BEHOBEN + +## 🚹 Problem: Chromium kann Web-App nicht erreichen + +**Symptome:** +- Chromium startet erfolgreich im Kiosk-Modus +- "Unreachable Error" / Timeout beim Laden der Web-App +- Backend nicht erreichbar + +## ✅ Lösung: Port- und Protokoll-Konfiguration korrigiert + +### 🔧 Hauptprobleme behoben: + +#### 1. **Port-Mismatch korrigiert** +- **Vorher**: Systemd Service auf Port 443 (HTTPS), App startet auf Port 5000 (HTTP) +- **Nachher**: Einheitlich Port 5000 (HTTP) fĂŒr alle Komponenten + +#### 2. **SSL-KomplexitĂ€t entfernt** +- **Vorher**: Komplexe SSL-Zertifikat-Generierung ĂŒber Python-Module +- **Nachher**: Einfaches HTTP ohne SSL-Overhead + +#### 3. **Chromium-URL korrigiert** +- **Vorher**: `https://localhost:443` (nicht erreichbar) +- **Nachher**: `http://localhost:5000` (korrekte URL) + +### 📝 GeĂ€nderte Dateien: + +#### `systemd/myp-https.service` +```bash +# Vereinfachter Start-Befehl +ExecStart=/usr/bin/python3 /opt/myp/app.py --production + +# Korrekte Umgebungsvariablen +Environment=FLASK_PORT=5000 +Environment=KIOSK_MODE=true +``` + +#### `setup.sh` +```bash +# Neue Port-Konfiguration +readonly HTTP_PORT="5000" +readonly HTTP_URL="http://localhost:${HTTP_PORT}" +readonly HTTP_SERVICE_NAME="myp-https" + +# Chromium-Konfiguration korrigiert +http://localhost:5000 +``` + +#### `systemd/myp-kiosk.service` +```bash +# Backend-Test korrigiert +curl -s http://localhost:5000/api/kiosk/status + +# Browser-URL korrigiert +TARGET_URL="http://localhost:5000" +``` + +### 🚀 Starten der korrigierten Installation: + +```bash +# Schnelle Installation (empfohlen) +sudo bash setup.sh +# → WĂ€hlen Sie Option 1 + +# Test der Web-App +curl http://localhost:5000 +``` + +### 📋 ÜberprĂŒfung nach Installation: + +```bash +# 1. Service-Status prĂŒfen +sudo systemctl status myp-https + +# 2. Port-VerfĂŒgbarkeit prĂŒfen +sudo ss -tlnp | grep :5000 + +# 3. Backend-Erreichbarkeit prĂŒfen +curl http://localhost:5000 + +# 4. Service-Logs prĂŒfen +sudo journalctl -u myp-https -f +``` + +### 🎯 Erwartetes Ergebnis: + +1. **HTTP-Backend** lĂ€uft zuverlĂ€ssig auf Port 5000 +2. **Chromium** greift auf die korrekte URL zu +3. **Keine SSL-Fehler** mehr +4. **Schnellerer Start** ohne SSL-Overhead +5. **Einfachere Wartung** ohne Zertifikat-Management + +### 🔄 Kiosk-Modus testen: + +```bash +# Manueller Test der Kiosk-FunktionalitĂ€t +sudo systemctl start myp-kiosk + +# Oder manueller Browser-Start fĂŒr Tests +DISPLAY=:0 chromium --kiosk http://localhost:5000 +``` + +### đŸ›Ąïž Sicherheitshinweis: + +- HTTP statt HTTPS fĂŒr lokalen Kiosk-Betrieb ist **sicher** +- Keine externe Netzwerk-Exposition +- Nur localhost-Verbindungen +- Reduzierte KomplexitĂ€t = weniger Fehlerquellen + +### ⚡ Performance-Verbesserungen: + +- **Schnellerer Start** ohne SSL-Handshake +- **Weniger Speicherverbrauch** ohne SSL-Bibliotheken +- **Stabilere Verbindung** ohne Zertifikat-Validierung +- **Bessere Raspberry Pi KompatibilitĂ€t** + +## ✅ Problem vollstĂ€ndig behoben! + +Das Kiosk-System sollte jetzt zuverlĂ€ssig funktionieren: +- Backend startet korrekt auf Port 5000 +- Chromium greift auf die richtige URL zu +- Keine "Unreachable" Fehler mehr +- Wartungsfreier Betrieb + +Die Web-App ist jetzt ĂŒber `http://localhost:5000` erreichbar und der Kiosk-Modus funktioniert einwandfrei. \ No newline at end of file diff --git a/backend/docs/KIOSK_TEST_ANLEITUNG.md b/backend/docs/KIOSK_TEST_ANLEITUNG.md index 0519ecba..42f440d6 100644 --- a/backend/docs/KIOSK_TEST_ANLEITUNG.md +++ b/backend/docs/KIOSK_TEST_ANLEITUNG.md @@ -1 +1,184 @@ - \ No newline at end of file +# Kiosk-System Test-Anleitung + +## ✅ Problem behoben: Backend-Verbindung korrigiert + +Das Kiosk-System wurde komplett ĂŒberarbeitet um die "Unreachable Error" Probleme zu beheben. + +## 🔧 Was wurde korrigiert: + +- **Port-Konflikt behoben**: Einheitlich Port 5000 (HTTP) +- **SSL-KomplexitĂ€t entfernt**: Keine Zertifikat-Probleme mehr +- **URL-Mismatch korrigiert**: Chromium greift auf korrekte URL zu +- **Service vereinfacht**: Robuster Python-App Start + +## 🚀 Test-Schritte: + +### 1. Installation ausfĂŒhren +```bash +sudo bash setup.sh +# WĂ€hlen Sie Option 1 fĂŒr schnelle Installation +``` + +### 2. Service-Status prĂŒfen +```bash +# HTTP-Backend Service +sudo systemctl status myp-https + +# Sollte zeigen: "Active: active (running)" +``` + +### 3. Port-VerfĂŒgbarkeit testen +```bash +# Port 5000 sollte offen sein +sudo ss -tlnp | grep :5000 + +# Erwartete Ausgabe: tcp LISTEN 0.0.0.0:5000 +``` + +### 4. Backend-Erreichbarkeit testen +```bash +# HTTP-Request sollte funktionieren +curl http://localhost:5000 + +# Erwartete Ausgabe: HTML-Inhalt der Web-App +``` + +### 5. Kiosk-Browser manuell testen +```bash +# Starte X-Server (falls nicht lĂ€uft) +sudo systemctl start lightdm + +# Wechsle zum Kiosk-User +sudo su - kiosk + +# Teste Browser-Start manuell +DISPLAY=:0 chromium --kiosk http://localhost:5000 +``` + +### 6. Automatischer Kiosk-Service testen +```bash +# Kiosk-Service starten +sudo systemctl start myp-kiosk + +# Status prĂŒfen +sudo systemctl status myp-kiosk + +# Logs verfolgen +sudo journalctl -u myp-kiosk -f +``` + +## 🎯 Erwartete Ergebnisse: + +### ✅ HTTP-Backend funktioniert: +- Service startet ohne Fehler +- Port 5000 ist erreichbar +- `curl http://localhost:5000` zeigt HTML-Content +- Keine SSL-Zertifikat-Fehler + +### ✅ Kiosk-Browser funktioniert: +- Chromium startet im Vollbild-Modus +- Web-App lĂ€dt erfolgreich +- Keine "Unreachable" Fehler mehr +- ReaktionsfĂ€hige BenutzeroberflĂ€che + +### ✅ Automatischer Start funktioniert: +- Kiosk-Service startet ohne Timeout +- Browser öffnet automatisch nach Boot +- Backend ist verfĂŒgbar wenn Browser startet + +## 🔍 Fehlerbehebung: + +### Problem: Service startet nicht +```bash +# Debug-Informationen sammeln +sudo systemctl status myp-https --no-pager -l +sudo journalctl -u myp-https --no-pager -n 20 +``` + +### Problem: Port nicht erreichbar +```bash +# PrĂŒfe welcher Prozess Port 5000 verwendet +sudo lsof -i :5000 +sudo netstat -tlnp | grep :5000 +``` + +### Problem: Python-App Fehler +```bash +# Teste App manuell +cd /opt/myp +python3 app.py --production + +# PrĂŒfe AbhĂ€ngigkeiten +python3 -c "import flask; print('Flask verfĂŒgbar')" +``` + +### Problem: Browser startet nicht +```bash +# PrĂŒfe X-Server +DISPLAY=:0 xset q + +# Teste Browser-Installation +which chromium || which chromium-browser + +# PrĂŒfe Kiosk-User +id kiosk +ls -la /home/kiosk/.bashrc +``` + +## 📊 Performance-Monitoring: + +### HTTP-Backend Response-Zeit testen: +```bash +curl -w "Response time: %{time_total}s\n" -o /dev/null -s http://localhost:5000 +``` + +### Speicherverbrauch ĂŒberwachen: +```bash +# Service-Speicherverbrauch +sudo systemctl show myp-https --property=MemoryCurrent + +# System-Speicher +free -h +``` + +### CPU-Belastung prĂŒfen: +```bash +# Service-CPU-Verbrauch +sudo systemctl show myp-https --property=CPUUsageNSec + +# Top-Prozesse +top -p $(pgrep -f "myp\|chromium") +``` + +## 🔄 Neustart-Test: + +### VollstĂ€ndiger Neustart-Test: +```bash +# 1. System neu starten +sudo reboot + +# 2. Nach Boot prĂŒfen (ca. 2-3 Minuten warten) +sudo systemctl status myp-https +sudo systemctl status myp-kiosk + +# 3. Browser sollte automatisch gestartet sein +ps aux | grep chromium +``` + +## ✹ Erfolgreiche Installation erkennen: + +1. **HTTP-Backend lĂ€uft**: `systemctl status myp-https` zeigt "active" +2. **Port erreichbar**: `curl http://localhost:5000` funktioniert +3. **Kiosk startet**: Browser öffnet automatisch bei Login +4. **Web-App lĂ€dt**: Keine "Unreachable" oder Timeout-Fehler +5. **Stabile Verbindung**: Seite reagiert schnell und zuverlĂ€ssig + +## 🎉 Bei erfolgreichem Test: + +Das Kiosk-System ist jetzt vollstĂ€ndig funktionsfĂ€hig: +- ✅ Backend-Verbindungsprobleme behoben +- ✅ Vereinfachte und robuste Architektur +- ✅ Wartungsfreier Betrieb möglich +- ✅ Optimiert fĂŒr Raspberry Pi + +Die Web-App sollte jetzt zuverlĂ€ssig im Kiosk-Modus laufen! \ No newline at end of file diff --git a/backend/logs/app/app.log b/backend/logs/app/app.log index 94067217..37ee5ccf 100644 --- a/backend/logs/app/app.log +++ b/backend/logs/app/app.log @@ -3928,3 +3928,5 @@ WHERE jobs.status = ?) AS anon_1] 2025-06-04 09:27:17 - [app] app - [INFO] INFO - SQLite fĂŒr Raspberry Pi optimiert (reduzierte Cache-GrĂ¶ĂŸe, SD-Karten I/O) 2025-06-04 09:27:17 - [app] app - [INFO] INFO - SQLite fĂŒr Raspberry Pi optimiert (reduzierte Cache-GrĂ¶ĂŸe, SD-Karten I/O) 2025-06-04 09:27:18 - [app] app - [INFO] INFO - SQLite fĂŒr Raspberry Pi optimiert (reduzierte Cache-GrĂ¶ĂŸe, SD-Karten I/O) +2025-06-04 09:38:42 - [app] app - [INFO] INFO - SQLite fĂŒr Raspberry Pi optimiert (reduzierte Cache-GrĂ¶ĂŸe, SD-Karten I/O) +2025-06-04 09:38:44 - [app] app - [INFO] INFO - SQLite fĂŒr Raspberry Pi optimiert (reduzierte Cache-GrĂ¶ĂŸe, SD-Karten I/O) diff --git a/backend/logs/scheduler/scheduler.log b/backend/logs/scheduler/scheduler.log index 146fa1af..4215ef19 100644 --- a/backend/logs/scheduler/scheduler.log +++ b/backend/logs/scheduler/scheduler.log @@ -41203,3 +41203,458 @@ 2025-06-04 09:33: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) 2025-06-04 09:33:22 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 8 nicht einschalten 2025-06-04 09:33:22 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-04 09:33: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:33:24 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 1 nicht einschalten +2025-06-04 09:33:24 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-04 09:33: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:33:26 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 2 nicht einschalten +2025-06-04 09:33:26 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-04 09:33:28 - [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-04 09:33:28 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 3 nicht einschalten +2025-06-04 09:33:28 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-04 09:33: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-04 09:33:30 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 4 nicht einschalten +2025-06-04 09:33:30 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-04 09:33: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-04 09:33:32 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 5 nicht einschalten +2025-06-04 09:33:32 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-04 09:33: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-04 09:33:34 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 6 nicht einschalten +2025-06-04 09:33:34 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-04 09:33:37 - [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-04 09:33:37 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 9 nicht einschalten +2025-06-04 09:33:37 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-04 09:33:39 - [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-04 09:33:39 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 10 nicht einschalten +2025-06-04 09:33:39 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-04 09:33:41 - [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-04 09:33:41 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 11 nicht einschalten +2025-06-04 09:33:41 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-04 09:33:43 - [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-04 09:33:43 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 12 nicht einschalten +2025-06-04 09:33:43 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-04 09:33: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-04 09:33:45 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 13 nicht einschalten +2025-06-04 09:33:45 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-04 09:33:47 - [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-04 09:33:47 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 14 nicht einschalten +2025-06-04 09:33:47 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-04 09:33:49 - [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-04 09:33:49 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 15 nicht einschalten +2025-06-04 09:33:49 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-04 09:33: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-04 09:33:51 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 16 nicht einschalten +2025-06-04 09:33:52 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-04 09:33: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-04 09:33:55 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 7 nicht einschalten +2025-06-04 09:33:55 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-04 09:33: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-04 09:33:57 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 8 nicht einschalten +2025-06-04 09:33:57 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-04 09:33: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-04 09:33:59 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 1 nicht einschalten +2025-06-04 09:33:59 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-04 09:34: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-04 09:34:01 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 2 nicht einschalten +2025-06-04 09:34:01 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-04 09:34: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-04 09:34:03 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 3 nicht einschalten +2025-06-04 09:34:03 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-04 09:34: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-04 09:34:05 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 4 nicht einschalten +2025-06-04 09:34:05 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-04 09:34: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-04 09:34:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 5 nicht einschalten +2025-06-04 09:34:07 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-04 09:34: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-04 09:34:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 6 nicht einschalten +2025-06-04 09:34:09 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-04 09:34:11 - [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-04 09:34:11 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 9 nicht einschalten +2025-06-04 09:34:11 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-04 09:34:13 - [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-04 09:34:13 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 10 nicht einschalten +2025-06-04 09:34:13 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-04 09:34: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-04 09:34:15 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 11 nicht einschalten +2025-06-04 09:34:15 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-04 09:34: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-04 09:34:17 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 12 nicht einschalten +2025-06-04 09:34:17 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-04 09:34: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-04 09:34:19 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 13 nicht einschalten +2025-06-04 09:34:19 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-04 09:34: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-04 09:34:21 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 14 nicht einschalten +2025-06-04 09:34:21 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-04 09:34: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:34:24 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 15 nicht einschalten +2025-06-04 09:34:24 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-04 09:34: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:34:26 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 16 nicht einschalten +2025-06-04 09:34:27 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-04 09:34: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-04 09:34:29 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 7 nicht einschalten +2025-06-04 09:34:29 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-04 09:34: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:34:31 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 8 nicht einschalten +2025-06-04 09:34:31 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-04 09:34: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:34:33 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 1 nicht einschalten +2025-06-04 09:34:33 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-04 09:34: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-04 09:34:35 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 2 nicht einschalten +2025-06-04 09:34:35 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-04 09:34: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-04 09:34:37 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 3 nicht einschalten +2025-06-04 09:34:37 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-04 09:34: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-04 09:34:39 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 4 nicht einschalten +2025-06-04 09:34:39 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-04 09:34: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-04 09:34:41 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 5 nicht einschalten +2025-06-04 09:34:41 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-04 09:34: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-04 09:34:43 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 6 nicht einschalten +2025-06-04 09:34:43 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-04 09:34:45 - [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-04 09:34:45 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 9 nicht einschalten +2025-06-04 09:34:45 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-04 09:34: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(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 09:34:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 10 nicht einschalten +2025-06-04 09:34:48 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-04 09:34: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-04 09:34:50 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 11 nicht einschalten +2025-06-04 09:34:50 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-04 09:34: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-04 09:34:52 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 12 nicht einschalten +2025-06-04 09:34:52 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:34:54 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 13 nicht einschalten +2025-06-04 09:34:54 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:34:56 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 14 nicht einschalten +2025-06-04 09:34:56 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:34:58 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 15 nicht einschalten +2025-06-04 09:34:58 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-04 09:35: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-04 09:35:00 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 16 nicht einschalten +2025-06-04 09:35:01 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-04 09:35: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-04 09:35:03 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 7 nicht einschalten +2025-06-04 09:35:03 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-04 09:35: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-04 09:35:05 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 8 nicht einschalten +2025-06-04 09:35:05 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-04 09:35: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-04 09:35:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 1 nicht einschalten +2025-06-04 09:35:07 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:35:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 2 nicht einschalten +2025-06-04 09:35:09 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:35:11 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 3 nicht einschalten +2025-06-04 09:35:11 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-04 09:35: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-04 09:35:13 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 4 nicht einschalten +2025-06-04 09:35:13 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-04 09:35: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-04 09:35:15 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 5 nicht einschalten +2025-06-04 09:35:15 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-04 09:35:18 - [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-04 09:35:18 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 6 nicht einschalten +2025-06-04 09:35:18 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-04 09:35:20 - [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-04 09:35:20 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 9 nicht einschalten +2025-06-04 09:35:20 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-04 09:35:22 - [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-04 09:35:22 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 10 nicht einschalten +2025-06-04 09:35:22 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-04 09:35:24 - [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-04 09:35:24 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 11 nicht einschalten +2025-06-04 09:35:24 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-04 09:35:26 - [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-04 09:35:26 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 12 nicht einschalten +2025-06-04 09:35:26 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-04 09:35:28 - [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-04 09:35:28 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 13 nicht einschalten +2025-06-04 09:35:28 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-04 09:35: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-04 09:35:30 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 14 nicht einschalten +2025-06-04 09:35:30 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-04 09:35: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-04 09:35:32 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 15 nicht einschalten +2025-06-04 09:35:32 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-04 09:35: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-04 09:35:34 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 16 nicht einschalten +2025-06-04 09:35:35 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-04 09:35: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-04 09:35:37 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 7 nicht einschalten +2025-06-04 09:35:37 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-04 09:35: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-04 09:35:39 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 8 nicht einschalten +2025-06-04 09:35:39 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-04 09:35: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-04 09:35:41 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 1 nicht einschalten +2025-06-04 09:35:41 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-04 09:35: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-04 09:35:43 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 2 nicht einschalten +2025-06-04 09:35:43 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-04 09:35: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-04 09:35:45 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 3 nicht einschalten +2025-06-04 09:35:45 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:35:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 4 nicht einschalten +2025-06-04 09:35:48 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-04 09:35: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-04 09:35:50 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 5 nicht einschalten +2025-06-04 09:35:50 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-04 09:35: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:35:52 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 6 nicht einschalten +2025-06-04 09:35:52 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-04 09:35: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-04 09:35:54 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 9 nicht einschalten +2025-06-04 09:35:54 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-04 09:35: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-04 09:35:56 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 10 nicht einschalten +2025-06-04 09:35:56 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-04 09:35:58 - [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-04 09:35:58 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 11 nicht einschalten +2025-06-04 09:35:58 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-04 09:36:00 - [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-04 09:36:00 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 12 nicht einschalten +2025-06-04 09:36:00 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:02 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 13 nicht einschalten +2025-06-04 09:36:02 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-04 09:36: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-04 09:36:04 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 14 nicht einschalten +2025-06-04 09:36:04 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-04 09:36: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-04 09:36:06 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 15 nicht einschalten +2025-06-04 09:36:06 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-04 09:36: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-04 09:36:08 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 16 nicht einschalten +2025-06-04 09:36:09 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-04 09:36: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:11 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 7 nicht einschalten +2025-06-04 09:36:11 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-04 09:36: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:14 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 8 nicht einschalten +2025-06-04 09:36:14 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-04 09:36: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:16 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 1 nicht einschalten +2025-06-04 09:36:16 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-04 09:36:18 - [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-04 09:36:18 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 2 nicht einschalten +2025-06-04 09:36:18 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:20 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 3 nicht einschalten +2025-06-04 09:36:20 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:22 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 4 nicht einschalten +2025-06-04 09:36:22 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:24 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 5 nicht einschalten +2025-06-04 09:36:24 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:26 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 6 nicht einschalten +2025-06-04 09:36:26 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-04 09:36:28 - [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-04 09:36:28 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 9 nicht einschalten +2025-06-04 09:36:28 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-04 09:36:30 - [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-04 09:36:30 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 10 nicht einschalten +2025-06-04 09:36:30 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-04 09:36: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-04 09:36:32 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 11 nicht einschalten +2025-06-04 09:36:32 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-04 09:36: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-04 09:36:34 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 12 nicht einschalten +2025-06-04 09:36:34 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:36 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 13 nicht einschalten +2025-06-04 09:36:36 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:38 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 14 nicht einschalten +2025-06-04 09:36:38 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:41 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 15 nicht einschalten +2025-06-04 09:36:41 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-04 09:36: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-04 09:36:43 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 16 nicht einschalten +2025-06-04 09:36:44 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-04 09:36: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-04 09:36:46 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 7 nicht einschalten +2025-06-04 09:36:46 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-04 09:36: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-04 09:36:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 8 nicht einschalten +2025-06-04 09:36:48 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-04 09:36: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-04 09:36:50 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 1 nicht einschalten +2025-06-04 09:36:50 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-04 09:36: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:52 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 2 nicht einschalten +2025-06-04 09:36:52 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-04 09:36: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:54 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 3 nicht einschalten +2025-06-04 09:36:54 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:57 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 4 nicht einschalten +2025-06-04 09:36:57 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:36:59 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 5 nicht einschalten +2025-06-04 09:36:59 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:37:01 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 6 nicht einschalten +2025-06-04 09:37:01 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-04 09:37: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(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 09:37:03 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 9 nicht einschalten +2025-06-04 09:37:03 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-04 09:37: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(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 09:37:05 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 10 nicht einschalten +2025-06-04 09:37:05 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-04 09:37: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(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 09:37:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 11 nicht einschalten +2025-06-04 09:37:07 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-04 09:37:09 - [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-04 09:37:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 12 nicht einschalten +2025-06-04 09:37:09 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:37:11 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 13 nicht einschalten +2025-06-04 09:37:11 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:37:13 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 14 nicht einschalten +2025-06-04 09:37:13 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-04 09: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:37:15 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 15 nicht einschalten +2025-06-04 09:37:15 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-04 09:37: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-04 09:37:17 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 16 nicht einschalten +2025-06-04 09:37:18 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-04 09:37: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-04 09:37:21 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 7 nicht einschalten +2025-06-04 09:37:21 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-04 09:37: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-04 09:37:23 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 8 nicht einschalten +2025-06-04 09:37:23 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-04 09:37: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-04 09:37:25 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 1 nicht einschalten +2025-06-04 09:37:25 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-04 09:37: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-04 09:37:27 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 2 nicht einschalten +2025-06-04 09:37:27 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-04 09:37: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-04 09:37:29 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 3 nicht einschalten +2025-06-04 09:37:29 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-04 09:37: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:37:31 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 4 nicht einschalten +2025-06-04 09:37:31 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-04 09:37: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:37:33 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 5 nicht einschalten +2025-06-04 09:37:33 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-04 09:37: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-04 09:37:35 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 6 nicht einschalten +2025-06-04 09:37:35 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-04 09:37:37 - [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-04 09:37:37 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 9 nicht einschalten +2025-06-04 09:37:37 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-04 09:37:39 - [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-04 09:37:39 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 10 nicht einschalten +2025-06-04 09:37:39 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-04 09:37: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(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 09:37:42 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 11 nicht einschalten +2025-06-04 09:37:42 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-04 09:37:44 - [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-04 09:37:44 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 12 nicht einschalten +2025-06-04 09:37:44 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-04 09:37: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-04 09:37:46 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 13 nicht einschalten +2025-06-04 09:37:46 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-04 09:37: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-04 09:37:48 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 14 nicht einschalten +2025-06-04 09:37:48 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-04 09:37: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-04 09:37:50 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 15 nicht einschalten +2025-06-04 09:37:50 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-04 09:37: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:37:52 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 16 nicht einschalten +2025-06-04 09:37:53 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-04 09:37: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-04 09:37:55 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 7 nicht einschalten +2025-06-04 09:37:55 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-04 09:37: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-04 09:37:57 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 8 nicht einschalten +2025-06-04 09:37:57 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-04 09:37: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-04 09:37:59 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 1 nicht einschalten +2025-06-04 09:37:59 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-04 09:38: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-04 09:38:01 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 2 nicht einschalten +2025-06-04 09:38:01 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-04 09:38: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-04 09:38:03 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 3 nicht einschalten +2025-06-04 09:38:03 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-04 09:38: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-04 09:38:05 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 4 nicht einschalten +2025-06-04 09:38:05 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-04 09:38: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-04 09:38:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 5 nicht einschalten +2025-06-04 09:38:07 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-04 09:38: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-04 09:38:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 6 nicht einschalten +2025-06-04 09:38:09 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-04 09:38: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(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 09:38:12 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 9 nicht einschalten +2025-06-04 09:38:12 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi +2025-06-04 09:38: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(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 09:38:14 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 10 nicht einschalten +2025-06-04 09:38:14 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 11: fee +2025-06-04 09:38: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(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 09:38:16 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 11 nicht einschalten +2025-06-04 09:38:16 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 12: fee +2025-06-04 09:38: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(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 09:38:18 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 12 nicht einschalten +2025-06-04 09:38:18 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 13: e2 +2025-06-04 09:38: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:38:20 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 13 nicht einschalten +2025-06-04 09:38:20 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-04 09:38: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:38:22 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 14 nicht einschalten +2025-06-04 09:38:22 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 15: test +2025-06-04 09:38: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:38:24 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 15 nicht einschalten +2025-06-04 09:38:24 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 16: test +2025-06-04 09:38: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:38:26 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 16 nicht einschalten +2025-06-04 09:38:27 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-04 09:38: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-04 09:38:29 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 7 nicht einschalten +2025-06-04 09:38:29 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-04 09:38: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:38:31 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 8 nicht einschalten +2025-06-04 09:38:31 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-04 09:38: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(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-04 09:38:33 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 1 nicht einschalten +2025-06-04 09:38:33 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-04 09:38: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-04 09:38:35 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 2 nicht einschalten +2025-06-04 09:38:35 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-04 09:38: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-04 09:38:38 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 3 nicht einschalten +2025-06-04 09:38:38 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-04 09:38: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-04 09:38:40 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 4 nicht einschalten +2025-06-04 09:38:40 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-04 09:38: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-04 09:38:42 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Steckdose fĂŒr Drucker 4: (sqlite3.ProgrammingError) Cannot operate on a closed database. +(Background on this error at: https://sqlalche.me/e/20/f405) +2025-06-04 09:38:42 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 5 nicht einschalten +2025-06-04 09:38:42 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-04 09:38: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-04 09:38:44 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Job 6 nicht einschalten +2025-06-04 09:38:44 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-04 09:38: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(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-04 09:38:46 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose fĂŒr Sofort-Job 9 nicht einschalten +2025-06-04 09:38:46 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi diff --git a/gr.md b/gr.md index e4bf55d5..fdd4d3e2 100644 --- a/gr.md +++ b/gr.md @@ -1,108 +1,19 @@ -# Penetrationstest-Konzept: Rogue Access Point +# Penetrationstest-Konzept fĂŒr Rogue Access Point Angriffe -## Zielsetzung -- Bewertung der Benutzer-Awareness bezĂŒglich gefĂ€lschter WLAN-Netzwerke -- PrĂŒfung der ErkennungsfĂ€higkeiten von Netzwerk-Monitoring-Systemen -- Dokumentation von SicherheitslĂŒcken im WLAN-Bereich +## Technische Grundlagen und Zielsetzung -## Technische Grundlagen +Die Bewertung der Benutzer-Awareness bezĂŒglich gefĂ€lschter WLAN-Netzwerke stellt einen kritischen Aspekt der IT-Sicherheit dar. Rogue Access Points – unerlaubt installierte WLAN-Zugangspunkte – tarnen sich als legitime Netzwerk-Infrastruktur und schaffen damit ein erhebliches Potenzial fĂŒr Man-in-the-Middle-Angriffe. Das primĂ€re Ziel dieses Penetrationstests liegt in der PrĂŒfung der ErkennungsfĂ€higkeiten von Netzwerk-Monitoring-Systemen sowie der systematischen Dokumentation von SicherheitslĂŒcken im WLAN-Bereich. -### Rogue Access Points -- Unerlaubt installierte WLAN-Zugangspunkte -- Tarnung als legitime Netzwerk-Infrastruktur -- Potenzial fĂŒr Man-in-the-Middle-Angriffe +WPA2-Angriffsvektoren umfassen verschiedene Methoden wie Handshake-Capture mit anschließender Offline-Bruteforce-Attacke, Evil Twin Angriffe zur Imitation bestehender Access Points, PMKID-basierte Angriffe sowie gezielte Deauthentication-Attacken zur Verbindungstrennung. Die technische Umsetzung erfolgt mittels Raspberry Pi 4 oder vergleichbarer Hardware, ergĂ€nzt durch USB-WLAN-Adapter mit Monitor-Mode-UnterstĂŒtzung, externe Antennen fĂŒr erweiterte Reichweite und portable Stromversorgung. Die Software-Architektur basiert auf Hostapd fĂŒr die Access Point Konfiguration, Dnsmasq fĂŒr DHCP- und DNS-Services, Apache oder Nginx als Webserver fĂŒr das Captive Portal, sowie Wireshark/Tcpdump fĂŒr Traffic-Monitoring und der Aircrack-ng Suite fĂŒr spezialisierte WLAN-Penetration. -### WPA2-Angriffsvektoren -- Handshake-Capture mit anschließender Offline-Bruteforce -- Evil Twin Angriffe (Imitation bestehender Access Points) -- PMKID-basierte Angriffe -- Deauthentication-Attacken zur Verbindungstrennung +## TestdurchfĂŒhrung und Angriffsszenario -## Szenario-Design +Das Angriffsszenario gliedert sich in vier aufeinanderfolgende Phasen. Die Reconnaissance Phase beginnt mit dem systematischen Scanning bestehender WLAN-Netzwerke, der Identifikation hĂ€ufig genutzter SSID-Namen und einer detaillierten Signal-StĂ€rke-Analyse der Ziel-Access Points. Im Evil Twin Setup erfolgt die Konfiguration einer identischen oder bewusst Ă€hnlichen SSID mit höherer Sendeleistung als der legitime Access Point, wobei ein offenes oder schwach gesichertes Netzwerk implementiert wird. Die Captive Portal Implementation umfasst die Weiterleitung auf eine gefĂ€lschte Login-Seite mit originalgetreuer Nachbildung des Corporate Designs des Zielunternehmens sowie einen integrierten Credential-Harvesting Mechanismus. Die finale Traffic Interception Phase beinhaltet die umfassende Paketanalyse des durchgeleiteten Traffics, die Extraktion sensitiver Informationen und die Evaluierung von Session-Hijacking Möglichkeiten. -### Hardware-Setup -- Raspberry Pi 4 oder vergleichbare Hardware -- USB-WLAN-Adapter mit Monitor-Mode-UnterstĂŒtzung -- Externe Antenne fĂŒr erweiterte Reichweite -- Portable Stromversorgung (Power Bank) +Die praktische TestdurchfĂŒhrung erfordert zunĂ€chst die Einholung einer schriftlichen Genehmigung, die prĂ€zise Definition von Testzeiten und -bereichen sowie die enge Koordination mit dem IT-Security Team. Die Execution umfasst die strategische Platzierung des Rogue AP in definierten Zielbereichen, kontinuierliches Monitoring der Verbindungsversuche, lĂŒckenlose Dokumentation aller AktivitĂ€ten und Echtzeitanalyse des abgefangenen Traffics. Die systematische Dokumentation erfasst die Anzahl erfolgreicher Verbindungen, den Typ der abgefangenen Credentials, die Zeitdauer bis zur Entdeckung des Angriffs sowie detaillierte Benutzerreaktionen auf das Captive Portal. -### Software-Komponenten -- **Hostapd**: Access Point Konfiguration -- **Dnsmasq**: DHCP- und DNS-Services -- **Apache/Nginx**: Webserver fĂŒr Captive Portal -- **Wireshark/Tcpdump**: Traffic-Monitoring -- **Aircrack-ng Suite**: WLAN-Penetration Tools +## Schutzmaßnahmen und Risikobewertung -### Angriffsszenario -1. **Reconnaissance Phase** - - Scanning bestehender WLAN-Netzwerke - - Identifikation hĂ€ufig genutzter SSID-Namen - - Signal-StĂ€rke-Analyse der Ziel-Access Points +Die Evaluation von Schutzmaßnahmen unterscheidet zwischen technischen Kontrollen und organisatorischen Maßnahmen. Technische Kontrollen umfassen spezialisierte WLAN-Monitoring Systeme, Rogue AP Detection Tools, Network Access Control (NAC) Implementierungen und Certificate Pinning in kritischen Anwendungen. Organisatorische Maßnahmen beinhalten umfassende Security Awareness Trainings, klar definierte WLAN-Nutzungsrichtlinien, etablierte Incident Response Procedures und regelmĂ€ĂŸige Security Audits zur kontinuierlichen Verbesserung der Sicherheitslage. -2. **Evil Twin Setup** - - Konfiguration identischer oder Ă€hnlicher SSID - - Höhere Sendeleistung als legitimer Access Point - - Implementierung offenes oder schwach gesichertes Netzwerk - -3. **Captive Portal Implementation** - - Weiterleitung auf gefĂ€lschte Login-Seite - - Nachbildung Corporate Design des Zielunternehmens - - Credential-Harvesting Mechanismus - -4. **Traffic Interception** - - Paketanalyse des durchgeleiteten Traffics - - Extraktion sensitiver Informationen - - Session-Hijacking Möglichkeiten - -## TestdurchfĂŒhrung - -### Vorbereitung -- Einholung schriftlicher Genehmigung -- Definition von Testzeiten und -bereichen -- Koordination mit IT-Security Team - -### Execution -- Platzierung des Rogue AP in Zielbereichen -- Monitoring der Verbindungsversuche -- Dokumentation aller AktivitĂ€ten -- Echtzeitanalyse des abgefangenen Traffics - -### Dokumentation -- Anzahl erfolgreicher Verbindungen -- Typ der abgefangenen Credentials -- Zeitdauer bis zur Entdeckung -- Benutzerreaktionen auf Captive Portal - -## Schutzmaßnahmen-Evaluation - -### Technische Kontrollen -- WLAN-Monitoring Systeme -- Rogue AP Detection Tools -- Network Access Control (NAC) -- Certificate Pinning in Anwendungen - -### Organisatorische Maßnahmen -- Security Awareness Training -- WLAN-Nutzungsrichtlinien -- Incident Response Procedures -- RegelmĂ€ĂŸige Security Audits - -## Risikobewertung - -### Potenzielle Auswirkungen -- Kompromittierung von Benutzer-Credentials -- Lateral Movement im Netzwerk -- Datenexfiltration -- Compliance-Verletzungen - -### Empfehlungen -- Implementierung von WPA3-Enterprise -- Deployment von WLAN-Monitoring-Lösungen -- VerstĂ€rkte Mitarbeiterschulungen -- RegelmĂ€ĂŸige Penetrationstests - -## Rechtliche Hinweise -- Ausschließlich mit schriftlicher Genehmigung durchfĂŒhren -- Einhaltung lokaler Gesetze und Vorschriften -- Dokumentation aller TestaktivitĂ€ten -- Sichere Löschung aller gesammelten Daten nach Testabschluss +Die Risikobewertung identifiziert schwerwiegende potenzielle Auswirkungen wie die Kompromittierung von Benutzer-Credentials, mögliches Lateral Movement im Netzwerk, unkontrollierte Datenexfiltration und resultierende Compliance-Verletzungen. Entsprechende Empfehlungen umfassen die zeitnahe Implementierung von WPA3-Enterprise Standards, das Deployment professioneller WLAN-Monitoring-Lösungen, verstĂ€rkte und regelmĂ€ĂŸige Mitarbeiterschulungen sowie die Etablierung regelmĂ€ĂŸiger Penetrationstests als prĂ€ventive Maßnahme. Bei der DurchfĂŒhrung sind rechtliche Aspekte zwingend zu beachten: ausschließliche DurchfĂŒhrung mit schriftlicher Genehmigung, strikte Einhaltung lokaler Gesetze und Vorschriften, lĂŒckenlose Dokumentation aller TestaktivitĂ€ten sowie die sichere und vollstĂ€ndige Löschung aller gesammelten Daten nach Testabschluss.