ESP Easy + MQTT + Node-RED. Communication bi-directionnelle + dashboard • Domotique et objets connectés à faire soi-même

ESP Easy intègre plusieurs protocoles de communication par défaut dont plusieurs basées sur MQTT (Domoticz MQTT, OpenHAB MQTT et PiDome MQTT). Ces protocoles sont très axés “serveurs domotiques”. Si vous développé vos propres applications (domotique ou autres) avec Node-RED, nous allons voir comment communiquer avec des objets connectés développés avec des ESP8266 et ESP Easy.

Article actualisé le 21 avril 2020

MQTT permet de communiquer de manière bi-directionnelle entre les deux plateformes. Cela va permettre de récupérer des mesures ou de connaître des états mais également piloter le GPIO des cartes ESP8266.

ESP Easy (R120) ou ESP Easy Mega, attention à la confusion !

Il existe 2 branches (versions) d’ESP Easy ce qui peut entraîner une certaine confusion lorsqu’on débute.

ESP Easy est la version stable (R120) que l’on peut récupérer sur cette page. L’installation à partir de la compilation du code source est difficile (impossible) avec les versions récente de l’IDE Arduino. Suivez ce tutoriel qui explique étape par étape comment installer et configurer le firmware ESPEasy R120 sur un module ESP8266. En cas de problème, utilisez l’utilitaire ESP Tools d’Espressif. Tout est expliqué étape par étape dans ce tutoriel.

ESP Easy Mega est la version en cours de développement disponible ici. Elle embarque plus de plugins, une nouvelle interface et supporte (quelques) cartes de développement ESP32. Pour en savoir plus, vous pouvez lire cet article de présentation. Attention, pour fonctionner votre carte ESP8266 doit au moins disposer d’1MB de mémoire flash (attention à bien choisir votre module ESP-01).

Configuration utilisée

ESP Easy R120 : lisez ce tutoriel pour installer et configurer le firmware sur un module ESP8266

Broker MQTT : Mosquitto (le tutoriel pour l’installation et les premiers pas)

Tous les shields compatibles avec la LoLin d1 Mini

Configurer ESP Easy R120

Donnez un nom à l’appareil (ici esp001). Ce sera “l’entête” du Topic.

Le device porte le nom DHT22. Deux variables sont publiées (temperature et humidity). Elles seront utilisées pour construire le Topic MQTT. Inutile mais obligatoire, il faut indiquer un IDX différent de 0. Sur le shield DHT22, on récupère les mesures sur le GPIO2.

Domoticz, OpenHAB, PiDome : quelles différences ?

ESPEasy nous propose dans la version R120 trois configurations MQTT différentes. Elles sont adaptées pour communiquer avec les logiciels domotiques Domoticz, OpenHAB et PiDome. La différence réside dans la forme des topics publiés et souscrits. Voici un tableau récapitulatif  et un exemple publié par ESP Easy.

Protocole Forme du topic publié

(publish)

Exemple
Domoticz MQTT domoticz/in domoticz/in {“idx”:1,”nvalue”:0,”svalue”:”22.00;38.40;0″}
OpenHAB MQTT /%sysname%/%tskname%/%valname% /esp001/DHT22/temperature 22.00
/esp001/DHT22/humidity 38.40
PiDome MQTT /hooks/devices/%id%/SensorData/%valname% /hooks/devices/1/SensorData/temperature 22.00
/hooks/devices/1/SensorData/humidity 38.40

Comme vous pouvez le constater, il sera bien plus facile de traiter les messages basés sur le protocole OpenHAB MQTT ou PiDome MQTT car ESP Easy publie un topic pour chaque variable. Mais le plus facile à utiliser et sans contest OpenHAB MQTT qui identifie très clairement l’objet ESP Easy, le device et la variable.

Modifier le masque de publication (Publish Template) :

Si le masque ne vous convient pas our que vous souhaitez le standardiser pour le rendre identique à d’autres projets, rien ne nous empêche de modifier le masque. Pour cela, il suffit de vous rendre dans l’onglet Tools puis Advanced.

  • Subscribe Template : masque du message en provenance du Broker MQTT, donc en provenance de Node-RED (ou autre)
  • Publish Template : masque de publication des messages vers le broker MQTT
  • Message Delay : c’est également ici que l’on va pouvoir régler la fréquence de publication des messages (en milli-secondes).

Attention toutefois. Les modifications apportées au Template ne sont pas enregistrées. Si vous changez pour n’importe quelle raison le protocole de communication, le Template créé sera ré-initialisé par celui par défaut d’ESP Easy. C’est dommage mais c’est bon à savoir.

La communication est-elle sécurisée ?

Absolument pas. Tous les messages sont envoyés en clair, aucune sécurité n’est prise en charge du coté d’ESP Easy. Ce n’est pas très gênant si l’objet est une sonde de température, par contre ça pourrait vite devenir un problème si c’est une commande d’ouverture de porte ou du portail de votre domicile ! Par contre, il est possible de sécuriser le Broker MQT, ESP Easy intégrant l’authentification par mot de passe.

Créer son propre protocole

Si décidément vous n’avez pas trouvé votre bonheur, (vous avez besoin de sécuriser la communication) vous pouvez suivre ce tutoriel et créer un nouveau protocole. C’est assez simple à faire en partant d’un module existant.

Récupérer et traiter les messages MQTT sous Node-RED

Pour ce tutoriel, j’ai donc opté pour le protocole OpenHAB qui est très facile à traiter sous Node-RED car les variables sont bien distincts. Node-RED gère nativement le protocole MQTT, il n’y a donc aucun plugin à installer. Faites une recherche dans les Nodes pour les trouver.

Si toutefois le module n’est pas dans la liste, allez vérifier que le Node est bien activé depuis le gestionnaire de palette (si besoin un tutoriel pour découvrir comment gérer les modules Node-RED).

Placez un noeud MQTT in sur le flow et ouvrez la fenêtre de configuration. Commencez par définir le serveur en cliquant sur le crayon à droite de server.

Si Node-RED et Mosquitto sont installés sur la même machine, indiquez localhost dans le champ sinon, indiquez l’adresse IP du Broker MQTT. Idem pour le port qui par défaut est 1883.

Validez. De retour à la fenêtre précédente, choisissez le serveur dans la liste puis indiquez le Topic. Ici, nous allons récupérer la température en provenance du DHT22 du Shield Wemos D1 Mini sur le topic /esp001/DHT22/temperature .

Validez. Branchez un Node de Debug et publiez le flow. Ouvrez l’onglet Debug, les premières valeurs ne vont pas tarder à arriver (en fonction de la fréquence de publication configurée sur l’objet ESP Easy).

Et voilà !

Piloter le GPIO de la d1 mini depuis Node-RED

C’est bien de pouvoir recevoir des données depuis un objet connecté ESP Easy, mais c’est encore mieux si on peut piloter le GPIO (entrées / sorties). Avec le protocole OpenHAB, ESP Easy attend un message de la forme /nom_device/commande.

Dans ce tutoriel, nous avions vu comment piloter le GPIO depuis Jeedom, on va appliquer la même méthode avec le protocole MQTT sous Node-RED.

Ajoutez un node MQTT out sur le flow et ouvrez la fenêtre de réglage. Choisissez le Broker sur lequel seront envoyés les messages. Le topic doit être de la forme /nom_device/gpio/numero_gpio . Le contenu du message devra être 1 (On) ou 0 (Off). On peut également piloter les sorties pwm. Dans ce cas, il suffit de remplacer gpio par pwm dans le topic précédent.

Il ne reste plus qu’à piloter la sortie. Pour ça, rien de mieux que de créer un Dashboard.

Un Dashboard Node-RED pour vos objets ESP Easy

Dans les tutoriels précédents, nous avons vu comment créer un Dashboard à un projet Node-RED. C’est l’occasion de tester sur un objet ESP Easy. Ici, nous n’allons pas refaire les tutoriels précédents (partie 1 – ajouter un dashboard, partie 2 – ajouter des graphiques). Placez deux gauges et connectez chacune à un topic (température / humidité).

Placez ensuite un interrupteur (switch). Ouvrez les réglages et modifiez le type de sortie en numérique. Pour On payload, indiquez 1 et 0 pour Off payload. Reliez le switch au node MQTT out créé précédemment.

Voici le flow obtenu

Et le code du flow qu’il vous suffit d’importer

[{"id":"ead26598.68ece8","type":"mqtt in","z":"f725662f.6dde08","name":"/esp001/DHT22/temperature","topic":"/esp001/DHT22/temperature","qos":"2","broker":"f9d88ab3.7054b8","x":180,"y":100,"wires":[["fc102c9f.55303"]]},{"id":"fc102c9f.55303","type":"ui_gauge","z":"f725662f.6dde08","name":"Gauge : Température","group":"4a05f42b.44c96c","order":0,"width":0,"height":0,"gtype":"gage","title":"Température DHT22","label":"ESP Easy - MQTT","format":"{{value}}°C","min":0,"max":"50","colors":["#66ccff","#ff8000","#ca3838"],"x":440,"y":100,"wires":[]},{"id":"10194e45.fa8972","type":"mqtt in","z":"f725662f.6dde08","name":"/esp001/DHT22/humidity","topic":"/esp001/DHT22/humidity","qos":"2","broker":"f9d88ab3.7054b8","x":170,"y":160,"wires":[["3589c685.9054da"]]},{"id":"3589c685.9054da","type":"ui_gauge","z":"f725662f.6dde08","name":"Gauge : Humidité","group":"4a05f42b.44c96c","order":0,"width":0,"height":0,"gtype":"gage","title":"Humidité DHT22","label":"ESP Easy - MQTT","format":"{{value}}°C","min":0,"max":"50","colors":["#66ccff","#ff8000","#ca3838"],"x":450,"y":160,"wires":[]},{"id":"b722e79d.b0da18","type":"ui_switch","z":"f725662f.6dde08","name":"GPIO 12","label":"GPIO 12","group":"4a05f42b.44c96c","order":0,"width":0,"height":0,"passthru":true,"topic":"","style":"","onvalue":"1","onvalueType":"num","onicon":"","oncolor":"","offvalue":"0","offvalueType":"num","officon":"","offcolor":"","x":220,"y":220,"wires":[["16383035.ed5a3"]]},{"id":"16383035.ed5a3","type":"mqtt out","z":"f725662f.6dde08","name":"/esp001/gpio/12","topic":"/esp001/gpio/12","qos":"","retain":"","broker":"f9d88ab3.7054b8","x":460,"y":220,"wires":[]},{"id":"f9d88ab3.7054b8","type":"mqtt-broker","z":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"4a05f42b.44c96c","type":"ui_group","z":"","name":"ESP Easy + MQTT + Node-RED","tab":"cc4c9cae.cfb85","order":1,"disp":true,"width":"6"},{"id":"cc4c9cae.cfb85","type":"ui_tab","z":"","name":"ESP Easy","icon":"dashboard"}]

Déployez le flow et ouvrez une nouvelle fenêtre dans le navigateur à l’adresse http://localhost:1880/ui

Et voilà, vous récupérez maintenant les mesures du DHT22 et vous pouvez activer ou désactiver le GPIO12 (broche D6 sur la Wemos D1 Mini) !

Avez-vous aimé cet article ?