Skripte/Utility/WakeOnLan.sh

67 lines
1.9 KiB
Bash

#!/bin/bash
# === IMPORTS ===
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/NetworkCheck.sh"
source "$SCRIPT_DIR/IsReachable.sh"
source "$SCRIPT_DIR/IpFromMac.sh"
source "$SCRIPT_DIR/Log.sh"
# === KONFIGURATION ===
PING_RETRIES_BEFORE_WOL=1 # Anzahl der PING-Versuche vor dem WOL-Signal
PING_RETRIES_AFTER_WOL=10 # Anzahl der PING-Versuche nach dem WOL-Signal
PING_WAIT=10 # Wartezeit nach jedem Ping (Sekunden)
WOL_RETRIES=2 # Max. Anzahl der WOL-Versuche
WOL_WAIT=60 # Wartezeit nach WOL (Sekunden)
# === FUNKTIONEN ===
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; 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 <MAC-Adresse> <IP-Adresse>"
return 1
fi
wait_for_internet_connection
if is_reachable "$device_ip" "$PING_RETRIES_BEFORE_WOL"; 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 = 1; attempt<=WOL_RETRIES; attempt++)); 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" "$PING_RETRIES_AFTER_WOL"; 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
}