Victron SmartSolar (und weitere Geräte) mit RaspberryPi über USB VE.Direct mit Python auslesen: so geht's!

Moin zusammen.

Ich habe lange danach gesucht, aber so richtig war im Netz nicht zu finden, wie man einen Victron Solarladeregler mit Python über USB auslesen kann. Zumindest gab es ähnliche Skripte. Z.B. dieses hier:

Für mein Projekt habe ich dann alles was ich gefunden habe zusammengelötet, hier das Ergebnis.

Was Ihr braucht:

  • Rudimentäre Python-Kenntnisse.

  • Raspberry Pi oder anderen Linux-Rechner. Sollte auch mt Windows klappen, da müsste man sich dal anschauen, wie unter Windows die Devices genannt werden.

  • Einen USB- RS232 Adapter. Ich habe diesen hier gebastelt:

    https://www.youtube.com/watch?v=XSMwFWjhYYU

Achtung: bei meinem Stecker waren die 4 Farben am Portstecker komplett in der Richtung vertauscht. Dies bitte erst mit dem Stecker im Video vergleichen!!

Beim Selbstbau würde ich erst mal auf die 5V - Verbindung verzichten. Einer meiner Solarregler hat mit der 5V-Verbindung nicht funktioniert. Ist auch überflüssig.

Ansonsten gibt es auch einen fertigen Stecker (für etwas mehr Geld) bei Victron zu erwerben.

  • Das angehängte Skript (2 Dateien / zip).

Für Python2:

Victron.zip (1.82 KB)

oder für Python3:

Victron_Python3.zip (1.78 KB)

Kurzanleitung:

  • Victron mit Pi verbinden. Der erste Versuch mit 5V Verbindung führte bei mir zu diversen merkwürdigen Effekten. Nochmals mein Tipp: nur GND und die Datenverbindungen verlöten..

  • Beide Dateien in ein Verzeichnis kopieren. Ist nur ein USB Adapter angeschlossen, dann sollte als Device "/dev/ttyUSB0" stimmen.

Starten des Skriptes:

python vread.py

bzw

python3 vread.py

Die Konvertierung zu python3 hätte ich übrigens ohne ChatGPT nie so schnell hinbekommen. Vielen Dank dafür! ? ?

Ausgabe in diesem Beispiel:

{'LOAD': 'ON', 'H19': '356', 'VPV': '34570', 'ERR': '0', 'FW': '161', 'I': '-220', 'H21': '9', 'IL': '800', 'PID': '0xA053', 'H20': '1', 'H23': '25', 'MPPT': '2', 'HSDS': '158', 'SER#': 'HQ1839N7SVC', 'V': '13210', 'CS': '3', 'H22': '6', 'OR': '0x00000000', 'PPV': '8'}
Seriennummer: HQ1839N7SVC
Leistung (W): 8
Batteriespannumg (mV): 13210

Oben wird der gelesene String ausgegeben. Der lässt sich einfach auslesen (siehe Skript). Hier im Beispiel die Seriennummer des Victron, die aktuelle Leistung und die Batteriespannung. Was die anderen Werte zu bedeuten haben steht hier:

Ich denke, vread.py ist ziemlich simpel und wirklich leicht zu durchschauen.

Ein Hinweis noch: bei mir lassen sich die Geräte immer nur dann auslesen, wenn der USB-Stecker beim Start des Raspi eingesteckt waren. Späteres Einstecken wird nicht erkannt.

Viel Spaß bei Euren Projekten...

PS: mir ist inzwischen noch aufgefallen, dass, so lange nur ein Solarregler angeschlossen ist, alles wunderbar funktioniert. Sobald ein zweiter hinzukommt werden die Messages z.T. start verkürzt was zum vorprogrammieretn Fehler 'Malformed packet' führt. Ich habe das Gefühl, das sich die beiden USB-Konverter gegenseiting beeinflussen. Ich habe sie jetzt mal mit Alufolie umklebt und möglichst weit voneinander (USB-Verlängerung) platziert. Scheint jetzt besser zu funktionieren, aber immer noch nicht so gut wie mit nur einem.

Kleiner Änderungsvorschlag bei ähnlichen Problemen in vdirect.py:

return self.dict
# if (self.bytes_sum % 256 == 0):
#      self.bytes_sum = 0
#      return self.dict
# else:
#      print ('Malformed packet')
#      self.bytes_sum = 0

und dann in einer try-Schleife speziel nach einzelnen Werten (auch in unvollständigen Messages) suchen. Vielleicht hat man genau diese Probleme ja mit dem Originalkonverter nicht(?)

Schreibt gerne mal, ob und womit es bei Euch klappt...

Nachtrag: Von den DIY Kabeln möchte ich jetzt abraten. Solange man nur eines in Betrieb hat geht das so einigermaßen. Spätestens bei 2 Geräten stören sie sich gegenseitig ungemein. Ich bin jetzt doch auf die Original Victron-Kabel umgestiegen. Diese sind isoliert (galvanisch getrennt). Sind zwar etwas überteuert, sparen aber eine Menge Ärger nach dem man sich dann am Ende doch gefrustet die Originale kauft. :wink:

Diese funktionieren dann aber zuverlässig und melden sich auch nicht dauernd selbstständig ab. Also: gar nicht.

2 „Gefällt mir“

@Monokristallin - vielen Dank für deinen Beitrag.

Ich werde den Code gleich direkt in der S7-1200 nutzen und schließe den WR an eine RS232 Wago Karto an die ich noch rumliegen habe.

Das macht das Energiemanagement gleich viel einfach.

Warum bin ich nicht auf diese Idee gekommen ... {green}:nerd:

Zur Info : Mein Haus ist automatisiert mit einer S7-1200 und man kann Python einfach in Structured Text (ST) umwandeln

Das werde ich an meinen nächsten freien Tagen umsetzen

Dann kann der Umweg über IO-Broker entfallen

Hallo Zusammen
Ich hoffe bin hier richtig, falls ich ein neuen Thread für das machen soll, lass es mich wissem.
Ich möchte mit einem Raspberry Pi4 von meinen 2 Victron Laderegler im Netzwerk Modus
prüft wieviel Watt die Panels ausgeben.
Meine Idee ist folgende:
Ich habe mir eine Umschaltstation gebaut die ich mit einer
Zeitschaltuhr oder auch Manuell auf dem Handy mit der Hombli App ein und auschalten kann.
Dahinter steht ein Server mit 2 Netzteilen der ca 270Watt Leistung braucht.
Eines der Netzteile ist an einem USV angeschlossen so dass ein kleiner Unterbruch nichts ausmacht.
Hombli müsste laut meinen Recherchen Tuya kompatibel sein, so das ein Raspberry einen Befehl zum ein/ausschalten ausgeben könnte.
Link entfernt
Link entfernt
Link entfernt
Ein Victron Image für Raspberry Pi4 gibt es ja auch z.B. das hier:
Link entfernt
Jetzt wäre natürlich ein Skript oder App wo die Leistung der Panels abfragt und dann einen Befehl an den Hombli weitergibt extrem cool.
Sagen wir mal die Panels/Victron Netzwerk haben eine Leistung ab 300Watt so sollte einen Befehl zum Hombli gesendet werden können damit die Zeitschaltuhr einschaltet und bei einer Leistung unter 260Watt abschaltet.
Ich kann leider überhaupt nicht Programmieren, aber vielleicht kann mich ja jemand von euch dabei unterstützen, Helfen diese Idee zu realisieren?
Sofern dies nicht gleich ein paar hundert € kosten würde kann ich euch/dich auch ein wenig unterstützen. Und das Projekt könnte man evt dann auch für andere zugänglich machen sofern jemand anderes sowas auch braucht.
Ich bedanke mich schon mal im Vor aus und würde mich freuen wenn jemand dazu Lust hast.
Grüsse Pat

Vielen Dank!

(auch wenn du mir damit Arbeit machst! :wink:

@e-t0m Hi, was heisst das? ? Könntest du sowas umsetzten?

Soll ich mal HW bestellen?

Vor allem das VE Kabel aber da gibt es 2 Versionen wo ich keine Ahnung habe welches das Richtige ist.

Einmal ein Interface Kabel MK3 USB Victron VE.Bus zu USB Interface Kabel

und ein Adapterkabel VE.Direct zu USB-Interface

Welches würde ich benötigen und brauche ich 2 oder reicht eines um die Netzwerkleistung auszulesen?

@noise du solltest dringend einen eigenen Thread dafür aufmachen und dort dein Anliegen noch detaillierter beschreiben.

Mein Dank gilt dem TE und seinen scripten! :slight_smile:

Hallo zusammen,
ich habe die Skripte von monokristallin mit einem Smartsolar 150/60 und dem Original Ve Direct Kabel ausprobiert. Funktioniert prima bei ca jedem zweiten Aufruf. Das passt für mich.
Nur würde ich auch gerne Ladeparameter setzten auf die gleiche Weise, also schreiben anstatt lesen.
Kennt jemand ein entsprechendes Skript?
Viele Grüße,
Diemei