Frage zu MQTT

Rach78

Banned
Registriert
März 2007
Beiträge
2.636
Bin grad dabei mich in MQTT einzuarbeiten.
Was ich aber noch nicht ganz verstehe: Mein EVCC published seine Daten zu meinem Broker.
Wenn ich jetzt mit dem MQTT Explorer das Topic "evcc" subscribe erhalte ich alle Daten die von EVCC kommen.
Einige Werte werden aber scheinbar alle 30sekunden neu gepublished, andere scheinbar nur einmalig bzw bei Veränderung.
"status" ist zB so ein Ding was scheinbar nur einmal gesendet wird.

Woher bekomme ich als neuer subscriber aber diese Werte die nur einmalig oder bei Änderung gesendet werden? Hat der Broker so eine Art Cache und wenn ich mich verbinde schickt er mir erstmal alle subtopics zu und danach nur noch die Änderungen?

Andere Werte ändern sich nicht, werden aber scheinbar trotzdem in einem Interval von 30s neu gesendet.
Wie verfährt eigentlich evcc. Wenn es die Verbindung zum Broker verliert und wieder neu aufbaut sendet es dann einmal wieder alle Werte dahin?

Was passiert bei einem neustart des Brokers. In dem Fall würde der Broker doch wieder alle Werte benötigen und nicht nur die die regelmäßig gesendet werden.
Was bekomme ich als Subscriber wenn ich nach einem Neustart "schneller" bin als der Publisher. Den letzten Wert oder gar nichts?

Diese Werte die sich nicht ändern oder nur bei Veränderung scheinen "retained" zu heißen.

Es gibt das topic status=online.
Ich frage mich wie kann es jemals offline werden. Wenn Evcc down ist oder die Verbindung verloren hat bekommt der Broker doch keine Antwort Nachrichten mehr.
 
Ein MQTT Broker ist keine Datenbank. Wenn du dich als Client subscribest dann musst du nicht unbedingt eine Nachricht bekommen. Es werden auch nicht wieder alle Nachrichten gelesen etc.

Im Prinzip musst du kontinuierlich alle Nachrichten in eine Datenbank schreiben und darstellen.

Bspw. könntest du alle Nachrichten in einer MySQL DB speichern und mittels Grafana anzeigen. Als Middleware zwischen MQTT Broker und DB könnte sowas wie Node-Red funktionieren.

Aber ich bin mir sicher, dass es für deine PV schon was fertiges in HomeAssistant oder anderen Smarthome Platformen gibt…
 
Würde an deiner Stelle auch eine Node Red Instanz zwischen schalten...

Und den MQTT Input mal einfach in eine Debug Node laufen lassen.

So siehst du was überhaupt alles ankommt. Und in welchen Intervallen.

Wenn man die Daten ausklappt in der Debug Node, kann man auch via "Pfad kopieren" nur einzelne Nachrichten auslesen.
 
Bei mqtt gibt es retained messages. Diese sind persistent, bis ein neuer Wert kommt.

Wenn du alle Werte aus der Zwischenzeit haben willst, achte darauf dass du die gleiche Client ID nimmst und Clean Session false ist.

Wenn der Broker (mosquitto?) Korrekt konfiguriert wurde, klappt das
 
Man kann Nacrichten als "retained" publishen, dann merkt der Broker sich den letzten Wert und verteilt diesen an neue Subscriber, sobald diese sich verbinden. Ansonsten bekommst du als Subscriber nur Nachrichten, die ankommen, seit due subscribt bist.

Die Status-Message hat einen "last will". Soll heißen, der Publisher kann festlegen, was der Status werden soll, wenn er die Verbindung beendet oder verliert, z.B. "offline".
 
ah okay danke. Das heißt wenn eine Nachricht mit retained gekennzeichnet wird und um 16uhr gepublished und ich mich um 17uhr subscribe bekomme ich bei Verbindung direkt die retained Nachrichten rübergschickt und die nicht retained Nachrichten kommen wenn sie gepublished werden?
Ergänzung ()

blablub1212 schrieb:
Bspw. könntest du alle Nachrichten in einer MySQL DB speichern und mittels Grafana anzeigen. Als Middleware zwischen MQTT Broker und DB könnte sowas wie Node-Red funktionieren.

Aber ich bin mir sicher, dass es für deine PV schon was fertiges in HomeAssistant oder anderen Smarthome Platformen gibt…
Ich nutze HA. Mir geht es aktuell aber um die Verteilung von Nachrichten da ich mein Wechselrichter nur eine Verbindung erlaubt zum auslesen und das bereits evcc macht. Also verteile ich die Werte weiter über MQTT...
 
Zurück
Oben