Bonjour,
je vous propose 2 TUTO qui expliquent comment utiliser des commandes BASH pour envoyer des données à Gladys et pour en recevoir.
BASH est simple à utiliser et est présent dans beaucoup de GNU/Linux (comme Raspberry) et sera de toute façon reproductible pour un autre SHELL.
Il permet d’exécuter n’importe quel commande système et de gérer tout le pc.
Pour communiquer, il faut utiliser le protocole MQTT.
Gladys propose très gentiment d’installer un brocker MQTT en un clic via Intégration > MQTT > Configuration > Utiliser un broker dans un conteneur Docker.
Une fois installé, on peut créer des appareils via Intégration > MQTT > Appareils > Nouveau.
TUTO n°1 : Afficher la température du Raspberry dans Gladys.
L’idée est donc de récupérer via un script BASH la température du Raspberry et de l’envoyer à Gladys.
Côté Gladys :
-
Création de l’appareil :
Nom : Température Raspberry
Id externe : mqtt:Salle:RaspTemp (mqtt:Pièce:Élément)
Pièce : Salle -
**Ajout d’une fonctionnalité de type : **
Nom : Température Raspberry
ID externe de la fonctionnalité : mqtt:RaspTemp:temp (mqtt:Élément:Fonction)
Unité : C°
Valeur min : 0 (pour atteindre cette température, vous le refroidissez à l’azote…)
Valeur max : 110 (parfait pour l’utiliser comme chauffage)
Conserver l’historique des états : Oui
Est-ce un capteur : Oui
Topic MQTT pour publier : Vous pouvez vous mettre de côté le topic qui servira plus loin. -
Ajout de l’appareil sur le tableau de bord :
Rien de spécifique ici, il faut procéder comme d’habitude.
Voilà, on en a terminé avec Gladys
Côté BASH :
Passons aux scripts BASH que je vais mettre dans /opt/mosquittos/ (ou autre emplacement de votre choix mais il faudra adapter les adresses).
Je commente un maximum tout le code afin qu’il soit le plus compréhensible possible, n’hésitez pas à le lire.
- Création d’un script commun /opt/mosquitto/MQTTConfig.sh :
Il sera importé par les autres (différents TUTO), il contient :
Une fonction testant les commandes nécessaires et les paquets à installer (pour ubuntu) le cas échéant.
Les identifiants de connexion au brocker MQTT créé par Gladys accessibles via Intégration > MQTT > Configuration.
Des variables pour colorer l’affichage des retours.
#!/bin/bash
#############################################
## Fichier à sourcer dans les scripts MQTT ##
#############################################
### Variables à personnaliser
# Connexion au brocker MQTT
User="gladys"
Pass="XYZ"
### Variables à personnaliser
function CommandCheck()
{
# Fonction vérifiant la présence des commandes nécessaires
# Paramètre : Nom de la commande et du paquet (facultatif) séparés par :
# Ex : mosquitto_pub:mosquitto-clients
# Si aucun paramètre n'est donné
[[ -z ${1} ]] && return 1
# Limitation des variables à la fonction
local Command Package Parameter ReturnValue
ReturnValue=0
# Traite tous les paramètres
for Parameter in "${@}"
do
Command="${Parameter%%:*}"
Package="${Parameter##*:}"
# Si la commande n'existe pas
if ! which ${Command} &>/dev/null
then
# Valeur de retour à 1 pour afficher tous les echo avant de stopper
ReturnValue=1
echo -e "[${ROUGE}Erreur${RAZ}] Arrêt du script car la commande ${BLEUFONCE}${Command}${RAZ} est introuvable." 1>&2
# Si un paquet est donné
[[ ${Package} ]] && echo -e "Pour ubuntu : ${FUCHSIA}sudo apt-get install ${Package}${RAZ}" 1>&2
fi
done
return ${ReturnValue}
}
# Couleurs pour l'affichage des retours
FUCHSIA="\e[1;35m"
RAZ="\e[m"
BLEUFONCE="\e[1;34m"
ROUGE="\e[1;31m"
ORANGE="\e[1m\[\e[38;5;202m\]"
Il n’y que les variables entre ### Variables à personnaliser à adapter.
- Création du script /opt/mosquitto/BashToGladys.sh :
Son but est de récupérer la température du Raspberry à interval régulier et d’envoyer cette information à Gladys.
#/bin/bash
###################################################
## Envoi de la température du Raspberry à Gladys ##
###################################################
### Variables à personnaliser
# Nombre de seconde entre les récupération de température
# Une petite valeur n'est pas une très bonne idée...
TimeOut=60
# Adresse du topic de l'appareil
# Disponible dans Gladys > Intégration > MQTT > Appareils > Température Raspberry > Température > Topic MQTT pour publier
Topic="gladys/master/device/mqtt:Salle:RaspTemp/feature/mqtt:RaspTemp:temp/state"
### Variables à personnaliser
# Chargement du fichier commun
source /opt/mosquitto/MQTTConfig.sh
# Vérification de la présence des commandes qui si absentes provoquent l'arrêt du script
# Nécessite la commande mosquitto_pub du paquet mosquitto-clients
! CommandCheck "mosquitto_pub:mosquitto-clients" && exit 1
# Bloque le script si le TimeOut est inférieur à 1
if [[ ${TimeOut:-0} -lt 1 ]]
then
echo -e "[${ROUGE}Erreur${RAZ}] Le TimeOut est inadapté." 1>&2
exit 1
fi
# Boucle infinie
while true
do
# Récupération de la température du Raspberry
Temperature=$(/usr/bin/vcgencmd measure_temp)
Temperature=${Temperature//[^0-9.]/}
# Si la variable n'est pas vide
if [[ ${Temperature} ]]
then
# Affichage de l'info dans le SHELL
echo -e "[${FUCHSIA}$(date +'%x %X')${RAZ}] La température du Raspberry est de ${BLEUFONCE}${Temperature}°c${RAZ}."
# Envoi de l'information à Gladys avec mosquitto_pub
# -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
# -m Temperature : Utilisation de la température
mosquitto_pub -u "${User}" -P "${Pass}" -t "${Topic}" -m "${Temperature}"
# Récupération de la valeur retour de la commande mosquitto_pub
MosquittoReturns=${?}
# Affichage du code erreur de mosquitto si code retour > 0
(( ${MosquittoReturns} )) && echo -e "[${ROUGE}Erreur${RAZ}] La commande mosquitto_sub a renvoyé le code ${MosquittoReturns}." 1>&2
# Si la variable de température est vide
else
# Affichage d'un message d'erreur
echo -e "[${ROUGE}Erreur${RAZ}] Température non récupérée." 1>&2
fi
# Pause du script le temps demandé
sleep "${TimeOut}"
done
Il n’y que les variables entre ### Variables à personnaliser à adapter.
- Exécution du script :
Il suffit de faire un simple :
bash /opt/mosquitto/BashToGladys.sh
Avec un TimeOut de 60 secondes, il affiche alors :
[16/02/2023 10:35:05] La température du Raspberry est de 39.4°c.
[16/02/2023 10:36:05] La température du Raspberry est de 40.4°c.
[16/02/2023 10:37:05] La température du Raspberry est de 40.4°c.
[16/02/2023 10:38:05] La température du Raspberry est de 39.9°c.
…
Et la valeur est bien mise à jour dans Gladys.
Si la commande mosquitto_pub n’existe pas, le script affiche :
[Erreur] Arrêt du script car la commande mosquitto_pub est introuvable.
Pour ubuntu : sudo apt-get install mosquitto-clients
Si tout est fonctionnel, il ne reste plus qu’à exécuter le script au démarrage du Raspberry (crontab ou autre).
Limitation :
Il n’est possible d’envoyer que des nombres et des nombres à virgule à Gladys.
Envoyer du texte ne fonctionne pas, aucune erreur n’est émise mais rien ne s’affiche.
Autres tuto :
TUTO n°2 : Lancer une commande BASH via à une action Gladys., dans le message ci dessous.
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.