Fonius Symo solar_api

  • Guten Morgen zusammen,



    ich nutze die Solar API um die Werte zu visualisieren.


    Jedoch erhalte ich nur folgende Ausgaben:


    Ich fände jedoch eine Anzeige der Beiden Strings einzeln sehr schön.


    Ist dies überhaupt möglich?


    FW: Installiert: 3.14.1-10

    WR: Symo 3.0-3M

  • die API bietet eine Vielzahl von verschiedenen Services mit vielen Parametern.

    Ich habe schon etwas gespielt jedoch erhalte ich die UDC und IDC nicht für beide Strings separat - ich konnte bisher diese Parameter auch nicht herauslocken

  • Beim Gen24 kann man mit

    Code
    http://<ip>/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceId=1&DataCollection=CommonInverterData

    Strom und Spannung beider Stränge (IDC, IDC_2) auslesen, zusammenrechnen muss man aber selbst.

  • hallo skymaster

    habe einen einen fronius symo
    da sieht das so aus


    { "Body" : { "Data" : { "DAY_ENERGY" :

    { "Unit" : "Wh",

    "Value" : 16147 },

    "DeviceStatus" : { "ErrorCode" : 0,

    "LEDColor" : 2,

    "LEDState" : 0,

    "MgmtTimerRemainingTime" : -1,

    "StateToReset" : false,

    "StatusCode" : 7 },

    "FAC" : { "Unit" : "Hz",

    "Value" : 49.990000000000002 },

    "IAC" : { "Unit" : "A",

    "Value" : 9.3900000000000006 },

    "IDC" : { "Unit" : "A",

    "Value" : 5.2999999999999998 },

    "PAC" : { "Unit" : "W", "Value" : 2163 },

    "TOTAL_ENERGY" : { "Unit" : "Wh",

    "Value" : 91103.009999999995 },

    "UAC" : { "Unit" : "V",

    "Value" : 240.40000000000001 },

    "UDC" : { "Unit" : "V",

    "Value" : 466.39999999999998 },

    "YEAR_ENERGY" : { "Unit" : "Wh",

    "Value" : 91102.600000000006 } } },

    "Head" : { "RequestArguments" :

    { "DataCollection" :

    "CommonInverterData",

    "DeviceClass" : "Inverter",

    "DeviceId" : "1",

    "Scope" : "Device" },

    "Status" : { "Code" : 0, "Reason" : "", "UserMessage" : "" },

    "Timestamp" : "2021-06-09T12:10:21+02:00" }

    }





    Code
  • Hallo

    habe was gefunden was bei mir funktioniert. in der url fronius ip anpassen.

    Teile des scripts habe ich von https://github.com/grann0s/_pushPVStringData.php

    entnommen und sind nicht auf meinem Mist gewachsen



    <?php


    // Define recursive function to extract nested values

    function printValues($arr) {

    global $count;

    global $values;


    // Check input is an array

    if(!is_array($arr)){

    die("ERROR: Input is not an array");

    }


    /*

    Loop through array, if value is itself an array recursively call the

    function else add the value found to the output items array,

    and increment counter by 1 for each value found

    */

    foreach($arr as $key=>$value){

    if(is_array($value)){

    printValues($value);

    } else{

    $values[] = $value;

    $count++;

    }

    }


    // Return total count and values found in array

    return array('total' => $count, 'values' => $values);

    }



    // Date for Fronius API

    $date = date('d.m.Y', time());


    // time für while

    $time = date('H:i', time());



    $inverterDataURL ="http://FRONIUS-IP/solar_api/v1/GetArchiveData.cgi?Scope=System&StartDate=".$date."&EndDate=".$date."&Channel=EnergyReal_WA




    $inverterJSON = file_get_contents($inverterDataURL);


    $arr = json_decode($inverterJSON, true);



    echo "aktuelles Datum ";

    echo $date ;



    echo "<table style='position: absolute; top: 32px' border>";

    echo "<tr> <th width=257 >String1</th><th width=202>String2</th></tr>";


    echo "</table>";


    echo "<table style='position: absolute; top: 60px' border>";

    echo "<tr> <th width=50 >Zeit</th><th>P</th><th>U</th><th>I</th><th>P</th><th>U</th><th>I</th></tr>";





    $x = 0;



    while ( $x < 86400 && gmdate("H:i", $x) <= $time)


    {

    $A1 = $arr["Body"]["Data"]["inverter/1"]["Data"]["Current_DC_String_1"]["Values"][$x];

    $A2 = $arr["Body"]["Data"]["inverter/1"]["Data"]["Current_DC_String_2"]["Values"][$x];

    $V1 = $arr["Body"]["Data"]["inverter/1"]["Data"]["Voltage_DC_String_1"]["Values"][$x];

    $V2 = $arr["Body"]["Data"]["inverter/1"]["Data"]["Voltage_DC_String_2"]["Values"][$x];

    // $T1 = $arr["Body"]["Data"]["inverter/1"]["Data"]["Temperature_Powerstage"]["Values"][$x];

    $W1 = $V1 * $A1;

    $W1 = number_format($W1,0,",",".");

    $W2 = $V2 * $A2;

    $W2 = number_format($W2,0,",",".");


    $V1 = number_format($V1,0,",",".");

    $V2 = number_format($V2,0,",",".");

    $A1= sprintf("%0.2f", $A1);

    $A2= sprintf("%0.2f", $A2);



    $time_value = gmdate("H:i", $x);

    // echo gmdate("H:i", $x) . " P1:" . $W1 . " P2:" . $W2 . " DC U1: " . $V1 . "<br>";


    echo "<br>";

    echo "<tr>


    <td width=50 align=right>".gmdate("H:i", $x)."</td>

    <td width=80 align=right>" . " " . $W1 ."&nbspW&nbsp</td>

    <td width=50 align=right >" . " " . $V1 ."&nbspV&nbsp</td>

    <td width=10 align=right >" . "" . $A1 ."&nbspA&nbsp</td>

    <td width=80 align=right>" . " " . $W2 ."&nbspW&nbsp</td>

    <td width=50 align=right >" . " " . $V2 ."&nbspV&nbsp</td>

    <td width=10 align=right >" . "" . $A2 ."&nbspA&nbsp</td>

    </tr>";



    $x += 300;


    }



    echo "</table><br>";


    ?>