Gestion On/off sur Esp8266 via MQTT

Forum dédié au protocole MQTT : fonctionnement, intégration ...
Répondre
pierrotori
Messages : 392
Enregistré le : 29 févr. 2016, 12:11

Gestion On/off sur Esp8266 via MQTT

Message par pierrotori »

Bonjour,

Suite à l'achat d'une porte fermeture auto via capteur d'obscurité sur ali le rapide, celle ci se fermait trop.
j'ai voulu l'améliorer en utilisant un planning via une device on/off
Concept
le on/off de la device publie un ordre on/off en retain sur le topic poule/in du broker MQTT
l'esp8266 reçoit le message et alimente la porte afin que celle ci s'ouvre ou se ferme
l'esp8266 publie sur le topic domoticz/in on/off sur la device "poule porte"
l'esp8266 publie une mise à jour de variables dans domotiz afin de pouvoir contrôler que l'ordre à déjà été envoyé

mon problème est que mon esp8266 est en deepsleep il recoit bien l'ordre qui a été émis en retain lors du réveil, mais il le reçoit à chaque fois qu'il se reveille

gestion reception de l'ordre publish retain
Question 1 : Si c'est la bonne solution de gérer le publish en mode retain pour l'esp8266 qui est en deepsleep alors comment fait on pour lui dire que l'on a recu le message ?

gestion retour d'état
Question 2: le fait que l'esp8266 envoie l'ordre on/off sur la device poule(interrupteur) , cela correspond au retour d'état de l'ordre passé , comment gérez vous cela dans le script dzvents de domoticz?
je vais avoir cette règle if (item.state == 'Open' or item.state == 'On' ) pour gérer l'action d'ouverture, cela veut dire que je le remet en off en attendant que l'esp8266 envoi l'ordre ? mais du coup je renvoie un ordre Off, comment faire ?!?

Pierrotori

Flying Domotic
Messages : 220
Enregistré le : 10 mars 2020, 15:26

Re: Gestion On/off sur Esp8266 via MQTT

Message par Flying Domotic »

De mon point de vue, l'utilisation du flag retain est la bonne, vu que l'ESP n'est pas en état de recevoir l'ordre quand il a été publié.

Si on veut suivre l'état de façon précise, une solution peut être d'avoir un sélecteur avec 4 états au lieu d'un switch :
  • Off
  • Off demandé
  • On demandé
  • On
Le Domoticz positionne les états "demandés", et l'ESP confirme l'exécution en renvoyant les états "On" et "Off". On peut aussi remplacé "demandé" par "en cours", ou en fait n'importe quelle valeur.

L'ESP ne traitera ensuite que les états "demandés".

On peut aussi avoir 2 switchs, l'un "Commande", l'autre "Etat", l'ESP ne faisant rien si "Etat" = "Commande".

pierrotori
Messages : 392
Enregistré le : 29 févr. 2016, 12:11

Re: Gestion On/off sur Esp8266 via MQTT

Message par pierrotori »

En effet 2 Switch paraît bien pour gérer le retour d'état, merci

Par contre qu'elle est la commande pour supprimer le message en retain sur l'esp8266?
Ayant trouvé entre temps, il faut donc un message vide avec l'indicateur de rétention défini sur Vrai sur le topic.
C'est le seul moyen de supprimer un message retenu

Code : Tout sélectionner

client.publish(mqtt_subscribe, ".", true);

Flying Domotic
Messages : 220
Enregistré le : 10 mars 2020, 15:26

Re: Gestion On/off sur Esp8266 via MQTT

Message par Flying Domotic »

Non, il faut que les 2 switchs soient en "retain".

Quand L'ESP va se réveiller, il va :
  • lire les 2 switchs "état" et "commande"
  • comparer leurs valeurs
  • si elles sont différentes, passer la sortie sur la valeur contenue dans "commande" et réécrire "état" avec le contenu de "commande"
Comme ça, au prochain réveil, "état" sera égal à "commande", et il ne fera rien ... jusqu'à ce que les valeurs soient différentes.

pierrotori
Messages : 392
Enregistré le : 29 févr. 2016, 12:11

Re: Gestion On/off sur Esp8266 via MQTT

Message par pierrotori »

Bonne idée de gérer l'action et le statut, je l'avais fait par des variables, du coup j'ai changé merci et c'est plus simple et plus robuste

pour l'instant je l'ai géré avec un seul switch, je peux voir le retour renvoyé par l'esp8266 via MQTT dans la log
poule.PNG
poule.PNG (7.28 Kio) Vu 348 fois

pierrotori
Messages : 392
Enregistré le : 29 févr. 2016, 12:11

Re: Gestion On/off sur Esp8266 via MQTT

Message par pierrotori »

Suite a l'idée de @flying je vais appliquer la même solution pour faire la montée de version qui permettra de de pas consulter le NAS si pas besoin de flasher
Je pars du principe que le broker est le point d'entrée avant de faire des actions
Un publish état flash via un widget domoticz car sinon il faudrait faire un plugin et la je ne maîtrise pas cette partie
L'iot le détecte écrit flashing et lance l'OTA suite au flash , cela permettra de vérifier la version après ce mode flashing et de faire un publish avec la version en cours

Répondre