Ankündigung

Einklappen
Keine Ankündigung bisher.

Solaredge WR-Modbus LBS 19001370 weitere Register / Datum aufbereiten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • saegefisch
    antwortet
    Zitat von fudi6489 Beitrag anzeigen
    Eigenverbrauch, Eigenproduktion, Autarkie
    Sind ja letztlich berechnete Werte aus den gelieferten Messwerten. Dass kann man daher auch in edomi machen

    Schau mal nach meinem 19001585.
    Und am besten mal Forensuche bemühen, da müsstest du eine sehr ausführliche Anleitung zum Thema und den Stolpersteinein dabei finden
    Zuletzt geändert von saegefisch; 22.09.2022, 14:56.

    Einen Kommentar schreiben:


  • fudi6489
    antwortet
    Hallo Leute

    Ich habe jetzt den neuen Solaredge Inline Smartmeter installiert und möchte gerne weitere Paramter auslesen.

    Eispeisung/Bezug, Einspeisezähler, Bezugzähler funktionieren alle einwandfrei mit der Erstversion.

    Ich möchte aber gerne den Eigenverbrauch, Eigenproduktion, Autarkie auslesen, nur leider finde ich in der Modbus Doku hierzu nichts.
    Ist dies einfach nicht möglich und die obigen Werte werden erst durch die Solardedge App berechnet wo diese auch angezeigt werden?

    Aktuell lese ich auch den Hauptzähler aus und berechne in Edomi die gewünschten Paramter.
    Lieber wärs mir aber wenn es gleich direkt über den Wechselrichter bzw Solaredge Zähler funktionieren würde, da bei einem Ausfall von der Synology und somit MQTT der Zähler nicht mehr ausgelesen wird und die Berechnung kryptische Werte ergibt welche ich händisch wieder entfernen muss.

    Liebe Grüße
    Jürgen
    Zuletzt geändert von fudi6489; 21.09.2022, 13:34.

    Einen Kommentar schreiben:


  • Surfikus
    antwortet
    Zitat von eXec Beitrag anzeigen
    müsste es doch eine neuere Version geben, oder?
    Gab es hier Neuigkeiten? Meine Anlage kommt aktuell aufs Dach, dann werde ich die auch mal versuchen anzubinden - ich werde berichten.
    Gruss Jan



    Einen Kommentar schreiben:


  • eXec
    antwortet
    Hallo zusammen,

    im Downloadportal gibt es nur die Initialversion zum Download. Wenn ich den Thread richtig verfolgt habe, müsste es doch eine neuere Version geben, oder?

    Gruß André

    Einen Kommentar schreiben:


  • fudi6489
    antwortet
    Danke euch beiden.
    Meine beiden Dokus haben im Gegensatz zu der Verlinkten nur dir Werte 1,2,4 hergegeben.


    Liebe Grüße
    Jürgen

    Einen Kommentar schreiben:


  • knxkalle
    antwortet
    Hallo Jürgen

    der Wert 5 bedeutet Inverter hat abgeregelt, entweder max. Leistung oder 70% erreicht.

    K.-H.

    Einen Kommentar schreiben:


  • Moraty
    antwortet
    Hallo Jürgen,

    in der englischsprachigen Dokumentation findet sich auf Seite 16 der Modus. Wert 5 kann ich aufgrund meiner Anlagenparameter nicht nachprüfen, die Werte 1-4 werden allerdings alle wie beschrieben ausgegeben.

    Der von mir ergänzte Ausgang 25 "Fehlercode" verhält sich identisch zu A1 und kann somit wieder entfernt werden.

    https://www.solaredge.com/sites/defa...nical-note.pdf

    Einen Kommentar schreiben:


  • fudi6489
    antwortet
    Hallo

    Habe jetzt schon des öfteren festgestellt dass an "A1 Modus" der Wert "5" ausgegeben wird.

    Beobachtungen lassen darauf schließen dass die 5 ausgegeben wird sobald der Wechselrichter ans AC Limit kommt.
    Hab dazu aber leider keine Infos in der Dokumentation gefunden, kann dies jemand bestätigen?

    Liebe Grüße
    Jürgen

    Einen Kommentar schreiben:


  • gibsonrocker
    antwortet
    Zitat von fudi6489 Beitrag anzeigen
    gibsonrocker
    Leistung vom Dach sollte doch "A8-Leistung DC" sein.
    Leistung DC ist die Leistung die im Moment aus der Batterie kommt bei mir. Ich muss das morgen mit den ganzen neuen Werten mal beobachten wenn die Sonne scheint.

    Einen Kommentar schreiben:


  • fudi6489
    antwortet
    gibsonrocker
    Leistung vom Dach sollte doch "A8-Leistung DC" sein.

    Moraty
    Sehr feine Arbeit.
    Ich werde bei Martin nachfragen, bevor es soweit ist würde ich aber versuchen dass wir rausfinden wie auf A25 die Fehlercodes ausgegeben werden können um auch den Hilfetext dementsprechend anzupassen. Ich bestätige auch dass im jetzigen Nachtmodus auf unter Fehlercodes nur eine "2" ausgegeben wird.

    Weiters würde ich noch versuchen Speicher miteinzubinden, ich kann aber leider hardwareseitig mit keinem dienen.

    Wenn diese Schritte abgeschlossen sind, wird dem Hochladen nichts im Wege stehen.

    LG Jürgen

    Einen Kommentar schreiben:


  • Moraty
    antwortet
    Nein, kein Speicher.

    Welche Leistung meinst du genau? Sowohl die DC-Leistung an A8 als auch AC-Leistung an A2 und Scheinleistung an A22 schauen gut aus.
    Was bei mir spinnt sind Blindleistung und der Leistungsfaktor.

    Einen Kommentar schreiben:


  • gibsonrocker
    antwortet
    Danke Dir. Habs gleich mal reingeschmissen bei mir. Sieht soweit gut aus. Nur die Leistung die vom Dach kommt fehlt mir noch und die Momentanleistung sind komisch. Hast Du einen Speicher bei Dir?

    Einen Kommentar schreiben:


  • Moraty
    antwortet
    Hier meine derzeitigen Anpassungen im Code.

    Soweit ich das auf die schnelle überblicken kann, verwendet die Solaranzeige ebenfalls die Modbus Schnittstelle und muss deshalb zumindest die selben Eingangsdaten verwenden.


    Code:
    ###[DEF]###
    [name=SunSpec Wechselrichter ModbusTCP ]
    
    [e#1=Trigger]
    [e#2=IP]
    [e#3=Port #init=502]
    [e#4=Adresse #init=1]
    [e#5=Energymeter #init=0]
    [e#6=Log Level #init=0 ]
    
    
    [a#1=Modus]
    [a#2=Momentanleistung Erzeugung]
    [a#3=Gesamtenergieerzeugung]
    [a#4=Momentanleistung Erzeugung/Bezug]
    [a#5=Einspeisezähler]
    [a#6=Bezugszähler]
    [a#7=Temperatur]
    [a#8=Leistung DC]
    [a#9=Spannung DC]
    [a#10=Strom DC]
    [a#11=Strom AC Gesamt]
    [a#12=Strom L1]
    [a#13=Strom L2]
    [a#14=Strom L3]
    [a#15=Spannung L1-L2]
    [a#16=Spannung L2-L3]
    [a#17=Spannung L3-L1]
    [a#18=Spannung L1-N]
    [a#19=Spannung L2-N]
    [a#20=Spannung L3-N]
    [a#21=Frequenz]
    [a#22=Scheinleistung]
    [a#23=Blindleistung]
    [a#24=Leistungsfaktor]
    [a#25=Fehlercode]
    [v#1 = ]
    
    [v#100 = 0.1] //Version
    [v#101 = 19001370] //LBS ID
    [v#102 = SunSpec Wechselrichter ModbusTCP] //LBS Name
    [v#103 = 0 ] // Log level
    [v#104 = 0 ] // Log per instance
    [v#105 = 0 ] // log ID in each line
    ###[/DEF]###
    
    ###[HELP]###
    Der Baustein dient zum Auslesen eines Sunspec kompatiblen Wechselrichters über eine Modbus TCP Verbindung.
    Bisher ist der Baustein nur mit einem Solaredge S7k mit Energymeter getestet.
    
    Die Datei ModbusMaster.php muss in das Verzeichnis: /usr/local/edomi/main/include/php/ kopiert werden.
    
    E1: Trigger, über diesen Eingang kann der Baustein getriggert werden.
    E2: IP Wechselrichter
    E3: Port (normalerweise 502)
    E4: Adresse (bei Solaredge normalerweise 1)
    E5: Energymeter (Solaredge Energymeter verfügbar 0=nein, 1=ja)
    E6: Log-Level (0=none, 1=emergency, 2=alert, 3=critical, 4=error, 5=warning, 6=notice, 7=info, 8=debug)
    
    
    A1: Modus (1=aus / 2=Nachtmodus / 4=an/Produktion)
    A2: Momentanleistung (kW Erzeugung)
    A3: Gesamtenergieerzeugung (kWh)
    A4: Momentanleistung (kW / + Einspeise, -Bezug)
    A5: Einspeisezähler (kWh)
    A6: Bezugszähler (kWh)
    A7: Temperatur (°C)
    A8: Leistung DC (kW)
    A9: Spannung DC (V)
    A10: Strom DC (A)
    A11: Strom AC Gesamt (A)
    A12: Strom L1 (A)
    A13: Strom L2 (A)
    A14: Strom L3 (A)
    A15: Spannung L1-L2 (V)
    A16: Spannung L2-L3 (V)
    A17: Spannung L3-L1 (V)
    A18: Spannung L1-N (V)
    A19: Spannung L2-N (V)
    A20: Spannung L3-N (V)
    A21: Frequenz (Hz)
    A22: Scheinleistung (VA)
    A23: Blindleistung (Var)
    A24: Leistungsfaktor (%)
    A25: Fehlercode
    
    
    changelog
    ===============================
    v0.1 06.12.2017 Initial Version
    
    
    ###[/HELP]###
    
    ###[LBS]###
    <?
    function LB_LBSID_logging($id, $msg, $var = NULL, $priority = 8)
    {
    $E = getLogicEingangDataAll($id);
    $logLevel = getLogicElementVar($id, 103);
    if (is_int($priority) && $priority <= $logLevel && $priority > 0) {
    $logLevelNames = array(
    'none',
    'emerg',
    'alert',
    'crit',
    'err',
    'warning',
    'notice',
    'info',
    'debug'
    );
    $version = getLogicElementVar($id, 100);
    $lbsNo = getLogicElementVar($id, 101);
    $logName = getLogicElementVar($id, 102) . "-LBS$lbsNo";
    $logName = preg_replace('/ /', '_', $logName);
    if (logic_getVar($id, 104) == 1)
    $logName .= "-$id";
    if (logic_getVar($id, 105) == 1)
    $msg .= " ($id)";
    strpos($_SERVER['SCRIPT_NAME'], $lbsNo) ? $scriptname = 'EXE' . $lbsNo : $scriptname = 'LBS' . $lbsNo;
    writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t" . $msg);
    if (isset($var)) {
    writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t================ ARRAY/OBJECT START ================");
    writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t" . json_encode($var));
    writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t================ ARRAY/OBJECT END ================");
    }
    }
    }
    
    
    function LB_LBSID($id) {
    
    if ($E=logic_getInputs($id)) {
    setLogicElementVar($id, 103, $E[6]['value']); // set loglevel to #VAR 103
    
    if ($E[1]['value']==1 && $E[1]['refresh']==1) {
    LB_LBSID_logging($id, 'LBS started');
    logic_setVar($id,1,1);
    
    if (logic_getVar($id,1)==1) { //setzt V1=1, um einen mehrfachen Start des EXEC-Scripts zu verhindern
    
    logic_callExec(LBSID,$id); //EXEC-Script starten
    
    }
    
    LB_LBSID_logging($id, 'LBS ended');
    }
    
    }
    
    }
    ?>
    ###[/LBS]###
    
    ###[EXEC]###
    <?
    require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
    require(dirname(__FILE__). "/../../../../main/include/php/ModbusMaster.php");
    set_time_limit(25);
    sql_connect();
    
    //-------------------------------------------------------------------------------------
    function logging($id, $msg, $var = NULL, $priority = 8)
    {
        $E = getLogicEingangDataAll($id);
        $logLevel = getLogicElementVar($id, 103);
        if (is_int($priority) && $priority <= $logLevel && $priority > 0) 
            {
                $logLevelNames = array(
                'none',
                'emerg',
                'alert',
                'crit',
                'err',
                'warning',
                'notice',
                'info',
                'debug'
                );
                $version = getLogicElementVar($id, 100);
                $lbsNo = getLogicElementVar($id, 101);
                $logName = getLogicElementVar($id, 102) . "-LBS$lbsNo";
                $logName = preg_replace('/ /', '_', $logName);
                if (logic_getVar($id, 104) == 1)
                    $logName .= "-$id";
                if (logic_getVar($id, 105) == 1)
                    $msg .= " ($id)";
                strpos($_SERVER['SCRIPT_NAME'], $lbsNo) ? $scriptname = 'EXE' . $lbsNo : $scriptname = 'LBS' . $lbsNo;
                writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t" . $msg);
                if (isset($var)) 
                {
                    writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t================ ARRAY/OBJECT START ================");                    writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t" . json_encode($var));
                    writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t================ ARRAY/OBJECT END ================");
                }   
            }
    }
    
    
    $E = getLogicEingangDataAll($id);
    $V=logic_getVars($id);
    $ip = $E[2]['value'];
    
    $modbus = new ModbusMaster($ip, "TCP");
    
    $modbus->port = $E[3]['value'];
    
    try 
    {
    
    
        // read inverter data
        $recData = $modbus->readMultipleRegisters($E[4]['value'], 40069, 50);
         for($i=0; $i < Count($recData); $i++) 
         {
          logging($id, strval($i) ." ".strval($recData[$i]),8);
         }
    
        $Dummy = PhpType::bytes2unsignedInt(array_slice($recData , (108-70)*2, 2));
        logging($id, "Modus = " .strval($Dummy));
        setLogicLinkAusgang($id,1,$Dummy);
    
    
        $Value= PhpType::bytes2signedInt(array_slice($recData , (84-70)*2, 2))/1000;
         logging($id, "value = " .strval($Value));
        $Factor= PhpType::bytes2signedInt(array_slice($recData , (85-70)*2, 2));
         logging($id, "Factor = " .strval($Factor));
        $Dummy = round($Value*pow(10,$Factor), 3);
        logging($id, "Momentanleistung = " .strval($Dummy) ." kW");
        setLogicLinkAusgang($id,2, $Dummy);
    
        $Value= ((PhpType::bytes2unsignedInt(array_slice($recData , (94-70)*2, 2)) << 16 ) + PhpType::bytes2unsignedInt(array_slice($recData , (95-70)*2, 2)))/1000;
        // logging($id, "value = " .strval($Value));
        $Factor= PhpType::bytes2signedInt(array_slice($recData , (96-70)*2, 2));
        // logging($id, "Factor = " .strval($Factor));
        $Dummy = round($Value*pow(10,$Factor), 3);
        logging($id, "Gesamtenergieerzeugung = " .strval($Dummy)." kWh");
        setLogicLinkAusgang($id,3, $Dummy);
    
        $Value= PhpType::bytes2signedInt(array_slice($recData , (104-70)*2, 2));
        // logging($id, "value = " .strval($Value));
        $Factor= PhpType::bytes2signedInt(array_slice($recData , (107-70)*2, 2));
        // logging($id, "Factor = " .strval($Factor));
        $Dummy = round($Value*pow(10,($Factor)), 3);
        logging($id, "Temperatur = " .strval($Dummy) ." °C");
        setLogicLinkAusgang($id,7, $Dummy);
    
        $Value= PhpType::bytes2signedInt(array_slice($recData , (101-70)*2, 2))/1000;
       // logging($id, "value = " .strval($Value));
       $Factor= PhpType::bytes2signedInt(array_slice($recData , (102-70)*2, 2));
       // logging($id, "Factor = " .strval($Factor));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Leistung DC = " .strval($Dummy) ." kW");
       setLogicLinkAusgang($id,8, $Dummy);
    
        $Value= PhpType::bytes2unsignedInt(array_slice($recData , (99-70)*2, 2));
        // logging($id, "value = " .strval($Value));
        $Factor= PhpType::bytes2signedInt(array_slice($recData , (100-70)*2, 2));
        // logging($id, "Factor = " .strval($Factor));
        $Dummy = round($Value*pow(10,($Factor)), 3);
        logging($id, "Spannung DC = " .strval($Dummy) ." V");
        setLogicLinkAusgang($id,9, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (97-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Factor= PhpType::bytes2signedInt(array_slice($recData , (98-70)*2, 2));
       // logging($id, "Factor = " .strval($Factor));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Strom DC = " .strval($Dummy) ." A");
       setLogicLinkAusgang($id,10, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (72-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Factor= PhpType::bytes2signedInt(array_slice($recData , (76-70)*2, 2));
       // logging($id, "Factor = " .strval($Factor));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Strom AC = " .strval($Dummy) ." A");
       setLogicLinkAusgang($id,11, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (73-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Strom L1 = " .strval($Dummy) ." A");
       setLogicLinkAusgang($id,12, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (74-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Strom L2 = " .strval($Dummy) ." A");
       setLogicLinkAusgang($id,13, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (75-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Strom L3 = " .strval($Dummy) ." A");
       setLogicLinkAusgang($id,14, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (77-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Factor= PhpType::bytes2signedInt(array_slice($recData , (83-70)*2, 2));
       // logging($id, "Factor = " .strval($Factor));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Spannung L1-L2 = " .strval($Dummy) ." V");
       setLogicLinkAusgang($id,15, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (78-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Spannung L2-L3 = " .strval($Dummy) ." V");
       setLogicLinkAusgang($id,16, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (79-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Spannung L3-L1 = " .strval($Dummy) ." V");
       setLogicLinkAusgang($id,17, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (80-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Spannung L1-N = " .strval($Dummy) ." V");
       setLogicLinkAusgang($id,18, $Dummy);
       
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (81-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Spannung L2-N = " .strval($Dummy) ." V");
       setLogicLinkAusgang($id,19, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (82-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Spannung L1-N = " .strval($Dummy) ." V");
       setLogicLinkAusgang($id,20, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (86-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Factor= PhpType::bytes2signedInt(array_slice($recData , (87-70)*2, 2));
       // logging($id, "Factor = " .strval($Factor));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Frequenz = " .strval($Dummy) ." Hz");
       setLogicLinkAusgang($id,21, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (88-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Factor= PhpType::bytes2signedInt(array_slice($recData , (89-70)*2, 2));
       // logging($id, "Factor = " .strval($Factor));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Scheinleistung = " .strval($Dummy) ." VA");
       setLogicLinkAusgang($id,22, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (90-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Factor= PhpType::bytes2signedInt(array_slice($recData , (91-70)*2, 2));
       // logging($id, "Factor = " .strval($Factor));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Blindleistung = " .strval($Dummy) ." Var");
       setLogicLinkAusgang($id,23, $Dummy);
    
       $Value= PhpType::bytes2unsignedInt(array_slice($recData , (92-70)*2, 2));
       // logging($id, "value = " .strval($Value));
       $Factor= PhpType::bytes2signedInt(array_slice($recData , (93-70)*2, 2));
       // logging($id, "Factor = " .strval($Factor));
       $Dummy = round($Value*pow(10,($Factor)), 3);
       logging($id, "Leistungsfaktor = " .strval($Dummy) ." %");
       setLogicLinkAusgang($id,24, $Dummy);
    
        $Dummy = PhpType::bytes2unsignedInt(array_slice($recData , (108-70)*2, 2));
        logging($id, "Fehlercode = " .strval($Dummy));
        setLogicLinkAusgang($id,25,$Dummy);
    
        if ($E[5]['value']==1) 
        {
            sleep(2);
            // usleep(1000*10);
    
            // read meter data
           $recData = $modbus->readMultipleRegisters($E[4]['value'], 40188, 55); //107
            // for($i=0; $i < Count($recData); $i++) 
            // {
            //      logging($id, strval($i) ." ".strval($recData[$i]),8);
            // }
    
            $Value= PhpType::bytes2signedInt(array_slice($recData , (18)*2, 2))/1000;
            //logging($id, "value = " .strval($Value));
            $Factor= PhpType::bytes2signedInt(array_slice($recData , (22)*2, 2));
           //logging($id, "Factor = " .strval($Factor));
           $Dummy = round($Value*pow(10,$Factor), 3);
            logging($id, "Momentanleistung Bezug-Ertrag= " .strval($Dummy));
            setLogicLinkAusgang($id,4, $Dummy);
    
            $Value= ((PhpType::bytes2unsignedInt(array_slice($recData , 38*2, 2)) << 16 ) + PhpType::bytes2unsignedInt(array_slice($recData , 39*2, 2)))/1000;
            //logging($id, "value = " .strval($Value));
           $Factor= PhpType::bytes2signedInt(array_slice($recData , (54)*2, 2));
            //logging($id, "Factor = " .strval($Factor));
            $Dummy = round($Value*pow(10,$Factor), 3);
            logging($id, "Einspeisezähler = " .strval($Dummy));
            setLogicLinkAusgang($id,5, $Dummy);
    
             $Value= ((PhpType::bytes2unsignedInt(array_slice($recData , 46*2, 2)) << 16 ) + PhpType::bytes2unsignedInt(array_slice($recData , 47*2, 2)))/1000;
            //logging($id, "value = " .strval($Value));
            $Factor= PhpType::bytes2signedInt(array_slice($recData , (54)*2, 2));
            //logging($id, "Factor = " .strval($Factor));
            $Dummy = round($Value*pow(10,$Factor), 3);
            logging($id, "Bezugszähler = " .strval($Dummy));
            setLogicLinkAusgang($id,6, $Dummy);
        }   
    
        logging($id, $modbus);
    }
    
    catch (Exception $e) 
    {
        logging($id, "Fehler:" );
        logging($id, $modbus);
        logging($id, $e);
        exit;
    }
    unset($modbus);
    
    //logic_setVar($id,1,0); //setzt V1=0, um einen erneuten Start des EXEC-Scripts zu ermoeglichen
    logging($id, "EXEC End");
    //-------------------------------------------------------------------------------------
    
    sql_disconnect();
    ?>
    ###[/EXEC]###
    Code:
    
    

    Einen Kommentar schreiben:


  • gibsonrocker
    antwortet
    Zitat von Moraty Beitrag anzeigen
    Sofern an den Messwerten Interesse besteht könnte ich diese natürlich auch zur Verfügung stellen.
    Ja, gerne! Ich hab einfach keine Zeit. Danke für Deine Mühe. Hab nebenbei versucht noch rauszufinden wie ich die reine PV-Leistung rauskriege wie sie im Monitoring angezeigt wird.

    Einen Kommentar schreiben:


  • Moraty
    antwortet
    Wenn ich es richtig verstehe wird im Register 109 sowohl die Betriebsmeldung als auch eventuelle Fehler angezeigt.
    Das Verhalten mit Wert 4 und 2 kann ich bei meiner Anlage auch feststellen. In welcher Form die Fehlercodes übertragen werden kann ich bisher noch nicht sagen. Laut Anleitung müssten sie mit 3x oder 8x beginnen und danach noch ein Fehlerspezifisches Byte enthalten.

    In der englischen Beschreibung habe ich auf Seite 16 noch einige weitere Statusmeldungen gefunden. Hier muss ich heute Abend mal beobachten, ob diese ebenfalls ausgegeben werden.
    https://www.solaredge.com/sites/defa...nical-note.pdf

    Weiterhin habe ich die restlichen Meldungen eingepflegt. Die Daten schauen bis auf die Blindleistung und den cos Phi soweit plausibel aus. Das könnte allerdings auch daran liegen, dass der cos Phi fest auf 1 eingestellt ist und somit die Blindleistung 0 sein muss.
    Sofern an den Messwerten Interesse besteht könnte ich diese natürlich auch zur Verfügung stellen.

    fudi6489
    Hat sich Martin dir gegenüber geäußert, ob er die Erweiterungen in den im Downloadportal verfügbaren LBS übernehmen würde? Dann wäre alles wieder auf einem Stand und die Zwischenstände hier könnten gelöscht werden.
    Angehängte Dateien
    Zuletzt geändert von Moraty; 20.02.2021, 11:35. Grund: Link eingefügt

    Einen Kommentar schreiben:

Lädt...
X