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

Routeur MQTT Node-RED vers cloudMQTT, accéder à vos modules Sonoff Tasmota

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 :

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

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

Configurer la connexion à Mosquitto

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

Je vous conseille de fixer le QoS à 2.

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

Connecter le routeur à cloudMQTT

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

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

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

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.

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.

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 :

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*)

N’oubliez pas d’adaper 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…)

Avez-vous aimé cet article ?
[Total: 0 Moyenne: 0]
Exit mobile version