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 :
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.
Sur l'image ci-dessous, on renseigne le nom en 1, le type de capteur en 2 (on met Dummy ... ).
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.
Ensuite on se rend dans l'onglet Dispositifs et on relève l'idx du capteur comme sur l'image ci-dessous.
Si on se rend sur l'onglet Température on voit notre capteur.
Associer une sonde DHT21 à notre capteur virtuel
Pour les tests j'ai branché une sonde DHT21 au GPIO4 (D2) du NodeMCU.
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¶m=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:
Voici ce que donne la com série du NodeMCU:
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.
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.
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.
On se rend dans l'onglet Interrupteur et on clique sur modifier:
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:
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.
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:
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:
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 :
Et qu'on l'éteint par le bouton :
L'interrupteur virtuel est maintenant un va et viens de notre bouton poussoir.