MQTT: Kann ein Abonnent asynchron Daten an einen Produzenten senden?

7

Szenario IoT-Gerät (derzeit IPv4-Gerät), das einmal pro Tag über den TCP-Socket eine Nutzlast an einen Server sendet. Der Server hat eine öffentliche IP-Adresse, das Gerät befindet sich hinter einem Router / NAT. Ich werde ein Modul verwenden, das auf ESP8266 basiert (dh Olimex eins).

Ziel Der Server sollte in der Lage sein, Daten an jeden Client zu senden, wann immer dies erforderlich ist. Ich bin nicht an einer direkten Client-zu-Client-Kommunikation interessiert (dh von meinem Smartphone aus mit einem Gerät verbunden), wie es das Lochern tun soll.

Sonstige Anforderungen Die IoT-Geräte können bis zu mehreren Tausend wachsen. Ihre Internetverbindung wird von einem 4G-fähigen Router / Modem bereitgestellt.

Vorgeschlagene Lösung Soweit ich weiß, ist MQTT eine übliche Lösung. Die Clients senden regelmäßig Daten an den Broker (dh Mosquitto, der auf dem Hosting-Server ausgeführt wird), der wiederum die Haupt-Web-App aktualisiert, die auf demselben Server ausgeführt wird.

Frage Kann die Web-App Daten an einen Kunden senden, wann immer dies über den Broker erforderlich ist? Mit anderen Worten: Kann ein Teilnehmer Daten asynchron an einen bestimmten Herausgeber zurücksenden (dh ohne auf die nächste Übertragung zu warten)?

Kennzeichen
quelle

Antworten:

8

Jeder MQTT-Client kann sowohl abonnieren als auch veröffentlichen, es gibt keinen Unterschied zwischen ihnen (nur mögliche ACL-Regeln, die steuern, welche Benutzer was tun können).

Es gibt auch kein Konzept dafür, dass ein bestimmter Client Daten an einen anderen Client sendet. Nachrichten werden zu Themen veröffentlicht, nicht zu anderen Clients. Es gibt nichts, was einen bestimmten Client davon abhält, ein bestimmtes Thema zu abonnieren, mit dem andere Clients Nachrichten an diesen Client senden können.

Sie müssen auch nicht auf ein eingehendes Abonnement warten, bevor Sie eine Nachricht zu einem Thema veröffentlichen.

MQTT v5 fügt das Konzept des Messaging im Anforderungs- / Antwortstil hinzu. Dazu wird jedoch ein zusätzliches Themenfeld in eine Nachricht eingefügt. Dieses zusätzliche Thema kann von einem Abonnenten gelesen und zum Veröffentlichen einer Antwortnachricht verwendet werden. Aber es ist nur als Hinweis da keine harte Anforderung.

Web Apps können MQTT über Websockets verwenden, um eine Verbindung zum Broker herzustellen und sich genauso zu verhalten wie jeder andere MQTT-Client.

hardillb
quelle
Klare Antwort. Wenn ich das richtig verstehe, sind aus Sicht des Brokers sowohl das IoT-Gerät als auch die Web-App "Clients", die bei Bedarf als Herausgeber oder Abonnent fungieren können. Dann muss ich selbst ein Thema definieren, das es der Haupt-App (zum Beispiel) ermöglicht, ein Gerät zum Neustart "jetzt" aufzufordern - "jetzt" ist, wenn das Gerät tatsächlich Daten mit dem Broker austauscht.
Mark
Ja, das deckt es so ziemlich ab
Hardillb