TUTO n°2 : Lancer une commande BASH via à une action Gladys.
L’idée est de surveiller le topic d’un appareil Gladys depuis BASH et d’exécuter les commandes adéquates.
Côté Gladys :
-
Création de l’appareil :
Nom : Appel BASH
Id externe : mqtt:Salle:AppelBASH
Pièce : Salle -
Ajout d’une fonctionnalité de type Clic bouton (par exemple) :
Nom : Appel BASH
ID externe de la fonctionnalité : mqtt:AppelBASH:Action
Valeur min : 0
Valeur max : 9 (Permettra 10 actions différentes)
Conserver l’historique des états : Oui
Est-ce un capteur : Non
Topic MQTT à écouter : Vous pouvez vous mettre de côté le topic qui servira plus loin. -
Définir une scène :
Déclencheur : Celui de votre choix (comme le changement d’état d’un vrai bouton par exemple).
Action : Contrôler un appareil.
Appareil : Appel BASH
Valeur : 1 (entre 0 et 9)
Il ne restera plus qu’à déclencher la scène une fois les scripts BASH terminés.
Côté scripts BASH.
-
Reprise du script commun /opt/mosquitto/MQTTConfig.sh du TUTO n°1.
-
Création du script /opt/mosquitto/GladysToBash.sh :
Il sera à l’écoute du topic de l’appareil créé dans Gladys.
#!/bin/bash
#####################################################################
## Surveillance d'un topic Gladys avec execution de commandes BASH ##
#####################################################################
### Variables à personnaliser
# Il faut personnaliser le CASE de la boucle WHILE.
# Adresse du topic de l'appareil
# Disponible dans Gladys > Intégration > MQTT > Appareils > Appel BASH > Clic Bouton > Topic MQTT à écouter
Topic="gladys/device/mqtt:salle:AppelBASH/feature/mqtt:AppelBASH:Action/state"
### Variables à personnaliser
# Chargement du fichier commun
source /opt/mosquitto/MQTTConfig.sh
# Nécessite la commande mosquitto_sub du paquet mosquitto-clients
! CommandCheck "mosquitto_sub:mosquitto-clients" && exit 1
echo "Le script attend de recevoir les commandes de Gladys." 1>&2
echo "Il ne rend la main que si des break et exit sont intégrés à la boucle while." 1>&2
# Boucle écoutant en permanence le topic de l'appareil de Gladys
# -u User : Utilisateur pour la connexion au brocker MQTT, provient du fichier MQTTConfig.sh
# -P Pass : Mot de passe pour la connexion au brocker MQTT, provient du fichier MQTTConfig.sh
# -t Topic : Adresse du Topic de l'appareil créé dans Gladys, définit en début de script
# Récupération des retours dans la variable Value
while read Value
do
# Saut de traitement si Value n'est pas comprise entre 0 et 9
if [[ "${Value}" != [0-9] ]]
then
echo -e "[${ORANGE}Attention${RAZ}] Valeur ${Value} inconnue..." 1>&2
continue
fi
echo -e "[${FUCHSIA}$(date +'%x %X')${RAZ}] Exécution de la commande n°${Value}."
# Case servant à réaliser la bonne action en fonction de Value
# Utilisation d'echo pour ne pas vraiment exécuter les commandes avec ce TUTO
case "${Value}" in
# Reboot du Raspberry
0) echo sudo reboot ;;
# Réveil d'un pc via WakeOnLine en arrière plan pour ne pas bloquer la boucle
1) echo wakeonlan XX:YY:ZZ:ZZ:YY:XX & ;;
# Lancement d'une alarme via un fichier wav dans vlc en arrière plan pour ne pas bloquer la boucle
2) echo vlc "/opt/alarme.wav" & ;;
# Kill de toutes les commandes vlc
3) echo killall vlc ;;
# Toutes autres actions de votre choix...
[3-9]) echo "Réalisation de l'action ${Value}.";;
esac
done < <(mosquitto_sub -u "${User}" -P "${Pass}" -t "${Topic}")
Il faut adapter les variables entre ### Variables à personnaliser ainsi que les actions dans le case de la boucle while.
Pour info, il est possible de préciser le nombre de retour attendu par mosquitto_sub avant qu’il rende la main :
mosquitto_sub -u "${User}" -P "${Pass}" -t "${Topic}" -C x # Où x vaut le nombre de retour
- Exécution du script :
Il suffit d’appeler le script via un simple :
bash /opt/mosquitto/GladysToBash.sh
Le script ne rend pas la main sur le prompt, c’est normal, la boucle est infinie.
Il affiche :
Le script attend de recevoir les commandes de Gladys.
Il ne rend la main que si des break et exit sont intégrés à la boucle while.
- Exécution de la scène voulue depuis Gladys :
Rien de particulier ici, il suffit d’exécuter la scène manuellement ou via un autre appareil.
Le shell affiche alors :
[16/02/2023 11:35:05] Exécution de la commande n°5.
[16/02/2023 11:35:55] Exécution de la commande n°2.
[16/02/2023 11:45:55] Exécution de la commande n°3.
Si tout est fonctionnel, il ne reste plus qu’à exécuter le script au démarrage du Raspberry.
Autres tuto :
TUTO n°1 : Afficher la température du Raspberry dans Gladys.
TUTO n°3 : Indiquer la présence d’un utilisateur via le WI-FI de son téléphone.
TUTO n°4 : Gestion de son robot aspirateur sous Valetudo dans Gladys.