NEWS
MQTT - Grundlagen - Einrichtung - Apps
-
Hallo liebes iobroker - Team,
mqtt ist eine großartige Sache mit viel Potenzial meiner Ansicht nach. Klasse, dass es in iobroker den Adapter für Server als auch Client gibt.
Ebenfalls gefreut habe ich mich über diese Anleitung von @Homoran
Daraus lässt sich schon viel über die Adapter Einrichtung lernen.Generell fehlt es mir jedoch noch ein bisschen an Infos zu dem weiterführenden Arbeiten mit mqtt auf iobroker.
Dazu gebe ich mein Szenario als Beispiel an und stelle an den entsprechenden Stellen Fragen dazu.
1. Es ist ein iobroker mqtt server adapter installiert, welcher der zentrale mqtt Server in meinem Netzwerk darstellen soll.
Einstellungen wie folgt
2. Es ist auf dem selben System ein iobroker mqtt client adapter installiert, welcher dazu dienen soll alle benötigten daten aus dem iobroker in den mqtt server adapter zu bringen. Einstellungen wie folgt:
Hier wäre die erste Frage: Unter "Zusätzliche Subscriptions" stellt man Datenpunkte ein, die der Client abonnieren soll, korrekt? In dem Beispiel mit artnet/# soll der Artnet Adapter abonniert werden - ist das so korrekt eingetragen?
Unter den Objekten werden die Art-Net States korrekt angezeigt (lediglich die individuell vergebenen Namen der Datenpunkte werden nur mit der ursprünglichen Art-Net Nummerierung angegeben).
Verstehe ich richtig, dass Einträge hier eine reine Abonnierung sind? Denn ich kann wenn ich in artnet.0 etwas verändere, die Änderung in dem mqtt Client sehen, aber Änderungen im mqtt Client werden nicht an artnet.0 zurück übertragen.3. Machen wir mit den Einstellungen einen ersten Test mit einem simplen, selbst erstellten Testbutton (boolean, true/false). Dies sind die Einstellungen am Testbutton für den mqtt client:
Die Werte des Testbuttons tauchen korrekt in den Objekten des mqtt-clients auf und aktualisieren sich auch bei Änderung.4. Nun soll im Client ebenfalls eine Änderung des Testbuttons möglich sein und diese an den Testbutton selber gesendet werden. Mit folgenden Einstellungen am Testbutton im mqtt Client funktioniert das auch:
Wenn ich nun das exakt selbe vorgehen mit einem Homematic Taster versuche, funktioniert das nicht. Genauer gesagt kein 2-Wege Synchronisation. Es kommt lediglich vom Homematic Taster im mqtt client an, aber nicht umgekehrt. Was muss ich genau einstellen, damit ich aus dem mqtt Client den Homematic Taster (oder auch diverse andere Geräte) steuern kann?5. Der mqtt Broker soll alle Daten zentral abonnieren und publizieren.
Als zentrale Schnittstelle soll der iobroker mqtt server nun zunächst einmal die Daten aus dem eigenen iobroker zentral verwalten können. Das bedeutet, alle Werte die ich abonniere sollen dort auftauchen und sich bei Änderungen aktualisieren - in beide Richtungen. Sprich wenn ich den Wert am Gerät änderen, als auch wenn ich den Wert im mqtt Server ändere. Eine Synchronisation also. Wie stelle ich das ein?
Es ist mir bisher nicht gelungen, ein Objekt aus iobroker in den iobroker-mqtt Server zu platzieren.6. Fallbeispiel MQTT - Android App
Es gibt mittlerweile ein paar sehr interessante Android Apps, mit denen man - bei vernünftiger mqtt Einrichtung - diverse Geräte in iobroker steuern könnte. Ein Beispiel ist die App IoT MQTT Panel, es gibt aber auch noch ein paar andere.Die App habe ich wie folgt konfiguriert (IP Adresse des iobroker mqtt Servers eingetragen):
Habe dann in der App ein Licht Dimmer 0 - 100 hinzugefügt:
Und siehe da - er taucht im iobroker mqtt server auf, und aktualisiert sich in beide Richtungen innerhalb 1 Sek. !!
Nun frage ich mich warum ist das nicht mit den iobroker - eigenen Werten möglich, bzw. was mache ich falsch?Mit solch einer mqtt App und einem zuverlässigem Sync mit den anderen iobroker States lassen sich ganz neue Ansätze für eine schnelle, responsive und hübsche Visualisierung für eine breite Anwendermasse realisieren.
Einzige Vorraussetzung an dieser Stelle: MQTT.Ich bin euch für jede Hilfe in dieser Hinsicht dankbar und hoffe der Thread kann dann dem einen oder anderen auch noch in Sachen mqtt weiterhelfen.
-
Hey zusammen, gibts hier niemand der den MQTT Adapter nutzt?
Falls doch läuft der bei euch problemlos?
Mir wäre schon weitergeholfen wenn ich die simple Aufgabe bewältige, wie ich innerhalb Client und Broker in iobroker die MQTT States verändere und sie sich jeweils synchronisieren, mit Geräten von Homematic. Also wie in Punkt 4. beschrieben.
Das wäre toll, ich danke euch. -
@smile sagte in MQTT - Grundlagen - Einrichtung - Apps:
Falls doch läuft der bei euch problemlos?
Jepp
Dein eigentliches, oder auch Hauptproblem, ist, dass du dem MQTT etwas "andichten" möchtest für das es eigentlich nicht entwickelt/gedacht ist.
MQTT basiert rein auf publishen (veröffentlichen) und subscriben (abonnieren). Als Beispiel soll eine Pinnwand dienen. Ich hänge da jetzt einen Zettel dran (publishe) "Äpfel zu verschenken". Die Pinnwand schickt dir nun eine Meldung "Es gibt was neues..." Weiter passiert erst mal nix. Erst wenn du jetzt an die Pinnwand gehst, kannst du meinen Zettel lesen (abonnieren).Deswegen klappt das auch mit dem sync bei dir nicht. Dazu müsstet du immer Server/Client auch subscriben/publishen.
Das kann der ioB aber viel besser und effektiver als dass man dies mittels MQTT abbilden möchte.MQTT nutzt man eigentlich, um bspw. einen Sensorwert/Schaltzustand etc. zu übermitteln oder einen Befehl zu senden.
Typisch: Client publisht z.B. einen Temperaturwert + den Schaltzustand eines Relais (Funksteckdose mit Temperatursensor) und subscribt den Befehl "Relais schalten". Dann kann ich im Server die Temperatur ablesen + das Relais schalten. Dies wird dann üblicherweise im ioB weiterverarbeitet wie zB. in der VIS. Für Homematic nimmt man einfach den Adapter dafür, der kann das viel besser als sich hier selbst mit MQTT zu quälen, denn MQTT ist hier nur QoS 0, d.h. "fire and forget". Der Schaltbefehl wird also nur einmal abgesetzt ohne zu prüfen ob er überhaupt ankam...Bei der Android-App funktioniert es deswegen, da hier die App wohl automatisch jeden Topic der gepublisht wird auch subscribed.
-
@SBorg Vielen Dank für deine Antwort!
Okay, das ist natürlich sehr schade. Weil sonst würde MQTT als Schnittstelle zwischen iobroker und vielen anderen interessanten Systemen fungieren können, wie z.B. der im Beispiel genannten App. Man hätte per Sofort eine Vielzahl an responsiven Visualisierungs / Steuerungsmöglichkeiten für iobroker.
Du sprichst aber davon dass ein Sync, also wenn immer server/Client auch subscriben/publishen, möglich wäre, verstehe ich das richtig?
Und unabhängig von der Funktion die ich MQTT andichten möchte - Die Funktion dass ich die states die ich in einem MQTT Client sammle, ich diese auch im MQTT Broker wiederfinde müsste doch eigentlich normal funktionieren oder?
Verrückterweise klappt das ja nur mit einer externen App, welche Werte auf den iobroker MQTT Broker publisht und auch von dort abonniert.
Aber warum klapt das innerhalb iobroker nicht oder wie könnte ich das lösen?Danke für deine Hilfe.
-
Ich bin weitergekommen.
Es funktioniert nun folgendes:
Iobroker mqtt Client publiziert an Iobroker mqtt Server und umgekehrt.
Mittels Blockly Script synchronisere ich die Werte aus der MQTT Android-App.Folgende Vorgehensweise habe ich gemacht:
MQTT Server und Client adapter deinstalliert und wieder neu installiert, komplett neu eingerichtet.
Folgende Einrichtungen in Broker und Client habe ich getroffen:
Folgendes habe ich bei den States abonniert (indem Beispiel ein Homematic Dimmer):
Und so sieht das Blockly für das synchronisieren der iobroker-mqtt States mit den States aus der Android App:
So lässt sich iobroker theoretisch mit einer Vielzahl von Apps verknüpfen. Ich werde das nun mal weiter ausbauen und testen.
-
...und das meinte ich mit "andichten". Der MQTT kann es einfach nicht (weil nicht vorgesehen) und man muss auf Blockly, JS, Node-RED etc. zurückgreifen.
-
@SBorg Da verstehst du das Blockly Script glaube ich etwas falsch. Das Synchronisiert keine MQTT States miteinander, sondern die States aus der Android-App welche diese automatisch generiert mit MQTT States aus iobroker.
Die von mir angesprochene gewünschte Synchronisation wäre für iobroker-interne States gedacht, bei denen sich der iobroker-mqtt client mit dem iobroker-mqtt Server synchronisiert, was ja mit den oben gezeigten Einstellungen ja glücklicherweise auch funktioniert.
-
Du führst ein binding von OBJ1 mit OBJ2 durch. Wenn sich also OBJ1 ändert, ändert dies auch automatisch OBJ2, zumindest soweit meine Blockly-Kenntnisse. Du "erzwingst" also quasi ein publish/subscribe wo dein Device keines hergibt. Das ist auch nicht schlimm, nur, und darum geht es eigentlich, kannst du das beim MQTT nicht einstellen (was du aber quasi als Fehler von dir vermutet hattest). Du hast so gesehen nix falsch gemacht, nur der MQTT kann das nicht bzw. ist es nicht vorgesehen was du eigentlich möchtest. Das muss eigentlich der Client realisieren (oder mit etwas externer Hilfe dann der MQTT-Broker ^^).
-
Ich bin froh das es nun so funktioniert und dein Post hat mir den Anstoß gegeben das alles nochmal so auszutesten.
Vielleicht hilft es ja auch dem einen oder anderen weiter.