# \[TUTO\] Partage d'informations entre BASH et Gladys

**URL:** <https://community.gladysassistant.com/t/tuto-partage-dinformations-entre-bash-et-gladys/7981>\
**Category:** Tutoriels\
**Created:** [Février 17, 2023, 2:27 UTC](https://community.gladysassistant.com/t/tuto-partage-dinformations-entre-bash-et-gladys/7981 "2023-02-17T14:27:13Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![Hizo](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/h/51bf81/32.png) [@Hizo](https://community.gladysassistant.com/u/Hizo)\
**Post date:** [Février 17, 2023, 2:27 UTC](https://community.gladysassistant.com/t/tuto-partage-dinformations-entre-bash-et-gladys/7981/2 "2023-02-17T14:27:30Z")

</div>

**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 :**

1. **Création de l’appareil :**  
**Nom** : Appel BASH  
**Id externe** : **mqtt:Salle:AppelBASH**  
**Pièce** : Salle

2. **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.

3. **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.**

1. **Reprise du script commun /opt/mosquitto/MQTTConfig.sh du TUTO n°1.**

2. **Création du script /opt/mosquitto/GladysToBash.sh :**  
Il sera à l’écoute du topic de l’appareil créé dans Gladys.

```auto
#!/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 :

```auto
mosquitto_sub -u "${User}" -P "${Pass}" -t "${Topic}" -C x # Où x vaut le nombre de retour

```

1. **Exécution du script :**

Il suffit d’appeler le script via un simple :

```auto
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.

1. **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.](https://community.gladysassistant.com/t/tuto-partage-dinformations-entre-bash-et-gladys/7981)

[TUTO n°3 : Indiquer la présence d’un utilisateur via le WI-FI de son téléphone.](https://community.gladysassistant.com/t/tuto-bash-et-telephone-connecte-au-wi-fi-freebox/8045)

[TUTO n°4 : Gestion de son robot aspirateur sous Valetudo dans Gladys.](https://community.gladysassistant.com/t/tuto-bash-et-aspirateur-robot-sous-valetudo/8226)

---

_[View the full topic](https://community.gladysassistant.com/t/tuto-partage-dinformations-entre-bash-et-gladys/7981)._
