Script Wake on LAN für Gladys 4?

Hallo,

In Gladys 3 konnten wir Java-Skripte erstellen, was sehr praktisch war, da ich meinen PC starten und herunterfahren konnte.
Ich hatte 2 Geräte erstellt. Eines führte mein Bash-Boot-Skript aus und eines führte mein Bash-Shutdown-Skript aus, das sich auf meinem Raspberry befand. (z. B. Gerät1 mit der Kennung « sh /home/pi/script/shutdown.sh » und Gerät2 mit der Kennung « sh /home/pi/script/boot.sh »)
Ich hatte auch ein Skript erstellt, das bei meiner Abfahrt und Rückkehr nach Hause ausgeführt wurde:

let PcOnDevice = {
devicetype: 4,
value: 1

};

let PcOffDevice = {
devicetype: 3,
value: 1

};

gladys.deviceType.exec(PcOffDevice) ;

setTimeout(function(){
gladys.deviceType.exec(PcOnDevice);
},2000) ;

Gibt es die Möglichkeit, das Gleiche unter Gladys 4 zu tun? Wenn ja, wie? Wenn nicht, ist es geplant, Skripte auszuführen oder ist eine WOL-Integration geplant?
Ich habe in anderen Beiträgen gesehen, dass es bereits einige Diskussionen darüber gab, Skripte auszuführen, aber keine echte Antwort.

Vielen Dank im Voraus für Ihre Antworten.

In diesem Zustand ist es nicht möglich, Skripte auszuführen… Aber du kannst einen Mini-Webserver erstellen, der dein Skript auslöst. Dann musst du nur einen HTTP-Aufruf machen und schon ist es erledigt!

Schau dir das hier an, das könnte interessant für dich sein https://jacobsalmela.com/2020/09/15/introducing-sampo-a-bash-api-server-that-runs-your-shell-scripts/

Ha, danke für diese Lösung. Ich werde mir das mal ansehen.
Danke, dass du einen Link gepostet hast, denn ich habe keine Ahnung davon, also wird mir das total helfen!

Hallo, zögere nicht, ein kleines Tutorial zu machen, wenn du es schaffst, was du willst, das könnte anderen helfen :wink:

Aber sicher.
Aber es sieht schlecht aus, denn ich verstehe SAMPO überhaupt nicht, also muss ich etwas finden, das ich ein bisschen besser verstehe, aber das ist schwer, wenn man keine Ahnung hat…

Ich kenne dieses Projekt nicht besonders, es gibt sicherlich ein anderes, das besser geeignet und einfacher zu verwenden ist.

Die Idee ist, einen Web-API-Server zu haben, der es dir ermöglicht, ein Skript einfach per Aufruf auszuführen. Zum Beispiel löst http://meine-ip/mein-skript1 ein bestimmtes Bash-Skript aus.

Okay, es ist 3 Uhr morgens, aber ich habe endlich eine Lösung.
Falls ihr eine einfachere Lösung habt, bin ich offen dafür!
(Gladys läuft auf einem Raspberry Pi)

AM RASPBERRY PI:
################

  1. Raspberry Pi aktualisieren:

sudo apt-get update
sudo apt-get upgrade

  1. Apache installieren und den Port ändern, damit er nicht denselben wie Gladys verwendet:

sudo apt-get install apache2 -y
sudo nano /etc/apache2/ports.conf
→ Zeile « Listen 80 » in « Listen 90 » ändern (ich habe Port 90 verwendet, aber ihr könnt den Port eurer Wahl nehmen)

  1. PHP installieren:

sudo apt-get install php -y

  1. Apache-Dienst beim Systemstart aktivieren und Apache-Dienst starten:

sudo systemctl enable apache2.service
sudo systemctl start apache2.service

  1. Dienste zum Herunterfahren und Starten des entfernten PCs installieren:

sudo apt-get install samba-common -y
sudo apt-get install samba-common-bin
sudo apt-get install etherwake -y

  1. PHP-Skriptdatei zum Starten des entfernten PCs über Wake-On-Lan erstellen:

sudo nano /var/www/html/boot.php

  1. Folgenden Code in diese Datei einfügen:
<?php exec("etherwake -D MACADRESSEDUPC"); ?>

(Ersetzt MACADRESSEDUPC durch die MAC-Adresse des entfernten PCs)

  1. Berechtigungen hinzufügen:

sudo chmod 700 /var/www/html/boot.php
sudo chown www-data:www-data /var/www/html/boot.php

AM ENTFERNTEN WINDOWS-PC:
############################

Startet regedit und geht zu folgendem Pfad:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
Fügt einen neuen DWORD32-Wert namens « LocalAccountTokenFilterPolicy » hinzu und setzt den Wert auf « 1 », falls dieser nicht existiert.

Startet Services.msc, setzt den Dienst « Remoteregistrierung » auf « Automatisch » und startet ihn.

Im Windows-Firewall « Windows-Verwaltungsinfrastruktur (WMI) » erlauben (persönlich musste ich das nicht tun)

IN GLADYS4:
#############

Erstellt eine neue Szene.
Als Auslöser wählt ihr den, der euch gefällt. (Ich habe « Rückkehr nach Hause » gewählt, sodass mein PC startet, wenn ich nach Hause komme.)
Als Aktion « HTTP-Anfrage senden » auswählen, Methode = « POST » und URL = « http://IPDURASPBERRY:90/boot.php ». Den Rest leer lassen und die Szene speichern.
(Ersetzt IPDURASPBERRY durch die IP-Adresse des Raspberry Pi)

Ihr könnt die Funktion testen, indem ihr auf den « Start »-Button in der Szene drückt, die ihr gerade erstellt habt.
Um ein Herunterfahren unter Windows abzubrechen, öffnet ein CMD und gebt « shutdown -a » ein.

.
.
.
.
.
Für das Herunterfahren des entfernten PCs wiederholt ihr die Schritte 6 bis 8 wie folgt:
6) PHP-Skriptdatei zum Herunterfahren des entfernten PCs erstellen:

sudo nano /var/www/html/shutdown.php

  1. Folgenden Code in diese Datei einfügen:
<?php exec("net rpc shutdown -f -I IPDUPCDISTANT -U UTILISATEUR%MOTDEPASSE"); ?>

(Ersetzt IPDUPCDISTANT durch die IP-Adresse des entfernten PCs, UTILISATEUR durch euren Benutzernamen des entfernten PCs und MOTDEPASSE durch das Passwort des Benutzers des entfernten PCs)

  1. Berechtigungen hinzufügen:

sudo chmod 700 /var/www/html/shutdown.php
sudo chown www-data:www-data /var/www/html/shutdown.php

Natürlich müsst ihr noch eine Szene in Gladys erstellen, wie beim Booten, aber als Auslöser z. B. « Verlassen des Hauses » wählen und als Aktion « HTTP-Anfrage senden » auswählen, Methode = « POST » und URL = « http://IPDURASPBERRY:90/shutdown.php ». Den Rest leer lassen und die Szene speichern.

Top, wenn du eine Lösung gefunden hast!

Falls nicht, eine andere Lösung wäre, über die MQTT-Integration zu gehen und dir ein kleines Skript (in welcher Sprache auch immer: Node.js, Python, egal) zu schreiben, das auf ein MQTT-Topic hört und auf den Empfang einer MQTT-Nachricht auf diesem Topic reagiert.

Die MQTT-API von Gladys ist in dieser Dokumentation beschrieben:

Ich habe auch ein Video dazu gemacht:

Aber deine Lösung funktioniert super gut!! :smiley:

Achtung, zwei Dinge in Sachen Sicherheit

Du erteilst anderen Benutzern Rechte auf die Datei. Ein chown www-data und 700 auf die Datei sollten ausreichen :slight_smile:

Das PHP-exec ist auch nicht gerade ungefährlich, besonders wenn dein Gladys im LAN erreichbar ist :stuck_out_tongue:

Du könntest im vhost auch einfach Require ip 127.0.0.1 hinzufügen, um nur Gladys zu erlauben.

Ich unterstütze @Totof beim Sicherheitsaspekt

Danke Leute für die Hilfe!

Ich habe die Berechtigungen in dem kleinen Tutorial oben und auf meinem Raspberry auf 701 und 700 geändert. 701 für boot.php, sonst funktioniert es nicht.

->Ich werde versuchen, das diese Woche zu machen, wenn ich Zeit habe.

Ich sollte auch mal die MQTT-Integration anschauen, aber das hat mich ein bisschen abgeschreckt. Vielleicht beruhigt mich das Tutorial und wer weiß, vielleicht wage ich mich da rein, wenn ich 2-3 Tage Urlaub habe.

Ich melde mich, wenn ich es schaffe, dieses VHOST-Ding zu machen.

Hallo,

Ich kann dir eine Lösung in Node.js vorschlagen, die ich selbst verwende. Es handelt sich um eine API, die ich schnell entwickelt habe, um meine Bedürfnisse neben Gladys zu ergänzen.

Falls du interessiert bist, habe ich ein öffentliches Repo erstellt: GitHub - JeuFore/control-node · GitHub
Es gibt auch ein Docker Hub: https://hub.docker.com/r/jeufore/control-node

Kurz gesagt, es gibt viele Dinge, die für dich vielleicht nicht nützlich sind, aber du kannst das Repo durchsehen oder es in einem Container ausführen.

Unter anderem gibt es:

  • Eine API
  • Alexa-Unterstützung
  • MQTT-Unterstützung
  • Unterstützung für verschiedene Geräte

Für die reine Nutzung von WOL, musst du eine Datei device.js erstellen

const WolDevice = require('../utils/WolDevice');

module.exports = [
    {
        deviceName: 'Pc', // Beispiel
        deviceMQTTName: 'pc', // Beispiel
        deviceRoom: 'server', // Beispiel
        deviceParam: { mac: '00:00:00:00:00:00' },
        deviceInstance: WolDevice,
        features: [
            'state'
        ],
        children: []
    }
]

Dann musst du ein MQTT-Gerät in gladys erstellen


Und eine Funktion hinzufügen

Schließlich kannst du einen Docker-Container starten:

docker run -d \
--network=host \
--name control-node \
-e MQTT_HOST=HOST \
-e MQTT_USER=USER \
-e MQTT_PASSWORD=PASSWORD \
-v ./device.js:/usr/src/app/const/device.js \
jeufore/control-node

Ich hoffe, das hilft einigen Leuten :slight_smile:

701 =  -rwx-----x

Also Ausführung für alle

Hast du den folgenden Befehl ausgeführt?

chown www-data:www-data boot.php 

Für die IP-Anforderung im vhost solltest du in diesem Verzeichnis haben: /etc/apache2/sites-enabled/ eine Art Datei namens default und du hast die Syntax unten :slight_smile:

Äh, nein, überhaupt nicht. Was macht das genau? (Ich habe keine Ahnung, ich wiederhole mich)

Du hast mir gerade 2 Tage Recherche erspart :smiling_face_with_three_hearts:

www-data ist der Benutzer, der eine Website ausführt. Der Befehl chown ermöglicht es, die Datei auf Eigentümer:Gruppe www-data zu ändern.

Zum Beispiel diese HTML-Datei

-rw-r--r-- 1 root root 10701 Nov 21  2020 index.html

Sie ist root:root mit den Rechten 644, daher kann „other“ sie lesen und der Webserver kann sie anzeigen

Wenn ich sie auf 640 ändere, kann die Datei nicht angezeigt werden

-rw-r----- 1 root root 10701 Nov 21  2020 index.html

indem ich chown ausführe

chown www-data:www-data index.html

Hier ist das Ergebnis

-rw-r----- 1 www-data www-data 10701 Nov 21  2020 index.html

In diesem Fall wird sie angezeigt :slight_smile:

Ich könnte dir bei der IP-Anforderung helfen, falls es nicht klappt ^^

Ah okay.
Danke für die kleine Lektion, jetzt ist es klarer so!
Tatsächlich ist es auf Sicherheitsebene viel besser.

Für das IP-Require reicht das, was du schon weiter oben angegeben hast.
Nochmals danke @Totof

Bearbeitung 01/2022:
Da das Shutdown-Skript aus unerfindlichen Gründen schon seit einiger Zeit nicht mehr funktioniert, habe ich mich damit beschäftigt und festgestellt, dass der Befehl « net » (nützlich zum Herunterfahren des Windows-PCs vom Raspberry aus) nicht mehr erkannt wird.
net: command not found

Ich musste daher samba-common-bin installieren
sudo apt-get install samba-common-bin -y

Das Herunterfahren des Windows-PCs funktioniert wieder.

Ich habe die Lösung mit dieser Änderung angepasst (siehe Post 7 - Script Wake on lan Gladys 4? - #7 par djokoss22)