howto: openWB über anderen mosquitto MQTT Broker vernetzen (MQTT Bridge)

hominidae
Beiträge: 1159
Registriert: Di Sep 03, 2019 4:13 pm

howto: openWB über anderen mosquitto MQTT Broker vernetzen (MQTT Bridge)

Beitrag von hominidae »

...vielleicht ist das ja von Interesse für den ambitionierten Bastler im Umfeld SmartHome und IoT.

Edit:
...die untenstehende Anleitung ist für User mit einem eigenen MQTT-Broker, ausserhalb der openWB und für eine Verbindung ausgehend von diesem, externen Broker zum Broker der openWB.
Wer es andersrum haben will und den Broker der openWB nach extern vernetzten will, findet inzwischen Einstellungen in der openWB selbst.
Kevin hat für diesen Anwendungsfall zB auch einen Broker bereitgestellt und unter web.openwb.de ein GUI gebaut, siehe hier: search.php?author_id=2&sr=posts

----schnipp----hier geht es mit dem Original-Faden weiter------schnapp-----

Wer schon einen MQTT Broker zuhause hat, zB in seinem SmartHome, kann diesen einfach mit dem Broker in der openWB über eine Bridge vernetzen.
Damit sind die Topics automagisch auch im "heimischen" Broker verfügbar.
Ein SmartHome muss daher nicht extra einen Kanal / Subscription zur openWB aufmachen...das spart Ressourcen, auch in der openWB.

Eine Grundanleitung findet ihr hier: http://www.steves-internet-guide.com/mo ... iguration/

Für eine bi-direktionale Verbindung (Topic Subscribe & Publish) reicht es, wenn es in einem der beiden Broker konfiguriert ist.
Der Broker mit der Bridge-Konfiguration ist dabei ein MQTT-Client zum entfernten Broker.
Der andere Broker sieht praktisch nur einen Client.

Hier ^mal die config, die einen lokalen Broker an den Broker der openWB anbindet:

Code: Alles auswählen

root@mosquitto:/mnt/user/appdata/MQTT/conf.d# cat openwb.conf 
#
# bridge to openWB Wallbox
#
connection openwb
address <openwb-IP>:1883
start_type automatic
topic openWB/# both 2
local_clientid rem.mosquitto
...die config in einer Datei in Konfigurations-Unterverzeichnis des mosquitto Brokers ablegen (meist heisst das ./conf.d und liegt im Verzeichnis, in dem die mosquitto.conf abgelegt ist).
In einer Standardinstallation, wird jede .conf Datei beim Start aktiviert und der Gesamtkonfiguration hinzugefügt.

Gimmick:
Wer seine Topics auch im I-Net und nicht nur von zuhause im Griff haben/Steuern will, kann eine Bridge zu einem MQTT-Broker im I-Net nutzen.
Nachfolgend ein Beispiel für cloudMQTT (https://www.cloudmqtt.com/).
CloudMQTT unterstützt SSL-Zugriff über offizielle Root-Zertifikate, damit kann man abhörsicher verbinden und sicher sein, den offiziellen Broker erreicht zu haben :mrgreen:

Code: Alles auswählen

root@mosquitto:/mnt/user/appdata/MQTT/conf.d# cat cloudmqtt.conf 
#
# bridge to cloudmqtt
#
connection cloudmqtt
address <server des cloudMQQT accounts>:<SSL-Port>
remote_username <User aus der ACL des CloudMQQT Accounts>
remote_password <Passwort, wie in der User-ACL bei CloudMQTT vergeben>
remote_clientid cloud.mqtt
bridge_protocol_version mqttv311
try_private true
notifications false
start_type automatic
topic # both 2
# Method 01
# die offiziellen certs aus der Distro installieren und hier den Pfad konfigurieren
bridge_cafile /etc/ssl/certs/ca-certificates.crt
# Method 02
#bridge_cafile AddTrustExternalCARoot.crt
bridge_insecure false
cleansession false
local_clientid remote.mosquitto
Wichtig: wer mehr als eine Bridge konfiguriert, für jede Bridge eine andere (lokale) Client-ID verwenden :mrgreen:

Have fun!
Zuletzt geändert von hominidae am Mo Mär 09, 2020 8:54 am, insgesamt 1-mal geändert.
truckl
Beiträge: 120
Registriert: Sa Nov 09, 2019 10:32 am

Re: howto: openWB über anderen mosquitto MQTT Broker vernetzen (MQTT Bridge)

Beitrag von truckl »

Ich würde gerne folgendes Mock-Up zur Bridge-Konfiguration zur Diskussion stellen:
BridgeConfigMock.png
Beispiel für das User-Interface
(73.72 KiB) 1264-mal heruntergeladen
Es ist wirklich nur die minimal-Variante zur Veranschaulichung. Es soll weder hübsch sein (ich bin leider kein Webentwickler) noch hat es den Anspruch auf Vollständigkeit.
Die Dateinamen "in file ..." würde ich später nicht ausgeben. Auch das dient der Veranschaulichung wie ich mir "intern" die Konfiguration vorstelle.

Vorausgesetzt der Code der die Formulardaten abarbeitet validiert sauber, würde durch diesen Ansatz keinerlei Konfiguration in den Mosquitto einfließen die man nicht unter Kontrolle hat (Modus für unerfahrene Nutzer). Erfahrene Nutzer könnten die Funktion zumindest als Basis für darauffolgende, manuelle Anpassung der Mosquitto-Konfiguration nutzen (dann naütrlich auf eigenes Risiko - wie auch jetzt schon).

@KevinW / Snaptec: Wäre solch eine Erweiterung für die openWB akzeptabel?

Falls ja würde ich die ensprechende Funktionalität zuliefern (das Web-UI bekomme ich aber nicht hübscher hin).
Gerne auch unter Einbeziehung weiter Anregung aus dem Forum.
Dateianhänge
02-bridge-fake.conf.txt
Beispiel wie die aus dem Formular generierte Mosquitto Kofigurationsdatei aussehen könnte.
(4.15 KiB) 387-mal heruntergeladen
openWB
Site Admin
Beiträge: 7906
Registriert: So Okt 07, 2018 1:50 pm

Re: howto: openWB über anderen mosquitto MQTT Broker vernetzen (MQTT Bridge)

Beitrag von openWB »

Finde ich soweit gut.
Unbedingt noch auf Deutsch.
Die Unterscheidung lesen / schreiben gefällt mir auch.

Beim lesenden würde ich die (live-) graph also openWB/graph/#
noch ab/wählbar machen.

Was ist mit EP Data gemeint?

Das generiert somit eine extra .conf fur den conf.d Ordner, richtig?
Gefällt mir ebenfalls da so besser sichergestellt ist das die MQTT conf lokal funzt wenn remote was nicht passt.
Supportanfragen bitte NICHT per PN stellen.
Hardwareprobleme bitte über die Funktion Debug Daten senden mitteilen oder per Mail an support@openwb.de
hominidae
Beiträge: 1159
Registriert: Di Sep 03, 2019 4:13 pm

Re: howto: openWB über anderen mosquitto MQTT Broker vernetzen (MQTT Bridge)

Beitrag von hominidae »

...coole Sache!

Da Du im UI mehr als eine Bridge konfigurieren willst, sollte die local_clientid (muss nicht übers UI einstellbar sein) unterschiedlich je bridge_xxx.cfg sein (zB local_clientid mock01; local clientid mock02; ...).

Wie wäre es mit einem "normal-Mode" (dieses UI) und einem "expert-Mode" (eine bridge_xxx.cfg uploaden + ein-/ausschalten via checkbox; default)??
truckl
Beiträge: 120
Registriert: Sa Nov 09, 2019 10:32 am

Re: howto: openWB über anderen mosquitto MQTT Broker vernetzen (MQTT Bridge)

Beitrag von truckl »

KevinW hat geschrieben: Fr Nov 29, 2019 5:00 pm Finde ich soweit gut.
Unbedingt noch auf Deutsch.
Kein Problem. Mir ist irgendwie die "Richtlinie" bzgl. Sprache noch nicht ganz klar. In Github-Kommentaren und in neuerem Code (Variablennamen) findet sich viel Englisch. Aus dem beruflichen Umfeld sowie aus den sonstigen Open-Source-Projekten bin ich auch irgendwie gewohnt in English zu arbeiten da es so automatische auch internationales Publikum und Kollegen anspricht (man weis ja nie wer sich in Zukunft noch am Code beteiligen will).
Aber kein Problem das auf Deutsch zu übersetzen.

Ein Problem wäre allerdings wenn ich es multilingual machen sollte (schlichtweg weil ich nicht wüßte wie).
KevinW hat geschrieben: Fr Nov 29, 2019 5:00 pm Beim lesenden würde ich die (live-) graph also openWB/graph/#
noch ab/wählbar machen.
Gerne. Ich würde auch gerne die einzelnen LPs auswählbar machen (Dropdown-Mutliselect control?). Dafür reichen aber leider meine Kenntnisse in der Webprogrammierung wieder mal nicht aus.
KevinW hat geschrieben: Fr Nov 29, 2019 5:00 pm Was ist mit EP Data gemeint?
Energy Provider. Es ginge auch noch "Power authorities": Wird beim eindeutschen aber sowieso zu EV, EVU oder Energieversorger.
KevinW hat geschrieben: Fr Nov 29, 2019 5:00 pm Das generiert somit eine extra .conf fur den conf.d Ordner, richtig?
Korrekt. Genau das war auch das Ziel. openWB installiert seine Settings in eine Datei, die User-Konfigs sind unabhängig davon in ganz anderen Dateien.
Zudem soll der einfache User nicht in der Lage sein beliebige Direktiven in dieser Datei abzulegen (die im Konflikt zu den openWB Direktiven stehen könnten). Die Datei wird also in jedem Fall durch das vom POST-Request aufgerufene Skript erzeugt welches an dafür vorgesehen Stellen die Daten des Users einsteuert.
hominidae hat geschrieben: Fr Nov 29, 2019 7:13 pm Da Du im UI mehr als eine Bridge konfigurieren willst, sollte die local_clientid (muss nicht übers UI einstellbar sein) unterschiedlich je bridge_xxx.cfg sein (zB local_clientid mock01; local clientid mock02; ...).
Ist notiert und wird sichergestellt. Danke für den Hinweis!
hominidae hat geschrieben: Fr Nov 29, 2019 7:13 pm Wie wäre es mit einem "normal-Mode" (dieses UI) und einem "expert-Mode" (eine bridge_xxx.cfg uploaden + ein-/ausschalten via checkbox; default)??
Von der Idee her gerne. Allerdings scheitert eine Umschaltung des GUI zwischen den Modes wohl an meinen Web-Programmier-Kenntnissen.

Dauerhaft anzeigen würde ich ein Upload-Feld nur ungern. Denn ein Kernziel der vorgeschlagenen Implementierung ist, daß relativ unbedarfte Nutzer es ebenfalls nutzen können ohne in Gefahr zu laufen, die internen Funktionen der openWB zu zerschießen (reicht doch schon die Gefahr ihre privaten Stromdaten öffentlich zu machen ;) ). Bei einem File-Upload wäre das nahezu unmöglich (ich stelle mir gerade den Aufwand für das Parsen des hochgeladenen Files auf "verbote" Direktiven vor).

Eine Checkbox um eine Konfiguration global zu de-/aktivieren werde ich aber wohl hin bekommen. Ist somit auch notiert.

Da es nach den Antworten hier wohl nicht "generell unerwünscht" ist, werde ich also bei Gelgenheit den Mock (der bereits ein PHP-Skript zur späteren Erweiterung ist) nochmal um die obigen Punkte aktualiseren und erneut zur Diskussion stellen.
Erst wenn über das "Was" (wir konfigurieren wollen) und "Wie" (wir es konfigurieren wollen) Klarheit besteht schreibe ich das POST-Skript welches dann die eigentlich Arbeit der Mosquitto-Konfiguration macht.

Und wenn echter ein Webprogrammierer (CSS, Javascript) sich einbringen möchte um die Optik zu "pimpen": Sehr gerne, wäre echt super !
aiole
Beiträge: 6780
Registriert: Mo Okt 08, 2018 4:51 pm

Re: howto: openWB über anderen mosquitto MQTT Broker vernetzen (MQTT Bridge)

Beitrag von aiole »

Hey Jungs,
ich kann zwar nur noch bedingt folgen, aber ich finde die Vorabdiskussion sehr gut.
good luck
VG aiole
hominidae
Beiträge: 1159
Registriert: Di Sep 03, 2019 4:13 pm

Re: howto: openWB über anderen mosquitto MQTT Broker vernetzen (MQTT Bridge)

Beitrag von hominidae »

truckl hat geschrieben: Sa Nov 30, 2019 11:30 am Eine Checkbox um eine Konfiguration global zu de-/aktivieren werde ich aber wohl hin bekommen. Ist somit auch notiert.
...blöde Idee: das kann man doch auch mit mqtt machen...

Also, wie wäre es, statt die bridge_xxx.cfg Dateien manuell im Filesystem zu editieren, diese nur dort "zu lagern", also schreiben, löschen und bei Änderung ein SIGHUP an den mosquitto senden.
...und den Inhalt der bridge_xxx.cfg Dateien in einem MQTT Topic (zB openWB/mqqttbridges/mock_xx/data) ablegen...mit Checkbox-Zustand dann entweder exportieren, loschen und immer schön SIGHUP-en ;-)
Checkbox selbst unter openWB/mqqttbridges/mock_xx/checkbox [0|1] ein-/ausschalten
Wenn die openWB/mqttbridge/# topics retained sind, müsste man bei Neuinstallation auch nicht auf die individuellen bridge_cfg im Filesystem achten. Die werden einfach nach Neustart des Brokers entsprechend des Status der Checkboxen erzeugt.

Edit: natürlich könne dann ein Experienced-User einfach per MQTT-Explorer neue Bridges hinzufügen (statt upload), wenn die Bridges im UI dann über die Topics automatisch erzeugt/sichtbar werden ;-)
openWB
Site Admin
Beiträge: 7906
Registriert: So Okt 07, 2018 1:50 pm

Re: howto: openWB über anderen mosquitto MQTT Broker vernetzen (MQTT Bridge)

Beitrag von openWB »

Wenn gleich das technisch geht möchte ich das per MQTT nicht ermöglichen.
Zu schnell hängt dann was exposed auf einem Broker wo es nichts zu suchen hat.

Ich würde 1 config file machen für die bridge config.
Das wird geparsed und hingeschrieben, easy zu machen mit php.
Ist dann auch nur lokal änderbar.

Einverstanden?
Supportanfragen bitte NICHT per PN stellen.
Hardwareprobleme bitte über die Funktion Debug Daten senden mitteilen oder per Mail an support@openwb.de
hominidae
Beiträge: 1159
Registriert: Di Sep 03, 2019 4:13 pm

Re: howto: openWB über anderen mosquitto MQTT Broker vernetzen (MQTT Bridge)

Beitrag von hominidae »

KevinW hat geschrieben: Sa Nov 30, 2019 1:11 pm Zu schnell hängt dann was exposed auf einem Broker wo es nichts zu suchen hat.
...schon klar, aber das kannst Du nicht verhindern, ohne externe mqtt-clients auszusperren oder zumindest einzuschränken.
Ich würde 1 config file machen für die bridge config.
Das wird geparsed und hingeschrieben, easy zu machen mit php.
Ist dann auch nur lokal änderbar.

Einverstanden?
Ich persönlich habe ja momentan noch andere Möglichkeiten, daher in Bezug auf den o.g. Teil...wenn man externe clients unterbindet sollte zumindest
- mehr als eine Bridge und
- eine Bridge für "Experten" (siehe mein Beispiel für cloudmqtt)
möglich sein.

Edit: oder eine bidirektionale " *.* - Bridge" mit "Warnhinweis" möglich sein.
Ich denke, dann sollte man externe Clients auch verbannen...(aber bitte nur dann ;-))
openWB
Site Admin
Beiträge: 7906
Registriert: So Okt 07, 2018 1:50 pm

Re: howto: openWB über anderen mosquitto MQTT Broker vernetzen (MQTT Bridge)

Beitrag von openWB »

Wenn man in dem Thema nicht drinnen ist macht es das unglaublich komplex.

Eine config, nach dem Mockup, finde ich für "normal user" mehr als vollkommen ausreichend.
User / Pass / Host / Prefix / topics to sync / set topics.
Wer mehrere Bridges braucht ist ohnehin tiefer drin in der Thematik und macht das direkt im config file weil er dann eh schneller ist.

@truckl
Sowas, sprich UI sollte in Deutsch. Das ist der Kernmarkt (inkl CH / AT).
Supportanfragen bitte NICHT per PN stellen.
Hardwareprobleme bitte über die Funktion Debug Daten senden mitteilen oder per Mail an support@openwb.de
Antworten