![](http://192.168.1.5:8085/wp-content/uploads/2024/06/Mqtt-rpi-1-1024x261.png)
[ 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
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi17.png)
- 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
![](https://www.legeek.info/wp-content/uploads/2024/06/docker-rpi-1024x266.png)
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
![](https://www.legeek.info/wp-content/uploads/2024/06/docker-compose-1024x458.png)
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
![](https://www.legeek.info/wp-content/uploads/2024/06/icon-ha.png)
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
![](https://www.legeek.info/wp-content/uploads/2024/06/Capture-decran-rpi15-1024x578.png)
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é.
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha2.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha3.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha4.png)
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 -
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha5-1024x267.png)
Après l’installation, nous allons redémarrer le conteneur Home Assistant :
cd /docker/homeassistant
docker compose restart
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha6-2-1024x109.png)
HACS est installé, mais il n’est pas activé, retournons sur l’interface de Home Assistant.
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha7b.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha8b.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha9.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha10.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha12.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha11.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha13.png)
HACS et maintenant installé et activé sur votre Home Assistant. nous pouvons maintenant ajouter la gestion des GPIO de notre Raspberry Pi :
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha14.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha15.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha16.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha17.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha18.png)
Après l’installation, nous allons redémarrer le conteneur Home Assistant :
cd /docker/homeassistant
docker compose restart
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha6-1-1024x109.png)
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
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha6-1-1024x109.png)
Si on retourne sur l’interface de Home Assistant, nous pouvoir voir deux nouveaux capteurs binaires.
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha19-1.png)
Et Voila ! Pour pouvoir tester, nous allons connecter la PIN40 avec la PIN01 (3.3v)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha21-1024x473.jpg)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha23-1-473x1024.jpg)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha20.png)
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
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha6-1-1024x109.png)
Dans Home Assistant, l’élément de la PN40 a changé :
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha24.jpg.png)
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.
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha25.png)
Maintenant, nous allons changer son état en cliquant sur le switch dans Home Assistant et regarder ce que la commande “gpio readall” affiche.
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha27.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha26.png)
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
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-mqtt2-1.png)
6.2. Ajout et configuration de l’intégration MQTT dans Home Assistant
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha29-1024x679.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha30.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-mqtt3.png)
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é”
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-mqtt4.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-mqtt5.png)
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.
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-mqtt6.png)
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
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-ha6-1-1024x109.png)
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” :
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-mqtt7.png)
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
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-mqtt11-1.png)
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 :
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-mqtt9-1024x644.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-mqtt12.png)
En passant en édition YAML, le code par défaut est affiché. Effacez-le et mettez celui affiché après les captures d’écran.
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-mqtt13.png)
![](https://www.legeek.info/wp-content/uploads/2024/06/rpi-mqtt14.png)
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.
![](https://www.legeek.info/wp-content/uploads/2024/07/rpi-mqtt-20-2.png)
7. Méthode 2 : flyte/mqtt-gpio
… … … ToDo … … …