Script Wake on lan Gladys 4?

Bonjour,

Dans Gladys 3, nous pouvions créer des scripts java, ce qui était très pratique car je pouvais démarrer et éteindre mon PC.
J’avais créé 2 devices. 1 exécutant mon script bash de boot et 1 exécutant mon script bash de shutdown se trouvant sur mon Raspberry. (ex: Device1 avec identifier “sh /home/pi/script/shutdown.sh” et device2 avec identifier “sh /home/pi/script/boot.sh”)
J’avais également créé un script qui s’éxecutait à mon dépard et retour à la maison:

let PcOnDevice = {
devicetype: 4,
value: 1

};

let PcOffDevice = {
devicetype: 3,
value: 1

};

gladys.deviceType.exec(PcOffDevice) ;

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

Y a t-il possibilité de faire la même chose sous Gladys 4 ? Si oui, comment? Si non, est-il prévu de pouvoir exécuter du script ou une intégration WOL est-elle prévue?
J’ai vu sur d’autres posts qu’il y a déjà eu quelques discutions sur le fait de pouvoir exécuter du script mais pas de réponse réelle.

En vous remerciant d’avance pour vos réponses.

En l’état il n’est pas possible d’exécuter des scripts… Mais tu peux créer un mini serveur Web qui déclenche ton script.
Il te suffit alors de faire un appel HTTP et le tour est joué !

Regarde ici, ça peut être intéressant pour toi Introducing Sampo: A Bash API Server For Running Shell Scripts

Ha, merci pour cette solution. Je vais regarder à cela.
Merci d’avoir mis un lien car je n’y connais rien du tout donc ça va m’aider à fond !

1 Like

Salut, n’hésite pas à faire un petit tuto si tu arrive à faire ce que tu veux, ça pourra servir à d’autres :wink:

Biensûr.
Mais ça se presente mal car là, je ne comprends rien à SAMPO donc va falloir que je trouve autre chose que je comprend un peu mieux mais dur dur quand on y connait rien…

Je ne connais pas particulièrement ce projet, il existe sûrement un autre qui sera plus adapté et facile à utiliser.

L’idée est d’avoir un serveur Web API qui te permettra d’exécuter un script sur simple appel. Par exemple http://monip/monscript1 déclenche un script bash particulier.

Bon, il est 3h du mat’ mais j’ai enfin une solution.
Si vous avez une solution plus facile, je suis preneur !
(Gladys tourne sur un raspberry pi)

SUR LE RASPBERRY PI:
#################

  1. On met à jour le raspberry:

sudo apt-get update
sudo apt-get upgrade

  1. On installe apache et on modifie le port afin qu’il n’utilise pas le même que gladys:

sudo apt-get install apache2 -y
sudo nano /etc/apache2/ports.conf
→ modifier la ligne “Listen 80” en “Listen 90” (j’ai mis 90 comme port mais vous pouvez mettre le port qu’il vous convient)

  1. On installe PHP:

sudo apt-get install php -y

  1. On active le service apache au démarrage de l’os et on démarre le service apache:

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

  1. On installe les services pour éteindre et démarrer le PC distant:

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

  1. On créer le fichier script PHP pour le démarrage du PC distant via Wake-On-Lan:

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

  1. On ajoute le code suivant dans celui-ci:
<?php exec("etherwake -D MACADRESSEDUPC"); ?>

(remplacez MACADRESSEDUPC par l’adresse MAC du PC distant)

  1. Puis on lui ajoute des permissions:

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

SUR LE PC WINDOWS DISTANT:
###########################

Lancez regedit et allez à cette emplacement:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
Ajouter une nouvelle clé DWORD32 nommée “LocalAccountTokenFilterPolicy” et mettez la valeur à “1” si celle-ci n’existe pas.

Lancez Services.msc, mettre le service “Registre à Distance” en “Automatique” et démarrez le.

Dans le pare-feu Windows, autorisez “Infrastructure de gestion Windows (WMI)” (perso, je n’ai pas eu à le faire)

DANS GLADYS4:
#############

Créez une nouvelle Scène.
Comme déclencheur, choisissez celui qui vous convient. (pour ma part, j’ai choisi “retour à la maison”, comme cela mon pc s’alume lorsque je rentre chez moi.)
Comme action, Choisir “Faire une requête HTTP”, méthode = “POST” et URL = “http://IPDURASPBERRY:90/boot.php”. Laissez le reste vide et enregistrez la scène.
(remplacez IPDURASPBERRY par l’adresse ip du raspberry pi)

Vous pouvez tester le fonctionnement et appuyant sur le boutton “Démarrer” sur la scène que vous venez de créer.
Pour annuler un shutdown sous windows, ouvrez un CMD et tapez “shutdown -a”

.
.
.
.
.
Pour le shutdown du PC distant, on répète les points 6 à 8 de la facon suivante:
6) On créer le fichier script PHP pour le shutdown du PC distant:

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

  1. On ajoute le code suivant dans celui-ci:
<?php exec("net rpc shutdown -f -I IPDUPCDISTANT -U UTILISATEUR%MOTDEPASSE"); ?>

(remplacez IPDUPCDISTANT par l’adresse IP du PC distant , UTILISATEUR par votre nom d’utilisateur du PC distant et MOTDEPASSE par le mot de passe de l’utilisateur du pc distant)

  1. Puis on lui ajoute des permissions:

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

Biensur, il vous reste a faire une scène dans Gladys comme pour le boot mais en choisissant “départ de la maison” comme déclencheur par exemple et comme action, Choisir “Faire une requête HTTP”, méthode = “POST” et URL = “http://IPDURASPBERRY:90/shutdown.php”. Laissez le reste vide et enregistrez la scène.

Top si tu as trouvé une solution!

Sinon, une autre solution, c’était de passer par l’intégration MQTT et de te faire un petit script (en n’importe quel langage: Node.js, Python, peut importe) qui écoute sur un topic MQTT et qui réagit à la réception d’un message MQTT sur ce topic.

L’API MQTT de Gladys est décrite sur cette doc:

J’ai aussi fait une vidéo sur le sujet:

Mais ta solution marche très bien!! :smiley:

Attention a deux choses niveau secu

Tu autorise other sur le fichier, un chown www-data et un 700 sur le fichier devrair suffir :slight_smile:

Le php exec est aussi pas mal dangereux surtout si ton gladys est accessible dans ton lan :stuck_out_tongue:

Tu peux limite ajouter dans le vhost un Require ip 127.0.0.1 pour n’autoriser que gladys

1 Like

Je plussoie @Totof pour l’aspect secu

Merci les gens pour l’aide !

J’ai modifié le chmod en 701 et 700 dans le petit tuto ci-dessus et sur mon raspberry. 701 pour boot.php sinon, ça ne fonctionne pas.

->Je vais essayer de faire ça cette semaine si j’ai le temps.

Faudrait également que je regarde à l’intégration MQTT mais ça me fesait un peu peur. Avec le tuto, ça me rassurera peut-être et qui sait, je me lancerai peut-être là dedans quand j’aurai 2-3 jours de congé.

Je reviens vers vous si j’arrives à faire ce machin VHOST.

Hello,

Alors je peux te proposer une solution faite en nodejs que j’utilise. C’est une api que j’ai dev rapidement pour compléter mes besoins en plus de gladys.

Si tu veux, j’ai mis un repo en public : GitHub - JeuFore/control-node
Un Docker Hub aussi : Docker Hub

Bref, il y a beaucoup de choses pas forcément utile pour toi, mais tu peux regarder le repo, ou alors run dans un container.

Entre autres il y a :

  • Une api
  • Support Alexa
  • Support mqtt
  • Support de divers périphériques

Pour juste l’utilisation de wol, tu dois créer un fichier device.js

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

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

Ensuite créer un device mqtt dans gladys


Puis ajouter une fonctionnalité

Pour enfin faire un docker run :

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

En espérant que cela puisse aider des personnes :slight_smile:

1 Like
701 =  -rwx-----x

Donc execution pour tout le monde

Tu as fais la commande ci-dessous ?

chown www-data:www-data boot.php 

Pour le require ip dans le vhost, tu devrais avoir dans ce répertoire la : /etc/apache2/sites-enabled/ un fichier type default et tu as les syntaxe en dessous :slight_smile:

https://httpd.apache.org/docs/2.4/howto/access.html

Eh, non, pas du tout. Ca fait quoi exactement? (j’y connais rien, je me répète)

Tu viens de me faire gagner 2 jours de recherche :smiling_face_with_three_hearts:

www-data c’est l’utilisateur qui fait tourner un site. La commande chown permet de passer le fichier en propriétaire:groupe www-data

Par exemple ce fichier html

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

il est en root:root avec des droit 644, donc le other peut le lire et le serveur web pourra être afficher

Si je le passe en 640, le fichier ne pourra pas être afficher

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

en faisant un chown

chown www-data:www-data index.html

Voici le résultat

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

Dans ce cas il sera affiché :slight_smile:

Je pourrais te filer un coup de main pour le require ip si jamais ça ne passe pas ^^

Ah ok.
Merci pour le pti cours, c’est plus clair comme cela !
Effectivement, niveau sécu c’est bien mieux.

Pour le require ip, ça va aller avec les infos que tu as déjà fourni plus haut.
Encore merci @Totof