Ajouter des sondes à un broker MQTT
Introduction
Nous avions déjà évoqué une solution ici qui était d’utiliser rpi_gpio dans notre home assistant directement, ce qui nous permettait d’utiliser les GPIO d’un raspberry pour tout type de capteurs, comme ici pour une PIR MOTION :
https://blog.ravindra-job.fr/iot/pir_diy/
Mais cette fonctionnalité est deprecated désormais par home assistant :
Source: https://www.home-assistant.io/integrations/rpi_gpio/
On notera aussi que cette solution été assez limité notamment d’un point de vue fiabilité, car la moindre erreur de branchement de nos devices, ou un court-circuit dû à un problème d’étanchéité d’une sonde met hors service la domotique.
L’idée est donc de déporté (physiquement) ce système vers un autre périphérique pour limiter les éventuels dégâts électriques.
Et pour faire communiquer nos deux périphériques rien de mieux que MQTT. Et c’est là que nous allons utiliser le projet mqtt-io. Ce qui nous donne grossièrement :
N’hésitez pas à voir leur doc ici : https://mqtt-io.app/
Installation via python
Installation
Requires Python 3.6+
pip3 install mqtt-io
Execution
python3 -m mqtt_io config.yml
Installation via Docker
Pour commencer nous allons installer sur un Raspberry PI docker pour héberger le tout :
Installation de docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Installation de docker-compose
sudo apt-get install libffi-dev libssl-dev
sudo apt install python3-dev
sudo apt-get install -y python3 python3-pip
sudo pip3 install docker-compose
sudo systemctl enable docker
On crée notre dossier où sera notre docker-compose.yaml
mkdir /home/ravindra/mqtt_io
Et on crée notre fichier de conf avec
vi /home/ravindra/mqtt_io/config.yml
Puis on colle ceci
mqtt:
host: mqtt.ravindra-job.com
port: 1883
user: "user_mqtt"
password: "MysuperPassword2022"
topic_prefix: homeassistant/binary_sensor
ha_discovery:
enabled: yes
gpio_modules:
- name: rpi
module: raspberrypi
digital_inputs:
- name: motion_desk_3
module: rpi
pin: 17
ha_discovery:
component: binary_sensor
name: motion_desk_3
device_class: motion
- name: door_portillon
module: rpi
pin: 1
ha_discovery:
name: door_portillon
device_class: door
DOCKER
On va maintenant voir comment construire tout ça sous docker. En effet, la version officiel docker étant plus mise à jour (à l’heure à laquelle j’écris cet article) nous devons donc la créer.
(on exécutera toutes nos commandes dans /home/ravindra/mqtt_io/) :
- On lui demande les modules avec requirements.txt :
vi requirements.txt
Et on y colle :
mqtt-io==2.2.6
RPi.GPIO==0.7.1
- on édite notre fichier Dockerfile
FROM python:3.8
COPY requirements.txt .
RUN pip install -r requirements.txt
CMD [ "python3", "-m","mqtt_io","/config.yml" ]
Puis on construit avec
sudo docker build . -t mqttio
On vérifie que notre image fonctionne correctement avec
sudo docker run -ti --rm -v ${PWD}/config.yml:/config.yml --privileged mqttio
- Maintenant on construit notre docker-compose.yaml
version: '3.3'
services:
mqtt:
image: mqttio
volumes:
- ./config.yml:/config.yml
privileged: true
restart: unless-stopped
On démarre notre docker compose
docker-compose down && docker-compose up -d && docker-compose logs -f
Installation hardware
On notera qu’un PIN ( utilise dans la configuration de MQTT_IO) est égal à un GPIO. Ci dessous un exemple pour le PIN 2 (GPIO 2)
Si vous voulez plus de scripts Home automations ou sur Domotique vous pouvez voir mes repos à ce sujet : https://github.com/ravindrajob/