MQTT Retain Hilfe (Anfänger)

Moin!
Ich habe einen ESP8266 mit einem Temperatursensor. Die Daten werden per MQTT an den ioBroker gesendet. Das geschieht alle 10 Minuten. In der Zwischenzeit geht der ESP8266 in den Deepsleep Modus. Soweit so gut.

Nun möchte ich, dass nach dem Aufwachen nicht nur der Wert gesendet wird, sondern auch ein Wert vom ioBroker abgeholt wird (subscribe). Soweit ich mich informiert habe, muss die Nachricht mit dem Retain Flag versehen werden. Das habe ich im ioBroker so eingestellt. Die eigentliche Frage ist, wie schaffe ich es, dass beim Erwachen ein bestimmter Wert vom ioBroker (unter MQTT) gelesen wird? Da ich den ESP8266 ja immer in den Deepsleep schicke, habe ich alles im Setup und nichts im Loop.

Danke schon mal.....

Grüße aus dem Norden

Hallo,
ich hab jetzt von MQTT keine Ahnung. Aber wenn Du alles im Setup hast könnte das Problem darin bestehen das Du eigendlich in einer Schleife warten müsstest bis die Antwort kommt bevor das Ding wieder pennen geht.

Ich würde das Alles ganz normal im lopp machen. Beispiele Dazu wird es ja geben. dann baust Du dir eine Function in der das in den Deep Sleep gehen drin ist. Diese Function rufst Du nur dann auf wenn alles erledigt ist, also die Antwort angekomen ist. Dann kannst Du auch alles einfach testen, den Funtionsaufruf erst mal unwirksam machen. Zum Testen baust Du dann noch was ein das Dir das senden erst mal in einem festen Zeitraster macht. Wenn dann alles klappt änderst Du die beiden Stellen. Oder ganz kompfortabel mit einer zusätzlichen Statusvariablen. als const bool.

Heinz

Nachtrag Tommy danke das war unvollständig
const bool test=true; im globalteil
oder mit
#define test2 true

Rentner:
Oder ganz kompfortabel mit einer zusätzlichen Statusvariablen. als const bool.

Das passt irgendwie nicht zusammen.

Gruß Tommy

Benutzt du PubSubClient?

Dort gibt es dich die Funktion callback die dir ausgibt was vom Broker zurückkommt. Schau dir mal die Beispiele an der Bibliothek an.

Gruß

Die Callback Funktion ist vorhanden und wurde nie aufgerufen. Habe das jetzt etwas anders gelöst. Beim Testen ist mir aufgefallen, dass beim zweiten Durchlauf ohne DeepSleep die Werte empfangen wurden. Also habe ich das jetzt so geregelt, dass zwei Mal die Werte gesendet werden (beim zweiten Mal werden auch die Werte empfangen) und danach gehts in den DeepSleep. Nicht die eleganteste Lösung aber es funktioniert.

Kannst du nicht den Tiefschlaf einfach am Ende der Callback Funktion aufrufen?

Das war jetzt zu einfach. ;D

Klappt bestens. Danke.

So gehts mir auch oft, den Wald vor lauter Bäumen nicht sehen... :slight_smile:

Freut mich wennes funktioniert.

Gruß

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.