MQTT Grundverständnis

Begonnen von chanky, 31 Januar 2019, 21:29:31

Vorheriges Thema - Nächstes Thema

chanky

Hallo zusammen,
Ich hab eine Verständnis Frage zu MQTT + FHEM.

Und zwar:
Ich hab ein Dummy Gerät MQTT fähig über die MQTT Generic Bridge gemacht und das Gerät abboniert eine bestimmte  topic, als Broker verwende ich  Mosquitto auf ein RPi.

Auf dem Handy habe ich MQTT Dash installiert und im App habe ich mir ein Taster angelegt, wenn der Taster betätigt wird, soll er eine 'set topic' den Broker mitteilen, QOS ist auf 1 und Retained=1. Das ganze funktioniert super.

Nun ist mir aufgefallen wenn mein fhem server neue gestartet wird reagiert das Gerät ob ein neue Nachricht empfangen worden ist. Im attribut mqttsubscribe verwende ich stopic um das 'state' vom Gerät automatisch zu setzen.

Ich hab so verstanden durch qos =1 soll quasi ein Handshake passieren zwischen Sender und Empfänger. Der Sender übergibt dem Broker die Nachricht und wartet bis der Empfänger sagt er hat die Nachricht bekommen und erst dann ist die Kommunikation beendet. Stimmt so?

Warum reagiert jetzt mein Dummy Gerät auf die alte Nachrichten nach shutdown restart?


Danke euch im voraus!
LG
Chanky

Sent from my SM-G930F using Tapatalk


hexenmeister

QOS hat mit diesem Verhalten nichts zu tun. QOS 1 wird in einem IP-Netz eh überschätzt.
Dein Problem ist retain. Ist eine Nachricht einmal mit dem Retain-Flag gesendet, ist sie beim Brocker abgespeichert und wird JEDEM Klient mitgeteilt, der sich auf das selbe Topic anmeldet. Das passiert solange, bis die Nachricht überschrieben wird. Dabei überschreibt eine Nachricht OHNE retain, eine Nachricht mir Retain-Flag NICHT! Gelöscht wird sie erst, wenn eine Nachricht mit gleichem Topic und einem NULL-Inhalt gesendet wird!
Z.B. mosquitto_pub -t <topic> -r -n

Lösche alkle 'retained' Nachrichten und verwende den Flag mit Bedacht und sehr sparsam ;)
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

chanky

Super! danke für die tolle Erklärung jetzt habe ich endlich gecheckt :)
LG


Sent from my SM-G930F using Tapatalk