FHEM und Victron VRM Portal

Begonnen von Joachim, 11 Mai 2025, 16:00:15

Vorheriges Thema - Nächstes Thema

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
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

rudolfkoenig

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.

rudolfkoenig

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.

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Joachim

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
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

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
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

frober

Laut diesem Link 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!?
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

rudolfkoenig

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.

Joachim

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
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

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:1komme 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:1unterschied: 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
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

rudolfkoenig

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?

Joachim

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
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

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
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

rudolfkoenig

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.