Forum: PC-Programmierung Mosquitto letzte Nachricht erhalten


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von anna (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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

von Wolfgang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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

von anna (Gast)


Bewertung
0 lesenswert
nicht lesenswert
sehr sehr geil...

Danke :)

von bert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

geht das auch mit einem ESP8266 (ich Programmiere mit der Arduino IDE)

Vielen Dank

von Michael U. (amiga)


Bewertung
0 lesenswert
nicht lesenswert
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

von Marco H. (damarco)


Bewertung
0 lesenswert
nicht lesenswert
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
von Michael U. (amiga)


Bewertung
0 lesenswert
nicht lesenswert
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

von Marco H. (damarco)


Bewertung
0 lesenswert
nicht lesenswert
Im AWS wird das über die Geräte Schatten gemacht. Wie gesagt wenn du 
diese Flags setzt wird die Verbindung getrennt.

von Marco H. (damarco)


Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.