Moin an alle,
seit Ewigkeiten habe ich nun doch mal ein Problem, welches ich auch nach ausfürlicher Suche im Forum und im www nicht lösen kann.
Worum geht es?
Ich habe in meinem Wohnmobil
- einen Smart Charger
- einen Cerbro GX
- einen Multiplus 500/20
eingebaut (alles von Victron)
das Ganze an das Victron-Portal angebunden, und möchte jetzt das Ganze mit FHEM und dem MQTT2_CLIENT zu Hause verbinden.
Zum testen habe ich
- als erstes den MQTT Explorer --> https://mqtt-explorer.com/ installiert,
- die entsprechende Adresse für das Portal errechnet --> https://haus-automatisierung.com/batteriespeicher/2023/12/20/venus-os-mqtt-broker-geraete-emulieren.html
- das Certifikat für das Portal besorgt --> https://github.com/victronenergy/dbus-flashmq
und das ganze in die Anmeldemaske des MQTT Explorers eingegeben.
Host: mqttXX.victronenergy.com --> XX muß errechnet werden
Username: der von Victron zugeteilte Username im Format einer E-Mail adresse
Passwort: mein gewähltes Passwort
unter Advanced das heruntergeladene Servercertifikat importiert
und ein Topic im Format N/VRM_PORTAL_ID/# angelegt.
und auf dem MQTT Explorer laufen die Daten ein.
Wunderbar, MQTT Explorer wieder geschlossen.
Jetzt ein frisches FHEM aufgebaut, und ein MQTT"_Client eingerichtet.
define victron MQTT2_CLIENT mqttXX.victronenergy.com:8883
setuuid victron 681b8899-f33f-e2ed-f63e-0b2ccfde641c5196
attr victron SSL 1
attr victron autocreate no
attr victron disable 0
attr victron sslargs SSL_version:TLSv12 SSL_ca_file:venus-ca.crt SSL_use_cert:1
attr victron username xxxxxxxx@xxxxxxxxx
attr victron verbose 5
über set Password noch mein Passwort vergeben
und das Certifikat im FHEM Ordner versenkt.
leider rennt es nicht, im log folgende Zeilen (Username Passwort und SimpleWrite unknntlich gemacht):
2025.05.11 14:32:55 0: Featurelevel: 6.4
2025.05.11 14:32:55 0: Server started with 5 defined entities (fhem.pl:29809/2025-03-30 perl:5.038002 os:linux user:fhem pid:12822)
2025.05.11 14:32:55 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.11 14:32:55 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.11 14:32:55 5: victron: sending CONNECT (16)8(0)(6)MQIsdp(3)(194)(0)(30)(0)(7)victron(0)(17)jxxxxxx@xxxxxx(0)(14)xxxxxxxx
2025.05.11 14:32:55 5: DevIo_SimpleWrite victron: 103800064d514973647003c2001e000776696374726f6e00116a6f616368696d406865726f6c642d6868000e536565xxxxxxxxxxxxxxxx
2025.05.11 14:32:55 1: mqttXX.victronenergy.com:8883 reappeared (victron)
2025.05.11 14:32:56 4: victron received CONNACK
2025.05.11 14:32:56 5: victron: received CONNACK (0)(5)
2025.05.11 14:32:56 1: victron: Connection refused, not authorized
2025.05.11 14:32:56 5: victron: discarding DISCONNECT (224)(0)
2025.05.11 14:32:56 1: mqttXX.victronenergy.com:8883 disconnected, waiting to reappear (victron)
und jetzt komme ich nicht mehr weiter.
Wahrscheinlich ist es nur eine Kleinigkeit, aber welche?
Gruß Joachim
Welches Format hat dein Zertifikat?
Vielleicht hilft dir das bezüglich Zertifikat. 1. Post alte Version
https://forum.fhem.de/index.php?topic=111959.840 (https://forum.fhem.de/index.php?topic=111959.840)
ZitatWelches Format hat dein Zertifikat?
Das heruntergeladene und funktionierende Certifikat hat die Endung crt.
Ich habe auch alle mir möglichen Konvertierungen wie cer, der, p7b, pem versucht.
Hat alles nichts gebracht.
außerdem habe ich bei den sslargs ebenfalls SSL_cert_file versucht, das log hier:
2025.05.11 14:27:28 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.11 14:27:28 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.11 14:27:38 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.11 14:27:38 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.11 14:27:49 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.11 14:27:49 4: IP: mqtt43.victronenergy.com -> 3.75.75.80
2025.05.11 14:28:02 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.11 14:28:02 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
mit SSL_cert_file:venus-ca.crt und fehlendem file venus_ca.crt wird das fehlende Certifikat bemängelt
2025.05.11 18:47:05 0: Featurelevel: 6.4
2025.05.11 18:47:05 0: Server started with 5 defined entities (fhem.pl:29809/2025-03-30 perl:5.038002 os:linux user:fhem pid:27754)
2025.05.11 18:47:05 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.11 18:47:05 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.11 18:47:05 4: SSL_cert_file venus-ca.crt can't be used: No such file or directory at /usr/share/perl5/IO/Socket/SSL.pm line 2378.
mit fehlendem Certifikat und SSL_ca_file:venus-ca.crt wird das fehlende Certifikat nicht bemängelt.
Den thread hatte ich durchgearbeitet, und das mit den sslargs gefunden. Hat mich aber insgesamt nicht weitergebracht.
Eine Key erstellen geht nicht, da der bei Victron liegt. Es gibt nur das Certifikat mit dem öffentlichen Schlüssel, das beim MQTT Explorer wunderbar funktioniert hat.
Umwandeln in p12 geht wegen des fehlenden privaten keys nicht.
Gruß Joachim
Probiere mal die subscriptions zu setzen.
Wenn ich mich nicht irre, habe mal von einem Server gelesen, der kein Auth ohne
subscriptions zulässt.
ZitatProbiere mal die subscriptions zu setzen.
Wenn ich mich nicht irre, habe mal von einem Server gelesen, der kein Auth ohne
subscriptions zulässt.
???
Da brauche ich Hilfe.
Gruß Joachim
Zitat von: Joachim am 11 Mai 2025, 19:36:20ZitatProbiere mal die subscriptions zu setzen.
Wenn ich mich nicht irre, habe mal von einem Server gelesen, der kein Auth ohne
subscriptions zulässt.
???
Da brauche ich Hilfe.
Gruß Joachim
Ich hab's jetzt so auch noch nicht gemacht, aber die Topics sieht man doch im MQTT Explorer!? Ein Topic sollte zum Testen reichen...
Bzw. gibt es keine Beschreibung?
ZitatIch hab's jetzt so auch noch nicht gemacht, aber die Topics sieht man doch im MQTT Explorer!? Ein Topic sollte zum Testen reichen...
Bzw. gibt es keine Beschreibung?
So, Topic gesetzt, hat es aber auch nicht gebracht.
attr victron subscriptions N/VRM_PORTAL_ID/#
Log weiter so wie vorher.
2025.05.11 19:47:30 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.11 19:47:30 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.11 19:47:31 5: victron: sending CONNECT (16)8(0)(6)MQIsdp(3)(194)(0)(30)(0)(7)victron(0)(17)xxxxxxxxxxx@xxxxxxxxxxx(0)(14)xxxxxxxx
2025.05.11 19:47:31 5: DevIo_SimpleWrite victron: 103800064d514973647003c2001e000776696374726f6e00116a6f616368696d406865726f6c642d6868000e536565766574616cxxxxxxxxxxxx
2025.05.11 19:47:31 1: mqttXX.victronenergy.com:8883 reappeared (victron)
2025.05.11 19:47:35 4: victron received CONNACK
2025.05.11 19:47:35 5: victron: received CONNACK (0)(5)
2025.05.11 19:47:35 1: victron: Connection refused, not authorized
2025.05.11 19:47:35 5: victron: discarding DISCONNECT (224)(0)
2025.05.11 19:47:35 1: mqttXX.victronenergy.com:8883 disconnected, waiting to reappear (victron)
Gruß Joachim
Verbindungsversuch mit loggen...hab ich aber auch noch nicht gemacht.
Mehr Ideen habe ich momentan nicht, sorry.
Erst einmal vielen Dank für Deine Mühe, vielleicht findet sich ja noch jemand anderes, der mir den entscheidenden Tipp geben kann.
Gruß Joachim
Ich hatte eine funktionierende Anleitung mal im Victron Forum gefunden. Leider find ich den Link nimmer. Das mag auch sein das die Anleitung auch im Archiv Forum von Victron ist. Ging aber nicht m Fhem im speziellen sondern ich mein iobroker ... kann aber auch Moquitto gewesen sein.
Aber es gibt eine, da bin ich mir sicher. Sobald ich den Link find post ich den hier rein.
***edit ich mein die zwei links waren das
https://community.victronenergy.com/t/mqtt-daten-fur-iobroker-aus-vrm-abgreifen/16111
https://communityarchive.victronenergy.com/questions/155407/mqtt-local-via-mqtt-broker.html
ZitatIch hatte eine funktionierende Anleitung mal im Victron Forum gefunden. Leider find ich den Link nimmer. Das mag auch sein das die Anleitung auch im Archiv Forum von Victron ist. Ging aber nicht m Fhem im speziellen sondern ich mein iobroker
Danke für die Links, aber die kannte ich schon.
Ich habe alle Daten, die nötig sind, um auf das VRM Portal zuzugreifen, und habe es mit dem MQTT Explorer erfolgreich geschafft. Mosquitto habe ich bisher nicht installiert, da FHEM das eigentlich kann, nur wie?
In diesen Daten, User,Passwort,Certifikat,Topic, sind alle Informationen, die nötig sind.
Nur wie müssen sie im MQTT2_Client eingetragen werden?
Gruß Joachim
Zitat von: Joachim am 11 Mai 2025, 19:54:33Log weiter so wie vorher.
Hmmm, vermutlich sollte Rudi sich das mal anschauen.
Falls (!) ich den Code von 00_MQTT2_CLIENT richtig interpretiere, sendet der die subscriptions erst nach dem Login, was ggf. anders ist als mosquitto_sub das tut. Da scheint die (zwingende: https://github.com/victronenergy/dbus-flashmq?tab=readme-ov-file#on-line-server-wildcard-subscription-limitation) subscription direkt beim Anmelden mitgeliefert zu werden.
Vielleicht hilft da auch eine connectFn() (https://svn.fhem.de/trac/changeset/27389/trunk).
Moin Beta-User,
ZitatFalls (!) ich den Code von 00_MQTT2_CLIENT richtig interpretiere, sendet der die subscriptions erst nach dem Login,
Das ist meiner Meinung nach auch richtig.
Wenn ich mich im MQTT Explorer ohne subscriptions einlogge, wird die SSL-Verbindung aufgebaut, aber es werden keine Daten gesendet.
Ich hege den Verdacht, dass das Certifikat venus-ca.crt in FHEM nicht richtig abgefragt wird.
Hier ein Loginversuch
- 1. einlogversuch mit hinterlegtem venus-ca.crt im FHEM Stammverzeichnis, sslargs --> SSL_ca_file:venus-ca.crt SSL_ca_path:/opt/fhem SSL_use_cert:1
- 2. einlogversuch ohne Certifikat, sslargs --> SSL_ca_file:venus-ca.crt SSL_ca_path:/opt/fhem SSL_use_cert:1
- 3. einlogversuch mit hinterlegtem venus-ca.crt im FHEM Stammverzeichnis, sslargs --> SSL_cert_file:venus-ca.crt SSL_cert_path:/opt/fhem SSL_use_cert:1
- 4. einlogversuch ohne Certifikat, sslargs --> SSL_cert_file:venus-ca.crt SSL_cert_path:/opt/fhem SSL_use_cert:1
>>>>>>>>>> 1. Versuch <<<<<<<<<<<<<<<<<<<
2025.05.12 10:16:14 0: Server started with 5 defined entities (fhem.pl:29809/2025-03-30 perl:5.038002 os:linux user:fhem pid:8048)
2025.05.12 10:16:14 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 10:16:15 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 10:16:15 5: victron: sending CONNECT (16)6(0)(4)MQTT(4)(194)(0)(30)(0)(7)victron(0)(17)xxxxxx@xxxxxxxxx(0)(14)xxxxxxxxxxxxxx
2025.05.12 10:16:15 5: DevIo_SimpleWrite victron: 103600044d51545404c2001e000776696374726f6e00116a6f616368696d406865726f6c642d6868000e536565766574616c2dxxxxxxxxxxs
2025.05.12 10:16:15 1: mqttXX.victronenergy.com:8883 reappeared (victron)
2025.05.12 10:16:18 4: victron received CONNACK
2025.05.12 10:16:18 5: victron: received CONNACK (0)(5)
2025.05.12 10:16:18 1: victron: Connection refused, not authorized
2025.05.12 10:16:18 5: victron: discarding DISCONNECT (224)(0)
2025.05.12 10:16:18 1: mqttXX.victronenergy.com:8883 disconnected, waiting to reappear (victron)
2025.05.12 10:17:33 0: Server shutdown
2025.05.12 10:17:33 5: victron: discarding DISCONNECT (224)(0)
2025.05.12 10:17:34 1: Including fhem.cfg
2025.05.12 10:17:34 1: Including ./log/fhem.save
2025.05.12 10:17:34 1: Messages collected while initializing FHEM:SecurityCheck:
>>>>>>>>>> 2. Versuch <<<<<<<<<<<<<<<<<<<
2025.05.12 10:17:34 0: Featurelevel: 6.4
2025.05.12 10:17:34 0: Server started with 5 defined entities (fhem.pl:29809/2025-03-30 perl:5.038002 os:linux user:fhem pid:8080)
2025.05.12 10:17:34 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 10:17:34 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 10:17:34 5: victron: sending CONNECT (16)6(0)(4)MQTT(4)(194)(0)(30)(0)(7)victron(0)(17)xxxxxx@xxxxxxxxx(0)(14)xxxxxxxxxxxxxx
2025.05.12 10:17:34 5: DevIo_SimpleWrite victron: 103600044d51545404c2001e000776696374726f6e00116a6f616368696d406865726f6c642d6868000e536565766574616c2dxxxxxxxxxx
2025.05.12 10:17:34 1: mqttXX.victronenergy.com:8883 reappeared (victron)
2025.05.12 10:17:36 4: victron received CONNACK
2025.05.12 10:17:36 5: victron: received CONNACK (0)(5)
2025.05.12 10:17:36 1: victron: Connection refused, not authorized
2025.05.12 10:17:36 5: victron: discarding DISCONNECT (224)(0)
2025.05.12 10:17:36 1: mqttXXvictronenergy.com:8883 disconnected, waiting to reappear (victron)
2025.05.12 10:30:31 0: Server shutdown
2025.05.12 10:30:31 5: victron: discarding DISCONNECT (224)(0)
2025.05.12 10:30:33 1: Including fhem.cfg
2025.05.12 10:30:33 1: Including ./log/fhem.save
2025.05.12 10:30:33 1: Messages collected while initializing FHEM:SecurityCheck:
>>>>>>>>>> 3. Versuch <<<<<<<<<<<<<<<<<<<
2025.05.12 10:30:33 0: Featurelevel: 6.4
2025.05.12 10:30:33 0: Server started with 5 defined entities (fhem.pl:29809/2025-03-30 perl:5.038002 os:linux user:fhem pid:8315)
2025.05.12 10:30:33 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 10:30:38 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
>>>>>>>>>> 4. Versuch <<<<<<<<<<<<<<<<<<<
2025.05.12 10:31:43 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 10:31:43 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 10:31:43 4: SSL_cert_file venus-ca.crt can't be used: No such file or directory at /usr/share/perl5/IO/Socket/SSL.pm line 2378.
Gruß Joachim
ZitatIn diesen Daten, User,Passwort,Certifikat,Topic, sind alle Informationen, die nötig sind.
Nur wie müssen sie im MQTT2_Client eingetragen werden?
User: attr m2c username MyUser
Passwort: set m2c password MySecret
TLS: attr m2c SSL 1
Zertifikat: attr m2c sslargs SSL_cert_file:client.crt SSL_key_file:client.key (Dateiname relativ zu /opt/fhem)
Topic: attr m2c subscriptions Subscription1 Subscription2
ZitatDa scheint die subscription direkt beim Anmelden mitgeliefert zu werden.
Das geht nicht: die CONNECT Meldung enthaelt ClientID, Benutzername, Passwort, und LWT.
Subscription (und Publish) sind separate API Calls.
Zertifikate sind nicht Teil der MQTT API, das passiert vorher beim Aufbau der TLS Verbindung.
MQTT Version 5 (von FHEM nicht unterstuetzt) enthaelt die Moeglichkeit im Connect "Enhanced Authentication" zu spezifizieren, fuer mosquitto_sub muss man sowas per -D/--property spezifizieren. Weiss nicht, ob das in diesem Fall relevant ist.
Moin Rudi,
ZitatUser: attr m2c username MyUser
Passwort: set m2c password MySecret
TLS: attr m2c SSL 1
Zertifikat: attr m2c sslargs SSL_cert_file:client.crt SSL_key_file:client.key (Dateiname relativ zu /opt/fhem)
Topic: attr m2c subscriptions Subscription1 Subscription2
Wo bekomme ich den client.key her? ist das der öffentliche Schlüssel?
Der private Schlüssel liegt bei Victron, und da kommt man aus gutem Grund nicht ran.
Gruß Joachim
So, jetzt mal mit dieser Definition:
define victron MQTT2_CLIENT mqttXX.victronenergy.com:8883
setuuid victron 681b8899-f33f-e2ed-f63e-0b2ccfde641c5196
attr victron SSL 1
attr victron autocreate no
attr victron disable 0
attr victron mqttVersion 3.1.1
attr victron sslargs SSL_cert_file:venus-ca.crt SSL_key_file:venus-ca.key SSL_cert_path:/opt/fhem SSL_use_cert:1
attr victron subscriptions N/c0619ab7571a/#
attr victron username xxxxxxx@xxxxxxxxx
attr victron verbose 5
Passwort mit set gesetzt
den venus-ca.key aus dem venus-ca.crt erstellt (öffentlicher Schlüssel)
und hier das log:
2025.05.12 11:33:30 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 11:33:30 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 11:33:40 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 11:33:40 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 11:33:51 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 11:33:51 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 11:34:04 5: HttpUtils url=https://mqtt43.victronenergy.com:8883/ NonBlocking via https
2025.05.12 11:34:04 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
Gruß Joachim
ZitatWo bekomme ich den client.key her? ist das der öffentliche Schlüssel?
Nein, das der private Schluessel des Clients.
Mit einem Schluessel/Zertifikat Paar kann man nachweisen, dass man der "Richtige" ist.
Dabei ist der Schluessel der private Schluessel, und das Zertifikat der Oeffentliche mit weiteren Angaben, was von jemandem "beglaubigt" wurde.
Gewoehnlich haben die Server so ein Paar, damit die Kunden wissen, dass man mit dem richtigen Server redet.
Wenn aber der Server wissen will, ob auf der anderen Seite der richtige Kunde ist (und das nicht per Benutzername/Passwort, sondern per Zertifikat verifizieren will), dann braucht der Kunde ein Zertifikat, was vom Server (oder von jemandem, dem der Server vertraut) zertifiziert ist. Den dazugehoerigen privaten Schluessel sollte der Server nicht kennen, den braucht nur der Kunde.
Zitatden venus-ca.key aus dem venus-ca.crt erstellt (öffentlicher Schlüssel)
Das klingt nicht richtig.
Ich dachte wir sind mit dem Quantencomputer noch nicht soweit.
Wie geschrieben: crt == (oeffentlicher Schluessel + Zusatzdaten)*Signiert.
Zitat von: rudolfkoenig am 12 Mai 2025, 10:59:44Subscription (und Publish) sind separate API Calls.
Thx für die Klarstellung.
@Joachim:
setze mal die clientId auf irgendwas "Unverwechselbares"; nicht dass der victron-Server "victron" nicht (nochmal) mag?
Ansonsten wäre ggf. ein Log ab 1. Einwählversuch hilfreich? Da scheint ja zumindest nicht alle 10 Sekunden ein "nicht autorisiert" mehr zurückzukommen.
Moin Rudi,
ich befürchte, wir reden aneinander vorbei.
ich besitze das Certifikat von Victron (Anlage)
Das enthält
- nur den öffentlichen Schlüssel
- einen Personen-Schlüsselidentifikator
- aber
keinen privaten Schlüssel!
Der Server von Victron hat natürlich auch einen privaten Schlüssel, aber an den komme ich aus gutem Grund nicht heran, und den brauche ich auch nicht (so wie ich das verstanden habe)
ZitatWenn aber der Server wissen will, ob auf der anderen Seite der richtige Kunde ist (und das nicht per Benutzername/Passwort, sondern per Zertifikat verifizieren will), dann braucht der Kunde ein Zertifikat, was vom Server (oder von jemandem, dem der Server vertraut) zertifiziert ist. Den dazugehoerigen privaten Schluessel sollte der Server nicht kennen, den braucht nur der Kunde.
Das Certifikat habe ich (Anlage), wie erstelle ich aus dem Certifikat jetzt meinen privaten Schlüssel?
ZitatDas klingt nicht richtig.
Ich dachte wir sind mit dem Quantencomputer noch nicht soweit.
Wie geschrieben: crt == (oeffentlicher Schluessel + Zusatzdaten)*Signiert.
dafür brauchts keinen Quantencomputer,
ein
openssl x509 -pubkey -noout -in crtfile
reicht aus.
Aber dann sind wir wieder beim öffentlichen Schlüssel.
Und damit geht es nicht.
Gruß Joachim
Moin Beta-User,
Zitat@Joachim:
setze mal die clientId auf irgendwas "Unverwechselbares"; nicht dass der victron-Server "victron" nicht (nochmal) mag?
Ansonsten wäre ggf. ein Log ab 1. Einwählversuch hilfreich? Da scheint ja zumindest nicht alle 10 Sekunden ein "nicht autorisiert" mehr zurückzukommen.
die geposteten Logs sind immer die kompletten Logs, nur an den Stellen verfremdet, die Rückschlüsse auf meine Zugangsdaten zulassen.
Was meinst Du mit der Client ID?
Gruß Joachim
Zitat von: Joachim am 12 Mai 2025, 13:00:48Was meinst Du mit der Client ID?
Jeder MQTT-Server erlaubt afaik immer nur einen Client mit einer bestimmten ClientId.
Da MQTT2_CLIENT den eigenen Namen der jeweiligen Instanz verwendet, wenn man (per Attribut) nichts anderes spezifiziert, könnte es sein, dass der Victron-Server mehrfache Anfragen von Clients mit "deiner" ClientId hat und dann hin- und her wechselt oder die Verbindung abbricht usw..
Andere MQTT-Tools wie mosquitto_sub etc. verwenden in der Regel zufallsgenerierte ID's für jede Verbindung, wenn man nichts explizit angibt.
Laut diesem Link (https://communityarchive.victronenergy.com/questions/155407/mqtt-local-via-mqtt-broker.html) wird hier wirklich das Server-CA benötigt und nicht das Client-CA incl. Key (siehe Screenshot vom MQTT Explorer ziemlich zum Schluss).
Wenn ich Rudis Aussage richtig interpretiere, dann der MQTT2_Client das nicht!?
ZitatWenn ich Rudis Aussage richtig interpretiere, dann der MQTT2_Client das nicht!?
Der MQTT2_CLIENT kann alles, was die Perl-Bibliothek anbietet: https://metacpan.org/pod/IO::Socket::SSL, das Attribut sslargs wird (mehr oder weniger) direkt weitergereicht.
Zitatdafür brauchts keinen Quantencomputer,
Aus dem Zertifikat den oeffentlichen Schluessel zu extrahieren sicher nicht, aber mir fehlt die Vorstellung, wie man damit sich beim Server authentifizieren soll.
Moin Beta-User,
Clientid habe ich per Arribut auf die VRM Portal-ID gesetzt,
klappt immer noch nicht.
das log sieht aus wie vorher.
Gruß Joachim
Moin Rudi,
ZitatAus dem Zertifikat den oeffentlichen Schluessel zu extrahieren sicher nicht, aber mir fehlt die Vorstellung, wie man damit sich beim Server authentifizieren soll.
mir auch, aber genau mit diesem Certifikat funktioniert es beim MQTT Explorer.
Da mein Englisch auf dem Level Enlish for runaways nach Otto ist, steige ich nicht durch die Perl IO::SOCKET::SSL.
das Problem liegt irgendwo in den sslargs.
Mit
SSL_cert_file:venus-ca.crt SSL_key_file:venus-ca.key SSL_cert_path:/opt/fhem SSL_use_cert:1
komme ich noch nichteinmal zur Schlüsselverhandlung, in log steht
2025.05.12 13:40:36 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 13:40:36 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 13:40:47 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 13:40:47 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 13:40:57 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 13:40:57 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 13:41:09 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 13:41:09 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 13:41:22 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 13:41:22 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 13:41:35 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 13:41:35 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 13:41:46 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 13:41:46 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 13:41:59 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 13:41:59 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 13:42:10 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 13:42:10 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 13:42:23 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 13:42:23 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 13:42:35 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 13:42:35 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
Mit
SSL_ca_file:venus-ca.crt SSL_key_file:venus-ca.key SSL_cert_path:/opt/fhem SSL_use_cert:1
unterschied: einmal SSL_
cert_file, einmal SSL_
ca_file
komme ich bis zur loginverhandlung
2025.05.12 13:42:37 0: Featurelevel: 6.4
2025.05.12 13:42:37 0: Server started with 5 defined entities (fhem.pl:29809/2025-03-30 perl:5.038002 os:linux user:fhem pid:16993)
2025.05.12 13:42:37 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 13:42:37 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 13:42:37 5: victron: sending CONNECT (16);(0)(4)MQTT(4)(194)(0)(30)(0)(12)c0619ab7571a(0)(17)xxxxxx@xxxxxxx(0)(14)xxxxxxxxxxx
2025.05.12 13:42:37 5: DevIo_SimpleWrite victron: 103b00044d51545404c2001e000c63303631396162373537316100116a6f616368696d406865726f6c642d6868000e53656576657461xxxxxxxxxxx
2025.05.12 13:42:37 1: mqttXX.victronenergy.com:8883 reappeared (victron)
2025.05.12 13:42:41 4: victron received CONNACK
2025.05.12 13:42:41 5: victron: received CONNACK (0)(5)
2025.05.12 13:42:41 1: victron: Connection refused, not authorized
2025.05.12 13:42:41 5: victron: discarding DISCONNECT (224)(0)
2025.05.12 13:42:41 1: mqttXX.victronenergy.com:8883 disconnected, waiting to reappear (victron)
Gruß Joachim
Zitatmir auch, aber genau mit diesem Certifikat funktioniert es beim MQTT Explorer.
Kannst Du bitte (moeglich genau) zeigen, was alles Du in MQTT Explorer eingestellt hast?
ZitatKannst Du bitte (moeglich genau) zeigen, was alles Du in MQTT Explorer eingestellt hast?
Natürlich kann ich das zeigen.
- MQTT EXPLORER starten
- Schaltfläche Advanced betätigen
- Schaltfläche Certifikates betätigen
- Schaltfläche Server Certifikate (CA) betätigen
- Certifikat auswählen (venus-ca.crt)
- Schaltfläche Back betätigen
- gelbe Schaltfläche ADD betätigen
- Topic eintragen --> N/victron-ID/#
- Schaltfläche Back betätigen
- Name --> test
- beide Schiebeschalter Validate Certifikate und Encryption(TLS) auf on stellen
- Protokoll --> mqtt://
- Host --> mqttXX.victronenergy.com bei XX die errechneten Ziffern, siehe https://haus-automatisierung.com/batteriespeicher/2023/12/20/venus-os-mqtt-broker-geraete-emulieren.html
- Port --> 8883
- username --> mein username im Format einer E-Mail Adresse
- password --> mein geheimes Passwort
- Schaltfläche Connect, und die Daten trudeln ein
Gruß Joachim
Was mir noch auffällt ist,
- daß ein fehlendes SSL_key_file von FHEM bemängelt wird
2025.05.12 15:05:45 4: SSL_key_file venus-ca.key can't be used: No such file or directory at /usr/share/perl5/IO/Socket/SSL.pm line 2378.
- daß ein fehlendes venus-ca.crt bemängelt wird, wenn sslargs --> SSL_cert_file:venus-ca.crt
2025.05.11 18:47:05 4: SSL_cert_file venus-ca.crt can't be used: No such file or directory at /usr/share/perl5/IO/Socket/SSL.pm line 2378.
allerdings wird einfehlendes venus-ca.crt nicht bemängelt, wenn sslargs --> SSL_ca_file:venus-ca.crt
allerdings kommt man nur mit diesem sslarg an folgende Stelle
2025.05.11 19:47:30 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.11 19:47:30 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.11 19:47:31 5: victron: sending CONNECT (16)8(0)(6)MQIsdp(3)(194)(0)(30)(0)(7)victron(0)(17)xxxxxxxxxxx@xxxxxxxxxxx(0)(14)xxxxxxxx
2025.05.11 19:47:31 5: DevIo_SimpleWrite victron: 103800064d514973647003c2001e000776696374726f6e00116a6f616368696d406865726f6c642d6868000e536565766574616cxxxxxxxxxxxx
2025.05.11 19:47:31 1: mqttXX.victronenergy.com:8883 reappeared (victron)
2025.05.11 19:47:35 4: victron received CONNACK
2025.05.11 19:47:35 5: victron: received CONNACK (0)(5)
2025.05.11 19:47:35 1: victron: Connection refused, not authorized
2025.05.11 19:47:35 5: victron: discarding DISCONNECT (224)(0)
2025.05.11 19:47:35 1: mqttXX.victronenergy.com:8883 disconnected, waiting to reappear (victron)
Gruß Joachim
Das Zertifikat beim MQTT Explorer dient nur zur Validierung der Server. Das kann man machen, oder auch lassen wenn man nicht sehr paranoid ist.
Fuer MQTT2_CLIENT muesste SSL, username und password reichen.
Da MQTT-Explorer funktioniert, sollte das XX in mqttXX passen.
Bleibt Benutzername und Passwort: sind diese in der CONNECT Zeile korrekt?
Welche MQTT Version ist beim MQTT Explorer eingestellt? Macht "attr m2c mqttVersion 3.1.1" einen Unterschied?
Zitat- daß ein fehlendes SSL_key_file von FHEM bemängelt wird
Die Fehlkermeldung ist irrefuehrend.
SSL_cert_file und SSL_key_file werden beide zusammen benoetigt, SSL_ca_file funktioniert auch alleine.
UND: SSL_key_file muss das richtige private-key enthalten, nicht das aus dem CERT exportierte public-key.
So, ich habe mal alles auf null gesetzt, sowohl beim MQTT Explorer, als auch bei FHEM.
alle Daten neu beim MQTT Explorer ohne Certifikat eingegeben und verbunden.
--> der MQTT Explorer sammelt Daten.
Im FHEM den MQTT2_CLIENT gelöscht, FHEM neu gestartet, das Device neu angelegt
define victron MQTT2_CLIENT mqttXX.victronenergy.com:8883
setuuid victron 68224055-f33f-e2ed-00e2-4bf584671a8ae993
attr victron SSL 1
attr victron autocreate no
attr victron username xxxxxxx@xxxxxx-xx.xx
attr victron verbose 5
mit
set victron password xxxxxxxx-xxxxx
das Passwort gesetzt
Hier das log:
2025.05.12 20:44:10 1: Including fhem.cfg
2025.05.12 20:44:10 1: Including ./log/fhem.save
2025.05.12 20:44:10 1: Messages collected while initializing FHEM:SecurityCheck:
WEB is not password protected
Protect this FHEM installation by defining an allowed device with define allowed allowed
You can disable this message with attr global motd none
2025.05.12 20:44:10 0: Featurelevel: 6.4
2025.05.12 20:44:10 0: Server started with 5 defined entities (fhem.pl:29809/2025-03-30 perl:5.038002 os:linux user:fhem pid:6485)
2025.05.12 20:44:10 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.12 20:44:10 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.12 20:44:10 5: victron: sending CONNECT (16);(0)(6)MQIsdp(3)(194)(0)(30)(0)(7)victron(0)(20)xxxxxxx@xxxxxx-xx.xx(0)(14)xxxxxxxx-xxxxx
2025.05.12 20:44:10 5: DevIo_SimpleWrite victron: 103b00064d514973647003c2001e000776696374726f6e00146a6f616368696d406865726f6c642d68682e6465000e536565766574616c2dxxxxxxxxxx
2025.05.12 20:44:10 1: mqttXX.victronenergy.com:8883 reappeared (victron)
2025.05.12 20:44:10 4: victron received CONNACK
2025.05.12 20:44:10 5: victron: received CONNACK (0)(5)
2025.05.12 20:44:10 1: victron: Connection refused, not authorized
2025.05.12 20:44:10 5: victron: discarding DISCONNECT (224)(0)
2025.05.12 20:44:10 1: mqtt43.victronenergy.com:8883 disconnected, waiting to reappear (victron)
geht nicht.
Usernamen, Passwort mehrfach kontrolliert, es ist auch beides als Klartext im log.
Im Usernamen ist ein "@" "." und ein "-" als Sonderzeichen
Das Passwort besteht aus Groß/Klein Buchstaben, Zahlen und einem "-"
Gruß Joachim
ZitatIm Usernamen ist ein "@" "." und ein "-" als Sonderzeichen
Das Passwort besteht aus Groß/Klein Buchstaben, Zahlen und einem "-"
Das duerfte egal sein, Strings werden mit Laengenangabe uebermittelt in UTF-8, Escape-Zeichen sind nicht notwendig.
Meine letzte Hypothese ist, dass clientId was Einzigartiges sein muss, wie
attr victron clientId FHEM_1747153986550
ZitatWelche MQTT Version ist beim MQTT Explorer eingestellt? Macht "attr m2c mqttVersion 3.1.1" einen Unterschied?
Kannst Du das bitte auch noch pruefen?
Moin Rudi,
ich glaube, ich habe es gelöst.
Hier die funktionierende Konfiguration:
define victron MQTT2_CLIENT mqttXX.victronenergy.com:8883
setuuid victron 68224055-f33f-e2ed-00e2-4bf584671a8ae993
attr victron SSL TLS
attr victron autocreate no
attr victron clientId xxxxxxx@xxxxxxxx-xx.xx
attr victron subscriptions N/VRM-ID/#
attr victron username xxxxxxx@xxxxxxxx-xx.xx
attr victron verbose 5
das log:
2025.05.13 23:37:27 0: Featurelevel: 6.4
2025.05.13 23:37:27 0: Server started with 5 defined entities (fhem.pl:29809/2025-03-30 perl:5.038002 os:linux user:fhem pid:5923)
2025.05.13 23:37:27 5: HttpUtils url=https://mqttXX.victronenergy.com:8883/ NonBlocking via https
2025.05.13 23:37:27 4: IP: mqttXX.victronenergy.com -> 3.75.75.80
2025.05.13 23:37:27 5: victron: sending CONNECT (16)H(0)(6)MQIsdp(3)(194)(0)(30)(0)(20)xxxxxxx@xxxxxxxx-xx.xx(0)(20)xxxxxxx@xxxxxxxx-xx.xx(0)(14)xxxxxxxx-xxxxx
2025.05.13 23:37:27 5: DevIo_SimpleWrite victron: 104800064d514973647003c2001e00146a6f616368696d406865726f6c642d68682e646500146a6f616368696d406865726f6c642d68682e6465000e536565766574616c2dxxxxxxxxxxxx
2025.05.13 23:37:27 1: mqttXX.victronenergy.com:8883 reappeared (victron)
2025.05.13 23:37:27 4: victron received CONNACK
2025.05.13 23:37:27 5: victron: received CONNACK (0)(0)
2025.05.13 23:37:27 5: victron: sending SUBSCRIBE (130)(21)(0)(4)(0)(16)N/c0619ab7571a/#(0)
2025.05.13 23:37:27 4: victron received SUBACK
2025.05.13 23:37:27 5: victron: received SUBACK (0)(4)(0)
2025.05.13 23:37:27 4: victron received PUBLISH
2025.05.13 23:37:27 5: victron: received PUBLISH (0)(30)N/VRM-ID/system/0/Serial{"value":"VRM-ID"}
2025.05.13 23:37:27 5: victron: dispatch autocreate=no\000xxxxxxx_xxxxxx_xx.xx\000N/VRM-ID/system/0/Serial\000{"value":"VRM-ID"}
2025.05.13 23:37:57 5: victron: sending PINGREQ (192)(0)
2025.05.13 23:37:57 4: victron received PINGRESP
2025.05.13 23:37:57 5: victron: received PINGRESP
Das war eine schwere Geburt.
Morgen werde ich weiter herumexperimentieren, und das ganze zusammenfassen.
Gruß Joachim
Wir haetten die Bemerkung von Beta-User ernster nehmen sollen:
Zitatsetze mal die clientId auf irgendwas "Unverwechselbares"; nicht dass der victron-Server "victron" nicht (nochmal) mag?