Domoticz, MQTT et NodeMCU

Domoticz

Pour installer Domoticz selon votre plateforme il faut suivre ce wiki.

Une fois installé, on s'y connecte adresse_ip_de_domoticz:port_de_domoticz, chez moi domoticz est installé sur un NAS Synology, vous arrivez sur la page d'accueil :

image non disponible

Sur mon NAS le port de domoticz est le 8084, sur Raspberry il est différent je crois.

Ajouter un capteur

On va crée un capteur virtuel de température et d'humidité dans domoticz, pour cela on se rend dans l'onglet Réglages puis Matériels.

image non disponible

Sur l'image ci-dessous, on renseigne le nom en 1, le type de capteur en 2 (on met Dummy ... ).

image non disponible

Ensuite on clique sur Créer un capteur virtuel en 3 Sur l'image ci-dessus.

On le nomme et donne les paramètres qu'il génère comme sur l'image ci-dessous.

image non disponible

Ensuite on se rend dans l'onglet Dispositifs et on relève l'idx du capteur comme sur l'image ci-dessous.

image non disponible

Si on se rend sur l'onglet Température on voit notre capteur.

image non disponible

Associer une sonde DHT21 à notre capteur virtuel

Pour les tests j'ai branché une sonde DHT21 au GPIO4 (D2) du NodeMCU.

image non disponible

Et voici le programme qui lit la sonde et envoie les datas toutes les 10 secondes.

DHT_Domoticz.ino

On a ajouté la librairie PubSubClient pour communiquer avec MQTT.

L'URL que l'on envoie à domoticz est de cette forme : /json.htm?type=command&param=udevice&idx=VOTREIDX&nvalue=0&svalue=VOSDATAS

&idx=VOTREIDX -> l'idx de votre capteur virtuel.

&nvalue=0 -> pour des datas numériques (une seule datas) pas notre cas ici.

&svalue=VOSDATAS -> pour des datas en texte (plusieurs datas séparées par ;) c'est notre cas.

Résultat :

Dans Domoticz, notre capteur à pris les valeurs de notre sonde DHT21:

image non disponible

Voici ce que donne la com série du NodeMCU:

image non disponible

Associer un interrupteur

On va créer un nouveau capteur comme à l'étape Ajouter un capteur et cette fois comme capteur virtuel on choisi Interrupteur.

image non disponible

Ce qui diffère de l'exemple précédent, c'est que la sonde ne faisait qu'envoyer des datas, ici l'interrupteur peut être activé ou désactivé par domoticz, on aura donc des infos à recevoir en plus d'en envoyer.

Pour les tests j'ai branché un bouton poussoir au GPIO0 (D3) et une LED au GPIO2 (D4) du NodeMCU.

image non disponible

Et voici le programme qui lit le bouton, allume la LED en conséquence et envoie les datas à Domoticz et réciproquement depuis Domoticz.

SWITCH_Domoticz.ino

pour que Domoticz agisse sur le NodeMCU, il faut modifier dans Domoticz le Switch et ajouter les commande on/off qui renvoie vers nos fonctions allume et éteint.

image non disponible

On se rend dans l'onglet Interrupteur et on clique sur modifier:

image non disponible

On ajoute http://192.168.X.X/on à action on et http://192.168.X.X/off à action off en remplaçant l'IP par celle du NodeMCU.

Et on sauvegarde.

Résultat :

Dans Domoticz, notre capteur prend les valeurs du bouton.

Voici ce que donne la com série du NodeMCU quand on active la LED par le bouton puis on éteint par Domoticz:

image non disponible

MQTT Domoticz

MQTT, pour Message Queuing Telemetry Transport , est un protocole de messagerie de publication et d’abonnement (publish/subscribe) basé sur le protocole TCP/IP.

Un client, appelé publisher, établi dans un premier temps une connexion de type ‘publish’ avec le serveur MQTT, appelé broker.

Puis, le publisher transmet les messages au broker sur un canal spécifique, appelé topic.

Par la suite, ces messages peuvent être lus par des abonnés, appelés subscribers, qui au préalable ont établi une connexion de type ‘subscribe’ avec le broker.

Ainsi, la transmission et la consommation des messages se font de manière asynchrone.

Si l'on a beaucoup de capteur, il est préférable de passer par un broker comme MQTT mosquito, car sinon on risque de ralentir le fonctionnement du programme à cause de l'attente des réponse de HTTP.

Le protocole MQTT est plus rapide que le http, les datas sont sous format Json.

Pour installer MQTT Mosquitto sur un Raspberry vous pouvez suivre ce tutoriel.

Une fois installé et configuré (login mdp) on va ajouter le client MQTT à Domoticz, on ajoute un nouveau matériel de type MQTT Client Gateway.

image non disponible

On renseigne l'IP de mosquitto, si c'est la même que domoticz on remplace l'IP par localhost, on renseigne le port 1883 (port par défaut de MQTT mosquitto), et on laisse Publish topic réglé sur out.

On sauvegarde, et on a plus rien a faire coté Domoticz.

On appelle topic les répertoires in, out, de MQTT. domoticz à crée le topic domoticz/in pour les messages entrants et domoticz/out pour les messages sortant.

nos capteurs enverront des datas dans le topic domoticz/in sur MQTT, les clients abonnés au topic domoticz/out recevront les datas sous format Json.

DHT21 MQTT Domoticz

On reprend le montage de la sonde DHT21 vu précédemment.

Et voici le programme qui lit la sonde et envoie les datas toutes les 10 secondes.

DHT_MQTT_Domoticz.ino

Et voici le resultat dans la com série:

image non disponible

On formate les datas pour Domoticz, puis on les envoie au serveur MQTT dans le topic domoticz/in, les abonnés au topic domoticz/out recevront les datas renvoyées par domoticz au format json sur ce topic.

Le capteur virtuel est maintenant l'image de notre sonde DHT

Switch MQTT Domoticz

On reprend le montage du bouton vu précédemment

Et voici le programme qui allume ou éteint la LED par le NodeMCU ou Domoticz :

Switch_MQTT_Domoticz.ino

On a ajouté la librairie ArduinoJson (V6) pour traiter les infos arrivant de MQTT

Et voici le resultat dans la com série:

image non disponible

Au démarrage on envoie l'etat de la LED (off) à domoticz par MQTT, il met la led virtuel a off et revoie cette infos au nodemcu par MQTT car on est abonné au topic domoticz/out.

Si on allume la led par domoticz :

image non disponible

Et qu'on l'éteint par le bouton :

image non disponible

L'interrupteur virtuel est maintenant un va et viens de notre bouton poussoir.