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
Puis, clic sur ajouter une intégration, dans la zone de recherche saisir mqtt, puis clic sur le petit chevron.
Puis clic à nouveau sur MQTT
Saisir le nom ou l’adresse IP du relai et clic sur valider.
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.
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.
Clic sur choisissez une autre carte. Puis dérouler vers le bas et cliquer sur la tuile ‘capteur’.
Configurez à votre goût et cliquez sur enregistrer, puis terminer en haut à droite pour sortir du mode édition.
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.
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!