Wake On LAN mit FHEM
Kann ein Rechner im Netzwerk Wake on Lan so können wir ihn ganz einfach auch mit FHEM aufwecken. Wir brauchen die MAC Adresse und die IP Adresse des Rechners. Die IP Adresse wird von dem WOL Gerät in FHEM verwendet, um mit Ping zu prüfen, ob der Rechner im Netzwerk erreichbar ist. Entsprechend wird der Status auf on oder off gesetzt. Ich verwende in meinem Beispiel die UDP Methode. Für diese Methode muss nichts weiter installiert werden. In der Commandref sind noch die Methoden mit den Tools ether-wake oder wakeonlan beschrieben, dafür müssen die entsprechenden Tools installiert werden.
define <Rechnername> WOL xx:xx:xx:xx:xx:xx 192.168.x.x UDP
Generell ist es sinnvoll zu konfigurieren, in welches Netzwerk das UDP Broadcast Packet versendet wird. Dazu muss die Broadcast Adresse konfiguriert werden. Dies geschieht mit dem entsprechendem Attribut:
attr <Rechnername> useUdpBroadcast 192.168.x.255
Mit einem Druck auf on (oder set <Rechnername> on) sollte den Rechner aufwecken. Geschieht das nicht, ist der Rechner nicht richtig auf WOL konfiguriert. Man hat leider kein Feedback von der Weboberfläche, man "spürt" nicht ob man gedrückt hat oder nicht.Sollte nach ca. 1 min der Status des eingeschalteten Rechners nicht auf on aktualisiert werden, ist zu prüfen ob der Rechner auf Ping reagiert, falls nicht muss eventuell noch die Windows Firewall konfiguriert werden (siehe weiter unten).
Um den Rechner auch ausschalten zu können, müssen wir ihn natürlich ordentlich herunterfahren. Für einen Windows Computer müssen wir folgende Vorarbeit leisten.
Benutzerverwaltung unter Windows
Um shutdown von der übrigen Verwaltung von Windows sauber zu trennen und mit maximaler Sicherheit für das System zu arbeiten, legen wir einen separaten Benutzer an.Hinweis: Wer das alles kurz mit ein paar Zeilen Powershell Script machen will, sollte hier schauen.
Die Einrichtung neuer Benutzer ist auf jedem Windows System etwas anders zu finden, dass hängt leider nicht nur von der konkreten Version sondern auch persönlicher Konfiguration ab. Zumindest seit Windows 7 geht es einfach auf jedem deutschen System mit der Eingabe des Wortes "Benutzerkonten" im Suchfeld.
Generell führt uns die "Windows Taste" auf der Tastatur ins Suchfeld wenn wir uns auf dem Desktop befinden. Mit der Maus geht es so:
Windows 7 und Server 2008 - Startknopf ( -> Startmenü) und dann einfach tippen
Windows 8 und Server 2012 - Windows Knopf ( -> Kacheloberfläche) und dann einfach tippen
Wer sich manuell durch hangeln will, der muss das in etwa so tun:
Systemsteuerung --> Benutzerkonten --> Benutzerkonten verwalten
Leider ist das von Windows zu Windows Version immer wieder etwas verschieden.
Hier erstellen wir ein neues Konto z.B. den "UserShutdown" als Standardbenutzer. Da wir später den Account im Klartext in der FHEM Konfiguration eintragen, bekommt dieser Benutzer nur minimale Rechte. Ich begnüge mich mit Standardbenutzer und einem zusätzlichem Recht. Man könnte ihm eventuell weitere Rechte entziehen.
Wir müssen ein sicheres Kennwort vergeben. Sichere Passwörter bestehen aus Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen. Sonderzeichen sollte man sorgsam verwenden, es gibt nicht alle in jeder Sprache.
Beispiel: P@ssw0rd
Dieser Benutzer braucht jetzt noch entsprechende Rechte. Dazu öffnen wir die lokale Sicherheitsrichtlinie. Das geht mit dem Begriff "secpol.msc" im Suchfeld (siehe oben). Bei Windows 8 ist das allerdings etwas umständlich, da wird die App nicht sofort sondern erst ganz links im Bing Fenster angezeigt. Alternativ kann man gpedit.msc eingeben und verwenden, die Sicherheitseinstellungen sind eine Untermenge von Gpedit.
Der Benutzer bekommt das Recht das System herunterzufahren. Weitere Rechte sind nicht notwendig.
Soll der am Windows Computer angemeldete Benutzer eine Nachricht bekommen, muss ein Dienst aktiviert werden. Dazu tippen wir einfach services.msc im Suchfeld ein (siehe oben). Der Dienst Remoteregistrierung wird auf automatisch gestellt und gestartet. Für die Remote Shutdown Funktion alleine ist es nicht notwendig.
Der Dienst Remoteregistrierung ist wohl auch für den Eintrag des Shutdowngrundes im Eventlog zuständig.
Will man den Remote Shutdown von einem Windows System einleiten, müssen eventuell noch folgende Dienste aktiviert sein:
- Windows-Remoteverwaltung
- Windows-Verwaltungsinstrumentation
Firewalleinstellung unter Windows
Wenn wir Firewallregeln ändern müssen, empfehle ich die direkte Methode über Windows Firewall: Wir tippen im Suchfeld (langsam sollte jeder wissen wie es geht) firewall ein und öffnen das Tool "Windows-Firewall mit erweiterter Sicherheit".Hier klicken wir auf Eingehende Regeln, es kann etwas dauern bis die Regeln angezeigt werden.
Für die Überwachung muss Ping zulässig sein, dafür müssen wir die beiden Regeln "Datei- und Druckfreigabe (Echoanforderung -ICMPvx eingehend) aktivieren. Sicher reicht uns v4, aber ich habe beide aktiviert.
Beispiel: Windows Server 2012 |
Für den Shutdownbefehl von Linux muss offenbar die Standardeinstellung der Firewall nicht angepasst werden, falls wenigstens Datei und Druckfreigabe aktiviert ist. Ansonsten je nach Windows Version überprüfen, dass SMB eingehend (Port 445) aktiviert ist. Für den Shutdown Befehl von einem Windows System muss unter Umständen mehr aktiviert werden:
Technet Artikel
Mit Powershell cmdlet Stop-Computer funktioniert es bei mir auch ohne.
Windows Shutdown mit FHEM
Das hier gezeigte Beispiel geht von FHEM auf einem Linux System aus.Voraussetzung für den "net" Befehl unter Linux ist das Packet samba-common-bin. Ist bisher kein Samba installiert, muss jetzt zumindest dieses Packet installiert werden:
sudo apt-get install samba-common-bin
Wenn Windows ein remote shutdown zulässt, können wir mit dem Attribute shutdownCmd den Befehl eintragen. Ein Druck auf off lässt dann den PC innerhalb einer Minute herunterfahren.
attr <Rechnername> shutdownCmd "net rpc shutdown -I <Rechnername> -U UserShutdown%P@ssw0rd"
Man kann mit dem attr interval noch das Interval für die Ping Überprüfung konfigurieren. Als Standard ist die Ping Überprüfung aus und man kann mit set <Rechnername> refresh den Zustand aktualisieren.
Ein Linux System remote herunterfahren
Der shutdown Befehl für ein Linux System lässt sich am einfachsten per ssh realisieren. Das habe ich in dem Artikel beschrieben:
Per ssh Remote Befehle direkt ausführen
Die Sache mit der Broadcast Adresse
Bei Geräten mit mehreren Netzwerkanschlüssen ist es möglich, dass das Magic Packet ins falsche Netzwerk gesendet wird und damit beim Empfänger gar nicht ankommt. Mit dem Route Befehl kann man sich anschauen, was passieren würde:IPv4-Routentabelle
===========================================================================
Aktive Routen:
Netzwerkziel Netzwerkmaske Gateway Schnittstelle Metrik
0.0.0.0 0.0.0.0 192.168.178.1 192.168.178.54 25
127.0.0.0 255.0.0.0 Auf Verbindung 127.0.0.1 331
127.0.0.1 255.255.255.255 Auf Verbindung 127.0.0.1 331
127.255.255.255 255.255.255.255 Auf Verbindung 127.0.0.1 331
172.28.130.240 255.255.255.240 Auf Verbindung 172.28.130.241 271
172.28.130.241 255.255.255.255 Auf Verbindung 172.28.130.241 271
172.28.130.255 255.255.255.255 Auf Verbindung 172.28.130.241 271
192.168.178.0 255.255.255.0 Auf Verbindung 192.168.178.54 281
192.168.178.54 255.255.255.255 Auf Verbindung 192.168.178.54 281
192.168.178.255 255.255.255.255 Auf Verbindung 192.168.178.54 281
224.0.0.0 240.0.0.0 Auf Verbindung 127.0.0.1 331
224.0.0.0 240.0.0.0 Auf Verbindung 192.168.178.54 281
224.0.0.0 240.0.0.0 Auf Verbindung 172.28.130.241 271
255.255.255.255 255.255.255.255 Auf Verbindung 127.0.0.1 331
255.255.255.255 255.255.255.255 Auf Verbindung 192.168.178.54 281
255.255.255.255 255.255.255.255 Auf Verbindung 172.28.130.241 271
===========================================================================
Ein Packet für das Netzwerk 192.168.178.x an die Broadcast Adresse 255.255.255.255 versendet würde hier im falschen Subnetz landen. Das Packet muss also an die richtige Broadcast Adresse 192.168.178.255 versendet werden. Die Tools arbeiten da unterschiedlich, blöd ist wenn man die Broadcast Adresse nicht angeben kann.
Danke für die Beschreibung, klappt einwandfrei.
AntwortenLöschendanke für die info :)
AntwortenLöschenmfg
thomas von computer 22
Hi Otto, Danke für die Anleitung, funktioniert super!
AntwortenLöschenbekomme aber folgendes im Log beim Shutdown:
2017.09.21 17:19:54 3: [DEVICE] shutdownCmd: "net rpc shutdown -I SERVERNAME -U Benutzer%Password" executed
mkdir failed on directory /var/run/samba/msg.lock: Permission denied
Shutdown of remote machine succeeded
ne Idee wie ich das loswerde?
Dieser Kommentar wurde vom Autor entfernt.
AntwortenLöschenHi Otto,
AntwortenLöschenhast du ne Idee wo FHEM oder dessen Hardware (Raspberry) die IP bezogen auf den shutdown Befehl speichert? Ich hab den Befehl schon ne Weile erfolgreich im Einsatz, nun aber fürs ganze Netzwerk einen neuen IP Bereich vergeben. im WOL ist die neue IP definiert, trotzdem will er über die alte IP runterfahren, was natürlich nicht mehr klappt.
Hallo Achim, wie hast Du den shutdown Befehl denn definiert? Mit Name oder IP? Wenn IP musst Du die natürlich tauschen, wenn Name dann ist noch irgendeine Namensauflösung aktiv. DNS Server zentral oder Hosts Datei auf dem Pi.
LöschenGruß Otto
Hi Otto,
AntwortenLöschenbisher mit dem Namen hab nun auf die IP gewechselt. Zentral hat alles gepasst, die Hosts Datei muss ich mir Mal anschauen ;-) danke dir
Hi, Du musst bedenken die Namensauflösung vom Pi aus zu testen, also im Terminal. Der löst den Namen offenbar falsch auf. Kann ich aber nur mutmaßen.
LöschenGruß Otto
Hi Otto,
AntwortenLöschenseit ein paar Tagen (FHEM Update vom Dienstag?? Windows Patchday) geht des remote herunterfahren nicht mehr. Führe ich den Befehl direkt in der Konsole mit --debuglevel=10 erhalte ich unter anderem:
Connecting to 192.168.222.26 at port 445
Connecting to 192.168.222.26 at port 139
Connecting to 192.168.222.26 at port 139
Could not connect to server 192.168.222.26
Connection failed: NT_STATUS_IO_TIMEOUT
ping auf 192.168.222.26 geht in der Konsole ohne Probleme.
Hast du ne Idee wo ich mit der Fehlersuche beginnen könnte?
Grüße aus DD
Achim
Das sind alles Ports für SMB / Datei und Druck. Meine Vermutung: die Firewallregeln pass nicht mehr. Hatte ich ab und zu nach Updates oder anderen "Bewegungen am System" - meist war dann das Netzwerk neu erkannt worden. Damit war das neue Netzwerk Kategorie öffentlich und nicht privat. Suche nach Netzwerkstatus in den Einstellungen.
LöschenGruß Otto
Hmm, leider ist es das wohl nicht, oder nicht nur. Mit Firewall: Could not connect to server 192.168.222.26
LöschenConnection failed: NT_STATUS_IO_TIMEOUT
und mit abgeschalteter Firewall:
Could not connect to server 192.168.222.26
Connection failed: NT_STATUS_CONNECTION_REFUSED
Naja das erste klingt nach Firewall, das zweite nach fehlenden Rechten am Windows Rechner. Da Windows 10 mittlerweile ssh kann: Umstellen auf ssh? Damit einheitliches Interface mit anderen Linux Systemen?
LöschenGruß Otto
An SSH hab ich mich gestern auch kurz versucht, dann aber erstmal verworfen, da ich es auf Anhieb nicht geschafft hab mit Windows-SSH-Bordmitteln ein RSA-Key Zugang einzurichten :-)
AntwortenLöschenGerade teste ich mit Telnet, Port 139 ist offen aber 445 nicht. Immerhin schonmal etwas Besserung.
SSH wäre aber eine Lösung für die Zukunft
Auch nicht mit meinem schönen Artikel? ;)
Löschenhttps://heinz-otto.blogspot.com/2019/05/windows-von-fhem-aus-steuern.html
Na den hatte ich vorhin entdeckt, nur musste ich dann los. Das geh ich jetzt gleich nochmal mit nem neuen Windows Nutzer usw frisch an mal sehen wann und wo es dann hängt :-)
LöschenKurze Info: Die Anleitung klappt auch heute noch mit Win 11 und Debian bullseye - Super gemacht und vielen Dank!
AntwortenLöschen