Benachrichtigungen
Alles löschen

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

6 Beiträge
4 Benutzer
2 Reactions
3,606 Ansichten
Monokristallin
(@monokristallin)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 112
Themenstarter  

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:

https://community.home-assistant.io/t/victron-bmv700-and-mppt-serial-usb-to-mqtt-and-file-needs-improvement-but-works/266675

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:

 

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:

oder für Python3:

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:

https://www.victronenergy.com/upload/documents/VE.Direct-Protocol-3.32.pdf

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. 😉

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


   
E-t0m and ESCR reacted
Zitat
 ESCR
(@escr)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 79
 

Veröffentlicht von: @monokristallin

Viel Spaß bei Euren Projekten...

@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 ... 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


   
AntwortZitat
(@noise)
Newbie
Beigetreten: Vor 1 Jahr
Beiträge: 2
 

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


   
AntwortZitat
E-t0m
(@e-t0m)
Autarkiekönig
Beigetreten: Vor 2 Jahren
Beiträge: 858
 

Vielen Dank!

(auch wenn du mir damit Arbeit machst! 😉

klick: meine flexible high-end cheap-tech Nulleinspeisung mit teuer-Strompreis-Eigenverbrauch klick: Tasmota Timer mit Tibber stellen


   
AntwortZitat
(@noise)
Newbie
Beigetreten: Vor 1 Jahr
Beiträge: 2
 

@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?


   
AntwortZitat
E-t0m
(@e-t0m)
Autarkiekönig
Beigetreten: Vor 2 Jahren
Beiträge: 858
 

@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! 🙂

klick: meine flexible high-end cheap-tech Nulleinspeisung mit teuer-Strompreis-Eigenverbrauch klick: Tasmota Timer mit Tibber stellen


   
AntwortZitat
Teilen: