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:
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.
Diese funktionieren dann aber zuverlässig und melden sich auch nicht dauernd selbstständig ab. Also: gar nicht.