#!/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 }