Letztens beim Durchstöbern der HomeBridge Plugins bin ich über die Erweiterung Homebridge-WoL gestoßen. Mit dieser ist es möglich, Windows-Computer, Laptops, MacBooks oder andere Geräte, die WoL unterstützen, mit der Home App deines iOS Devices zu starten. Außerdem kannst du den Status (an- oder ausgeschaltet) überwachen und das Gerät über eigene Kommandos herunterfahren. Ziemlich coole Sache, oder?
Okay, kein weltveränderndes Plugin. Aber gerade die Funktion zum herunterfahren finde ich doch sehr cool. Einfach von unterwegs mal kurz checken, ob der Windows 10 Rechner noch läuft und bei Bedarf mit einem einfachen Tippen auf der Apple Watch herunterfahren. Schon ziemlich praktisch 😉
Computer über HomeBridge WOL starten oder runterfahren
Vorbereitungen
Ganz allgemein brauchst du natürlich eine HomeBridge. Diese muss bzw. sollte in diesem Fall, auf einem Raspberry Pi laufen. Warum? Du musst das Samba Common Paket nachinstallieren, auf Containern (Docker) ist das nicht ohne weiteres möglich. Außerdem sollte dein Raspberry über LAN-Kabel und nicht über WLAN verbunden sein, da die Wake on Lan Pakete so zuverlässiger übermittelt werden.
Raspberry Pi
Auf deinem Raspberry brauchst du abgesehen von der Hombridge nur das oben angesprochenen Paket. Dieses liefert Funktionalitäten der Windows-RPC Schnittstelle, mit der wir die Kiste später runterfahren können.
sudo apt-get install samba-common
Falls die Performance deines Raspberry inzwischen unter den unzähligen Plugins leiden sollte, kannst du übrigens versuchen den Kartenleser zu übertakten 🔥.
Windows PC mit Homebridge starten
Hinweis: Wenn du nur deinen Fernsehr und nicht deinen Computer starten bzw. steuern willst, gibt es dafür i.d.R. besser Plugins direkt für den jeweiligen Hersteller, wie z.B. auch für meinen LG Fernseher 😉
Auf dem Windows PC gibt es einiges mehr zu tun. Hier musst du, um deinen Computer starten zu können, erstmal sicherstellen:
- Das der Windows 10 Schnellstart abgeschaltet ist
- Das Wake on Lan aktiviert ist ⏰
Wake on Lan ist ein kleines Netzwerkpaket, das von deinem Raspberry Pi zu deinem Computer geschickt wird und der Netzwerkkarte befiehlt, den Computer einzuschalten.
Folgendes muss du in Windows 10 bei deiner Netzwerkkarte konfigurieren, um WoL zu aktivieren:
- Öffne deinen Gerätemanager
- Suche deinen Netzwerkkarte
- Doppelklick auf deinen Netzwerkadapter
- Reiter “Erweitert” öffnen
- Folgende eigenschaften auf “Enabled” stellen:
- Wake on Pattern Match
- Wake on Magic Packet
- SWOI
- Danach oben im Reiter “Energieverwaltung”, alle 3 Haken setzten.
Windows PC über Homebridge herunterfahren
Okay, soweit so gut. Nun gehts an die vorbereitungen zum runterfahren, angefangen bei der Firewall.
Firewall Konfiguration
Prüfe zuerst mal den Status (an oder aus) indem du im Startmenü nach “Firewallstatus überprüfen” suchst.
Wenn diese bei dir deaktiviert ist, überspringe diesen Schritt. Falls nicht (so wie oben zu sehen) musst du eine neue Regel erstellen. Diese Regel wird benötigt, da Windows im Standard keine Ping und RPC-Anfragen an deinen Computer “durchlässt”. Für unseren Anwendungsfall müssen wir das aber, zumindest von der Hombridge aus, erlauben.
Ich empfehle dir, einfach eingehenden Netzwerkverkehr von deiner Homebridge generell zu vertrauen. (Wenn du weißt was du tust, kannst du alternativ nur die benötigten Protokolle aktivieren)
Öffne zuerst mal mit einem Klick auf “Erweiterte Einstellungen” die Firewallregeln.
Nun mache einen Rechtsklick auf “Eingehende Regeln” und dann Linksklick auf “Neue Regel…”
Wähle in dem Assistent für neue eingehende Regeln nun folgende Einstellungen:
- Regeltyp: Benutzerdefiniert
- Programm: Alle Programme
- Protokolle und Ports: Alle
- Bereich:
- lokale IP-Adressen = Beliebige IP-Adresse
- Remote Adressen = Diese IP-Adressen -> Hinzufügen -> IP-Adresse deiner Homebirdge (des Raspberry Pi)
- Aktion: Verbindung zulassen
- Profil: Alle 3 Haken rein oder den Netzwerktyp deines Heimnetzwerks auswählen
- Name: Von Homebridge alles erlauben
Reg-Key LocalAccountTokenFilterPolicy
Okay, fast geschafft. Nun müssen wir nur noch einen Registry Key anlegen, damit wir uns auch per RPC Anmelden können.
Öffne den Windows-Registrierungs-Editor indem du im Startmenü nach “Regedit” suchst und erstelle unter Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System einen neuen DWORD-Wert (32 Bit) mit dem Namen LocalAccountTokenFilterPolicy und dem Wert 1.
Homebridge Plugin installieren
Die Vorbereitungen sind abgeschlossen, nun zum spaßigen Teil. Installiere auf deiner Homebridge das Plugin homebridge-wol und schon kannst mit der Konfiguration losgehen:
npm install -g homebridge-wol
config.json zum herunterfahren und starten des Computers
Okay, nun gehts weiter mit dem Konfigurieren deiner Geräte. Das ganze kann man auch gut auf der GitHub-Seite des Plugins nachlesen, aber hier ist ein Ausschnitt meiner accessories der config.json für das Wake on Lan Plugin:
"accessories": [
{
"accessory": "NetworkDevice",
"name": "Simons Computer",
"mac": "4C:CC:6A:24:1B:4E",
"ip": "192.168.1.3",
"pingInterval": 45,
"wakeGraceTime": 30,
"shutdownGraceTime": 45,
"shutdownCommand": "net rpc shutdown --ipaddress 192.168.1.3 --user BENUTZERNAME%KENNWORT"
}
],
Die Mac- und IP-Adresse, sowie die Platzhalter BENUTZERNAME und KENNWORT musst du natürlich noch austauschen, aber ansonsten sollte das Snippet bei dir funktionieren und schon kannst du deinen Computer mit Siri oder der Home App herunterfahren 😉
Computer über Homebridge in Ruhezustand versetzen
Dem Computer in den Ruhezustand zu versetzen, indem man lediglich ein Siri Kommando sagt, ist ein traum. Aber leider ist dieser Traum auch nicht ohne weiteres zu realisieren, hat mich echt einiges an zeit und nerven gekostet… Aber für euch tu ich doch alles 😉Fangen wir einfach mal an:
SSH Server auf Windows 10 installieren
Damit das ganze bei dir funktioniert brauchst du ein aktuelles, aktuelles Windows 10 (mind. 1809). Wenn alle Updates bei dir installiert sind, kann es auch schon losgehen
Nun solltest du folgende Kommandos der Reihe nach ausführen:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Hier sollten nun 2 Einträge ausgegeben werden. OpenSSH.Client als Installed und OpenSSH.Server als NotPresent.
Das bedeutet, bei dir ist der SSH Server nicht installiert. Genau das holen wir jetzt nach.
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Hier etwas Geduld haben, die Installation des SSH Server Dienstes auf Windows 10 kann etwas dauern. Sobald Online : True ausgegeben wird, kannst du weitermachen.
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Das machen wir nur zur Kontrolle. Hier sollten nun wieder 2 Einträge ausgegeben werden, aber unter beiden sollte stehen Installed.
Okay, fast geschafft. Jetzt noch 3 Kommandos um den Dienst zu starten und den Autostart zu aktivieren 👇
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
Get-NetFirewallRule -Name *ssh*
Usernamen herausfinden
Da du die Powershell sowieso grade offen hast, schauen wir noch kurz nach wie dein Benutzername zum anmelden ist. Der kann sich nämlich von deinem angezeigten Namen unterscheiden. Nicht verwirren lassen, einfach das PowerShell kommando ausführen und die Ausgabe nach dem \ in ein Textdokument kopieren bzw. abtippen 👇
expect nachinstallieren
Auf deinem Raspberry brauchst du abgesehen von der Hombridge und dem oben angesprochenen Paket Homebridge WOL nur noch das excrept Paket. Einfach per SSH zur Homebridge verbinden und das Kommando ausführen:
sudo apt-get install expect
config.json zum aktivieren des Ruhezustands und starten des PCs
Okay, das Snippet hier (starten und Ruhezustand) unten ist dem zum herunterfahren und starten von oben natürlich sehr ähnlich. Aber in der 3ten Zeile von unten unterscheidet sich der Code deutlich.
"accessories": [
{
"accessory": "NetworkDevice",
"name": "Simons Computer",
"mac": "4C:CC:6A:24:1B:4E",
"ip": "192.168.1.3",
"pingInterval": 45,
"wakeGraceTime": 30,
"shutdownGraceTime": 45,
"shutdownCommand": "expect -c 'spawn ssh -o \"StrictHostKeyChecking=no\" BENUTZERNAME@192.168.1.3 \"shutdown -h\"; expect \"assword:\"; send \"KENNWORT\\r\"; interact'"
}
],
Die Mac- und IP-Adresse, sowie die Platzhalter BENUTZERNAME und KENNWORT musst du natürlich noch austauschen!
Computer stattdessen in den Energiesparmodus versetzen
Wenn lieber in den Energiesparmodus als in den Ruhezustand möchtest, dann musst du folgendes tun:
Zuerst musst du den Ruhezustand (hibernation) auf deinem Computer deaktivieren. Führe dazu den folgenden Code in einer als Administrator gestarteten Powershell auf deinem Windows 10 Computer aus.
powercfg -hibernate off
Okay, fast geschafft. Nun musst du in dem Snippet von oben für die Config.json nur noch die dritte Zeile wie folgt ersetzen:
"shutdownCommand": "expect -c 'spawn ssh -o \"StrictHostKeyChecking=no\" BENUTZERNAME@192.168.1.3 \"rundll32.exe powrprof.dll,SetSuspendState 0,1,0\"; expect \"assword:\"; send \"KENNWORT\\r\"; interact'"
Wenn du es bis hierher geschafft hast, vielen Dank für dein Interesse und ich hoffe dir hat der Artikel gefallen! Bei Fragen oder Anregungen gerne ein Kommentar dalassen 🙏
Mir fehlt wohl nur noch ein kleiner Schritt:-). Wie bekomme ich auf dem Homebridge (Synology-Docker), das “expect” installiert….? Mit dem Satz “Einfach per SSH zur Homebridge verbinden und das Kommando ausführen” komme ich nicht klar.
Meine Versuche:
Homebride-Konsole kennt den Befehl expect noch nicht (klar); Rest funktioniert jetzt schon (also das aufwecken des Rechners).
P.S.: Den Key “ip” gibt es im homebridge-WOL nicht mehr. Heißt jetzt “host”:-). Die Beispiele oben sind noch alle mit “ip”.
Ganz oben bei Vorbereitung steht, dass das bei Docker nicht ohne Weiteres geht… Sorry, da kenne ich leider auch keine Möglichkeit 🙁
Dem Homebridge except beizubringen, war eigentlich nicht schwer: Habe im Homebridge Startskript folgende Zeile hinzugefügt:
apk add –no-cache expect
Habe über die homebridge-Konsole es dann auch geschafft, den Zielrechner in den Ruhezustand zu versetzen:
bash-5.1# expect
expect1.1> spawn ssh -o StrictHostKeyChecking=no mediacenter@192.168.10.102 “rundll32.exe powrprof.dll,SetSuspendState 0, 1, 0” “password:”;
spawn ssh -o StrictHostKeyChecking=no mediacenter@192.168.10.102 rundll32.exe powrprof.dll,SetSuspendState 0,1,0 password:
18210
expect1.2> send “xxx\r”;
expect1.3> interact
mediacenter@192.168.10.102‘s password:
Ich musste zwar STRG+C dann drücken, musste aber das Password gar nicht nochmal eintippen. Der Rechner ist in den Ruhezustand heruntergefahren.
Dann nochmal mit except getestet:
expect -c ‘spawn ssh -o StrictHostKeyChecking=no mediacenter@192.168.10.102 “rundll32.exe powrprof.dll,SetSuspendState 0, 1, 0”; expect “password:”; send “xxx\r”; interact’
Das sollte es gewesen sein:-). Die Konfig-Zeile sieht somit so aus:
“shutdownCommand”: “expect -c ‘spawn ssh -o StrictHostKeyChecking=no mediacenter@192.168.10.102 \”rundll32.exe powrprof.dll,SetSuspendState 0, 1, 0\”; expect \”password:\”; send \”xxx\\r\”; interact'”
P.S.: Funktioniert übrigens (jedenfalls bei mir;-)) nicht mit “assword”:-).
ZWEI KORRIGIERUNGEN meines letzten Posts…: Die Konfig-Zeile sieht nun so aus (durch Copy/Pasten waren falsche Hochkommas und Anführungszeichen):
“shutdownCommand”: “expect -c ‘spawn ssh -o StrictHostKeyChecking=no mediacenter@192.168.10.102 \”rundll32.exe powrprof.dll,SetSuspendState 0, 1, 0\”; expect \”password:\”; send \”xxx\\r\”; interact'”
UND: Obwohl in der Homebridge-Konsole der Befehl (2. KORREKTUR; auch hier jetzt mit richtigen Hochkommas/Anführungszeichen) …
expect -c ‘spawn ssh -o StrictHostKeyChecking=no mediacenter@192.168.10.102 “rundll32.exe powrprof.dll,SetSuspendState 0, 1, 0”; expect “password:”; send “xxx\r”; interact’
… dazu führt, dass mein PC in den Ruhezustand geht, klappt das über das homebridge-wol-PlugIn nicht….
Habe dann mal folgende zwei Variationen in der Konsole ausprobiert:
KLAPPT:
expect -c ‘spawn ssh -o StrictHostKeyChecking=no mediacenter@192.168.10.102 “shutdown -h”; expect “password:”; send “xxx\r”; interact’
KLAPPT AUCH (hierfür hatte ich die Schritte der Anleitung https://github.com/AlexGustafsson/homebridge-wol/wiki/Running-on-Synology-Docker-and-turn-Windows-10-on-off-using-SSH-and-Samba durchgeführt):
expect -c ‘spawn ssh -o StrictHostKeyChecking=no -i /homebridge/id_rsa mediacenter@192.168.10.102 “shutdown -h”; interact’
ABER… Über das homebridge-WOL-PlugIn geht es nicht… PC fährt nicht runter… Im Log steht nur
[NetworkDevice] Attempting to shut down the device using “expect”
@Simon: Hast du evtl. noch eine Idee?
Ich vermute mal, es liegt an dem Docker selber oder wie zuvor erwähnt an einer Voraussetzung, die nicht aufgerufen werden kann (Entweder samba Common oder expect)
Ich habe das eben mal alle Schritte (im Beitrag) befolgt und für ein neues Gerät eingerichtet → Klappt sofort.
Du könntest noch mal versuchen, den Log-Level auf Info zu stellen:
Wenn du sowas hier bekommst, fehlt eine Voraussetzung (War zumindest bei mir so):
ACHTUNG: Die Hochkommas / Anführungszeichen werden beim Copy/Pasten hier in die Kommentare nicht korrekt übernommen… Führt man die Befehle so in der Konsole aus, kommen teils irreführende Rückmeldungen wie falsches Passwort…
ALSO beim ausprobieren meiner Beispiele immer erst manuell dann nochmal die Hochkommas und Anführungszeichen neu setzen!
Sicher, dass da KEIN Tippfehler ist…:
password klingt plausibler als assword, aber irgendwie steht es bei mir so drinnen 😀
gegenfrage: Läuft es denn bei dir so, oder mit Password?
Nö, habe es nocht nicht erfolgreich zum laufen gebracht. Weder mit assword noch mit password;-). Ich muss aber erstmal meine Hausaufgaben (Tests etc.) machen, bevor ich nach Hilfe rufe;-).
Nochmal hierzu, ja das ist kein Tippfehler, den assword funktioniert für Password und password.
password jedoch nicht
Wie ist es möglich, dass Plugin über eine Synology NAS zu nutzen?
Ich habe die Möglichkeit ein Raspberry Pi zu nutzen nicht.
LG und Danke schon mal im voraus
Hi Marco,
entschuldige die späte Antwort, war zuerst gesundheitlich, dann beruflich, leider verhindert.
Ich hatte das damals mit meinem QNAP-Container der Homebridge versucht, aber bedauerlicherweise ohne erfolgt. Wenn du nicht selber einen eigenen Container schreiben willst, würde ich das ehrlich gesagt lassen, da hier einige Voraussetzungen fehlen.
Danke für die ausführliche Anleitung. Hast du evtl. eine Idee warum ich keinen Button in meinem Homekit sehe?
Hi Markus,
entschuldige die späte Antwort, war zuerst gesundheitlich, dann beruflich, leider verhindert.
Falls du keinen Schalter für das WOL-Gerät in HK siehst, solltest du einen Blick in die Homebridge-Logs werfen 😉
Hallo, erstmal danke für das gute Tutorial.
Leider habe ich ein Problem mit dem Herunterfahren des PCs das geht bei mir nicht ich habe alles exakt nach der Anleitung durchgeführt.
“shutdownCommand”: “net rpc shutdown –ipaddress 192.168.1.3 –user BENUTZERNAME%KENNWORT”
Im Command wird ein Kennwort für den Benutzer verlangt jedoch habe ich keines vergeben und ich bin der einzige Nutzer auf diesem PC muss ich dann etwas bestimmtes beachten?
Oder kann es sein, dass Norton 360 diese Funktion blockiert?
Danke für die Hilfe.
Hi Norman,
danke für deine Frage 👍
Zuerst mal kannst du das Kennwort einfach weg lassen und das Prozent-Zeichen ebenfalls (wenn ich mich da nicht irre 😉 )
Norton360 kann das durchaus blockieren, der Port der Firewall muss eben zumindest für die IP deines Raspberry Pi alles zulassen. Evtl. musst du sowohl die Windows Firewall als auch die Norton eigene FW so einstellen. Testweise könntest du Norton auch abschalten, dadurch wärst du zumindest sicher, dass es daran liegt 😀
Sag gerne wieder bescheid ob’s klappt!
Beste Grüße
Simon
Danke für die Antwort.
Habe es getestet. Die Konfiguration so angepasst wie im Beispiel und mein Password einfach weg gelassen. Außerdem habe ich bei den normalen Firewall Regeln die Homebridge hinzugefügt sowie auch bei Norton im eigenen Firewall Manager. Aber alles ohne Erfolg. Dann habe ich in Norton alles was mit dem Thema Firewall zu tun hatte deaktiviert, hat aber leider auch nichts gebracht.
Kann es auch mit dem net rpc zusammen hängen? (Das DWORD hab ich schon gesetzt.)
Gruß Norman