NEWS
Frage zu MQTT, SonOff-Adapter und mqqt über Shell
-
@klassisch Es ist zwar schön, wenn Du mit sendTo was an den Adapter schickst, es würde es aber auch tun, wenn Du einfach den DP mit JS beschreibst. Das habe ich nun alles lange erklärt. Welche Information Du über den N Ast bekommst, das liest Du bitte in der Doku nach - scheint ja, dass der N-Ast nun bei Dir im Broker aufgetaucht ist. (Sehe ich zumindest an dem Namen (N/..../system/0/Ac/Consuption/L1/Power)
Und wann der Zahlen schickt oder wie man das antriggert müsstest Du selbst lesen, das übersteigt die mqtt Grundlagen.
Im Prinzip brauche ich das auch anscheinend alles gar nicht zu beschreiben, denn mit Trial & Error kommt man meist auch ans Ziel, wie man ja an diesem Beispiel am Besten sieht.
-
Vielen Dank für Deine Erläuterungen. Werde ich nochmals detailliert durchgehen, in der Hoffnung, daß er auch noch Zahlenwerte sendet.
@mickym sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
@klassisch Es ist zwar schön, wenn Du mit sendTo was an den Adapter schickst, es würde es aber auch tun, wenn Du einfach den DP mit JS beschreibst.
Das hatte ich natürlich zuallerrst getestet, hat aber leider nicht funktioniert. zumindest nicht mit dem mqtt-client und meinen Eisntellungen.
-
@mickym sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
@klassisch Es ist zwar schön, wenn Du mit sendTo was an den Adapter schickst, es würde es aber auch tun, wenn Du einfach den DP mit JS beschreibst.
Das hatte ich natürlich zuallerrst getestet, hat aber leider nicht funktioniert. zumindest nicht mit dem mqtt-client und meinen Eisntellungen.
Im mqtt-Broker - den mqtt-Client brauchst Du nicht - hab ich doch geschrieben.
-
Nochmals vielen Dank für Deine Geduld und Deine detaillierten Erläuterungen und Deine Zeit.
Und das Licht am Ende des Tunnels wird etwas heller@mickym sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
Im mqtt-Broker - den mqtt-Client brauchst Du nicht - hab ich doch geschrieben.
Ja, habe den MQTT-Client jetzt ausser Betrieb gesetzt.
Habe für meine ESPEasy und anderen Kleinkram eine Instanz mqtt.0
Für den Victron habe ich jetzt mqtt.1 Instanziert. Ist das i.O. oder wird diese zweite Instanz auch nicht gebraucht? Wie gesagt, habe MQTT bisher nur in Plug&Play Lösungen eingesetzt. Ziele erreicht, aber eben nichts wirklich über MQTT gelernt.Die Sache mit der Sendung der Seriennummer hatte ich auch so "aufgeschnappt" und verstanden. Venus braucht das wohl, um eine bestimmte Zeit seine Subscriptionen zu bedienen. Danach werden die Subscriptionen wieder eingestellt.
Kam aber nicht wirklich weiter, die Zahlenwerte waren nicht da.
Habe eben Den Venus-Raspi rebootet und nur sieht das freundlicher aus:Wartet man dann einige Zeit, sieht es wieder so aus:
Keine Zahlen mehrDann - wie Du geschrieben hast - in den R-Pfad in die Seriennummer einfach eine Ziffer eingetippt und es gibt wieder Werte!
Jetzt gibt es nur noch den Schönheitsfehler, daß statt Zahlenwerte Strings rauskommen:
{"value": 233.8300018310547}
Gibt es dafür eine Option im MQTT-Adapter, oder ist das per Stringoperation z.B. durch JScript zu lösen?
-
@klassisch Keine 2 Instanzen nötig - die müssen ja dann auch auf unterschiedlichen Ports laufen. Bei mir ist sämtlich mqtt Kommunikation auf einem Broker in einem Adapter zusammen.
mqtt kennt nur Strings - und zwar JSON-Strings - weil Du so alle Informationen ohne Berücksichtigung des Datentyps ansprechen kannst.
Wenn Du Javascript programmierst - liest Du den Datenpunkt ein und machst mit parse ein JS ein Objekt daraus:
str='{"value": 233.8300018310547}'; obj = JSON.parse(str); wert = obj.value;
Stand doch in der Beschreibung mit dem Keep Alive - die ich Dir verlinkt habe. Du musst die Seriennummer zyklisch auslesen. Also einfach in Datenpunkt via JS einfach einen leeren String - alle Minuten oder so schicken.
-
@mickym Super, vielen Dank! Dann werde ich den zweiten MQTT Adapter auch ausmustern und auf den ersten gehen.
Vielen Dank auch für das JScript Beispiel!
Wenn ich dann Werte an den Victron reinschreiben möchte, dann müssen die natürlich auch so zu einem String zusammengesetzt werden, nehm ich an, was aber durch einfaches Addieren" einfacher sein dürfte. -
@klassisch Nein wenn Du ein JS Objekt wieder in einen JSON zu verschicken via MQTT publishen willst, dann must Du das JS Objekt wieder stringifizieren:
https://www.w3schools.com/js/js_json_stringify.asp
Also das Gegenteil von parse.
Wenn Du also dieses Beipsiel aus dem Artikel nimmst:Dann sieht das im JS so aus:
objAcPowerSetpoint = { "value" : -200}; // object wieder in JSON String strMqtt = JSON.stringify(objAcPowerSetpoint); setState ('mqtt.0.W.e0ff50a097c0.vebus.257.Hub4.L1.AcPowerSetpoint', strMqtt, false);
-
@mickym Und auch dafür herzlichen Dank!
Also zum hin und Rückwärtswandlung von json Objekten gibt es extra Funktionen und korrespondierende Objekte in JScript.
Dann sollte die Umwandlung mit diesen eingebauten Funktionen auch recht flott und ressourcenschonend gehen. -
@klassisch sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
@mickym Und auch dafür herzlichen Dank!
Also zum hin und Rückwärtswandlung von json Objekten gibt es extra Funktionen und korrespondierende Objekte in JScript.
Dann sollte die Umwandlung mit diesen eingebauten Funktionen auch recht flott und ressourcenschonend gehen.Genau - JSON ist einfach die Möglichkeit Javascript Objekte als Strings über verschiedene Protokolle zu transportieren (mqtt, HTTP, usw.) Versuch mal über eine Browser URL ein Boolvariable zu versenden DU wirst verzweifeln, weil HTTP in den URLs alles als Strings interpretiert.
Deswegen stand auch - was ist JSON:
What is JSON?
-
JSON stands for JavaScript Object Notation
-
JSON is a lightweight data interchange format
-
JSON is language independent *
-
JSON is "self-describing" and easy to understand
-
-
@mickym Ja, der history Adapter arbeitet ja mit JSON und die simpleApi gibt JSON als Antwort zurück.
Aber jetzt habe ich doch nochmals eine Frage zu den 2 MQTT Adaptern.
Mein erster ist als Server/Broker konfiguriert und hört auf alles. Bei dem liefern z.B. die ESPEasy ein.
Mein Zweiter, den ich ja jetzt in den ersten integrieren will, hat aber die IP des Venus Raspi eingetragen. Das bekomme ich jetzt nicht unter einen Hut. Ich habe auch keinen Knopf gefunden, um den parallel als Client laufen zu lassen bzw. einen weiteren Eingabetab zu eröffnen. -
@klassisch Nochmal Du brauchst keinen Client. Wenn Dein mqtt Adapter als Broker arbeitet, dann verbinden sich alle Clients mit ihm. Wenn Du dann direkt in den DP schreibst, dann published der Broker das automatisch.
Da ich das in dem anderen Zusammenhang als Video demonstriert habe (stell Dir den mqtt Explorer einfach als ESPEasy, Venus Raspi vor. Du gibst überall die gleiche IP und den port ein. Die tun sich doch alle nicht weh, weil sie auf unterschiedliche topics publishen und subscriben. Ich habe meine Shellies, Tasmota und Owntracks alles unter einem Broker laufen:
mqtt.1 hat nur historische Gründe - weil der Broker manchmal Fehler macht - aber solange er das nicht tut ist alles gut.
Hier werden die Punkte in der Instanz erzeugt, wenn ein anderes Gerät in Deinen Broker published so wie es Dein Venus gemacht hat:
und hier wenn Du in einen Datenpunkt schreibst und dieser published:
-
@klassisch sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
Mein Zweiter, den ich ja jetzt in den ersten integrieren will, hat aber die IP des Venus Raspi eingetragen.
Ok wenn das so ist, wäre dann würde der Venus Raspi als mqtt Broker agieren und dann brauchst Du tatsächlich 2 Instanzen. Sprich Du kannst den Venus Raspi nicht so konfigurieren, dass er einen vorhandenen Broker bereits benutzt?
Wenn nicht, dann ist das mit den 2 Instanzen in Ordnung (einen als Client zum Venus Raspi mqtt-Broker, einen als Broker für die Geräte, für die Du im iobroker zur Verfügung stellen willst).
-
@mickym Vielen Dank, hatte nicht wirklich verstanden, wie zwei Broker zueinander finden sollten, die nichts voneinander wissen.
Venus kann oder will wohl nur Broker
Mehr kann ich auf der Oberfläche nicht einstellen, man kann nicht tiefer absteigen.
Und ich möchte dort auch nichts durcheinanderbringen.
Also ist das wohl ein Broker und ich spreche ihn mich einem Client an. -
@klassisch sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
Also ist das wohl ein Broker und ich spreche ihn mich einem Client an.
Genau - dann ist es so - wenn das nicht anders geht. Letztlich ist ja doch alles im iobroker vereint auch mit unterschiedlichen Instanzen.
-
@klassisch
Hallo,Ich versuche ebenfalls einen Victron Venus über MQTT zum leben zu erwecken.
Leider scheitere ich dabei den keep Alive an den Victron zu senden.Woher weiß der MQTT Broker die IP Adresse des Venus?
Habe versucht den Datenpunkt wie oben beschrieben anzulegen und zu füllen bzw. über JScript zu senden.
Über MQTT Explorer kann der Victron angesprochen werden.Hast du einen Tipp?
Gruß
-
@mickym
Ich habe mir den Thread jetzt 2-3 Mal durchgelesen. Ich finde toll welche Mühe Du Dir gibst, damit wir MQTT besser verstehen. Auch wenn es mir etwas peinlich ist: Ich habe eine Sache immer noch nicht verstanden. Es reicht grundsätzlich einen MQTT Broker im Netzwerk zu haben, oder? Zumindest habe ich dich so verstanden. Das Venus OS hat doch einen Broker laufen. Wofür brauche ich dann noch einen zweiten Broker im ioBroker? Ich habe bspw. einen MQTT Client Adapter laufen, der fragt die Werte von meinem OpenWB Broker ab und schreibt dort auch bspw. SoC oder den Lademodus. Könnte eine zweite Instanz (weil anderer Broker, andere IP) als Client nicht auch, die Werte (also aktuelle PV Leistung, EVU Werte) aus der ersten Instanz von der OpenWB genauso in den Venus Broker schreiben (natürlich über ein Skript) ? Ich bin gerade etwas verzweifelt, weil ich offenbar den Wald vor lauter Bäumen nicht sehe. Im Photovoltaikforum sind sie, glaube ich, kurz davor an mir zu verzweifeln.
Würde mich sehr, sehr freuen, wenn Du mich aus dieser Situation befreien könntest. 1000Dank. -
@dan11hh sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
@mickym
Ich habe mir den Thread jetzt 2-3 Mal durchgelesen. Ich finde toll welche Mühe Du Dir gibst, damit wir MQTT besser verstehen. Auch wenn es mir etwas peinlich ist: Ich habe eine Sache immer noch nicht verstanden. Es reicht grundsätzlich einen MQTT Broker im Netzwerk zu haben, oder? Zumindest habe ich dich so verstanden.Richtig!
Das Venus OS hat doch einen Broker laufen.
Das weiß ich nicht. Hab mal gegoogelt und unter Venus OS
https://obenschlaefer.com/low-budget-energiemonitor-victron-venus-os-mit-raspberry-pi-obenschlaefer/Keine Ahnung - aber wie kommst Du darauf, dass da bereits ein mqtt Broker enthalten ist? Für mich ist das ein normales Linux OS.
Wofür brauche ich dann noch einen zweiten Broker im ioBroker?
Brauchst du grundsätzlich nicht.
Ich habe bspw. einen MQTT Client Adapter laufen, der fragt die Werte von meinem OpenWB Broker ab und schreibt dort auch bspw. SoC oder den Lademodus.
Dann schau doch erst mal ob Du das nicht als einzige Broker instanz bejalten willst. Ich kann immer noch keinen Broker im Venus oS sehen.
Könnte eine zweite Instanz (weil anderer Broker, andere IP) als Client nicht auch, die Werte (also aktuelle PV Leistung, EVU Werte) aus der ersten Instanz von der OpenWB genauso in den Venus Broker schreiben (natürlich über ein Skript) ?
Das wäre theoretisch möglich. Nur warum brauchst Du 2 Broker? das verstehe ich immer noch nicht.
Ich würde lieber alles daran setzen, alles in einem Broker zu konsolidieren. Ggf. setze einen mosquitto (als Master) auf und schau, dass Du dort alle Geräte ihre Informationen publishen lässt und dann nimmst Du nur noch den MQTT-Client für Dein Front-End im iobroker.Ich bin gerade etwas verzweifelt, weil ich offenbar den Wald vor lauter Bäumen nicht sehe. Im Photovoltaikforum sind sie, glaube ich, kurz davor an mir zu verzweifeln.
Würde mich sehr, sehr freuen, wenn Du mich aus dieser Situation befreien könntest. 1000Dank.Wie gesagt ich würde einfach erst mal einen neuen Broker auf mosquitto Basis aufbauen. Die bisherigen deaktivieren und jedes Gerät Stück für Stück anschließen.
- Nimm erst mal alle Geräte, die an Deinen OpenWB publishen und stelle die auf mosquitto um.
- Nimm alle Geräte, die an den Venus Broker publishen und stelle die auf msoquitto um.
- Alles ist an einem Platz und Du kannst von Venus, OpenWB, iobroker mit einem Client zentral den mosquitto Broker befragen. Da muss man nichts kopieren etc. - das ist die einzig saubere Lösung.
Von mir aus nimmst Du auch Dein OpenWB Broker oder Deinen Venus (Broker) (wie gesagt kenne ich nicht) als Master und stellst halt die Geräte um, das die an diesen neuen Broker publishen. Oberstes Ziel sollte ein Broker im Netz sein. Du musst also die Geräte halt entsprechend umkonfigurieren. Ansonsten musst Du wirklich über 2 mqtt-client Instanzen rumkopieren, das ist aber halt nicht schön.
-
@mickym sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
Richtig!
@mickym sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
Das weiß ich nicht. Hab mal gegoogelt und unter Venus OS
https://obenschlaefer.com/low-budget-energiemonitor-victron-venus-os-mit-raspberry-pi-obenschlaefer/
Keine Ahnung - aber wie kommst Du darauf, dass da bereits ein mqtt Broker enthalten ist? Für mich ist das ein normales Linux OS.Weil ich mich ja mit einem Client wie dem MQTT Explorer am Venus OS Broker anmelden kann. Außerdem ist er auch hier beschrieben:
https://github.com/victronenergy/dbus-mqtt/blob/master/README.md@mickym sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
Das wäre theoretisch möglich. Nur warum brauchst Du 2 Broker? das verstehe ich immer noch nicht.
Will ich gar nicht, aber die sind halt da.Aktuell laufen die zwei Broker bei mir im Netz. Nicht mein Wunsch, sondern war/ist so Standard. Einmal die OpenWB (dahin published nur ioBroker) und einmal Venus OS (daran arbeite ich ja gerade) (Es sind übrigens alles mosquitto Broker). Da ich so tief nicht im Thema stecke, ist das alles so out of the box eingerichtet und ich habe nie weiter nachgedacht, weil es zumindest mit der OpenWB einfach so funktioniert hat.
Ich glaube auch nicht (siehe auch vorherige Posts von @klassisch), dass ich MQTT im Venus OS einfach so als Client laufen lassen kann. Ebenso bei der OpenWB. Im dortigen Forum richten dann viele eine Bridge ein. Wäre das eine saubere Lösung? Ich hätte zwar auch lieber einen Broker und viele Clients, aber offenbar funktioniert das mit unangepasster "Standard-" Hardware nicht so richtig. Grundsätzlich hätte ich lieber im ioBroker einen MQTT Broker laufen, der alle Infos für die entsprechenden Clients vorhält.
Deshalb nochmal gefragt:
Wenn ich nichts an dem Status als Broker der OpenWB und am Venus ändern kann (weil unfähig bin oder das so nicht vorgeshen ist). Dann brauche ich doch nur einen weiteren Client der auf den Broker vom Venus OS published, richtig? Wie kann ich zwischen zwei Clients die Werte austauschen? Skript? Oder MUSS da wirloch noch ein weiterer Broker dazwischen? (Ich habs mal aufgemalt)
1000Dank für Deine Hilfe!
-
@dan11hh sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
...
Aktuell laufen die zwei Broker bei mir im Netz. Nicht mein Wunsch, sondern war/ist so Standard. Einmal die OpenWB (dahin published nur ioBroker) und einmal Venus OS (daran arbeite ich ja gerade) (Es sind übrigens alles mosquitto Broker). Da ich so tief nicht im Thema stecke, ist das alles so out of the box eingerichtet und ich habe nie weiter nachgedacht, weil es zumindest mit der OpenWB einfach so funktioniert hat.Nun wenn der iobroker dahin publishen würde, dann wäre es ja einfach und Du brauchst den iobroker ja nur auf den Venus mqtt Broker umstellen und Du hättest einen Master.
Ich denke aber wenn Du sagst 2 mqtt-Broker - das die Wallbox über OpenWB auf einen Broker published und im Venus OS publishen irgendwelche andere Geräte
Ich glaube auch nicht (siehe auch vorherige Posts von @klassisch), dass ich MQTT im Venus OS einfach so als Client laufen lassen kann. Ebenso bei der OpenWB. Im dortigen Forum richten dann viele eine Bridge ein. Wäre das eine saubere Lösung? Ich hätte zwar auch lieber einen Broker und viele Clients, aber offenbar funktioniert das mit unangepasster "Standard-" Hardware nicht so richtig. Grundsätzlich hätte ich lieber im ioBroker einen MQTT Broker laufen, der alle Infos für die entsprechenden Clients vorhält.
Ja man könnte eine mqtt Bridge erstellen - musst Du aber nicht, wen Du es wie unten machst.
Deshalb nochmal gefragt:
Wenn ich nichts an dem Status als Broker der OpenWB und am Venus ändern kann (weil unfähig bin oder das so nicht vorgeshen ist). Dann brauche ich doch nur einen weiteren Client der auf den Broker vom Venus OS published, richtig? Wie kann ich zwischen zwei Clients die Werte austauschen? Skript? Oder MUSS da wirloch noch ein weiterer Broker dazwischen? (Ich habs mal aufgemalt)
1000Dank für Deine Hilfe!
Ja Du brauchst aber keinen Austausch. Im iobroker machst Du 2 Instanzen des mqtt-adapters als Client der sich einmal mit Deinem OpenWB und einmal mit dem Venus OS verbindet.
Damit hast Du alle Infos bereits in Deinem iobroker system. Austauschen musst Du zwischen beiden System gar nichts!!!!
Du kannst aber über Deine Logikmaschine Blockly, NodeRed, etc. über trigger aus einer mqtt instanz natürlich die andere Instanz steuern. Das ist aber kein Austausch, sondern ist ja nur im Bedarfsfall nötig. Also so wie auf Deinem Papier und das mit dem ? lass einfach mal sein und entscheide dann bei Bedarf wenn Du was schalten musst. Dein iobroker ist dann quasi die Bridge oder Schaltzentrale.
Über mosquitto könntest Du auch beide Systeme über eine Bridge verbinden, aber das ist in meinen Augen erst mal nicht notwendig, da es so wie auf dem Papier am Einfachsten ist.
Ich glaube jedenfalls das es so funktionieren könnte, da nach meinem Verständnis immer von mqtt-Cleint der Verbindungsaufbau zum Broker stattfindet. Deswegen kannst Du auch 2 unterschiedliche Instanzen über den gleichen Port auf verschiedene IP Adressen adressieren. Das ist ein weiteres Beispiel warum viele Verständnisschwierigkeiten haben. Also 2 mqtt client instanzen sollten funktionieren, wie auf dem Papier und ein Datenaustausch zwischen den beiden Broker ist gar nicht nötig und würde ich nur im Anwendungsfall betrachten.Wenn man halt keinen iobroker hat, dann kann über eine mosquitto Bridge Daten direkt austauschen und dann einen zum Master machen oder die Bridge abfragen - aber wie gesagt mit dem iobroker ist das wie Du es gezeichnet hast am Einfachsten und wie gesagt es besteht keine grundsätzliche Notwendigkeit Infos zwischen beiden Systemen auszutauchen. Dein iobroker ist die Bridge und nur im Bedarfsfall steuert eine Instanz die andere und umgekehrt.
-
@mickym sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
Also 2 mqtt client instanzen sollten funktionieren, wie auf dem Papier und ein Datenaustausch zwischen den beiden Broker ist gar nicht nötig und würde ich nur im Anwendungsfall betrachten.
Jap. Genau so. Danke. Und ich habe schon gedacht, dass ich total auf dem Schlauch stehe.
@mickym sagte in Frage zu MQTT, SonOff-Adapter und mqqt über Shell:
Du kannst aber über Deine Logikmaschine Blockly, NodeRed, etc. über trigger aus einer mqtt instanz natürlich die andere Instanz steuern. Das ist aber kein Austausch, sondern ist ja nur im Bedarfsfall nötig.
Jetzt muss ich nur noch wissen, unter welchem Topic Venus OS bspw. die aktuelle PV Leistung oder anderen Werte erwartet und ich kann bei jeder Änderung des entsprechenden Werts der OpenWB den Wert im Venus OS anpassen.
1000 DANK!!!!
Ich dachte wirklich ich dreh mich im Kreis. Danke.