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/) :

  1. 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
  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
  1. 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/