NEWS
Frage zu MQTT, SonOff-Adapter und mqqt über Shell
-
@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. -
@mickym Ach so, eine Sache noch. Ich bin nicht sehr gücklich mit meiner aktuellen Lösung um ein keepalive an den MQTT Broker des Venus OS zu schicken. Aktuell macht das rc.local beim Systemstart. Wie kann ich im ioBroker MQTT Client diesen Befehl ausführen:
while :; do mosquitto_pub -h 192.168.179.35 -m '' -t 'R/XXXb/keepalive'; sleep 5; done
Ich habe schon ein Javaskript ausprobiert:
sendTo('mqtt.3', 'sendMessage2Client', {topic:"R/XXXb/keepalive", message:" "});Aber irgendwie funktioniert das auch nicht.
Hast Du eine Idee?
-
Wenn das ein topic ist das Du alle 5s beschrieben musst, dann musst Du doch nur alle 5s den Datenpunkt R/XXXb/keepalive beschreiben. Einfach mit blockly oder Node-red oder JS. Also du publishst automatisch in dem du den Datenpunkt neu beschreibst und das machst du mit deiner Logikmaschine. Mit Node-Red kannst natürlich auch direkt ohne Adapter publishen.
Beschriebe einfach den Datenpunkt alle 5s.
Und im Adapter natürlich noch angehakt haben, nur Änderungen publizieren. Am besten alle Haken weg machen.
Wie gesagt ich nutze diese send to Adapter nie:
adapter.sendTo('mqtt.0', 'sendMessage2Client', {topic: '/your/topic/here', message: 'your message'});nur wenn, dann nimm mal bei dem topic etc ' (einfache) und keine " (doppelten).
Du kannst doch testen, indem Du in den Objekten erst mal den Wert manuell setzt. Und das machst Du dann via skript.
Es werden auf jedenfall Nachrichten gesendet, das einzige ist, dass nur ein Leerzeichen zu setzen im Admin falsch angezeigt werden.
Es wird nur (null) angezeigt, aber er sendet ein LeerzeichenWird nur (null) angezeigt in den Objekten:
Im Log siehst du aber das was gesendet wird:
Und es kommt auch das Leerzeichen an:
Was für eine Logikmaschine nutzt Du denn im allgemeinen? Javascript, Blockly, NodeRed?
-
@mickym
Meist nutze ich Blockly. Das komische ist, einfach einen Wert setzen reicht nicht. Probier ich das im ioBroker klapp es nicht, egal ob direkt oder über ein Skript. Publishe ich im MQTT Explorer klappt es. Ich habe keine Ahnung warum. Sonst funktionieren MQTT ganz gut bei mir. -
@dan11hh Na dann musst du das in den Griff bekommen. Werte unbestätigt bzw. Mit steuere in den Datenpunkt des gewünschten Topics schreiben und mit Log oder mqtt-Explorer prüfen, dass Nachricht gesendet wurde. Ggf mosquitto log anschauen.
-
@mickym
Leider bekomme ich keinen Fehler ausgegeben. Offenbar läut alles auf Seiten des ioBrokers ok. Nur, dass Venus OS immer noch nicht published. Als Workaround baue ich mir das glaube ich jetzt einfach in die Startroutine des Dockers. Doof. Eigentlich mag ich das nicht. Was macht MQTT Explorer denn anders? Eine Konsole lässt sich da ja nicht anzeigen... -
@dan11hh Na das hilft dir aber wenig. Du willst ja später noch andere Topics, so nehme ich an, in Dein VentOS publishen. Bekommt denn deine mqtt Instanz eine Verbindung? Lässt du den mqtt Explorer gegen Deinen VentOS Broker laufen und prüfst dort ob der Wert ankommt? Gibts Fehler im iobroker log oder im mosquitto log des VentOS?
-
@mickym
Ich muß auch mal was Fragen, ich habe jetzt die Datenpunkte angelegt
ein Blockly gemacht was die Daten alle 2 Sekunden aktualisiert
Das funktioniert auch soweit. Wenn ich jetzt aber mit z.B. dem MQTT-Explorer abhole erneuert sich nichts. Ebenso ist es im Venus OS wo ich die Daten benötige. Hab ich eventl. im Broker was falsch eingestellt. Client hab ich wie du geschrieben hast gelöscht.
-
@joeysch Also eigentlich unschön, weil Du alles mit aktualisere schreibst, anstelle mit steuere. Damit setzt Du immer das ACK Flag.
Würde ich also anders machen.Du kannst auch mit sende Zustände die Datenpunkte publishen (musst Du halt dann in Deinen mqtt-Einstellungen anhaken), die Du mit ACK=true gesetzt hast (was Du mit aktualisiere in Deinem Blockly tust). Das ginge kurzfristig. Schöner wäre aber wie gesagt, Du verwendest steuere, anstelle von aktualisiere. Das wäre eher konform. Wenn Du mit Zuständen publishen arbeitest, dann musst Du höllisch aufpassen, dass Du Dir keine Endlosschleifen einhandelst. Es geht, wenn auf der anderen Seite nichts an den Zuständen geändert wird.
-
@mickym
Danke, das wars. Ich habe von aktualisiere auf steuere geändert und des geht.