From 6a9b8ed05a1a194baf2211702bb9c51075476698 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Mon, 3 Mar 2025 17:20:54 +0100 Subject: [PATCH] =?UTF-8?q?Feat:=20F=C3=BCgt=20ein=20WakeOnLan-Skript=20ei?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Utility/WakeOnLan.sh | 74 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100755 Utility/WakeOnLan.sh diff --git a/Utility/WakeOnLan.sh b/Utility/WakeOnLan.sh new file mode 100755 index 0000000..3838e21 --- /dev/null +++ b/Utility/WakeOnLan.sh @@ -0,0 +1,74 @@ +#!/bin/sh + +# === IMPORTS === +source NetworkCheck.sh +source Log.sh + +# === KONFIGURATION === +PING_RETRIES=2 # Anzahl der PING-Versuche vor WOL +WOL_RETRIES=2 # Max. Anzahl der WOL-Versuche +WOL_WAIT=10 # Wartezeit nach WOL (Sekunden) + +# === FUNKTIONEN === + +is_reachable() { + local device_ip="$1" + for i in $(seq 1 $PING_RETRIES); do + log "Teste Erreichbarkeit von $device_ip - Versuch $i/$PING_RETRIES..." + if ping -c 1 -W 2 "$device_ip" >/dev/null 2>&1; then + log "Gerät $device_ip ist erreichbar." + return 0 + fi + done + log "Gerät $device_ip ist NICHT erreichbar." + return 1 +} + +send_wol() { + local device_mac="$1" + log "Sende Wake-on-LAN Signal an $device_mac..." + wakeonlan "$device_mac" +} + +check_wol_installed() { + if ! command -v wakeonlan >/dev/null 2>&1; then + log "Fehler: wakeonlan ist nicht installiert! Bitte installiere es mit: sudo apt install wakeonlan" + return 1 + fi + return 0 +} + +wake_device() { + local device_mac="$1" + local device_ip="$2" + + if [ -z "$device_mac" ] || [ -z "$device_ip" ]; then + log "Fehler: MAC- und IP-Adresse müssen angegeben werden!" + log "Verwendung: wake_device " + return 1 + fi + + wait_for_internet_connection + + if is_reachable "$device_ip"; then + log "Gerät ist bereits an, kein WOL nötig." + return 0 + fi + + check_wol_installed || return 1 # WOL-Tool prüfen, wenn nicht da, Abbruch + + for attempt in $(seq 1 $WOL_RETRIES); do + log "Wake-on-LAN Versuch $attempt/$WOL_RETRIES..." + send_wol "$device_mac" + log "Warte $WOL_WAIT Sekunden..." + sleep $WOL_WAIT + + if is_reachable "$device_ip"; then + log "Gerät ist jetzt erreichbar!" + return 0 + fi + done + + log "Fehler: Gerät konnte nach $WOL_RETRIES Versuchen nicht erreicht werden." + return 1 +}