Victron Solarladeregler BlueSolar und SmartSolar

Victron Energy Solarladeregler Modul

GitHub - hermanthegerman2/Victron

Mit dem Modul können Solarladeregler der Firma Victron Energy Solarladeregler - Victron Energy ausgelesen werden.
Dazu ist eine VE-Direct Kabelverbindung zu Symcon nötig.
DIe Verbindung kann über einen Client Socket oder einem seriellen Port erfolgen.
Variablen werden nach erfolgreicher Verbindung automatisch angelegt für folgende Laderegler:

    BlueSolar MPPT 75 50
    BlueSolar MPPT 150 35
    BlueSolar MPPT 75 15
    BlueSolar MPPT 100 15
    BlueSolar MPPT 100 30
    BlueSolar MPPT 100 50
    BlueSolar MPPT 150 70
    BlueSolar MPPT 150 100
    BlueSolar MPPT 75 50 rev2
    BlueSolar MPPT 100 50 rev2
    BlueSolar MPPT 100 30 rev2
    BlueSolar MPPT 150 35 rev2
    BlueSolar MPPT 75 10
    BlueSolar MPPT 150 45
    BlueSolar MPPT 150 60
    BlueSolar MPPT 150 85
    SmartSolar MPPT 250 100
    SmartSolar MPPT 150 100
    SmartSolar MPPT 150 85
    SmartSolar MPPT 75 15
    SmartSolar MPPT 75 10
    SmartSolar MPPT 100 15
    SmartSolar MPPT 100 30
    SmartSolar MPPT 100 50
    SmartSolar MPPT 150 35
    SmartSolar MPPT 150 100 rev2
    SmartSolar MPPT 150 85 rev2
    SmartSolar MPPT 250 70
    SmartSolar MPPT 250 85
    SmartSolar MPPT 250 60
    SmartSolar MPPT 250 45
    SmartSolar MPPT 100 20
    SmartSolar MPPT 100 20 48V
    SmartSolar MPPT 150 45
    SmartSolar MPPT 150 60
    SmartSolar MPPT 150 70
    SmartSolar MPPT 250 85 rev2
    SmartSolar MPPT 250 100 rev2
    SmartSolar MPPT VE Can 150 70
    SmartSolar MPPT VE Can 150 45
    SmartSolar MPPT VE Can 150 60
    SmartSolar MPPT VE Can 150 85
    SmartSolar MPPT VE Can 150 100
    SmartSolar MPPT VE Can 250 45
    SmartSolar MPPT VE Can 250 60
    SmartSolar MPPT VE Can 250 70
    SmartSolar MPPT VE Can 250 85
    SmartSolar MPPT VE Can 250 100

In der Datei VictronConstants.php können die automatisch angelegten Variablen je Gerät noch festgelegt werden. Ich hatte zum Testen nur einen Regler SmartSolar MPPT 75 15. Deswegen sind seine Variablen auch für alle restlichen Regler hinterlegt.

Anpassungun für weitere Geräte sind möglich und ausdrücklich erwünscht. Dann bitte eine PN mit dem hoffentliche schon vorbereiteten array

"A053" => array('DeviceName' => 'SmartSolar MPPT 75|15', 'DisplayedValues' => array('PID','V','VPV','PPV','I','IL','LOAD','Alarm','Relay','AR','OR','H19','H20','H21','H22','H23','ERR','CS','FW','SER#','HSDS','MODE','WARN','MPPT')),

an mich.

Konfigurationsseite:

Console:

Viel Spaß damit.

Das Modul ist noch im Beta Status. Sollten noch Bugs im Modul sein bitte Info an mich, danke.
Beste Grüße,
Hermann

Changelog:

Version 1.0 * Serielle Verbindungsdaten 19200 8N1 werden in die Parent-ID geschrieben
Version 1.1 * Translations DE in locale.json erweitert

Hallo Hermann,
hab grad mal einen kurzen Blick auf dein Modul geworfen. Schaut gut aus. Hab aber auf die Schnelle keine Auswertung der asynchronen Nachrichten gesehen. Sind die bei dir nicht mit drin?

Grüße
Stefan

Hallo Stefan,

Danke für das Feedback. Ich habe mich vorerst mal „nur“ an das VE.Direct-Protocol gehalten.
Welche Funktion(en) vermisst Du konkret ?

Gruß,
Hermann

VE.Direct-Protocol-3.29.pdf (382 KB)

BlueSolar-HEX-protocol-MPPT.pdf (1.23 MB)

Hallo Hermann,
ich meine die „Asynchronous Items“ aus dem VE-Direct HEX-Protokoll. Diese habe ich bei dir nirgends gesehen bei kurzer durchsicht.

Grüße
Stefan

Hallo Stefan,

ist mir klar.
Allerdings benötigt man diese doch nur, wenn Werte in den Registern des Victron-Gerätes geschrieben werden sollen.
Bis jetzt würde ich höchstens den „LOAD“-Ausgang manuell schalten wollen.
Evtl auch noch die Historiewerte, obwohl die bei laufender Variablenarchivierung irgendwann unnütz sind.

Was vermisst Du aktuell ?

Gruß,
Hermann

Ich denke, es gab damals schon einen Grund, warum ich vom ASCII-Protokoll auf das HEX-Protokoll umgestiegen bin. Bei meinem Batteriemonitor BMV-712 hatte ich auch mit dem ASCII angefangen und dann aber komplett umgebaut auf HEX.
Jedenfalls hab ich ein paar Werte mehr, die aber über die History reinkommen. Meiner Meinung nach bietet das HEX-Protokoll einfach mehr Möglichkeiten.

Grüße
Stefan

Moin Hermann,
hier mal eben eine neue Routine für die checksumme. Ein Problem taucht bei der Alten auf, wenn man längere Befehle sendet (Einstellen von Parametern im Victron).

public function checksum(string $Data,bool $send=FALSE){
	$len = strlen($Data);                                                                                                                                                                                   
        if ($len == 0 or !ctype_xdigit($Data[0])){return FALSE;}                                                                                                          
        	$checksum_calc = (0x55 - hexdec($Data[0]));                                                                                                                                                             
           	if ($send === TRUE){                                                                                                                                         
                	for($i=1; $i < $len; $i=$i+2) {
$checksum_calc = $checksum_calc - hexdec($Data[$i].$Data[$i+1]);
}  
$checksum_calc = $checksum_calc & 0x000000FF;
                	$checksum = strtoupper(dechex($checksum_calc));
                	if (strlen($checksum) == 1){$checksum = "0".$checksum;}
			return $checksum;      
           	}  
		else{                                         
               		for($i=1; $i < $len-2; $i=$i+2) {
                        	$checksum_calc = $checksum_calc - hexdec($Data[$i].$Data[$i+1]);
                	}                                                                                                                                                    
                	$checksum_calc = $checksum_calc & 0x000000FF;
                	$checksum_rec = hexdec($Data[$len-2].$Data[$len-1]);   
                	if ($checksum_calc == $checksum_rec){return TRUE;}                                                                                                   
                	else{return FALSE;}                                                                                                                                  
          	}                                                                                                                                                                                                        
	} 
}                             

Grüße
Stefan

Hallo Hermann,

besteht die Möglichkeit mit deinen Modul auch einen Smart Shunt von Victron in IPS einzubinden?

Grüße
Christian

Hallo Stefan,

könntest du etwas mehr zu deiner Lösung erzählen.
Ich habe schon seit Jahren ein BMV 702 was ich per ASCII auslese (hier beschrieben). Das klappt auch ganz gut, nur muss ich das IO-Interface aller 30 Sekunden öffnen und schlissen sonst legt es mir meinen Rechner lahm.

Grüße Thomas

Ich hab mit einem BMV-712 angefangen. Den benutze ich aber mittlerweile nicht mehr, weil ich Akkus mit BMS habe. Bei mir sind nur noch die Laderegler aktiv.
Der BMV müsste genauso wie die Laderegler jede Sekunde eine Nachricht schicken. Das führt zu performance Problemen, wenn man jede Sekunde den kompletten String verarbeitet. Daher das öffnen und schließen des Ports. Hatte ich auch so gemacht.
Das Modul reagiert nur auf asynchrone HEX-Nachrichten die mit :A beginnen.
Um die wichtigsten Sachen per Hex zu bekommen sende ich einen PING in gewissen Abständen (bei mir 5 Minuten).
Mittlerweile hab ich noch einige Einstellungssachen in das Modul eingebaut (nicht veröffentlicht).

Mit dem Hex-Protokoll kann man eben alle Werte lesen und schreiben, welche von den Victron Geräten zuf Verfügen stehen. Mit dem ASCII-Protokoll halt recht wenig. Daher bleibe ich beim HEX.

Grüße
Stefan

Hallo Stefan,

vielen Dank für die Ausführungen.
Ich habe jetzt auch mal das Modul ausprobiert. Aber das Modul unterstützt mein BMV nicht.

Da bleibe ich bei meiner Lösung.

Grüße Thomas

Hallo Thomas,
welches Modul hast du getestet? Das hier von Hermann oder das von mir?

Grüße
Stefan

:scream:
Das Modul von Hermann.
Wo finde ich denn deins?

Grüße Thomas

In diesem Beitrag findest du eine ältere Version:
https://community.symcon.de/t/solaranlage-ladegeraet-schalten/52385

Wenn damit was funktioniert bei dir, kann ich dir auch mal eine neuere Version zukommen lassen und eventuell noch ein paar Anpassungen einbauen, wenn du lust hast mir die Daten dazu zu liefern.

Grüße
Stefan

Hallo Stefan,

danke für den Link. Leider scheitere ich schon bei der installation, genau wie hier (Beitrag 16):
https://community.symcon.de/t/solaranlage-ladegeraet-schalten/52385/16?

Kann Zweigliste nicht laden
Error: could not find repository from 'C:\ProgramData\Symcon\modules\IPSVictron' (Code: -32603)

Leider steht dort nicht, wie es gelöst wurde.

Grüße Thomas

Das Verzeichnis in der Zip-Datei wird einfach im ordner von symcon in „modules“ kopiert. Egal ob Windows oder Linux. Danach Symcon neu starten. Fertig.

Grüße
Stefan

Hallo Stefan,

das geht nicht, es kommt imer wieder der Fehler.

Grüße Thomas

Sobald das Modul in „Modules“ aufgeführt wird, ist es installiert. Dass im „Modules“-Modul ein Ausrufezeichen - also ein Fehler angezeigt wird, ist nicht relevant.

Danke, das war der richtige Hinweis. :beers:
Daten kommen jetzt auch an, leider werden aber die Variablen nicht gefüllt.

Hier mal die Debug: dump.txt (22,5 KB)

Grüße Thomas