Hallo zusammen, ich baue mir grade einen Arduino-Sketch zusammen und brauche einen Denkanstoß. Bitte nicht gleich alle über Arduino herziehen :D Grundlage ist die MQTT Library https://pubsubclient.knolleary.net/index.html und https://github.com/mertenats/open-home-automation/blob/master/ha_mqtt_rgb_light/ha_mqtt_rgb_light.ino Ziel ist ein MQTT-Client bei einem H801 Ledtreiber. Dieser läuft auch soweit ganz gut mit FHEM und Mosquitto. Jetzt will aber, dass bei einem Neustart der ESP (auf dem H801) mit den alten Werten vom MQTT-Broker gefüttert wird... Dort liegen ja die vorherigen Werte. Seht ihr die Möglichkeit mit der MQTT Library einen Wert abzufragen. Man kann zwar Topics subscriben, aber der Broker sendet ja nicht einfach so den alten Status. Der Client würde den Wert ja updaten. Könnt ihr mir auf die Sprünge helfen? Besten Dank G Ert
Der Broker speichert keine alten Werte, das muss man selber machen, z.B. über eine Datenbank.
Hallo, dafür gibt es bei MQTT die Retained Messages. Er speicher aber eben nur die Message und schickt sie raus, wenn sich ein Client anmeldet, der diesen topic abboniert hat. Das Flag muß aber der Sender der Message, hier also FHEM, setzen Sinn ist, daß der Sender entscheiden soll, ob ein Client eine vielleicht schon Stunden alte Message beim Anmelden am Broker bekommen soll oder nicht. Ich send z.B. die Zimmertemperatur alle 3 Minuten mit reatsin-Flag. Der Client ist eine Anzeige, die beim Einschalten oder Neustart gleich die Temperatur anzeigt und nicht erst max. 3 Minuten später. Es gibt aber eben auch Fälle, wo das nicht passieren soll, sondern der Client eben"keine Ahnung" anzeigt bis er eine Message bekonnt. Der Client kann nicht feststellen, ob es eine alte oder aktuelle Message ist, die da nach dem Start ankommt. Das ist beim MQTT-Protokoll nicht vorgesehen. Gruß aus Berlin Michael
:
Bearbeitet durch User
Besten Dank an alle, habs mit Retain hinbekommen. Bisl Tricky das zusammensetzen: anbei ein paar Codeschnipsel
1 | //Retain topic: |
2 | int len = strlen(LIGHT_ON); |
3 | |
4 | //client.publish(MQTT_LIGHT_RGB_STATE_TOPIC, buf, len, true); |
5 | client.publish(MQTT_LIGHT_RGB_STATE_TOPIC,(uint8_t*) LIGHT_ON,len ,true); |
6 | |
7 | //Abrufen bei Neustart ohne publish |
8 | client.subscribe(MQTT_LIGHT_RGB_STATE_TOPIC); |
Greez Ert
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.