Publier un message MQTT avec Python et domoticz pip3 , Python3.7 , Domoticz 2020_2
Application pratique:J'utilise Zigbee2mqtt installé sur la même machine que mon serveur MQTT. L'interrupteur Zigbee pour commander l'éclairage du jardin est près de mon tableau électrique alors que l'éclairage du porche d'entrée est commandé par un interrupteur mécanique près de la porte de cette entrée. J'ai donc installé un TS0011 de chez TUYA afin de commander à partir de cet interrupteur mécanique l' éclairage du jardin. Je peux aussi commander cet éclairage depuis mon application perso ( d'un PC, tablette, smartphone) par l' intermédiaire de Domoticz, le schéma:
Les interrupteurs virtuels de Domoticz et le script Python - celui qui commande l' éclairage du jardin est un simple capteur virtuel; il reçoit la position du capteur par un message MQTT envoyé par zigbee2mqtt et par domoticz/out envoi par MQTT comme pour tous les capteurs leurs données voir un exemple de code node-red dans cette page. -celui , alias de l’interrupteur mécanique, qui allume la lampe du porche doit quand il reçoit un ordre d'allumage , envoyer un message mqtt pour allumer également le jardin.
les 2 lignes de commandes pour envoyer les messages mqtt:
le script Python:
Documentation Paho : https://www.eclipse.org/paho/index.php?page=clients/python/docs/index.php pour éviter des erreurs (512 , 256) , penser à convertir le fichier python en UNIX si il a été crée avec notepad++, bloc note,....
Pour convertir le fichier en UNIX :
Attention aussi aux autorisations
Pour info , la connexion avec mon App persoLe plan dans Domoticz : l’interrupteur est ajouté aux autres dispositifs , nécessaire pour la mise à jour de ma page perso , voir cette page.
le fichier exterieur.php est concerné car , quand l'allumage est actif , les lampes doivent être allumées.les css pour l'image svg:
Les lampes concernées en gris passent en jaune si elles sont allumées:
La base de données de l'App perso ,assure l'interface entre les iD Domoticz et l'App perso , des infos ICI
Le script Javascript (en fin de html , ici : footer.php) Ce script effectue la mise à jour de mon App perso à partir des id dans les images svg mais avec les lampes qui peuvent être nombreuses sur un même circuit , la mise à jour ce fait avec une class ce qui est un peut différent comme le montre la fonction ci dessous. Au lieu d'un simple "document.getElementById(ID)" , il faut chercher et modifier chaque élément: