74 lines
2.1 KiB
Bash
Executable File
74 lines
2.1 KiB
Bash
Executable File
#!/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"
|
|
|
|
if [[ -z "$device_mac" ]]; then
|
|
log "Fehler: MAC-Adresse muss angegeben werden!"
|
|
return 1
|
|
fi
|
|
|
|
wait_for_internet_connection
|
|
|
|
# Versuche, die IP aus der MAC-Adresse zu ermitteln
|
|
local device_ip
|
|
device_ip=$(get_ip_from_mac "$device_mac")
|
|
|
|
if [[ -n "$device_ip" ]] && is_reachable "$device_ip" "$PING_RETRIES_BEFORE_WOL"; then
|
|
log "Gerät ist bereits an, kein WOL nötig."
|
|
echo "$device_ip" # Nur die IP-Adresse ausgeben
|
|
return 0
|
|
fi
|
|
|
|
check_wol_installed || return 1
|
|
|
|
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"
|
|
|
|
# IP-Adresse erneut abrufen
|
|
device_ip=$(get_ip_from_mac "$device_mac")
|
|
|
|
if [[ -n "$device_ip" ]] && is_reachable "$device_ip" "$PING_RETRIES_AFTER_WOL"; then
|
|
log "Gerät ist jetzt erreichbar!"
|
|
echo "$device_ip" # Erfolgreich: Nur die IP-Adresse ausgeben
|
|
return 0
|
|
fi
|
|
done
|
|
|
|
log "Fehler: Gerät konnte nach $WOL_RETRIES Versuchen nicht erreicht werden."
|
|
return 1
|
|
}
|