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.
Sommaire
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
- Node-RED. Ajouter un widget météo au Dashboard connecté à OpenWeatherMap avec du code HTML / Angular
- Node-RED. Créer un dashboard pour objet connecté. Bouton, liste, interrupteur, slider, formulaire (Partie 1)
- Node-RED. Dashboard pour objet connecté. Jauges, graphiques, notifications, template HTML (Partie 2)
- Intégrer un module ESP32-CAM à un Dashboard Node-RED (firmware modifié)
- Node-RED. Sauvegarde automatique des flows par email, FTP, copie locale
- Débuter avec l’Arduino et Node-RED. Enregistrer et afficher des mesures en JSON depuis le port série
- Routeur MQTT Node-RED vers cloudMQTT, accéder à vos modules Sonoff Tasmota
- Test du détecteur de fumée Xiaomi Mijia Honeywell avec Domoticz, notification d’urgence avec PushOver
- Installer Grafana sur macOS et Raspbian pour Raspberry Pi. Exemple de dashboard pour objet connecté MySensors avec Node-RED et InfluxDB
- Plugin HomeKit pour Node-RED, plus facile à utiliser que Homebridge
- Installer Node-RED sur Raspbian Lite (Raspberry Pi Zero WH ou autre modèle)
- Node-RED + MQTT + ESP8266 : comment piloter un système articulé PTZ en WiFi
- Orange Pi : test du package OPI.GPIO pour Node-Red (node-red-contrib-opi-gpio)
- Utiliser Node-RED pour créer une passerelle entre MySensors et Blynk (serveur local)
- ESP Easy + MQTT + Node-RED. Communication bi-directionnelle + dashboard
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
- 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é)
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.
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 :
- 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
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 :
- 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*)
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]