Routeur MQTT avec Node-RED, connecter tous vos modules Sonoff Tasmota à cloudMQTT

Dans l’article précédent, nous avons testé le broker en ligne gratuit cloudMQTT. L’offre gratuite est limitée à 5 connexions simultanées. C’est largement suffisant pour piloter un serveur domotique même lorsque vous n’êtes pas chez vous, mais c’est trop peu si vous avez développé de nombreux objets connectés pilotés en MQTT.

 

Je vous propose ici de développer un routeur MQTT à l’aide de  Node-RED.  Cerise sur le gateau, tous les échanges avec vos accessoires domotiques DIY seront sécurisés pour une connexion SSL entre Node-RED et cloudMQTT.

Configuration nécessaire : broker MQTT local, Node-RED sur Raspberry Pi

Vous aurez besoin d’un broker local ainsi que de Node-RED. Le Raspberry Pi (ou n’importe quel autre mini-PC) est tout indiqué pour ce type d’application. Le rapport performance / consommation énergétique est imbattable.

Je propose toujours le broker Mosquitto dans mes projets mais il en existe beaucoup d’autre. Peu importe le broker employé, le principe sera le même.

Suivez ce deux tutoriels pour préparer votre environnement :

Si le sujet vous intéresse, voici d’autres articles pour aller plus loin avec Node-RED

Voir tous les articles sur Node-RED

Créer la connexion au broker local (ici Mosquitto)

La première chose à faire et d’ajouter un Node MQTT au flow courant

node-red node mqtt input

Faites un double clic pour éditer les paramètres du Node. Cliquez sur le crayon à coté du sélecteur Add new mqtt-broker.

node-red mqtt router cloudmqtt add broker

Configurer la connexion à Mosquitto

  • Server : indiquez l’adresse IP ou localhost si Mosquitto est installé sur le même Raspberry Pi que NodeRED
  • Port : 1883 par défaut
  • User et password à l’onglet Security (conseillé)

mosquito node-red mqtt connexion

Il est possible de publier des messages automatiquement pour connaître l’état du routeur en allant sur l’onglet Messages pour

  • Le démarrage du routeur (birth message)
  • L’arrêt du routeur (close message)
  • Une erreur (will message)

Je vous conseille de fixer le QoS à 2.

Terminer la configuration en cliquant sur Done dans le coin supérieur droit.

node-red mqtt connection configre messages

Connecter le routeur à cloudMQTT

Ajouter un nouveau Node MQTT de type Output sur le flow. Faites un double clic pour le configurer.

node-red mqtt output node

Configurer la connexion avec les paramètres récupérés sur l’instance cloudMQTT :

  • Server : l’instance cloudMQTT
  • Port : indiquez le port SSL pour que la connexion soit sécurisée
  • Cocher Enable secure SSL/TLS connection
  • Saisissez le user et password de l’instance dans l’onglet Security

cloudmqttt node-red connection

Vous pouvez également configurer des messages qui permettront de connaître l’état du routeur. Voici un exemple de configuration.

cloudmqtt messages node-red configuration router

Déployer le routeur MQTT sur Node-RED

Il ne reste plus qu’à relier les deux Nodes et déployer le flow en cliquant sur Deploy dans le coin supérieur droit.

node-red cloudmqtt router mosquitto raspberry pi

Ouvrez sur le Websocket UI sur cloudMQTT pour vérifier que le routeur est bien démarré. Ici, j’ai également allumé une prise connectée Sonoff S26 hackée avec le firmware Tasmota. Le message avec l’état stopped a été envoyé au moment du déploiement du flow, c’est parfaitement normal.

cloudmqtt websocket ui node-red router status

Routeur bi-directionnel pour les accessoires Tasmota

Cette configuration ne fonctionne malheureusement que dans un sens. Avec le flow précédent, On va pouvoir récupérer tous les états et les valeurs (sur Homy par exemple), mais on ne pourra pas renvoyer des commandes pour allumer / éteindre un module Sonoff. Pour faire cela, il va falloir renvoyer les messages entrant sur cloudMQTT et les renvoyer vers le broker local.

Pour que ça fonctionne, on va filtrer les messages suivants le type de topic. Tasmota publie des messages sur 3 topics différents :

  • cmnd : commande à exécuter sur le module (on, off, toggle)
  • stat : retour d’état d’une commande sur le module
  • tele : information sur l’état du module.

Le premier bloc transfert tous les messages publiés sur le topic stat/# vers cloudMQTT. Le # permet de renvoyer de tous les accessoires Tasmota

Le second flow transfert les commandes envoyés sur cloudMQTT sur le broker local (sur lequel sont connectés les accessoires Sonoff – Tasmota sont connectés). Cette fois on filtre uniquement les messages publiés sur le topic cmnd et qui se termine par POWER. Pour cela on utilise le + (wildcard un seul niveau*)

sonoff tasmota mqtt router cloudmqtt

N’oubliez pas d’adapter le topic si vous avez configuré un préfix sur Tasmota

(*) le wildcard multi-niveau # ne fonctionne pas sur Node-RED.

Code source du routeur MQTT Node-RED

Coller ce code de ce flow sur votre Node-RED puis modifiez les paramètres de connexion avant de le déployer.

[{"id":"4de21b42.3cb0d4","type":"mqtt in","z":"1c02b62a.c1ff4a","name":"","topic":"stat/#","qos":"0","datatype":"auto","broker":"80ccacd4.35a24","x":90,"y":100,"wires":[["ddff4f0.0c79fb"]]},{"id":"ddff4f0.0c79fb","type":"mqtt out","z":"1c02b62a.c1ff4a","name":"cloudMQTT","topic":"","qos":"","retain":"","broker":"6c628311.0486ac","x":330,"y":100,"wires":[]},{"id":"e6695679.c6a678","type":"mqtt in","z":"1c02b62a.c1ff4a","name":"","topic":"cmnd/+/POWER","qos":"0","datatype":"auto","broker":"6c628311.0486ac","x":120,"y":180,"wires":[["d756894a.745608","80b760e.ba703a"]]},{"id":"d756894a.745608","type":"mqtt out","z":"1c02b62a.c1ff4a","name":"Mosquitto local","topic":"","qos":"","retain":"","broker":"80ccacd4.35a24","x":340,"y":180,"wires":[]},{"id":"80b760e.ba703a","type":"debug","z":"1c02b62a.c1ff4a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":330,"y":240,"wires":[]},{"id":"80ccacd4.35a24","type":"mqtt-broker","z":"","name":"mosquitto","broker":"192.168.1.90","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"node-red-router","birthQos":"2","birthRetain":"false","birthPayload":"started","closeTopic":"node-red-router","closeQos":"2","closePayload":"stopped","willTopic":"node-red-router","willQos":"2","willPayload":"stopped"},{"id":"6c628311.0486ac","type":"mqtt-broker","z":"","name":"cloudMQTT","broker":"m24.cloudmqtt.com","port":"26307","tls":"","clientid":"","usetls":true,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"node-red-router/status","birthQos":"2","birthRetain":"false","birthPayload":"online","closeTopic":"node-red-router/status","closeQos":"2","closePayload":"stopped","willTopic":"node-red-router/status","willQos":"2","willPayload":"stopped"}]

Voilà, vous pouvez maintenant connecter autant d’accessoires domotiques et objets connectés MQTT et les piloter hors de chez vous depuis Homy ou une appli. Rien ne vous empêche d’adapter le principe pour l’adapter à d’autres firmware (Espurna, ESPEasy, code Arduino ou Python…)

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous désinscrire à tout moment.

Promos à ne pas louper

Donnez votre avis

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Domotique et objets connectés à faire soi-même