From e4cceb409131aa1cad9cfdf7b7c65a5e57f1f783 Mon Sep 17 00:00:00 2001 From: alientim Date: Mon, 10 Aug 2026 14:56:53 +0200 Subject: [PATCH] poe.sh: CRLF-Zeilenenden, Feldanzahl und Switch-Gating fixen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Datei hatte CRLF-Zeilenenden (vermutlich aus einer Windows-Bearbeitung), wodurch das Skript unter Linux/WSL mit "command not found: $'\r'" und Syntaxfehlern abbrach. Auf LF normalisiert. - Die Haupt-Check-Schleife las per `read` nur 7 Felder aus generate_ips.py, das aber inzwischen 8 Felder liefert (MAC am Ende angehängt) — dadurch landete die MAC-Adresse an $switch_pass angehängt. `mac` als zusätzliche (ungenutzte) read-Variable ergänzt. - PoE-Neustart wurde bei nicht erreichbaren Geräten ausgelöst, sobald ein `port`-Wert gesetzt war — unabhängig davon, ob dem Gerät überhaupt ein Switch zugeordnet ist. Das führte zu sinnlosen SSH-Versuchen mit leeren Zugangsdaten (ssh @) und irreführenden "PoE deaktiviert/aktiviert" Log-Einträgen für Geräte ohne Switch. Prüft jetzt zusätzlich, dass switch_ip nicht leer ist, bevor ein Neustart versucht wird (gilt für den regulären Check-Loop und den manuellen Neustart). Co-Authored-By: Claude Sonnet 5 --- usr/local/bin/custom/poe.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/usr/local/bin/custom/poe.sh b/usr/local/bin/custom/poe.sh index a0c5f1e..4a38bd9 100644 --- a/usr/local/bin/custom/poe.sh +++ b/usr/local/bin/custom/poe.sh @@ -92,7 +92,7 @@ function manual_restart() { continue fi echo "$(date '+%Y-%m-%d %H:%M:%S') Manueller Neustart von $dev_name gestartet." >> "$LOGFILE" - if [ -n "$switch_port" ] && [ "$switch_port" != "None" ]; then + if [ -n "$switch_ip" ] && [ -n "$switch_port" ] && [ "$switch_port" != "None" ]; then disable_poe "$switch_ip" "$switch_port" "$switch_user" "$switch_pass" echo "$(date '+%Y-%m-%d %H:%M:%S') $dev_name PoE deaktiviert." >> "$LOGFILE" sleep 2 @@ -119,14 +119,17 @@ echo "" > "$LOGFILE" while true; do echo "--------------------------------------------------------------------" >> "$LOGFILE" - python3 /srv/poe_manager/generate_ips.py | while IFS='|' read -r rpi_ip dev_name switch_ip switch_hostname switch_port switch_user switch_pass; do + python3 /srv/poe_manager/generate_ips.py | while IFS='|' read -r rpi_ip dev_name switch_ip switch_hostname switch_port switch_user switch_pass mac; do if ping -c 1 -W 2 "$rpi_ip" &> /dev/null; then echo "$(date '+%Y-%m-%d %H:%M:%S') $dev_name ist erreichbar!" >> "$LOGFILE" else echo "$(date '+%Y-%m-%d %H:%M:%S') $dev_name ist nicht erreichbar!" >> "$LOGFILE" - # Nur PoE neu starten, wenn Port vorhanden ist - if [ -n "$switch_port" ] && [ "$switch_port" != "None" ]; then + # Nur PoE neu starten, wenn dem Gerät auch tatsächlich ein Switch + # zugeordnet ist (switch_ip) — ein reiner Port-Wert ohne Switch + # (switch_ip leer) darf keinen SSH-Versuch mit leeren + # Zugangsdaten auslösen. + if [ -n "$switch_ip" ] && [ -n "$switch_port" ] && [ "$switch_port" != "None" ]; then disable_poe "$switch_ip" "$switch_port" "$switch_user" "$switch_pass" echo "$(date '+%Y-%m-%d %H:%M:%S') $dev_name PoE auf Port $switch_port am Switch $switch_hostname deaktiviert." >> "$LOGFILE" sleep 2