SMA Webbox

IPS verwaltet die Extensions selber. Eigenlich die DLL nur in das EXT-Verzeichnis von IPS rein kopieren und IPS neu starten. In die php.ini baut er das beim Neustart dann selber ein. Wenn nicht im LOG nachsehen was ihm da nicht schmeckt.

Mann, mit 75 Wechselrichtern hat das Skript dann ja mal richtig was zu tun.

Ich habe nur die Grunddaten der WebBox abgefragt (Tagesertrag und Wirkleistung). Die einzelnen Wechelrichter interessieren mich im Moment nicht.
In unserer HVT arbeitet ein Siemens Semtron Meßgerät (Semtron ->(Modbus)-> Wago ->(Modbus)-> IP-Symcon) und zusammen mit der Wirkleistung der PV-Anlage erhalte ich die aktuelle tatsächliche Wirkleistung.

Mal sehen ich lasse Dein Script mal ne Woche laufen. Bis jetzt gab es noch keine Probleme. Ich frage aber auch nur jede Minute ab.

Laut SMA kann man das Intervall bis auf 30 Sekunden runter fahren. So läuft es auch bei mir.

Ich habe das nun auch bei mir umsetzen wollen …
Leider scheint er sich nicht alles Werte zu ziehen.

Übrigens: was hat es mit

$device_WR = "004e:7d313f59"

auf sich? Woher bekomme ich meine Nummer?

Glaube die Nummer brauchst Du nur wenn man mehrere WR hat. Damit Du sie einzeln anbfragen kannst.

Probier es mal hiermit, siehst dann ganz unten die ID oder key. Nicht vergessen IP ändern.

<?

$webboxip = "192.168.1.30:88";
$timeout=5;

    $requestarray1 = '{
    "version": "1.0",
    "proc": "GetPlantOverview",
    "id": "1",
    "format": "JSON"
    }';

    $response1 = request($webboxip,$requestarray1);
     print_r($response1);

    echo "<table>";
    echo "<tr>";
    echo "<td>Realtime Values</td>";
    echo "</tr>";
    echo "<tr>";
    echo "<td>Leistung: </td><td>".$response1->result->overview[0]->value."".$response1->result->overview[0]->unit."</td>
";
    echo "</tr>";
    echo "<tr>";
    echo "<td>Tagesertrag: </td><td>".$response1->result->overview[1]->value."".$response1->result->overview[1]->unit."</td>
";
    echo "</tr>";
    echo "<tr>";
    echo "<td>Gesamtertrag: </td><td>".$response1->result->overview[2]->value."".$response1->result->overview[2]->unit."</td>
";
    echo "</tr>";
    echo "</table><br><br>";

    $requestarray2 = '{
    "version": "1.0",
    "proc": "GetDevices",
    "id": "1",
    "format": "JSON"
    }';

    $response2 = request($webboxip,$requestarray2);

print_r($response2);

    echo "<table>";
    echo "<tr>";
    echo "<td>Devicelist</td>
";
    echo "</tr>";

    $i = 0;
    while ($i <$response2->result->totalDevicesReturned)
    {
       echo "<tr>";
       echo "<td>Wechselrichter: </td><td>".$response2->result->devices[$i]->name." </td><td>".$response2->result->devices[$i]->key."</td>
";
       echo "</tr>";
       $i++;
    }

    echo "</table><br><br>";


function request($webboxip,$requestarray) {
     $timeout=5;
    $request = json_encode($requestarray);
    $request = $requestarray;

    // Hier der JSON request
    $request = 'RPC='.rawurlencode($request);

    $ch=curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://".$webboxip."/rpc");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
    curl_setopt($ch, CURLOPT_HEADER , 0);
    curl_setopt($ch, CURLOPT_POST, 1 );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);

    // Hier das Ergebnis
    $response = curl_exec ($ch);

    if (curl_errno($ch)) {
        $err=1;
          $errtext = curl_error($ch);
    }

    curl_close($ch);

    $response = json_decode($response);

    return($response);
    }

?>

Na ja wenn Du mehre Wechselrichter abfragen willst kannst du die Device ID ja mit dem Befehl RPC_GET_DEVICES abfragen.

{
„version“: „1.0“,
„proc“: „GetDevices“,
„id“: „1“,
„format“: „JSON“
}

Siehe auch die API Beschreibung bei SMA http://files.sma.de/dl/2585/SWebBoxRPC-BDE092713.pdf

Oder so. Hatte das Skript halt grad.:wink:

Sooo, nach langem hin und her funktioniert es nun sehr gut. Wenn man sich das Script aus Eingangspost nimmt und die auskommentierten Zeilen

//$requestarray = $GetDevices;
//request($webboxip,$requestarray);
//print_r($response);

wieder frei gibt (// entfernen), dann spuckt das Script die IDs der Wechselrichter aus. Diese dann ins Script einbauen und alles ist gut.

Aktuell geht nun also: Spannung, Strom, Leistung aktuell, Ertrag Tag, Ertrag gesamt (übrigens kann man hiermit super die CO2 Ersparnis und die Vergütung in EURO berechnen lassen), Anlagennachrichten und Anlagenzustand.

Nun habe ich aber noch eine Frage an die Cracks: welche Parameter kann man zusätzlich auslesen? Geht noch mehr? :smiley:

Es geht noch mehr. Die Antwort ist aber ebenso allgemein wie die Frage. Kommt darauf an was Dein Wechselreichter so alles an Daten her gibt. Es gibt bei SMA eine Doku was die Webbox so alles abfragen kann. Es ist aber wie gesagt die Frage was für Daten der Wechselrichter zur Verfügung stellt. Mit Temperaturen der Kollektoren kann meine Anlage z.b. nicht aufwarten obwohl die Webbox das wohl an sich könnte.

Temperaturen, Windgeschwindigkeiten, Einstrahlungsintensität, … das kann man alles monitoren wenn man die „Sunny Sensorbox“ an die Webbox koppelt. Ist aber ein teurer Spaß. :wink:
Ich habe einen „Sunny Boy 4000TL“ …
Was schneidest Du denn alles so mit?

Habe einen 4000TL und einen 3000TL mit einer WebBox über Bluetooth angebunden. Da mir die Sensorbox zu teuer war bekomme ich in der WebBox auch nicht mehr zu sehen als Du. In IPS übernehme ich nur Volt/Ampere/Leistung/Tagesertrag/Gesamtertrag. Zusätzlich speichert mir die Box die Daten noch auf SD-Card und lädt sie per FTP auf eine Netzfreigabe hoch.

Hallo,

ich suche das fertige Skript zum SMA Webbox auslesen, wer kann es mir bitte zusenden.

Danke!

Hallo
Ich suche auch das fertige Skript um die SMA Webbox auslesen, wer kann es mir bitte zusenden.
Danke
NetFritz

@JensHomeautomation
@NetFritz

Da sich die Anlagen dann doch von einander unterscheiden macht ein fertiges Script keinen echten Sinn. Wie sehen denn die Gegebenheiten bei Euch aus?
Welche Wechselrichter? Wie viele davon? …

Da sich die Anlagen dann doch von einander unterscheiden macht ein fertiges Script keinen echten Sinn.

Kann Honk0504 nur zustimmen. In Post #7 in diesem Thread gibt es ein Basis-Skript welches sich relativ leicht anpassen lässt.

Hallo
Ich habe 1 Sunny Boy 4000TL WR mit der Webbox 2.0.
Ich lese auch schon ein 1/2 Jahr meine Webbox mit einem PHP-RPC-Script aus.
Allerdings nur „GetPlantOverview“ und auch „GetDevices“.
Nun bin ich schon eine Weile am sripten, um alle Werte die die Webbox über rpc zur verfügung stellt, auslesen.
Aber mit „GetProcessData“ komme ich einfach nicht weiter.
Rufe ich das Array von GetProcessData so auf bekomme ich immer folgende Fehlermeldung.


$device="xxxxx:xxxxxxxx";
$GetProcessDataWR1 = '{
"version": "1.0",
"proc": "GetProcessData",
"id": "1",
"format": "JSON",
"params":
{
"devices":
[
{
"key": "'.$device.'",
"channels": null
}
]
}
}';

„Ausgabe->{„error“:„Version is not supported“,„id“:“",„proc“:"",„version“:„1.0“}stdClass Object ( [error] => Version is not supported [id] => [proc] => [version] => 1.0 )"

Was muss ich den für Angaben im Array mit „GetProcessData“ machen ?
Gruß NetFritz

$device=„xxxxx:xxxxxxxx“;

Ist das nur ein Platzhalter oder hast Du da reale Daten drin stehen?

Hallo
Nur ein Platzhalter.
Gruß NetFritz

Bei mir sieht das so aus:

<?

//IP der Webbox (SMA hat übrigends eine WebBox zu Demozwecken im Internet)
$webboxip = "10.10.10.10";
$timeout = 15;
include("JSON.ips.php");
$json = new Services_JSON();

//JSON Request im PHP Array Format (wird später umgewandelt durch die in PHP5 vorhandene json_encode/decode Funktion)

$GetPlantOverView = array(
    'version'=>"1.0",
    'proc'=>"GetPlantOverview",
    'id'=>"1",
    'format'=>"JSON"
    );

$GetDevices = array(
    'version'=>"1.0",
    'proc'=>"GetDevices",
    'id'=>"1",
    'format'=>"JSON"
    );

$device="asdf:12345678";
$GetProcessDataWR1 = '{
"version": "1.0",
"proc": "GetProcessData",
"id": "1",
"format": "JSON",
"params":
{
"devices":
[
{
"key": "'.$device.'",
"channels": null
}
]
}
}';

Entspricht bis auf den Inhalt von $device ist das bei mir identisch.