Victron MultiPlus II

Liebe Foren Mitglieder,

Hat vielleicht jemand einen solchen Wechselrichter am laufen und oder mit IPS verbunden?

mit besten grüßen

Peter

Hallo Peter

Habe einen Multilplus II vor 4 Wochen installiert als ESS System mit einem Color Control GX.
Über das Color Control GX lese ich die Daten des Multiplus mit Modbus TCP aus.

Hallo aglutz,

hast du die Notstrom Leitung auch belegt?
Im Prinzip will ich auch ein ESS aufbauen, nur wollte ich ggf eine ganze Phase an den Notstrom hängen.
mich würde mal interessieren wie das ganze angeschlossen aussieht.
Das gerät hat ja einen netz ein und einen netz Ausgang. könntest du da mal ein Bild senden wie das aussieht?

mit besten grüßen

Peter

Hallo Peter

Ich verwende die Notstrom-Funktion nicht, daher erübrigt sich ein Bild davon.
Ich empfehle dir für die Notstrom-Funktion einen Elektriker beizuziehen, denn auch der Notstromausgang muss entsprechend abgesichert werden auf Brand- und Personenschutz und der Verteiler muss umverdrahtet und dokumentiert werden.

Mit freundlichem Gruss
Adrian

Bei mir läuft seit einigen Wochen nun auch ein Multiplus II.
Da mir die Ladeleistung mit 2000W mit steigender Akkuzahl aber nun nicht mehr reicht, suche ich gerade „Verstärkung“.

Ich hatte hier an Meanwell RSP Netzteile gedacht, die kosten aber in der Leistung auch schon etwas mehr.

Ich hatte dann den Sofar ME3000 PV gefunden, der recht interessant schien und mir vom Hersteller mal das Modbus Protokoll/Register schicken lassen.

Hat diese Laderegler/WR Kombination ggf. jemand schon bei sich laufen und kann etwas davon berichten?
Mit 3000W Lade/WR Leistung bei ca. €800.- könnte das eine Alternative sein?

Viele Grüße,
Doc

1 „Gefällt mir“

Hallo,

ich habe aktuell 3 Multis rennen mit ESS und Backupfuntion, da ich Elektriker bin war das Ganze nicht kompliziert und läuft extrem stabil.

Ich würde dir abraten irgend ein Netzteil ein zu bauen, häng einfach einen zusätzlichen Multiplus rein der hat genug Leistung und spricht mit den Anderen.

Aktuell schalte ich im Backupbetrieb Verbraucher ab wenn die Batterie zu schwach wird. Das Einbinden in die Visu hab ich noch nicht getestet. Es ist aber möglich alle Werte aus zu lesen.

Leider kann ich nicht Progrmmieren…

Also wer Technisch was braucht ich helfe gerne, vl gibt es ja jemanden der mir dann beim Einbinden hilf.

Lg Matthias

Hallo Matthias
Ich bin auch gelernter Elektriker und gerade dabei mich in die Dokumentation der Victron-Gerätefamilie einzulesen. Allenfalls werde ich mir dann dann auch eine Batterie gönnen, welche eben diese Gerätschaften einsetzt. Victron hat alles sehr gut und vorbildlich dokumentiert. Das Einbinden der Daten in die Visu ist daher nicht allzu schwierig. Zumal man es auch ohne eigene Geräte anhand des Demo-Users vorgängig testen kann …

Und da ich heute mehr programmiere als elektrische Installationen erstelle, habe ich da kurz mal was gebastelt:

<?php
/*
Erstellt von Letraz
Abfrage des Victron VRM
V1    18.12.2021  Initiale Version (Test mit Demo-User)

Victron API - Dokumentation: https://docs.victronenergy.com/vrmapi/overview.html#login
*/

//Definitionen
//Demo-Token kann angefordert werden via Link: https://vrmapi.victronenergy.com/v2/auth/loginAsDemo
$token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjlhMDFhZDBjMmY2N2I0OGUwYmRlOGFkYzQ3MjgwNzlhIn0.eyJ1aWQiOiIyMiIsInRva2VuX3R5cGUiOiJkZWZhdWx0IiwiaXNzIjoidnJtYXBpLnZpY3Ryb25lbmVyZ3kuY29tIiwiYXVkIjoiaHR0cHM6XC9cL3ZybWFwaS52aWN0cm9uZW5lcmd5LmNvbVwvIiwiaWF0IjoxNjM5OTEwNTI0LCJleHAiOjE2Mzk5OTY5MjQsImp0aSI6IjlhMDFhZDBjMmY2N2I0OGUwYmRlOGFkYzQ3MjgwNzlhIn0.A-VJthQAE8RrmgE57Q3D1M7D2rSf_zFo7NuhZ9GTXL2r6OafRyJFaMW3xj40lS9hBU-wkNZwf3qLeej3dfYL4HrZjan9GXElhWApsuWpgkEkhur2oWsPJBKtQfgaaiX8EAGCu8Efe6HRPBTFS41I6o_q8Nq3gAHVT28Yy5pneMR88_u1gP5yN-soGrnYCqzIbz7XoRHk0zlmXy8cml9GrvmLPDKstWyFFjOsnjSwluDfiBRsXD6-gLc9Ooeo1EfLZdBZ8VznGUKtoY1slQ_xLbSVHGCAaZkAfGasX_vRBxIZb9YB65W-WqHOsrwvTYXVqXA3dMv4zVQcPHJYDpK3zw";
$userid = 22;
$url = "https://vrmapi.victronenergy.com/v2/users/".$userid."/installations?extended=1";

//Beginn Datenabfrage
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$headers = array(
   "X-Authorization: Bearer ".$token,
   "Connection: keep-alive",
   "Pragma: no-cache",
   "Cache-Control: no-cache",
   "Accept: application/json, text/plain, */*",
   "DNT: 1",
   "Content-Type: application/json"
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($curl);
curl_close($curl);

//Daten decodieren
$data = json_decode($response, true);
if (!empty($data)) //Prüfung ob Daten vorhanden sind, ansonsten abbruch
{
  print_r($data);
}

Der Token läuft sporadisch ab und unter dem angegebenen Link kann man sich jederzeit einen neuen generieren.

Wenn man aber eigene Geräte hat welche die Daten in die VRM (Victron Onlineportal) einspeisen, kann man (angeblich) einen dauerhaften Token generieren. Nebst dem Token wird dann aber auch noch die Userid verwendet. Beim Demo-User lautet sie „22“, bei einem eigenen Account natürlich etwas anders. Wo man diese UserID findet ist mir aus Mangel an eigenem Account derzeit nicht bekannt.

Ersetz doch mal den Token mit einem von dir generierten und die Userid ebenfalls mit deiner eigenen. Dann solltest du mit dem Script alle Daten deiner Installation rauskriegen. Das Ergebnis kannst du so noch nicht in die Visu einbinden, aber wenn du dann weisst welche Werte du haben willst, kann man diese gezielt in Variablen speichern und visualisieren.

Der Script gibt bereits mit dem Demo-User sehr viele Daten aus, daher ist das Ergebnis in der angehängten Datei zu sehen.

Datenabfrage_VRM.txt (64,2 KB)

Im Gegenzug habe ich ein paar Fragen an dich zur elektrischen Installation:

  • Wie trennst du im Backup-Betrieb dein Haus vom Netz ab ? Hast du da einen entsprechenden Schütz eingebaut ? Wird der vom Cerbo GX / Venus GX angesteuert ?
  • Du hast drei Multis, ich nehne daher an für Drehstrom. Muss man im Backup-Betrieb selber den Sternpunkt für den Neutralleiter erstellen oder machen das die Multiplus selber ? Gemäss Manual dürfen die Neutralleiter vom „AC IN“ und „AC OUT“ nicht miteinander verbunden werden. Du hast aber sehr wahrscheinlich die Neutralleiter aller Multis vom „AC Out“ miteinander verbunden ?
  • Wie hast du den Lastabwurf bei schwächer werdender Batterie realisiert ? Wahrscheinlich via die programmierbaren Relais des Cerbo GX oder Venus GX in Verbindung mit einem Schütz?
  • Hast du bezüglich deiner Installation einmal ein Foto oder Stromlaufplan ?

Gruss Letraz

Vielleicht ist dieser Thread für euch auch noch interessant.
Die Victrons kannst du sehr leicht über Modbus auslesen oder steuern, wenn du ein Venux Device extern oder ggf. im Multiplus verbaut hast.

VG Doc

Hallo,

ich steige mal hier ein, da mich das Thema Modbus TCP auch sehr interessiert.
Ich möchte meine vorhandene PV Anlage erweitern um einen Batteriespeicher.

Ich habe derzeit 3 Möglichkeiten:
1.) ich bleibe im Gerätepark von SMA und Update / Upgrade div. Teile (relativ teuer)
2.) ich liebäugele mit dem Multiplus II GX + Pylontech oder BYD
3.) sonstige Lösungen (Umbau auf Hybrid-Wechselrichter

Jetzt habe ich schon viele gelesen (vielleicht auch zuviel, was manchmal mehr verwirrt) über Modbus und Victron Energy.

Meine Wissensstand derzeit:
Multiplus II GX spricht Modbus TCP und ich kann dadurch mir das „EnergyMeter“ EM24 o.ä. sparen. (Ich habe bereits ein ModbusTCP-fähigen 2-Richtungsstromzäherl (EMU MBS Allrounder)

Kann man nun in der GX-Software(?) beim Konfigurieren diesen Stromzähler angeben ? Es wird in allen Dokumenten, Leitfäden und Youtube Videos immer eine ID mit angegeben.
Ich habe aber bei meinem Stromzähler nur eine IP-Adresse und das jeweilige Register. IP-Symcon liest das problemlos aus. Da kann ich als Unit-ID eintragen was ich möchte.

Welche Informationen werden vom Stromzähler überhaupt benötigt ?
Die Lieferung/Bezug mit Vorzeichen ? (1 Register)
Oder getrennt Bezug und Lierferung (2 unterschiedliche Register)

Daher meine Frage: Kann mir jemand ein wenig Licht ins Dunkel bringen ?

Weitere Frage:
Wenn ich den Multiplus II GX habe, benötige ich dann auch das MK3-USB Ding zum konfigurieren ?

Grüße
Björn

Ja, damit stellst du z.B. ein, wie der Wechselrichter sich am Netz verhalten soll oder welchen Akkutyp du angeschlossen hast.

Das GX Device dient zum eigentlichen steuern des Wechselrichters, entweder von einem Modbus-Zähler, einer ggf. schon installierten PV (erkennt das GX selber) oder wie bei mir ganz aus IPS heraus.
Dann ist es egel welchen Zähler du hast, du sagt dem WR über Modbus einfach, was er tun soll.

1 „Gefällt mir“

Hey, @Doctor_Snuggles,

deine Antwort hat mich sehr neugierig gemacht :slight_smile:
Ich habe eine PV Anlage eine Strom/Spannungs/Leistungsmessung (enerserve) einen Heizstab (für Warmwasser) und in Zukunft möchte ich mir auch einen Speicher (voraussichtlich Multiplus II mit Pylontech Akkus) zulegen.

den exakten Verbrauch oder Überschuss erfasse ich 1x pro Sekunde und erhalte die Werte per MQTT in IP Symcon. - Das klappt perfekt und da ich für den Überschuss kaum Geld vom Netzbetreiber erhalte habe ich auch einen Heizstab welche ich mitteld DMX von 0 - 2050W dimme um so zumindest Warmwasser zu produzieren.

Da es aber immer noch Überschuss gibt und ich mir einen Speicher zulegen möchte, wollte ich dich fragen, ob du mir bei der Konfiguration helfen kannst.
Du schreibst ja, dass du per IPS den Wechselrichter komplett steuerst. Ohne GX Device.

Dann ist es egel welchen Zähler du hast, du sagt dem WR über Modbus einfach, was er tun soll.

Benötige ich dann nur den „Victron Multiplus-II“ + „Pylontech LiFePO4“ OHNE " VenusGX" OHNE " Color Control GX" ?

Wie sieht denn die Verkabelung die Converter aus?
Wie sprichtst du mit dem Wechselrichter?

Ich würde das exakt so machen wollen wie du das beschreibst. Die Intelligenz soll bei IPS liegen und ich sage dem WR 1x Sekunde was er machen soll,… 200W in die Akkus laden / 1800W aus den Akkus entnehmen, wie hoch ist die Temperatur?, wie ist der SoC,…

Kann man das so realisieren? Ich wäre super Dankbar für eine Antwort und deine Hilfe.

Strommessung + Heizstab in „%“:

Infoscreen:

Touchscreen:

Du brauchst auf jeden Fall ein GX Device, sei es im MPII selber, als Venux GX oder mit Display oder was es noch da gibt.
Das stellt dir alle Daten und Möglichkeiten vom Wechselrichter zur Verfügung, biete zusätzliche Relais, kommuniziert mit der PV wenn gewünscht und vor allem später mit IPS.
Der WR selber kommuniziert per CAN mit dem Pylontech und mit dem GX Device.

Du brauchst halt den MultiplusII, die Pylontech’s je nach Kapazität und ein GX Device.
Ggf. noch den MK3 USB Adapter (nur einmalig) um den MPII ans deutsche Netz anzupassen.

„Sprechen“ mit dem GX Device über ModBus, du sagst halt wie du es vor hattest was du gerne aus dem Akku auf’s Netz haben möchtest oder aus dem Netz an den Akku geben kannst.
Normalerweise macht dies das GX Device selbstständig über einen extra Modbuszähler in der Verteilung, aber mit IPS brauchst du das nicht.

Heizstab habe ich übrigens auch im WW Speicher, allerdings von IPS gesteuert schalte ich die 3 Phasen einzeln zu. Mit Dimmer war mir das zu aufwendig.
Das geht auch in meine Berechnungen in IPS mit ein, damit der Speicher immer Vorrang zum Laden hat.

VG,
Doc

Vielen Dank für Deine rasche und super hilfreiche Antwort.
Nun steht fest, dass ich das Projekt definitiv umsetzen werde. :slight_smile:

es wird der MPII GX mit Pylontech’s (weiß noch nicht genau wieviele) werden.

  • Wie schnell kann der MPII denn umschalten bzw. regeln? Kann ich 1x oder 2x pro Sekunde per Modbus die zu entnehmende oder zu ladende Leistung festlegen und das wird dann „sofort“ umgesetzt? Oder hab ich ein Problem wenn eine Wolke über die PV zieht? Wie träge oder schnell ist das System denn?

  • Kannst du mir bitte noch Beispiele nennen wie du z.B. den SoC per Symcon und Modbus TCP abfragt, bzw. wie du die Leistung (Laden/Entladen) einstellen kannst?

Du hilft mir dadurch sicher seeehr weiter.
Vielen vielen Dank!

LG,
Martin

Du kannst deinen „Stellwert“ ruhig sekündlich senden, der MPII braucht aber systembedingt 1-2 Sekunden um sich auf diesen Wert einzuregeln.
Der Victron schaltet den Lader und Inverter selber je nach Bedarf zu, beim ersten wechsel kann es aber bis zu 5 Sekunden dauern, danach bleiben Lader und Inverter eingeschaltet um auch gut um den Nullpunkt regeln zu können.
Das klappt eigentlich ohne Probleme.

ok, Danke!

Hast du vielleicht noch ein paar Screenshots wie du den ausliest bzw. dem Wechselrichter mitteilst wieviel Watt er ins Netz oder Batterie schieben soll?

Das würde mir viel Nerven sparen, da du das schon gelöst hast. :wink:

ModBus ist noch Neuland und ich bin mir bei der Configuration / Einbindung in Symcon komplett unsicher 😵‍💫

Eilt nicht. Es würde nur mir und vielleicht ein paar anderen Usern helfen. Danke!

@Doctor_Snuggles :slight_smile:
wenn du mal Zeit findest wäre das Mega.

Du musst dich generell etwas mit Modbus in IPS beschäftigen um zu verstehen, wie einfach das geht :wink:

Schau mal, das du erstmal die HW bekommst und installierst, das andere ergibt sich dann schon.

Du brauchst eigentlich nur die Modbus Adressen aus der Excel Liste vom Inverter zu nehmen und die Daten abzufragen oder zusetzen.

Mein Script ist aber so individuell, das du verm. damit so nichts anfangen kannst.
Vielleicht hilft es dir ja, um eins für deine Bedürfnisse zu erstellen.


// ---------- Konfiguration ----------
$IDArchiveHandler = 10204;
$ID_Gesamtleistung = 42236;
$ID_Leistung_Mittelwert = 29827;                            // Werte zur Berechnung des möglichen Leistungsdurchschnitt
$ID_Sekunden = 27931;                                       // ID Sekundenzähler für Netzteil zum Einschalten

$ID_Instanz_ESS_SOLL = 21696;
$ID_ESS_SOLL = 12332;

$ID_Instanz_Relais1 = 16100;
$ID_Status_Relais1 = 52086;
$ID_Instanz_Steckdose = 32438;                              // Steckdose Heizungsraum für Netzteil (Treppenlicht 15min.)
$ID_Steckdose_Status = 52398;

$ID_Instanz_Enable_Charger = 13532;                         // Modbus Instanz Charger
$ID_Instanz_Enable_Inverter = 43112;                        // Modbus Instanz Inverter
$Status_Charger = GetValue(21531);                          // aktueller Status Lader (aus = 0, ein = 100)
$Status_Inverter = GetValue(37530);                         // aktueller Status Inverter (aus = 0, ein = 100)
$SoC = GetValue(12410);                                     // aktueller SoC Pylontech (Victron)
$ID_SoC_dyn = 16223;                                        // ID des dynamischen SoC
$ID_SoC_100 = 34342;                                        // ID des 0-100% SoC

$Laden_Offset = 100;                                        // Vorgabe Offset zur Nullausregelung in W
$Entladen_Offset = -20;
$Laden_Max = 2200;                                          // Ladeleistung Victron maximal in W
$Einspeisen_Max = -2400;                                    // Einspeisleistung Victron maximal in W (max. 2400W)
$SoC_min = GetValue(47773);                                 // minimum SoC bis abschalten des Inverters
$SoC_max = 95;                                              // maximaler SoC beim Laden (Victron)
$Soc_max_Netzteil = 88;                                     // maximaler SoC fürs Laden mit dem Netzteil
$SoC_Offset = 5;                                            // Inverter wiedereinschalt SoC über min. SoC
$Sekunden_Offset = 60;                                     // Offsetzeit zum Zuschalten des Netzteils

$Sonnenstunden_morgen = GetValue(30733);                    // Sonnenstunden von morgen
$BatteryLife = GetValue(52279);                             // BatteryLife Status abfragen

$Leistung_Netzteil = 1420;                                  // max. Leistung in W des zus. Ladenetzteils (aktiviert über Relais1)
$Leistung_Heizstab = GetValue(53870);                       // aktuelle Leistung der Heizstäbe

$Bezug = round(GetValue(36301),0);                          // aktueller Bezug vom eHz in W
$Leistungssteller_aktuell = GetValueInteger(35077);         // aktueller Wert vom ESS in W

// ===================================================================================================================================

// Steuerung Einspeisleistung nach Batteriestatus (SoC)
if ($SoC < 20) {$Einspeisen_Max = -1000;}                                                               // Einspeisleistung bei niedriegen SoC begrenzen
if ($SoC < 15) {$Einspeisen_Max = -500;}


// ---------- BatteryLife - Steuerung dynamischer SoC_min (mit Sonnenstunden des nächsten Tages um 13:05) ----------

// einmal tägl. prüfen (13:05)
if (($_IPS['SENDER'] == "TimerEvent") and ($BatteryLife == true)) {
    if ($_IPS['EVENT'] == 40077) {
        $SoC_min = 10;
        if ($Sonnenstunden_morgen <= 5) {$SoC_min = 20;}
        if ($Sonnenstunden_morgen <= 4) {$SoC_min = 25;}
        if ($Sonnenstunden_morgen <= 2) {$SoC_min = 40;}
        if ($Sonnenstunden_morgen <= 1) {$SoC_min = 60;}
        SetValue(47773, $SoC_min);
        return;
    }
}    

// beim Umschalten prüfen
if ($_IPS['SENDER'] == "Variable") {
    if ($_IPS['VARIABLE'] == 52279) {
        if ($BatteryLife == false) {
            $SoC_min = 10;
        } else {
            $SoC_min = 10;
            if ($Sonnenstunden_morgen <= 5) {$SoC_min = 20;}
            if ($Sonnenstunden_morgen <= 4) {$SoC_min = 25;}
            if ($Sonnenstunden_morgen <= 2) {$SoC_min = 40;}
            if ($Sonnenstunden_morgen <= 1) {$SoC_min = 60;}
        }
        SetValue(47773, $SoC_min);
        return;
    }
}

// ---------------- Berechnung des dynamischen SoC ----------------------------

$SoC_dyn = ($SoC - $SoC_min) * 100 / ($SoC_max - $SoC_min);                                             // Berechnung dynamischer Soc (zur Anzeige von 0-100% der verfügbaren Kapazität)
if (($SoC_dyn < 0) or ($Status_Inverter == 0)) {$SoC_dyn = 0;}
if ($SoC_dyn > 100) {$SoC_dyn = 100;}

SetValueInteger($ID_SoC_dyn, $SoC_dyn);

// ---------------- Berechnung des 0-100% SoC (10-95%)----------------------------

$min_SoC = 10;
$SoC_100 = ($SoC - $min_SoC) * 100 / ($SoC_max - $min_SoC);                                             // Berechnung 0-100% Soc (zur Anzeige von 0-100% der Gesamt-Kapazität)
if ($SoC_100 < 0) {$SoC_100 = 0;}
if ($SoC_100 > 100) {$SoC_100 = 100;}

SetValueInteger($ID_SoC_100, $SoC_100);


// ---------- Steuerung des Inverters (ein/aus) ----------
if ($SoC <= $SoC_min) {                                                                                 // Wenn SoC < SoC_min Inverter ausschalten
    if ($Status_Inverter > 0) {
        ModBus_WriteRegisterShort($ID_Instanz_Enable_Inverter, 0);
    }
}
if ($SoC >= ($SoC_min + $SoC_Offset)) {                                                                 // Wenn SoC über (SoC_min. + Offset) Inverter einschalten
    if ($Status_Inverter < 100) {
        ModBus_WriteRegisterShort($ID_Instanz_Enable_Inverter, 100);
    }
}
            
// ---------- Steuerung des zusätzlichen Netzteils zum Laden (über Relais 1 Venus GX) ----------
if ($_IPS['SENDER'] == "Variable") {
    if ($_IPS['VARIABLE'] == 36301) {
        $Netzteil_aktuell = GetValue($ID_Status_Relais1) * $Leistung_Netzteil;                          // aktuelle Leistung Netzteil
        $Power_gesamt = $Leistungssteller_aktuell + $Netzteil_aktuell + ($Bezug * -1);                  // Gesamtleistung ermitteln
        SetValue($ID_Gesamtleistung, $Power_gesamt);                                                    // mögliche Gesamtleistung in Variable schreiben
        
        $Mittelwert = getMean ($IDArchiveHandler,$ID_Gesamtleistung,120,0);                             // Mittelwert mögliche Gesamtleistung über 2 min.
        SetValue($ID_Leistung_Mittelwert, $Mittelwert);        

        // *** Sekundenzähler für Freigabe des Netzteils ***
        if (($Power_gesamt + $Leistung_Heizstab) >= 2000) {
            $Restzeit = (GetValue($ID_Sekunden) - (time() - (IPS_GetVariable($ID_Sekunden)['VariableUpdated'])));
            if ($Restzeit < 0) {
                $Restzeit = 0;
                }
            SetValue($ID_Sekunden, $Restzeit);
        }
        if (($Power_gesamt + $Leistung_Heizstab) < 2000) SetValue($ID_Sekunden, $Sekunden_Offset);      // Sekundenzähler für Freigabe NT hochzählen oder löschen  

        // *** Netzteil zuschalten ***
        if (($Power_gesamt > 2000) and ($SoC <= $Soc_max_Netzteil)) {
            KNX_WriteDPT1($ID_Instanz_Steckdose, true);                                                 // Steckdose Heizungsraum ein (15 min. Treppenlicht)
        }

        // *** Netzteilausgang einschalten ***
        if (($Power_gesamt > 2500) and (GetValue($ID_Sekunden) <= 0) and ($SoC <= $Soc_max_Netzteil)) { // Bedingungen für Netzteil einschalten (5 min.)            
            if (GetValue($ID_Status_Relais1) == 0){                                                     // wenn Netzteil aus war, Netzteileinschaltzähler hochzählen
                SetValueInteger(54069, (GetValueInteger(54069) + 1));
            }
            ModBus_WriteRegisterShort($ID_Instanz_Relais1, 1);                                          // NT ein (Relais 1) wenn > 2500W und SoC < max.
            SetValueBoolean(37354, true);
        }

        // *** Netzteil ausschalten ***
        if ((($Power_gesamt + $Leistung_Heizstab) < 1500) or ($SoC > $Soc_max_Netzteil)) {              // NT aus (Relais 1) wenn < 1500W oder SoC > max.
            ModBus_WriteRegisterShort($ID_Instanz_Relais1, 0);
            SetValueBoolean(37354, false);                                                              // Netzteil-Variable schalten
        }

        // *** Leistungen schreiben ***
        SetValue(47589, $Netzteil_aktuell);                                                             // testweise Leistung Netzteil in Variable schreiben
        SetValue(19925, ($Netzteil_aktuell + $Leistungssteller_aktuell));                               // Gesamt ESS-Leistung in Variable schreiben
    }
}

// --------------- Steuerung des ESS Sollwertes (Victron GX) -------------------
if ($_IPS['SENDER'] == "Variable") {
    if ($_IPS['VARIABLE'] == 36301) {
        $Power = $Leistungssteller_aktuell + ($Bezug * -1);                                             // Leistung ESS festlegen
        if (($Power > $Entladen_Offset) and ($Power < $Laden_Offset)) { $Power = 0;}                    // Offset zum Laden/Entladen
        if ($Power > $Laden_Max) {$Power = $Laden_Max;}                                                 // Ladeleistung begrenzen
        if ($Power < $Einspeisen_Max) {$Power = $Einspeisen_Max;}                                       // WR Leistung begrenzen
        if (($Power > 0) and ($SoC >= $SoC_max)) {$Power = 0;}                                          // Laden abschalten wenn SoC über Soc max.        
//      ModBus_WriteRegisterShort($ID_Instanz_ESS_SOLL, $Power);                                        // neuen Wert in Soll Instanz schreiben (ESS_Soll)
        SetValueInteger($ID_ESS_SOLL, $Power);                                                          // neuen Wert in Soll Variable schreiben
//        return;
    }
}            

// ------------------ Status Inverter / Lader / Netzteil in Variable (für MDT GT2) ------------------
if ((GetValue(47589) + $Leistungssteller_aktuell) > 100) {                                              // bei laden > 100W Variable setzen
    SetValue(23656, true);
    } else {
    SetValue(23656, false);
}

if ((GetValue(47589) + $Leistungssteller_aktuell) < -100) {                                             // bei entladen < -100W Variable setzen
    SetValue(16828, true);
    } else {
    SetValue(16828, false);
}

if ($Bezug > 100) {                                                                                     // Bezug > 100W Variable setzen
    SetValue(13025, true);
    } else {
    SetValue(13025, false);        
}

if ($Bezug < -100) {                                                                                    // Bezug < -100W Variable setzen
    SetValue(12883, true);
    } else {
    SetValue(12883, false);        
}
// ---------------------------- Funktionen --------------------------------------------

function getMean ($IDArchivehandler,$varId,$log_interval,$default) {
    $logData = AC_GetLoggedValues ($IDArchivehandler, $varId, time()- $log_interval,time(),-1);
    if (count($logData) <1) return $default;
        foreach ($logData as $key => $data)
    {
    $value[$key] = $data['Value'];
    }
    return array_sum($value)/count($value);
}

function getMedian ($IDArchivehandler,$varId,$log_interval,$default) {
    $logData = AC_GetLoggedValues ($IDArchivehandler, $varId, time()-$log_interval,time(),-1);
    if (count($logData) <1) return $default;
        foreach ($logData as $key => $data)
    {
    $value[$key] = $data['Value'];
    }
    asort($value);
    return $value[count($value)/2];
}

1 „Gefällt mir“

du hast schon recht, wenn die Hardware da ist, ist vieles einfacher.

Ich wollte nur sicherstellen, ob ich alles richtig verstanden habe?!?
Mit deiner Info hast du mir sehr geholfen! - Vielen Dank dafür!
Hardware ist bestellt. :wink:

Sonnige Grüße und nochmal Danke!
Martin

Hi Doctor_Snuggles,

wie ermittelst Du die Sonnenscheinstunden für morgen?

Den Ansatz finde ich gut.

MFG
MCS-51

Das Thema zu den Sonnenstunden findest du hier.
Da steht eigentlich alles, was du dafür benötigst.

VG,
Doc