Premiers pas avec Home Assistant et MQTT – 2023

Home Assistant a évolué. Je ré-écrit un article publié en 2019 décrivant une intégration simpliste de MQTT.

Je pars de 3 machines virtuelles sous Debian 11 bullseye.

  • hass2 : home-assistant installé en mode supervisé dans un container Docker
  • mqtt-relai : le relai mqtt
  • mqtt-dev : une machine de développement pour Python (ma pseudo sonde)

Le Relai MQTT

Le broker MQTT est un serveur relai sur lequel des clients viennent se connecter pour publier des valeurs de télémétrie et/ou les lire. Sur une machine virtuelle dénommée mqtt-relai sous debian , j’installe le broker MQTT Mosquitto, ainsi que les clients moquitto :

marc@mqtt-relai:~$ sudo apt-get install mosquitto
marc@mqtt-relai:~$ sudo apt-get install mosquitto-clients

Les clients me seront nécessaire pour la démo ou éventuellement en debug pour voir ce qui passe.

Un premier client simple en python

Debian propose un package python3 MQTT soutenue par la fondation eclipse. Installons le sur une machine de développement appelée mqtt-dev.home :

marc@mqtt-dev:~$ sudo apt-get install python3-paho-mqtt

Dans un éditeur de texte créons le fichier client.py. Celui-ci se connecte au relai et, toutes les secondes, envoie une valeur aléatoire.

#!/usr/bin/python3
import paho.mqtt.client as mqtt
import random
import time
if __name__ == '__main__':
    # création du client
    client = mqtt.Client()
    #connexion au relai
    client.connect("mqtt-relai.dync.fr", 1883, 60)
    # envoi d'une centaine de valeurs comprise entre 19 et 22
    for i in range (1,100) :
        t = 19 + random.uniform(0,3)
        ret = client.publish('gloubi/boulga', t)
        print("émission de la valeur : ", t)
        time.sleep(1)

Rendons le exécutable par un chmod +x client.py. Puis Lançons-le :

marc@mqtt-dev:~$ chmod +x client.py
marc@mqtt-dev:~$ ./client.py
émission de la valeur :  21.4367797887487
émission de la valeur :  20.800905468990816
émission de la valeur :  21.590545135673413
émission de la valeur :  20.97957578391874
émission de la valeur :  21.159879961156207
émission de la valeur :  20.528026457769244
émission de la valeur :  20.25255601325189
émission de la valeur :  21.704482034714495
émission de la valeur :  19.654910629226276

Puis côté relai exécutons un client qui capte tout :

marc@mqtt-relai:~$ mosquitto_sub -h localhost -t "#" -v
 gloubi/boulga 20.38858782022881
 gloubi/boulga 21.706373083284998
 gloubi/boulga 20.331756198864138
 gloubi/boulga 19.183292710571795
 gloubi/boulga 19.773029781040023
 gloubi/boulga 19.824511122802356

\o/ youpi les valeurs publiées par le client apparaissent sur le serveur

Intégration Home Assistant :

Nous allons remplacer le client « mange-tout » par Home Assistant.

Commençons par activer MQTT. Dans l’interface, clic sur Paramètres puis Appareils et services

Copie écran Paramètres

Puis, clic sur ajouter une intégration, dans la zone de recherche saisir mqtt, puis clic sur le petit chevron.

Ajouter une intégration.

Puis clic à nouveau sur MQTT

Ajout MQTT
(copie d'écran)

Saisir le nom ou l’adresse IP du relai et clic sur valider.

Saisie du nom du relai
(copie d'écran)

Après affichage de la boite de dialogue de succès. Nous pouvons passer à l’ajout de notre sonde de t°

Ajoutez un fichier de configuration mqtt en éditant le fichier /usr/share/hassio/homeassistant/configuration.yaml. Aucune obligation d’utiliser vi comme éditeur de fichier, par contre ‘sudo’ lui est nécessaire.

marc@hass2:/usr/share/hassio/homeassistant$ sudo vi configuration.yaml

et en y ajoutant à la fin la ligne :

mqtt: !include mqtt.yaml

Créez le fichier mqtt.yaml et ajouer la déclaration de la sonde

marc@hass2:/usr/share/hassio/homeassistant$ sudo vi mqtt.yaml

Dont le contenu est :

sensor:
  - name: "temperature.interieur"
    state_topic: "gloubi/boulga"
    device_class: temperature

Attention l’indentation est importante. ‘sensor’ est début de ligne, la ligne ‘name’ en retrait de 2 et les suivantes en retrait de 4.

Prenez en compte cette nouvelle configuration, en cliquant sur ‘outils de développement’, puis Vérifier la configuration, Redémarrer et confirmer.

Pour ajouter un affichage à Home Assistant, clic sur ‘Tableau de bord’, les trois petits points en haut à droite, ‘Modifier le tableau de bord’ et confirmez que vous voulez prendre le contrôle.

Modifier le tableau de bord (copie d'écran)

Clic sur ajouter ‘une carte’, ‘par entité’, cherchez ‘tempe’, sélectionnez ‘temperature.interieur’ (le nom dans le fichier mqtt.yaml plus avant) et clic sur ‘continuer’ en bas à droite.

Ajouter une carte (copie d'écran)

Clic sur choisissez une autre carte. Puis dérouler vers le bas et cliquer sur la tuile ‘capteur’.

Choisissez une autre carte. (copie d'écran)

Configurez à votre goût et cliquez sur enregistrer, puis terminer en haut à droite pour sortir du mode édition.

Copie d'écran final de Home Assistant

En relançant ‘./client.py’ sur la machine mqtt-dev, vous devriez voir la ‘température’ changer.

Installation simpliste

Cette installation très simpliste manque cruellement de sécurité et de robustesse. Le broker MQTT accepte les connexions de n’importe quel client. Un client malveillant pourrait publier de fausse valeur ou encore lire des informations. Côté frontal web, la mise en œuvre d’un reverse proxy améliorerait les choses.

De plus, le client ne se reconnecte pas si nous redémarrons le broker.

Une réponse sur “Premiers pas avec Home Assistant et MQTT – 2023”

  1. Après avoir creusé le sujet MQTT, je découvre cet article sur l’integration de MQTT dans Home Assistant (qui in fine est mon objectif). L’exemple est parfait pour se faire une idée de comment ça fonctionne de bout en bout sans pour autant avoir commencé à investir dans des sondes / capteurs. Merci pour ça. De mon côté j’utilise des connexions TLS/SSL avec le broker mais je n’ai pas eu de peine à ajuster. Merci!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *