Verständnisfrage MQTT

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Antworten
mj1234
Beiträge: 10
Registriert: 30. Jul 2020 09:44
Answers: 1

Verständnisfrage MQTT

Beitrag von mj1234 »

Hallo Zusammen,
ich habe da mal eine Frage zu MQTT.
Ich steuere seit Jahren meine Jalousien mit dem RaspberryPi und einem selbstentwickeltem Erweiterungsboard mit diversen MCP23S17.
Den Code habe ich in C geschrieben und er tut seinen Dienst. Nun möchte ich diese Steuerung an Openhab anbinden und dachte MQTT ist meine Lösung.
Ich benutze die Paho MQTT C Client Library. Ich kann Nachricht versenden und mein Broker empfängt diese nun.
Ich habe MQTT als eins zu eins Beziehung verstanden. In meinem Fall hat der Client aber diverse Kanäle da der Raspberry ja alle Jalousien steuert.
Und wie ist das mit den Prioritäten wenn der Client eine Nachricht Published aber gleichzeitig über den Broker eine Nachricht empfangen soll?
Für mein Verständniss müsste das Senden und Empfangen parallel funktionieren sonst gehen mir Pakete verloren.
Ich könnte für jede Jalousie eine Wemos D1 mini nehmen aber das wäre ein ganz schöner Aufwand.
Des Weiteren kommt noch dazu, dass ich über das Erweiterungsboard auch den Zustand meiner Fenster abfragen kann. Das heisst Read and Write über ein C-Programm.
Ist da MQTT überhaupt das richtige? Hat jemand eine andere Idee wie man dieses System an Openhab anbinden kann?

Ich hoffe ich kann eine rege Diskusion starten. Bei Unklarheiten biite Fragen.

Viele Dank im voraus.

Michael

Benutzeravatar
udo1toni
Beiträge: 13989
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Verständnisfrage MQTT

Beitrag von udo1toni »

Also, ich weiß ja nicht, was Du mit 1:1 Beziehung meinst. MQTT ist eine für M2M Kommunikation optimierte Server-Client Struktur.

Der Broker "handelt" mit Nachrichten. Ein Cleint kann Nachrichtenkanäle (Topic) "abonnieren" (so wie man eine Zeitung abonniert) und erhält dann vom Broker alle Nachrichten, die zu den abonnierten Topics gehören.
Umgekehrt kann jeder Client Nachrichten auf jedes Topic senden.

Der Paho mqtt Client kümmert sich dabei um die gesamte Kommunikation. Sobald eine Message empfangen wird, wird die entsprechende Routine aufgerufen. Du musst also nur in der Routine alle möglichen Topics und Messages abgrasen und entsprechend reagieren. Für den Sendeweg gilt entsprechend das gleiche.
Da die Topics streng hierarchisch aufgebaut sind, könntest Du z.B. ein Topic MeinRaspberryPiMitMCP23S17/ erstellen, darin Topics für jeden der MCP23S17, darin jeweils Topics für Status und Kommando.

Daraus ergibt sich dann z.B. das Topic MeinRaspberryPiMitMCP23S17/01/Status
Nun kannst Du einzelne Topics abonnieren oder auch alle Topics des Geräts, indem Du MeinRaspberryPiMitMCP23S17/# abonnierst. Egal, welches Topic nun vom Broker empfangen wird, bekommt Dein Programm eine Nachricht mit dem Topic und dem Payload (der Nachricht selbst).
Dabei wird keine Nachricht verloren gehen, dafür gibt es ja den Interrupt.

Solange Dein Programm nicht extrem grottig ist (und davon gehe ich ausdrücklich nicht aus! ;) ), wird es ohnehin keine Nachricht verpassen, MQTT kann zehntausende Messages pro Sekunde handeln, und das gilt auch für den paho Client.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten