Gestion On/off sur Esp8266 via MQTT

Forum dédié au protocole MQTT : fonctionnement, intégration ...
Pour les questions concernant le plugin de FlyingDomotic, merci d'utiliser le sous-forum dédié.
pierrotori
Messages : 821
Inscription : 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 : 772
Inscription : 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 : 821
Inscription : 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 : 772
Inscription : 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 : 821
Inscription : 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) Consulté 3073 fois
pierrotori
Messages : 821
Inscription : 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
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

Re: Gestion On/off sur Esp8266 via MQTT

Message par pierrotori »

Suite à une installation de domoticz en container docker , celui-ci n'embarque pas la commande mosquitto_pub du package mosquitto_client

je me demandais comment font les plugins mqtt autodiscovery et mqtt lan car ceux ci fonctionnent sans ce package ?

Pour l'instant la seule solution serait d'installer le package mosquitto_client dans le contenaire mosquitto alors qu'il existe dans le contenaire mosquitto !
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

Re: Gestion On/off sur Esp8266 via MQTT

Message par pierrotori »

Ayant mis en place la gestion on/off avec retour d'état je voulais ajouter un topic mqtt de mon esp8266 afin de vérifier facilement que tous les 20 min quand il se réveille il est opérationnel au niveau connection dans MQTT
Quellle valeur je peux insérer et donc récupérer au réveil de l'esp, je pensais à un timerhttps://nodemcu.readthedocs.io/en/relea ... s/rtctime/, ou gérer une info dans rtcmemoryhttps://hutscape.com/tutorials/rtc-memoryquand pensez vous ?
Flying Domotic
Messages : 772
Inscription : 10 mars 2020, 15:26

Re: Gestion On/off sur Esp8266 via MQTT

Message par Flying Domotic »

Il est possible de lire un topic avec l'ESP, de l'incrémenter et de le réécrire.

Ou de se (re)synchroniser sur l'ESP avec NTP et d'écrire la date et l'heure courante dans MQTT, puis de se ré-endormir.
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

Re: Gestion On/off sur Esp8266 via MQTT

Message par pierrotori »

Je viens d’essayer avec un compteur je galere avec le type de variable
Quand rtc adjust et le rtc now ca ne marche pas avec le deepsleep j’ai toujours la meme date 2000-00-40 ?!?

Si tu as un bout de code a tester je veux bien
Je voudrais éviter de passer par le ntp
Répondre