Victron MultiPlus II

Hi,

mhhh bin zu faul mir alles von Hand anzulegen. Bei MQTT läuft das so gut wie von alleine.

Oder wie richtest du dir das alles denn ein ?

Gruß

Also ich habe einen halbautomatischen Weg gewählt.
Die Excel-Tabelle habe ich in eine CSV-Datei gewandelt.
Ich habe mir immer blockweise Zeilen aus der CSV-Datei kopiert und manuell in ein array kopiert (besteht dann aus Strings).
Die Funktion legt nun die Modbusregister mit den richtigen Adressen, Datentyp und Faktor an.
Das Gateway wird gesetzt. Zusätzlich wird noch ein Link auf den Wert mit dem Namen in einer weiteren Kategorie erstellt und das Logging eingeschaltet.
Hier ein Beispiel:

function CreateModbusInstance() {
  $id_Kategorie = 10515;
  $id_Link=24715;
  $table=array(
               "com.victronenergy.settings;ESS control loop setpoint;2700;int16;1;-32768 to 32767;/Settings/Cgwacs/AcPowerSetPoint;yes;W;",
               "com.victronenergy.settings;ESS max charge current (fractional);2701;uint16;1;0 to 100;/Settings/Cgwacs/MaxChargePercentage;yes;%;",
               "com.victronenergy.settings;ESS max discharge current (fractional);2702;uint16;1;0 to 100;/Settings/Cgwacs/MaxDischargePercentage;yes;%;",
               "com.victronenergy.settings;ESS control loop setpoint;2703;int16;0,01;-3276800 to 3276700;/Settings/Cgwacs/AcPowerSetPoint;yes;W;",
               "com.victronenergy.settings;ESS max discharge current;2704;uint16;0,1;0 to 655350;/Settings/Cgwacs/MaxDischargePower;yes;W;",
               "com.victronenergy.settings;DVCC system max charge current;2705;int16;1;-32768 to 32767;/Settings/SystemSetup/MaxChargeCurrent;yes;A DC;",
               "com.victronenergy.settings;Maximum System Grid Feed In;2706;int16;0,01;-3276800 to 3276700;/Settings/Cgwacs/MaxFeedInPower;yes;W;",
               "com.victronenergy.settings;Feed excess DC-coupled PV into grid;2707;int16;1;;/Settings/Cgwacs/OvervoltageFeedIn;yes;",
               "com.victronenergy.settings;Don’t feed excess AC-coupled PV into grid;2708;int16;1;;/Settings/Cgwacs/PreventFeedback;yes;",
               "com.victronenergy.hub4;Grid limiting status;2709;int16;1;;/PvPowerLimiterActive;no;",
               "com.victronenergy.settings;Limit managed battery voltage;2710;uint16;10;0 to 6553.5;/Settings/SystemSetup/MaxChargeVoltage;yes;V DC;",
               "com.victronenergy.settings;AC input 1 source (for VE.Bus inverter/chargers);2711;uint16;1;0 to 65535;/Settings/SystemSetup/AcInput1;yes;",
               "com.victronenergy.settings;AC input 2 source (for VE.Bus inverter/chargers);2712;uint16;1;0 to 65535;/Settings/SystemSetup/AcInput2;yes;",
               "com.victronenergy.settings;ESS BatteryLife state;2900;uint16;1;;/Settings/CGwacs/BatteryLife/State;yes;",
               "com.victronenergy.settings;ESS Minimum SoC (unless grid fails);2901;uint16;10;;/Settings/CGwacs/BatteryLife/MinimumSocLimit;yes;%;",
               "com.victronenergy.settings;ESS Mode;2902;uint16;1;0 to 65535;/Settings/Cgwacs/Hub4Mode;yes;",
               "com.victronenergy.settings;ESS BatteryLife SoC limit (read only);2903;uint16;10;;/Settings/Cgwacs/BatteryLife/SocLimit;no;%;"
  );
	$time         = 60000;           // Aktualisierungzeit in ms
	$id_Gateway   = 12232;
	foreach($table as $id) {
           $des=explode(";",$id);
	   $neueInstanz = IPS_CreateInstance("{CB197E50-273D-4535-8C91-BB35273E3CA5}");
	   IPS_SetName($neueInstanz, $des[1]);
	  switch ($des[3]) {
            case "uint16": IPS_SetProperty($neueInstanz, 'DataType', 2); break;
            case "uint32": IPS_SetProperty($neueInstanz, 'DataType', 3); break;
            case "int16" : IPS_SetProperty($neueInstanz, 'DataType', 5); break;
         }
	IPS_SetProperty($neueInstanz, 'EmulateStatus', 1);
	if ($des[4]<>1) IPS_SetProperty($neueInstanz, 'Factor', (1/str_replace(",",".",$des[4]))); else IPS_SetProperty($neueInstanz, 'Factor',0);
	IPS_SetProperty($neueInstanz, 'Poller', $time);
	IPS_SetProperty($neueInstanz, 'ReadAddress', $des[2]);
	IPS_SetProperty($neueInstanz, 'ReadFunctionCode', 3);		
	IPS_SetProperty($neueInstanz, 'WriteAddress', $des[2]);
	IPS_SetProperty($neueInstanz, 'WriteFunctionCode', 6);		
	IPS_ApplyChanges($neueInstanz);
	IPS_SetParent($neueInstanz, $id_Kategorie);
	IPS_DisconnectInstance($neueInstanz);
	IPS_ConnectInstance($neueInstanz, $id_Gateway);
        $Wert=IPS_GetChildrenIDs($neueInstanz)[0];
        AC_SetLoggingStatus(27550,$Wert,true);
        if ($id_Link) {
           $Link=IPS_CreateLink();
  	   IPS_SetParent($Link, $id_Link);
  	   IPS_SetName($Link, $des[1]);
           IPS_SetLinkTargetID($Link,$Wert);
        }
   }
}

Nachdem ich auch die Beschreibung in den Variablenprofilen nicht abschreiben wollte auch hier eine Funktion, die die Beschreibung im Excel in ein (bereits existierendes Profil) als Assoziationen erstellt:

function CreateVariableProfileAssociations() {
$table="0=No error;1=Battery initialization error;2=No batteries connected;3=Unknown battery connected;4=Different battery type;5=Number of batteries incorrect;6=Lynx Shunt not found;7=Battery measure error;8=Internal calculation error;9=Batteries in series not ok;10=Number of batteries incorrect;11=Hardware error;12=Watchdog error;13=Over voltage;14=Under voltage;15=Over temperature;16=Under temperature;17=Hardware fault;18=Standby shutdown;19=Pre-charge charge error;20=Safety contactor check error;21=Pre-charge discharge error;22=ADC error;23=Slave error;24=Slave warning;25=Pre-charge error;26=Safety contactor error;27=Over current;28=Slave update failed;29=Slave update unavailable;30=Calibration data lost;31=Settings invalid;32=BMS cable;33=Reference failure;34=Wrong system voltage;35=Pre-charge timeout";
$table="0=Off;2=Fault;3=Bulk;4=Absorption;5=Float;6=Storage;7=Equalize;11=Other (Hub-1);252=External control";
$table="0=No error;1=Battery temperature too high;2=Battery voltage too high;3=Battery temperature sensor miswired (+);4=Battery temperature sensor miswired (-);5=Battery temperature sensor disconnected;6=Battery voltage sense miswired (+);7=Battery voltage sense miswired (-);8=Battery voltage sense disconnected;9=Battery voltage wire losses too high;17=Charger temperature too high;18=Charger over-current;19=Charger current polarity reversed;20=Bulk time limit reached;22=Charger temperature sensor miswired;23=Charger temperature sensor disconnected;34=Input current too high";
$table="0=Unused, BL disabled;1=Restarting;2=Self-consumption;3=Self-consumption;4=Self-consumption;5=Discharge disabled;6=Force charge;7=Sustain;8=Low Soc Recharge;9=Keep batteries charged;10=BL Disabled;11=BL Disabled (Low SoC);12=BL Disabled (Low SOC recharge)";
$des=explode(";",$table);
foreach($des as $p) {
  $n=explode("=",$p);
  IPS_SetVariableProfileAssociation("Victron.ESSBatteryLifestate",$n[0],$n[1],null,-1);
  }
}

Es bleibt immer noch etwas manueller Aufwand, z.B. könnte man die Einheit noch auswerten und automatisch ein Profil zuweisen.

btw: DC-Teil und Batterien sind verdrahtet, Cerbo redet mit Symcon. Der AC-Teil wartet auf den Installateur, die MPPT warten auf den Solateur …
Gruß Thomas

Update:
Habe jetzt auch MQTT eingerichtet.
Damit sollte die übertragene Datenmenge deutlich geringer sein, da ja nur bei Änderung übertragen wird.
Bei Modbus muß man alles pollen und da wählt man sicher immer die falsche Pollingrate.
Über MQTT kommen scheinbar auch deutlich mehr Werte als es dokumentierte Modbusregister gibt.
Gruß Thomas

Wie sendest Du denn Daten über MQTT an VenusGX?

Das habe ich mich seit gestern auch gefragt …
Die Werte vom Cerbo kommen als JSON.
Leider kann man die damit erzeugen Variablen nicht beschreiben.
Für das keepalive habe ich das Format auf String umgestellt, das beschreibe ich alle 30 Sekunden (Timeout sind 60 Sekunden).
Viele Daten sind ja nicht zu beschreiben, ich habe es jetzt so gelöst, das ich im Objektbaum als Child der Variablen ein MQTT Client Device mit dem Thema zum Senden und Datentyp String angelegt habe.
Mein Actionsscript der Variablen beschreibt nun bei Änderung im Webfront die Variable des Child MQTT Client Device.
Das alles kann automatisch angelegt werden.
Damit werde ich nun starten.
Meine Modbus Implementierung werde ich wieder löschen.
Habe gemerkt, das bei Ausfall eines Devices im Modbus das Log ziemlich schnell mit Fehlermeldungen gefüllt wird, da das Polling aktiv bleibt.
Bei MQTT bleiben einfach die Messages aus und man kann darauf reagieren.

Gruß Thomas

1 „Gefällt mir“

Bei der Suche nach einer kostengünstigen Variante zur nachträglichen Installation eines PV-Speichers bin ich auf den Mulitplus-II mit Pylontech gestoßen und komme davon nicht mehr los. Das klingt sehr gut und auch die Erfahrung eines Kollegen bestätigt das nochmal.
Zur Integration in IPS habe ich mir die Mühe gemacht, die aktuell 325 Beiträge in dem Thema durchzulesen. Ich denke, dass ich in der Theorie jetzt ganz gut bescheid weiß und es auch umsetzen kann. Es sind jedoch noch ein paar kleine Verständnisfragen offen geblieben:

  1. Zur Kommunikation zwischen Mulitplus-II GX und Pylontech benötigt man neben den 2x2m DC-Kabeln (25mm2) noch ein Kommunikationskabel? Das ist wahrscheinlich nicht dabei und muss ich gesondert bestellen (Greenakku)? Das ist auch ein RJ45?

  2. Ich habe gelesen, dass der Multiplus ohne Akku nach kurzer Zeit die Sicherung schmeißt. Natürlich kann er nur mit einem Akku arbeiten. Ich hätte aber eigentlich auch erstmal den Multiplus in Betrieb genommen, um die Konfiguration durchzuführen und Modbus auszulesen. Das geht scheinbar nicht?

  3. Mein größtes Problem ist derzeit noch der fehlende Platz in meinem Verteilerkasten. Ich sehe dort derzeit noch keine Stelle, wo ich eine Phase für den AC-in abgreifen kann. Das sollte ja vor einem FI sein allerdings dann noch ein C32A dazwischen. Mein Elektriker würde dort eine Schmelzsicherung einbauen, da ja der Strom an der Stelle in beide Richtungen fließt.

  4. Den USB-Adapater braucht man ja nur zur Konfiguration. Würde den jemand ausleihen? Wenn es soweit ist würde ich dazu ein Gesuch auf dem Marktplatz starten.

Zu 1.

Ist nicht dabei. Entweder kaufst du dir ein fertiges oder du crimpst dir selber eines. Belegung findet sich im Netz.

Zu 2.
So weit mir Bekannt, kannst du den Multi ohne Batterie nicht in Betrieb nehmen. Man könnte ein Labornetzteil nehmen und so die Spannung am Batterie Port zu Verfügung stellen.
Die Modbus Adressen findest du allerdings auf der Victron Seite in einer Excel Tabelle.

Zu 3.

Da musst du Fotos von der Verteilung hochladen, ansonsten nicht zu beurteilen.

Zu 4.

Habe ich, meld dich wenn du soweit bist

Danke @DeejayT für dein Angebot zum USB-Adapter. Wenn ich bestellt habe, was wahrscheinlich nicht mehr lange dauert, würde ich mich melden.

Zur Installation in den Verteilerkasten habe ich jetzt noch eine Lücke gefunden, wo wir (mein Elektriker) an einer FI Eingangsklemme noch ein Kabel abzweigen kann. Sonst ist da wenig Platz, da meist an den FI jeweils der Eingang wieder zur nächsten Reihe weiterverteilt wird.
Gibt es noch eine Zweitmeinung, welcher Leitungsschutz vor den AC-in genommen werden soll/muss. Meist lese ich da C32A, mein Elektriker würde aber eine Schmelzsicherung verbauen (genaue Bezeichnung hat er da noch nicht genannt). Es geht ja darum, dass der Strom in beide Richtungen fließen wird.
Als Kabelquerschnitt hat er dort 4mm2 vorgesehen. Ach ja, wir sprechen von einem Multiplus-II 48/3000.

Du müsstest eigentlich Hauptleitungsabzweigklemmen direkt nach dem Zähler haben. Da kannst du eigentlich abgreifen aber ohne Bilder ist das schwer zu sagen.

Ob LS Schalter oder Neozed ist eigentlich egal, beide übernehmen den Leitungsschutz.
Victron gibt für den 3000er eine Vorsicherung von 32A an. Also bist du mit der gut beraten. Der Querschnitt ist abhängig von Absicherung, Verlegeart, Länge, Häufung usw… Das sollte aber alles dein Elektriker wissen/berechnen und entscheiden.

Kleiner Tipp, den extra Zähler kannst du dir übrigens sparen wenn du einen elektronischen EVU Zähler hast, den du mit einem Tasmota IR Kopf auslesen kannst. Die Werte kannst du nämlich zur Regelung an das Venus OS senden.

Moin,

also wenn Du NUR den AC-IN vom MP2-3000 nutzt solltest Du nur mit 16A absichern (3000/230). Der 3000er kann nur mit 13A einspeisen. 32A gilt nur dann, wenn Du auch den AC-Out nutzt, da der MP2 bis zu 32A durchschalten kann.

Sicherungscharakter sollte m. W. B sein und nicht C. Ich ja keine Maschine. Also B16A.

Den USB Adapter brauchst Du bei einem Einphasensystem nicht. Du kannst die MP2 Konfiguration über das VRM Portal bei Geräte runterladen - bearbeiten - hochladen.
Bei 3Phasen System brauchst Du den USB-MK3 Adapter.

WICHTIG Erstkonfiguration ohne eingeschaltetes AC-IN Netz vornehmen! Der MP2 fängt sonst sofort an zu laden und die Standard Werte passen nicht zu Pylontech.

Querschnitt LS Neozed muß der Elektriker wissen. Persönlich bevorzuge ich Automaten.

Verbindungskabel zwischen Pylontech und Cerbo(GX) gibt es Typ A und Typ B. Eins von beiden ist passend, weiß aber gerade nicht welches. Die Verbindung ist Pflicht!

Zwischen Pylontech + und MP2 + must Du in JEDEM Fall eine Sicherung vorsehen. 3000er soll mit 125A abgesichert werden.

Hast Du in der EVerteilung ein Zähler für den Cerbo vorgesehen? ET340 EM24? Dann brauchst in JEDEM Fall USB-RS485 Adapter. Alternativ geht auch der Shelly 3Phasenzähler.
Ohne würde auch gehen, aber es kann dann nur statisch geregelt werden.

Das ist wahrscheinlich das auf dem ersten Bild. Und das ist voll.


Ansonsten wie auf Bild 2 werden die Phasen immer reihenweise an den nächsten FI weiterverteilt. Am untersten FI (nicht mit im Bild) ist da oben noch Platz, weil ja dann nichts mehr weiter verteilt wird.

Mein Plan war eben gerade, nur den MP2 ans Netz zu hängen ohne Akku um ihn zu konfigurieren. Wie dann? MP2 durch den Akku betreiben?

Ich habe keinen Zähler vorgesehen, da ich ja einen Zweirichtungszähler habe und die Daten bereits in IPS vorhanden sind. Die Steuerung von Laden/Entladen erfolgt dann über Modbus. Das war in dem Thread und auch an mehreren anderen stellen so beschrieben.

Hauptleiterabzweigklemmen gibt es auch mit 6 Abgängen. Vielleicht bekommst du jeweils eine 6er L/N/PE ausgetauscht und noch unter.

Nett voll.

Ja es geht Du kannst den MP2 von IPS steuern und regeln. Ist aber eine gewisse trägheit drin. Aber Du hast auch bei der Verteilung keine andere Chance.

MP2 läuft nicht ohne Akku. Betrieb MP2 nur mit Akku. Statt Akku kann man zum einrichten auch ein 48V Netzteil nehmen. Hab ich aber nicht probiert. Sonst erst mit Akku betreiben.

Wie groß wird Dein Akku? Schafft er die Strombelastung des MP2?

Ich will erstmal klein anfangen mit 3,5kWh (Pylontech US3000C) und maximal irgendwann verdoppeln. Mein Ziel ist es, die nächtliche Grundlast von etwa 250W abzudecken. Da ich noch 16,6ct Einspeisevergütung bekomme, möchte ich trotzdem auch viel einspeisen.

Hallo zusammen und schön hier auch noch Männer der ersten SYMCON-Stunden zu treffen (Hallo @Doctor_Snuggles).

Ich habe gerade ein Angebot genutzt und mir einen Victron MultiPlus-II 48/3000/35-32 230V bestellt - dazu gab es noch als Zugabe einen Cerbo GX. Der Akku soll eine BYD - Battery-Box Premium LVS 4.0kWh werden.
Ich habe ein Balkon/Garten PV Setup mit 1400Wp - die ich momentan mittels OpenDTU dynamisch abregel. Es sind 4 Panels an einem Hoymiles HM-1600 der fest auf L1 verdrahtet ist.
Ich bin Tibber-Kunde und mein 2-Richtungszähler ist von Discovergy d.h. alle Werte stehen mir als SYMCON-Variablen zur verfügung.
Mein Ziel: Die überschüssige PV-Energie soll in den Akku gehen und möchte auch ich in der Lage sein, ggf. via Tibber Netzstrom zu laden, wenn der Tarif gerade niedrig ist.
Meine Grundlast soll dann, wenn das Sonnenlicht nicht mehr reicht, von meinem Mini-ESS bedient werden.
Ich stehe noch komplett am Anfang und bin kräftig am lesen und sehe, dass einige hier ähnliche Konzepte verfolgen.

Eine Frage die mich momentan umtreibt ist, wie bekomme ich die Grid-Zählerwerte in den Cerbo GX?

Vorab schon mal besten Dank für Eure Hilfe.

Hallo babba,
schön auch mal wieder von dir zu lesen …

Sitze aktuell gerade auch daran, meine PV-Batterie-Tibber Kombi zu verfeinern.
Ich denke das ist aber hier bei jedem so individuell, das du dir da selber etwas stricken musst oder ggf. etwas Code übernehmen kannst.

Die Grid-Zählerwerte bekommst du gar nicht in das GX Device, das was du übergeben musste sind die Leistungswerte und die kannst du recht einfach über Modbus übergeben.
So wirst du dann vermutlich auch alle anderen Werte vom Victron holen, wie ggf. auch die Akkuleistungsdaten, wenn deine BYD Batterie diese via Canbus zum GX device senden sollte.

Bei mir ist das ganze jetzt auch schon recht komplex geworden, weil ich jetzt auf Grund des Preises noch ein zweites Victron System am laufen habe.

Das erste was du also machen musst, ist dich mit den Modbusadressen des System vertraut machen.
Die gibt es als Exceltabelle zum Download.

Viele Grüße,
Doc

Ein US3000 kommt mir ein wenig klein vor. Victron empfiehlt beim MP2-3000 2x US2000. Wegen den Strom den der MP2 zieht. Der US3000 meine ich kann alleine den Strom den der MP2 benötigt nicht liefern. Bitte prüfen.
Alternativ im GX die WR Leistung drosseln.

Bzgl. Tibber und Victron. Victron arbeitet gerade an einer Lösung. Nennt sich DynamicESS. Die Beta Version ist bereits auf der VRM Version verfügbar. Da ich kein Tibber habe kann ich nichts über die Qualität sagen. Dann braucht Ihr das nicht in IPS abbilden/regeln.

betavrm.victronenergy.com

Aber die Lösung nimmt einem dann aber den ganzen Spaß mit IPsymcon … :wink:

Ich denke, für die Victron interne Lösung wird man dann aber wieder ein Leistungsmessgerät am Netzübergangspunkt haben müssen und kann nicht die Daten die wir in IPS haben verwenden können?
Aber Sinn macht so ein System allemal, nicht jeder verfügt über IPSymcon, HA usw.