Raspberry Pi : GPIO vers MQTT

[ This article is available in English / Cet article est disponible en Anglais ]

Voici un petit tutoriel pour mettre à jour l’état des connecteurs GPIO d’un Raspberrypi vers un serveur MQTT, le tout en utilisant des images docker.
Vous pourrez lire les états des GPIO, mais aussi les modifier, si comme moi, vous avez un relais connecté dessus.

La première chose a savoir, c’est que suivant la version de l’OS installé sur votre Raspberry Pi, cela sera plus ou moins compliqué.

Debian 11 et 12 : Ces versions ont l’option CONFIG_STRICT_DEVMEM activé à la compilation, ce qui rends compliqué et même parfois très compliqué et impossible de lire le device “/dev/mem” depuis un conteneur. Il faut recompiler le noyau ! Personnellement, recompiler pour pouvoir lire les GPIO et les envoyer sur un serveur MQTT, je trouve cela bien trop chronophage, donc je ne n’utilise pas ces versions pour faire du GPIO2MQTT.
Debian 10 : Pas de problème pour lire le device “/dev/mem”, je vais donc utiliser cette version.

Sommaire:

  • 1. Installation de l’OS : Debian 10
  • 2. Installation de Docker sur le RPI
  • 3. Quelques notions de base sur Docker et Docker-Compose
  • 4. Plusieurs solutions pour faire du GPIO2MQTT
  • 5. Avec Home Assistant
    • 5.1. Création du conteneur Home Assistant
    • 5.2. Connexion à l’interface de Home Assistant
    • 5.3. Ajout et Activation du support des GPIO dans Home Assistant avec HACS
    • 5.4. Exemple de Configuration : Surveillance de la PIN 38 et 40
    • 5.5. Exemple de Configuration : La PIN 40 devient un Switch/Relais
    • 5.6. Complément : Liste des PINs utilisables
  • 6. Home Assistant : Envoie de l’état des GPIO vers un serveur MQTT
    • 6.1. Activation du “mode avancé” de Home Assistant
    • 6.2. Ajout et configuration de l’intégration MQTT dans Home Assistant
    • 6.3. Ajout des éléments Home Assistant à exporter dans MQTT
    • 6.4. Modifier un Switch GPIO si un “topics” MQTT change.
  • 7. Avec “flyte/mqtt-gpio” [ A FAIRE ]

1. Installation de l’OS : Debian 10

  • Téléchargez l’image RPI3 à cette adresse : https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2020-02-14/2020-02-13-raspbian-buster-lite.zip
  • Gardez uniquement le fichier 2020-02-13-raspbian-buster-lite.zip, ne le décompressez pas.
  • Téléchargez et Installez “Raspberry Pi Imager” depuis le site officiel https://www.raspberrypi.com/software/
    • Lancez l’application.
    • Choisissez le modèle, dans mon cas un “Raspberry pi 3”.
    • Choisissez l’OS : allez sur “Use Custom“, choisissez le fichier “2020-02-13-raspbian-buster-lite.zip
    • Je vous conseille de cliquer sur “Modifier les réglages“.
      • Cochez “Définir nom utilisateur” : mettez votre nom et mot de passe.
      • Cochez “Les réglages locaux” : mettez le fuseau horaire et le clavier.
      • Dans services, cochez “activer ssh“.
      • Quand tous les réglages sont terminés, cliquez sur “Enregistrer“.
    • Après quelques confirmations, l’écriture va commencer.
  • Quand l’opération est terminée, vous pouvez retirer la carte et la mettre dans le rpi3.
  • Sur le RPI, après plusieurs secondes et 1 ou 2 redémarrage du RPI, vous devriez avoir un prompt a l’écran.

2. Installation de Docker sur le RPI

Nous allons installer docker sur le RPI, pour pouvoir utiliser une ou plusieurs images qui permettra de lire les GPIO et d’envoyer leurs états sur un serveur MQTT. Si vous ne connaissez pas docker, ce n’est pas grave, nous allons faire des opérations très simple, qui ne nécessite pas une grande connaissance de Docker.

  • Vous devez vous connecter sur votre RPI: soit en étant directement branché dessus, soit en vous connectant en SSH. Dans les 2 cas, vous pouvez utiliser l’utilisateur et le mot de passe que vous avez défini à l’étape ci-dessus, puis une montée de privilèges avec la commande “sudo -s“.
    Je vous conseille de faire du SSH, cela vous permettra de faire des copier/coller des lignes de commande.
  • Téléchargement de docker pour Debian 10
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/armhf/containerd.io_1.6.33-1_armhf.deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/armhf/docker-ce-cli_26.1.4-1~debian.10~buster_armhf.deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/armhf/docker-ce-rootless-extras_26.1.4-1~debian.10~buster_armhf.deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/armhf/docker-ce_26.1.4-1~debian.10~buster_armhf.deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/armhf/docker-compose-plugin_2.27.1-1~debian.10~buster_armhf.deb
  • Installation des fichiers téléchargés :
dpkg -i containerd.io_1.6.33-1_armhf.deb
dpkg -i docker-ce-cli_26.1.4-1~debian.10~buster_armhf.deb
dpkg -i docker-ce_26.1.4-1~debian.10~buster_armhf.deb
dpkg -i docker-compose-plugin_2.27.1-1~debian.10~buster_armhf.deb
  • Pour le dernier, il y a une dépendance qui n’est pas toujours installé par défaut. Il faut donc l’installer avant :
apt update
apt install dbus-user-session
dpkg -i docker-ce-rootless-extras_26.1.4-1~debian.10~buster_armhf.deb

Et voila ! Docker est installé.


3. Quelques notions de base sur Docker et Docker-Compose

Sans faire un cours sur Docker, voici quelques notions de base :

  • Un conteneur exécute une (ou plusieurs) images, qui est bien plus légère que la virtualisation d’un OS complet.
  • Une image a son propre environnement (répertoire, processus exécutée …) , ce qui rends étanche les conteneurs entre eux.
  • Les images peuvent être construites par nous-même en utilisant un fichier de configuration (DockerFile) ou peuvent être téléchargées automatiquement sur le site de Docker.
  • Les images spécifiées dans le fichier de configuration (docker-compose.yml) sont récupérées automatiquement sur le site officiel DockerHub quand on lance la création du conteneur.
  • Un conteneur peut exécuter plusieurs images, dans ce cas tous les processus de chaque image peuvent communiquer entre eux.
  • Un conteneur peux faire de la redirection de port et de répertoire. Par exemple, vous pouvez spécifier que le dossier dans le conteneur “/home/monconteneur/” soit redirigé vers le dossier de l’hôte (le RPI dans notre cas) “/home/rpi”
  • La gestion, la création, la suppression des conteneurs peut se faire en utilisant l’option “compose” de la commande “docker”, par exemple “docker compose ps”. Cette option est récente, avant il fallait utiliser la commande “docker-compose”. Pour utiliser “docker compose …” il faut être dans le répertoire du fichier “docker-compose.yml”
  • La création d’un conteneur peux se faire en créant un fichier de configuration “docker-compose.yml” dans chaque répertoire correspondant à notre conteneur. C’est ce que nous allons utiliser dans notre cas.
  • Les commandes de base sont :
    • docker ps : voir les conteneurs en exécution.
    • docker stop homeassistant : arrête le conteneur nommé “homeassistant”
    • docker compose ps : voir les conteneurs en exécution du répertoire courant (fichier docker-compose.yml).
    • docker compose up -d : créé et exécute le conteneur, télécharge les images nécessaire, détache le conteneur de la session (c’est a dire qu’il continu a être exécuté même après une déconnexion). Il faut être dans le répertoire du fichier “docker-compose.yml”
    • docker compose logs : affiche les journaux du conteneur

4. Plusieurs solutions pour faire du GPIO2MQTT

Maintenant que Docker est installé, il ne reste plus qu’a choisir un conteneur qui fera le travail.

Une des méthodes les plus simple est d’utiliser l’image “Home Assistant“, mais il existe d’autre images comme “flyte/mqtt-gpio” …
L’avantage de Home Assistant, c’est qu’il y a énormément de documentation et de tutoriel sur le sujet. Il est également très facile de faire des actions suivant le comportement des GPIO. Par exemple, le changement de l’état d’un ou plusieurs GPIO peut entrainer le changement d’un autre pour activer un relais, tout en mettant à jour un serveur MQTT.

Je vous laisse chercher sur le DockerHub les autres images permettant de faire du GPIO2MQTT et de réaliser tous vos rêves !


5. Méthode 1 : Home Assistant

Nous allons commencer par créer plusieurs répertoires sur notre RPI, pour stocker la configuration de nos images docker. Le premier répertoire qui contiendra toutes les images, sera “docker”, nous allons le créer sur la racine.

mkdir /docker

Ensuite nous allons créer un répertoire pour Home Assistant :

mkdir /docker/homeassistant

Dans le répertoire “/docker/homeassistant”, il y aura :

  • un fichier “docker-compose.yml” : c’est le fichier de configuration de l’image docker “homeassistant”
  • un répertoire “config” : ce répertoire sera créé automatiquement par docker, il contiendra la configuration de “Homeassistant”

5.1. Création du conteneur Home Assistant

Maintenant, nous allons créer le fichier de configuration Docker Compose. Ce fichier permet d’indiquer le nom du conteneur, l’image a utiliser, le TimeZone de l’image …

Nous nous positionnons dans le répertoire “/docker/homeassistant”, ce qui permettra d’exécuter les commandes “docker compose ….” plus tard.

cd /docker/homeassistant/

Nous allons créer le fichier de configuration “docker-compose.yml” pour notre Home Assistant

nano /docker/homeassistant/docker-compose.yml

Voici le fichier a copier dans le “docker-compose.yml” pour installer Home Assistant en conteneur, vous pouvez l’adapter a vos besoins si vous voulez.

version: '3'
 services:
   ha-gpio:
     container_name: ha-gpio
     hostname: ha-gpio
     domainname: legeek.info
     image: "ghcr.io/home-assistant/home-assistant:2024.1"
     volumes:
       - ./config:/config
       - /etc/localtime:/etc/localtime:ro
     restart: always
     privileged: true
     network_mode: host
     environment:
       - TZ=Europe/Paris
     cap_add:
       - SYS_RAWIO

Maintenant, nous allons lancer la création du conteneur :

docker compose up -d

Le téléchargement, la décompression, l’installation et l’exécution se lancent. Cela peut mettre quelques secondes en fonction de la rapidité de votre RPI, de la Carte SD

J’ai volontairement bloqué la version de Home Assistant sur “2024.1”, car je sais que cette version fonctionne. Si vous voulez la dernière version, vous pouvez remplacer la ligne du “docker-compose.yml” comme ceci. Attention: tout changement du fichier “docker-compose.yml” doit être suivit par la commande “docker compose up -d” pour que les changements soient appliqués.

image: "ghcr.io/home-assistant/home-assistant:2024.1" 
-> 
image: "ghcr.io/home-assistant/home-assistant:stable"

Une fois terminé, nous allons vérifier que le conteneur est bien lancé avec la commande “docker compose ps“:

root@raspberrypi:/docker/homeassistant# docker compose ps
 WARN[0000] /docker/homeassistant/docker-compose.yml: version is obsolete
 NAME      IMAGE                                          COMMAND   SERVICE   CREATED       STATUS       PORTS
 ha-gpio   ghcr.io/home-assistant/home-assistant:2024.1   "/init"   ha-gpio   3 hours ago   Up 3 hours
 root@raspberrypi:/docker/homeassistant#

Nous constatons que le conteneur est bien lancé, depuis environ 3 heures.


Nous allons maintenant vérifier les journaux avec la commande “docker compose logs

root@raspberrypi:/docker/homeassistant# docker compose logs
 WARN[0000] /docker/homeassistant/docker-compose.yml: version is obsolete
 ha-gpio  | s6-rc: info: service s6rc-oneshot-runner: starting
 ha-gpio  | s6-rc: info: service s6rc-oneshot-runner successfully started
 ha-gpio  | s6-rc: info: service fix-attrs: starting
 ha-gpio  | s6-rc: info: service fix-attrs successfully started
 ha-gpio  | s6-rc: info: service legacy-cont-init: starting
 ha-gpio  | s6-rc: info: service legacy-cont-init successfully started
 ha-gpio  | s6-rc: info: service legacy-services: starting
 ha-gpio  | services-up: info: copying legacy longrun home-assistant (no readiness notification)
 ha-gpio  | s6-rc: info: service legacy-services successfully started
 root@raspberrypi:/docker/homeassistant

5.2. Connexion à l’interface de Home Assistant

Si tous se passe bien, vous devez pouvoir vous connecter sur l interface Web de Homeassistant. L’adresse est sous la forme : http://x.x.x.x:8123
Dans mon cas, mon RPI a obtenu l adresse IP 192.168.1.248, je vais donc sur l’URL http://192.168.1.248:8123 avec mon navigateur préféré.

Vous devriez avoir cet écran de première connexion, cliquez sur “Créer ma maison connectée”
Remplissez les champs et cliquez sur “Créer un compte”
Après avoir validé la première connexion, vous devriez avoir cet écran.

5.3. Ajout et Activation du support des GPIO dans Home Assistant avec HACS

Home Assistant ne gère plus les GPIO nativement, il faut ajouter une nouvelle “Intégration” à sa configuration. Nous allons installer une intégration extrêmement populaire : HACS (Ne vous inquiétez pas, rien de compliqué).

Connectez vous sur votre RPI, et lancer ces 2 commandes: la première permet de ce placer dans le répertoire de configuration de Home Assistant, et la 2eme permet de lancer l’installation de HACS :

cd /docker/homeassistant/config/
wget -O - https://get.hacs.xyz | bash -

Après l’installation, nous allons redémarrer le conteneur Home Assistant :

cd /docker/homeassistant
docker compose restart

HACS est installé, mais il n’est pas activé, retournons sur l’interface de Home Assistant.

Cliquez sur “Appareils et services”
Cliquez sur “Ajouter une integration” -> saisissez “hacs” -> cliquez sur le bouton “HACS”
Cochez les 4 premières case a cocher
Suivez le lien, connectez vous et saisissez le code d’activation
Saisissez le code d’activation
Autorisez HACS
Revenez sur votre interface Home Assistant, vous pouvez terminer l’activation.

HACS et maintenant installé et activé sur votre Home Assistant. nous pouvons maintenant ajouter la gestion des GPIO de notre Raspberry Pi :

Cliquez sur “HACS”, puis sur “Intégrations”
Cliquez sur “Explorer et Telecharger des dépots”, Saisissez “gpio”, Cliquez sur “Raspberry Pi GPIO”

Après l’installation, nous allons redémarrer le conteneur Home Assistant :

cd /docker/homeassistant
docker compose restart

La gestion des GPIO via HACS est installée.

5.4. Exemple de Configuration : Surveillance de la PIN 40 et 38

Nous allons surveiller l’état de la PIN40 et la PIN38 dans Home Assistant.
Dans un premier temps, nous allons installer les outils pour voir l’état des GPIO et pouvoir utiliser la commande “gpio readall

root@raspberrypi:/docker# apt update
root@raspberrypi:/docker# apt install wiringpi
root@raspberrypi:/docker# gpio readall
  +-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+
  | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
  +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
  |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
  |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
  |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
  |   4 |   7 | GPIO. 7 |   IN | 0 |  7 || 8  | 0 | IN   | TxD     | 15  | 14  |
  |     |     |      0v |      |   |  9 || 10 | 1 | IN   | RxD     | 16  | 15  |
  |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
  |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
  |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
  |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
  |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
  |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
  |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 0 | IN   | CE0     | 10  | 8   |
  |     |     |      0v |      |   | 25 || 26 | 0 | IN   | CE1     | 11  | 7   |
  |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
  |   5 |  21 | GPIO.21 |   IN | 0 | 29 || 30 |   |      | 0v      |     |     |
  |   6 |  22 | GPIO.22 |   IN | 0 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
  |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
  |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
  |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
  |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
  +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
  | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
  +-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+
 root@raspberrypi:/docker#

Le fichier de configuration de Home Assistant est “configuration.yaml“, il se trouve dans le répertoire “config“, nous allons l’éditer et ajouter des lignes pour surveiller la PIN40 et la PIN38. C’est également ce fichier qui nous permettra d’envoyer l’état des GPIO sur un serveur MQTT.
Édition du fichier /docker/homeassistant/config/configuration.yaml

nano /docker/homeassistant/config/configuration.yaml

A la fin du fichier, vous allez ajouter ces lignes :

binary_sensor:
  - platform: rpi_gpio
    pull_mode: DOWN
    bouncetime: 20
    #invert_logic: true
    ports:
      20: NamePin38 #PIN:38
      21: NamePin40 #PIN:40 

Attention : la PIN38 corresponds au port 20 pour Home Assistant, et la PIN40 corresponds au port 21. Vous pouvez retrouver la correspondance des ports avec les PINs en utilisant la commande ‘gpio readall” (vous pouvez également voir les correspondances au dessus de ces lignes). Les ports correspondent aux colonnes “Physical” (pour le RPI) et “BCM” (pour HomeAssistant).


On redémarre Home Assistant pour prendre en compte le changement du fichier de configuration.

cd /docker/homeassistant
docker compose restart

Si on retourne sur l’interface de Home Assistant, nous pouvoir voir deux nouveaux capteurs binaires.


Et Voila ! Pour pouvoir tester, nous allons connecter la PIN40 avec la PIN01 (3.3v)

Nous connectons 2 fils pour pouvoir tester.
La PIN01 et la PIN40 sont connectées.
Dans Home Assistant l’état change immediatement

5.5. Exemple de Configuration : La PIN 40 devient un Switch/Relais

Si nous voulons piloter un relais via une PIN de notre GPIO, nous devons changer le type l’élément dans Home Assistant. Par exemple, cela signifie, que maintenant la PIN40 n’est plus un élément en lecture seule, mais un élément que nous pouvons activer ou pas, comme un Switch.


Éditez le fichier /docker/homeassistant/config/configuration.yaml

nano /docker/homeassistant/config/configuration.yaml

Modifiez le fichier pour avoir ceci :

binary_sensor:
  - platform: rpi_gpio
    pull_mode: DOWN
    bouncetime: 20
    #invert_logic: true
    ports:
      20: NamePin38 #PIN:38
      #21: NamePin40 #PIN:40
switch:
  - platform: rpi_gpio
    invert_logic: true
    #assumed_state: false
    ports:
      21: SwitchPIN40Switch

On redémarre Home Assistant pour prendre en compte le changement du fichier de configuration.

cd /docker/homeassistant
docker compose restart

Dans Home Assistant, l’élément de la PN40 a changé :

Il a maintenant un élément Switch

Nous allons regarder l’état du GPIO sur le RPI. Tapez la commande “gpio readall”.
Nous pouvons constater en regardant dans la colonne “V” que son état est a 1.


Maintenant, nous allons changer son état en cliquant sur le switch dans Home Assistant et regarder ce que la commande “gpio readall” affiche.

Et voila !
Vous maintenant la possibilité de lire ou de changer l’état de vos GPIO avec Home Assistant

5.6. Complément : Liste des PINs utilisables

Voici une liste des ports que vous pouvez utiliser, il n’y plus qu’a décommenter les lignes qui vous intéresse.

binary_sensor:
  - platform: rpi_gpio
    pull_mode: DOWN
    bouncetime: 20
    #invert_logic: true
    ports:
      #4: NamePIN07 #PIN:07
      #5: NamePIN29 #PIN:29
      #6: NamePIN31 #PIN:31
      #7: NamePIN26 #PIN:26
      #8: NamePIN24 #PIN:24
      #10: NamePIN19 #PIN:19
      #11: NamePIN23 #PIN:23
      #12: NamePIN12 #PIN:12
      #13: NamePIN33 #PIN:33
      #16: NamePIN36 #PIN:36
      #17: NamePIN11 #PIN:11
      #18: NamePIN12 #PIN:12
      #19: NamePIN35 #PIN:35
      #20: NamePIN38 #PIN:38
      #21: NamePIN40 #PIN:40
      #22: NamePIN15 #PIN:15
      #23: NamePIN16 #PIN:16
      #24: NamePIN18 #PIN:18
      #25: NamePIN22 #PIN:22
      #26: NamePIN37 #PIN:37
      #27: NamePIN13 #PIN:13
...
...

6. Home Assistant : Envoie de l’état des GPIO vers un serveur MQTT

Pour que Home Assistant envoie l’état des GPIO vers un serveur MQTT, nous devons faire plusieurs actions :

  • Activer le “mode avancé” pour l’utilisateur de Home Assistant, cela permet d’avoir des options supplémentaires dans MQTT
  • Si vous n’avez pas de serveur MQTT, vous pouvez suivre ce tutoriel pour créer un conteneur MQTT Broker (Serveur)
  • Si vous n’avez pas d’interface web pour consulter votre Serveur MQTT, vous pouvez suivre ce tutoriel pour créer un conteneur MQTT Explorer
  • Ajouter et configurer l’intégration MQTT dans Home Assistant
  • Modifier le fichier “configuration.yml” de Home Assistant pour indiquer les éléments a exporter sur le serveur MQTT

6.1. Activation du “mode avancé” de Home Assistant

Activation du “mode avancé” de Home Assistant

6.2. Ajout et configuration de l’intégration MQTT dans Home Assistant

Ajout de l’intégration MQTT, depuis les dernières version, ce n’est plus dans le fichier “configuration.yml”
Saisissez les parametres de votre serveur MQTT,
Attention, si vous n’avez pas activé le “mode avancé” pour l’utilisateur de Home Assistant, il n’y aura pas de bouton “Suivant” mais un bouton “Validé”
Je vous conseille de modifier les chemins des messages. Cela va éviter les problèmes si vous avez plusieurs Home Assistant comme moi
Je vous conseille de modifier les chemins des messages. Cela va éviter les problèmes si vous avez plusieurs Home Assistant comme moi

Après avoir “Validé”, vous devez voir de nouveaux “topics” sur le serveur MQTT.
Je vous conseille d’utiliser et d’installer l’image docker “smeagolworms4/mqtt-explorer” pour modifier et voir en temps réelle les “topics” de votre serveur MQTT. Vous pouvez suivre mon tutoriel sur le sujet.


6.3. Ajout des éléments Home Assistant à exporter dans MQTT

Maintenant, nous allons ajouter l’envoie des états des GPIO sur le serveur MQTT. Pour faire cela, il faut modifier le fichier “configuration.yml” de Home Assistant.

Éditez le fichier /docker/homeassistant/config/configuration.yaml

nano /docker/homeassistant/config/configuration.yaml

Modifiez le fichier pour avoir ceci :

...
...
mqtt_statestream:
   base_topic: homeassistant/ha-gpio
   publish_attributes: true
   publish_timestamps: true
   exclude:
     entities:
       - sensor.hacs
       - person.francis
       - zone.home
       - sun.sun
       - binary_sensor.updater
   include:
     domains:
       - switch
       - sensor
       - binary_sensor
...
...

On redémarre Home Assistant pour prendre en compte le changement du fichier de configuration.

cd /docker/homeassistant
docker compose restart

On fait un test en modifiant l’état du switch que nous avons créé dans ce tutoriel. Le serveur MQTT est mis à jour immédiatement avec un nouveau”topics” indiquant son état et la date de modification.
Chaque éléments (capteurs binaires, commutateurs) a son propre “topics”, contenant un topics “state” ayant pour valeur “on” ou “off” :


6.4. Modifier un Switch GPIO si un “topics” MQTT change.

Nous avons vu comment le changement d’un commutateurs (switch) ou d’un capteurs binaires GPIO pouvait mettre à jour le “topics” d’un serveur MQTT.
Mais pour les commutateurs, il faut aussi que Home Assistant modifie le commutateur GPIO lorsque que le “topics” du serveur MQTT est modifié par un autre service.

Nous allons créer 2 “Automatisations” dans Home Assistant :
La première pour dire que si le “topics” MQTT de commutateur passe à “on”, il faudra “allumer” ce commutateur. Et une 2eme automatisation : si le “topics” passe a “off” il faut “éteindre” le commutateur.
Voici comment doit apparaitre le “topics” du commutateur sur le serveur MQTT

Le chemin du topics pour notre commutateur est “homeassistant/ha-gpio/switch/switchpin40switch/state”, il a pour valeur “off”

Pour ajouter une automatisation dans Home Assistant, vous devez aller dans “Paramètres”, puis “Automatisations et scènes”. Les images parlent mieux que les mots :

En passant en édition YAML, le code par défaut est affiché. Effacez-le et mettez celui affiché après les captures d’écran.

Après avoir collé le code et enregistré, vous pourrez l’éditer en mode assistant pour mieux comprendre.
alias: Switch-PIN40-On
description: ""
trigger:
  - platform: mqtt
    topic: homeassistant/ha-gpio/switch/switchpin40switch/state
    payload: "on"
condition: []
action:
  - service: switch.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: switch.switchpin40switch
mode: single 

Après avoir enregistré, vous pourrez voir votre automatisation, vous pourrez même l’éditer avec interface visuelle. Nous allons ajouter la 2eme automatisation, en créant une nouvelle automatisation. voici la code :

alias: Switch-PIN40-Off
description: ""
trigger:
  - platform: mqtt
    topic: homeassistant/ha-gpio/switch/switchpin40switch/state
    payload: "off"
condition: []
action:
  - service: switch.turn_off
    target:
      entity_id:
        - switch.switchpin40switch
    data: {}
mode: single 

Si vous changez la valeur de “on” à “off” ou inversement pour le “topics” avec ce chemin “homeassistant/ha-gpio/switch/switchpin40switch/state” , vous verrez que l’automatisation de Home Assistant se déclenchera, et changera l’état du GPIO.

Vous pouvez changer la valeur de “on” à “off” ou inversement, l’état du commutateur GPIO doit changer immédiatement

7. Méthode 2 : flyte/mqtt-gpio

… … … ToDo … … …

Laisser un commentaire