wake-on-lan web. Docker container (build) mit webui zum anlegen und verwalten von wake-on-lan-Ziel-Hosts. Inkl. automatischem Backup der angelegten Hosts.
  • JavaScript 99.5%
  • Dockerfile 0.5%
Find a file
2026-10-30 13:04:06 +01:00
docker-compose.yml Upload files to "/" 2026-10-30 13:04:06 +01:00
Dockerfile Upload files to "/" 2026-10-30 13:04:06 +01:00
README.md Upload files to "/" 2026-10-30 13:04:06 +01:00
server.js Upload files to "/" 2026-10-30 13:04:06 +01:00

WoL-Web

Wake-on-LAN per WebUI — als Docker-Container mit eigener IP im LAN (macvlan). Schlicht, mobil-optimiert, ohne npm-Abhängigkeiten (nur Node-Core).

Was es tut

  • Geräte (Name + MAC) über die WebUI hinterlegen, per Knopfdruck aufwecken
  • Magic Packets gehen aus dem LAN heraus per UDP-Broadcast an Port 9 — dadurch umgehen sie alle Probleme, die WLAN-Clients haben (Client-Isolation, App-Berechtigungen, VPN)
  • Geräteliste als JSON im Volume: exportieren, importieren, automatisch sichern

Features

Feature Wo
Gerät anlegen / löschen + bzw. 🗑 in der Geräteliste
Aufwecken Button pro Gerät
Export (JSON-Download) Menü ☰
Import (mischen oder ersetzen) Menü ☰
Backup-Scheduler (aus/stündlich/6h/täglich/wöchentlich) Menü ☰
Backups wiederherstellen / herunterladen / löschen Menü ☰
WebUI-Port Env-Variable PORT in der Compose

Vor jedem Import und jedem Restore wird automatisch ein Sicherheits-Backup erstellt. Backups liegen in /data/backups/, werden auf die eingestellte Anzahl gekürzt.

Ausrollen (Unraid / Docker)

Dateien liegen in /mnt/user/compose-files/wol-web/:

wol-web/
├── docker-compose.yml
├── Dockerfile
└── server.js

Die App selbst braucht nur diese drei Dateien. Daten landen in /mnt/user/appdata/wol-web/ (devices.json, settings.json, backups/).

Schritte:

  1. Die drei Dateien nach /mnt/user/compose-files/wol-web/ kopieren
  2. In der docker-compose.yml anpassen:
    • ipv4_address: freie feste IP aus deinem LAN-Subnetz (außerhalb des DHCP-Bereichs)
    • DEFAULT_BROADCAST: Broadcast deines Subnetzes (z. B. 172.16.0.255 bei 172.16.0.0/24)
    • PORT: WebUI-Port (Default 8080)
    • Volume-Pfad, falls deine appdata-Struktur anders aussieht
  3. Das macvlan-Netz br0 muss existieren (external) und dasselbe Subnetz wie dein LAN haben — auf Unraid ist das das eingestellte Docker-br0
  4. Start:
    docker compose -f /mnt/user/compose-files/wol-web/docker-compose.yml up -d --build
    
  5. WebUI öffnen: http://<container-ip>:<PORT> — am Handy als "Zum Startbildschirm hinzufügen" → App-Gefühl ohne App

Hinweis macvlan: Der Docker-Host selbst kann den Container über br0 standardmäßig nicht erreichen. WebUI also von einem anderen Gerät aus aufrufen (oder br0 auf IPvlan umstellen).

Konfiguration

Env-Variable Default Bedeutung
PORT 8080 Port der WebUI
DEFAULT_BROADCAST 255.255.255.255 Vorgabe für neue Geräte
DATA_DIR /data Ablage der Geräte/Settings/Backups

Warum ein eigener Container statt einer Handy-App?

Magic Packets müssen als Broadcast ins LAN des Ziels. Von einem Handy aus scheitert das oft an WLAN-Client-Isolation, fehlenden Netzwerk-Berechtigungen (Android 13+) oder VPNs — die App "sendet", aber es kommt nichts an. Der Container hängt mit eigener IP direkt im Ziel-Netz (Layer 2), Broadcasts erreichen also garantiert die Netzwerkkarten — auch die schlafender Geräte.


Windows-Sleep konfigurieren (damit WoL zuverlässig funktioniert)

Damit ein Windows-PC per WoL jedesmal aufwacht, muss er in reinem S3-Standby einschlafen und dort bleiben. Standardmäßig rutscht er nach unbeaufsichtigten Aufwachen (WoL!) in ungünstige Zustände ab. Fix auf dem Ziel-PC (Admin-PowerShell):

1. Automatischen Ruhezustand nach Standby abschalten

Windows kann aus dem Standby in den Ruhezustand (Hibernate) wechseln — in dem ist die Netzwerkkarte stromlos und WoL wirkt nicht:

powercfg /setacvalueindex SCHEME_CURRENT SUB_SLEEP HIBERNATEIDLE 0
powercfg /setactive SCHEME_CURRENT

(Manueller Ruhezustand über das Startmenü bleibt weiterhin möglich.)

2. Versteckten "unattended sleep timeout" einstellen

Nach einem WoL-Wake ohne Nutzer schläft Windows nach 120 Sekunden wieder ein — jetzt aber garantiert als reines S3:

powercfg /attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 -ATTRIB_HIDE
powercfg /setacvalueindex SCHEME_CURRENT SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 120
powercfg /setactive SCHEME_CURRENT

(0 = nach WoL-Wake nie automatisch wieder einschlafen, Wert in Sekunden sonst. Der normale "Standby nach X Min."-Timer bleibt von beidem unberührt.)

3. Kontrolle

powercfg /a                                      # S3 verfügbar? Modern Standby = Problemfall
powercfg /devicequery wake_armed                 # Netzwerkkarte muss gelistet sein
powercfg /requests                               # wer hält den PC wach? (nur relevant wenn verbunden!)

Typische Stolperfallen

  • Schnellstart (Fast Startup) muss aus sein — sonst wacht der PC aus "Shutdown" gar nicht per WoL (Systemsteuerung → Energieoptionen)
  • WoL nur aus Standby, nicht aus Shutdown: je nach BIOS unterstützt die Karte kein WoL aus S5 — dann Übernacht-Zustand "Standby" nutzen
  • Energy Efficient Ethernet / Green Ethernet im Netzwerktreiber deaktivieren, sonst verliert die Karte ihr Wake-Arming gerne nach ein bis zwei Zyklen
  • Remote-Software (RustDesk & Co.) hält Power-Requests, solange eine Session aktiv ist — das ist normal und kein Fehler. Diagnose immer im getrennten Zustand machen, sonst jagt man seinem eigenen Werkzeug hinterher

Der 3-Zyklen-Verifikationstest

  1. Per WebUI aufwecken → nicht an Tastatur/Maus → einige Minuten warten → PC darf nicht sofort wieder einschlafen (bzw. erst nach dem eingestellten unattended timeout)
  2. Manuell in Standby → per WebUI aufwecken → muss gehen
  3. Von selbst einschlafen lassen → per WebUI aufwecken → muss gehen

Laufen alle drei Zyklen, ist das Setup konsistent und fertig.


Keine externen Abhängigkeiten, keine Datenbank, ein JSON-File. Backup = den /data-Ordner sichern oder den eingebauten Export/Scheduler nutzen.