Hi, gibt es eine möglichkeit, dass Mosquitto, wenn ich einen Thread subscribe, dass ich die letzte Nachricht bekomme? Also nehmen wir an, ich habe einen ADC, welcher alle 30 Minuten eine Messung vornimmt und diese dann an den Thread home/temp schickt und der ADC misst um 10:30 Uhr, ich melde mich jetzt aber mit meinem Client um 10:36 erst an, dann bekomme ich erst in 24 Minuten mit "wie warm es ist". Wenn der Mosquitto aber die nachricht von 10:30 dem "neuen Zuhörer" schicken würde, bräuchte ich keine extra Messung antriggern <- was meine Aktuelle Lösung ist! Vielen Dank
Dafür musst du die Message als "Retained Message" verschicken, also mit gesetztem Retain-Flag. https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages
Hi, geht das auch mit einem ESP8266 (ich Programmiere mit der Arduino IDE) Vielen Dank
Hallo, bert schrieb: > geht das auch mit einem ESP8266 (ich Programmiere mit der Arduino IDE) das hat mit dem ESP8266 nichts zu tun, das ist Sache des benutzten MQTT-Clients. Und ja, sowohl PubSubclient als auch AsyncMQTT können es, wobei der AsyncMQTT eigentlich alles unterstützt was MQTT kann. Gruß aus Berlin Michael
Aber aufpassen, nicht alle MQTT Server unterstützen das auch. Wer mit google oder dem AWS kommuniziert und das Flag setzt wird hart getrennt. Das AWS hat dazu die Geräte Schatten... mein Stack leitet das aus der URI aws:// ab und entfernt das Flag wieder, weil sonst das AWS die TCP/IP Verbindung sofort trennt. Also vorher nachlesen ob das Flag auch unterstützt wird, da hierzu Daten gespeichert werden müssen. Nicht alle Anbieter wollen das und ignorieren es bzw. schließen die Verbindung. Mit MQTT 5 gibt es Abhilfe da bekommt man einen Error Code zurück.
:
Bearbeitet durch User
Hallo, Marco H. schrieb: > Aber aufpassen, nicht alle MQTT Server unterstützen das auch. Wer mit > google oder dem AWS kommuniziert und das Flag setzt wird hart getrennt. dann ist es kein MQTT-Broker bzw. er ist nicht Standard-konform. Punkt. Wäre für mich z.B. auch ziemlich sinnlos. Beispiel? Eine Anzeige bekommt alle 10 Minuten einen Wert per MQTT. Jetzt ist die Anzeige kurz stromlos o.ä. Wenn ich die jetzt wieder anmache muß eine Retained Message kommen, weil ich ja nicht vielleicht 10 Minuten warten will, bis die nächste reguläre Message vom Publisher kommt. Auch ein Aktor möchte nach einem Stromausfall per Retained sofort wieder an gehen wenn das die letzte Message vom Publisher war. Das macht ja für mich gerade MQTT aus, daß ich das Verhalten der Beteiligten nach den Anforderungen bestimmen kann. Der Broker hat zu machen, was der Standard fordert. Womöglich geht bei obigen auch keepAlive und lastWill nicht richtig... Gruß aus Berlin Michael
Im AWS wird das über die Geräte Schatten gemacht. Wie gesagt wenn du diese Flags setzt wird die Verbindung getrennt.
Das mag sein aber... Wenn man einen öffentlichen Broker betreibt und 30000 Themen hat diese jeder auch noch Retain(speichern) setzt hat man 30000 mal Müll auf dem System. Der mitunter nie wieder abgeholt wird. Also jeder Broker muss sich über ein Verfallsdatum Gedanken machen. Hierzu sollte man in der Dokumentation nachlesen wie das gehandhabt wird. Beim AWS ist die Lösung mit dem Schatten gar nicht so dumm. Das Gerät hat wie gesagt einen Schatten und der wird aktualisiert. Google hat glaube ich so etwas ähnliches und beide schränken die MQTT Funktionalitäten ein. Mit dem Schatten kann man auch sehen ab eine Aktion erfolgreich war und auch den Ist Zustand wieder einlesen. Der Schatten hat also zwei Seiten. Beim Anmelden holt man sich den Schatten und kann den an dem Aktor auch die noch ausstehende Aktion auslösen. Also wenn du wild auf deine Taste drückst bleibt der letzte gültig Status erhalten ! Da das Gerät den Schatten nicht aktualisiert hat. https://docs.aws.amazon.com/de_de/iot/latest/developerguide/using-device-shadows.html
:
Bearbeitet durch User
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.