Ich bekomme immer eine Fehlermeldung beim Ausführen des Scriptes wenn der Wechselrichter nicht mehr erreicht wird, bzw. wenn keine Spannung mehr von der PV Kommt!
Folgendes Script benütze ich zum Auslesen:
$content = file_get_contents("http://10.0.0.40/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData"); // Dies ist die Abfrage. Zu ändern ist die IP und die DeviceID entsprechend eurer Geräte
if ($content === False){
echo "Nicht erreichbar";
$pac = 0;
$fac = 0;
SetValue(23889 /*[Energie\PVAnlage\FRONIUS\Fronius SYMO\Symo Power]*/,$pac);
SetValue(13329 /*[Energie\PVAnlage\FRONIUS\Fronius SYMO\Symo AC Frequency]*/,$fac);
return;
// Dies ist die Kontrolle, ob der Wechselrichter erreichbar ist. Wenn nein, dann habe ich Power und Frequency auf null gesetzt, da ich manchmal "Restwerte" von 1 hatte (letzte erreichbare Abfrage war 1W) Die hätte er sonst bis zur nächsten Erreichbarkeit angezeigt.
}
$json = json_decode($content);
//Dies ist die eigentliche Wertabfrage und Zuweisung zu den vorne stehenden Variablen
//Ihr könnt es mit den Werten ergänzen die Ihr wollt
$day = $json->Body->Data->DAY_ENERGY->Value;
$total = $json->Body->Data->TOTAL_ENERGY->Value;
$year = $json->Body->Data->YEAR_ENERGY->Value;
$fac = $json->Body->Data->FAC->Value;
$pac = $json->Body->Data->PAC->Value;
$day = $day / 1000; // Umrechnung Watt in Kilowatt
$total = $total / 1000;
$year = $year / 1000;
// Variablenzuweisung mit euren Variablen ändern
SetValue(28512 /*[Energie\PVAnlage\FRONIUS\Fronius SYMO\Symo Day Energy]*/,$day);
SetValue(10011 /*[Energie\PVAnlage\FRONIUS\Fronius SYMO\Symo Total Energy]*/,$total);
SetValue(18033 /*[Energie\PVAnlage\FRONIUS\Fronius SYMO\Symo Year Energy]*/,$year);
SetValue(13329 /*[Energie\PVAnlage\FRONIUS\Fronius SYMO\Symo AC Frequency]*/,$fac);
SetValue(23889 /*[Energie\PVAnlage\FRONIUS\Fronius SYMO\Symo Power]*/,$pac);
Es erscheint dann der Fehler:
Notice: Undefined property: stdClass::$FAC in C:\IP-Symcon\scripts\12250.ips.php on line 25
Notice: Trying to get property of non-object in C:\IP-Symcon\scripts\12250.ips.php on line 25
Notice: Undefined property: stdClass::$PAC in C:\IP-Symcon\scripts\12250.ips.php on line 26
Notice: Trying to get property of non-object in C:\IP-Symcon\scripts\12250.ips.php on line 26
Warning: Cannot auto-convert to Float from Variant. Error: Could not convert variant of type (Null) into type (Double) in C:\IP-Symcon\scripts\12250.ips.php on line 38
Warning: Cannot auto-convert to Float from Variant. Error: Could not convert variant of type (Null) into type (Double) in C:\IP-Symcon\scripts\12250.ips.php on line 39
Ok, danke!
Aber wie ist es möglich das ich dann die Werte mit einer „0“ Füllen kann?
Da wenn keine Sonne da ist, keine Leistung von der PV kommt, ich aber trotzdem den Wert „2W“ habe?
Vlt. solltest du dich etwas genauer ausdrücken!? Wo wie was wieso warum weshalb?
Wenn du meinst was ich denke, dann ist die Antwort dazu:
$json = json_decode($content);
> Die Zeile und die darunter (in deinem Skript) ergeben Fehler, wenn $content leer ist.
Du müsstest also dein Skript umbauen, dass alles mit $content nur „bearbeitet“ wird, wenn $content != false
Also deine „if ($content === False){“ muss bis zum Ende vom Skript alles beinhalten. Also die „}“ ans Ende setzen könnte ausreichen.
…ansonsten mal neu dein Skript posten und die Fehler…
Das Script verwende ich zum Auslesen des Fronius Wechselrichters.
Wenn dieser On ist, also die PV Spannung vorhanden ist, funktioniert das Script Problemlos.
Nur wenn die PV Spannung nicht mehr vorhanden ist, kommt der Fehler im Script! Die Variable die „Leistung“ und „Frequenz“ ausfüllt wird dann nicht mehr Aktualisiert! Es sollte beim nicht erreichen des Wechselrichters dann eine „0“ stehen.
Poste mal dein komplettes Skript, so wie es jetzt aussieht, ich glaub ich hab mich falsch ausgedrückt. Mal sehen, ob du es aber so umgesetzt hast, wie ich es meinte
hab mich doch etwas zu früh gefreut! Jetzt werden zwar die Variablen „Leistung“ und „Frequenz“ auf null gesetzt wenn der Wechselrichter nicht erreichbar ist, aber auch dann wenn die Sonne scheint :-/ Per Anhang das Script!
Hab die Klammer so gesetzt: {if ($content === false) da hat es mir keine Werte mehr aktualisiert! Ausser der Wechselrichter war nicht erreichbar!
Jetzt hab ich die Klammer nach: if ($content === false) { gesetzt, da werden alle Werte wieder aktualisiert, ausser der Wechselrichter ist nicht erreichbar, dann werden die Variablen „Leistung“ und „Frequenz“ nicht mehr aktualisiert??
<?
$content = file_get_contents("http://10.0.0.40/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData"); // Dies ist die Abfrage. Zu ändern ist die IP und die DeviceID entsprechend eurer Geräte
{if ($content === false)
echo "Nicht erreichbar";
$pac = 0;
$fac = 0;
SetValue(23889 /*[PV Anlage\PV Ertrag - Nutzung\Leistung]*/,$pac);
SetValue(13329 /*[PV Anlage\PV Ertrag - Nutzung\AC Frequenz]*/,$fac);
return;
// Dies ist die Kontrolle, ob der Wechselrichter erreichbar ist. Wenn nein, dann habe ich Power und Frequency auf null gesetzt, da ich manchmal "Restwerte" von 1 hatte (letzte erreichbare Abfrage war 1W) Die hätte er sonst bis zur nächsten Erreichbarkeit angezeigt.
}
$json = json_decode($content);
//Dies ist die eigentliche Wertabfrage und Zuweisung zu den vorne stehenden Variablen
//Ihr könnt es mit den Werten ergänzen die Ihr wollt
$day = $json->Body->Data->DAY_ENERGY->Value;
$total = $json->Body->Data->TOTAL_ENERGY->Value;
$year = $json->Body->Data->YEAR_ENERGY->Value;
$fac = $json->Body->Data->FAC->Value;
$pac = $json->Body->Data->PAC->Value;
$day = $day / 1000; // Umrechnung Watt in Kilowatt
$total = $total / 1000;
$year = $year / 1000;
// Variablenzuweisung mit euren Variablen ändern
SetValue(28512 /*[PV Anlage\PV Ertrag - Nutzung\Tages Energie]*/,$day);
SetValue(10011 /*[PV Anlage\PV Ertrag - Nutzung\Total Energie]*/,$total);
SetValue(18033 /*[PV Anlage\PV Ertrag - Nutzung\Jahres Energie]*/,$year);
SetValue(13329 /*[PV Anlage\PV Ertrag - Nutzung\AC Frequenz]*/,$fac);
SetValue(23889 /*[PV Anlage\PV Ertrag - Nutzung\Leistung]*/,$pac);
?>
<?
// Dies ist die Abfrage. Zu ändern ist die IP und die DeviceID entsprechend eurer Geräte
// $content = @file_get_contents("http://10.0.0.40/solar_api/v1/GetInverterRealtimeData.cgiScope=Device&DeviceID=1&DataCollection=CommonInverterData");
$content = @Sys_GetURLContent("http://10.0.0.40/solar_api/v1/GetInverterRealtimeData.cgiScope=Device&DeviceID=1&DataCollection=CommonInverterData");
if ($content === false) {
// Dies ist die Kontrolle, ob der Wechselrichter erreichbar ist. Wenn nein, dann habe ich Power und Frequency auf null gesetzt, da ich manchmal "Restwerte" von 1 hatte (letzte erreichbare Abfrage war 1W) Die hätte er sonst bis zur nächsten Erreichbarkeit angezeigt.
echo "Nicht erreichbar";
$pac = 0;
$fac = 0;
SetValue(23889 /*[PV Anlage\PV Ertrag - Nutzung\Leistung]*/,$pac);
SetValue(13329 /*[PV Anlage\PV Ertrag - Nutzung\AC Frequenz]*/,$fac);
return;
}
else {
//Dies ist die eigentliche Wertabfrage und Zuweisung zu den vorne stehenden Variablen
//Ihr könnt es mit den Werten ergänzen die Ihr wollt
$json = json_decode($content);
$day = $json->Body->Data->DAY_ENERGY->Value;
$total = $json->Body->Data->TOTAL_ENERGY->Value;
$year = $json->Body->Data->YEAR_ENERGY->Value;
$fac = $json->Body->Data->FAC->Value;
$pac = $json->Body->Data->PAC->Value;
$day = $day / 1000; // Umrechnung Watt in Kilowatt
$total = $total / 1000;
$year = $year / 1000;
// Variablenzuweisung mit euren Variablen ändern
SetValue(28512 /*[PV Anlage\PV Ertrag - Nutzung\Tages Energie]*/,$day);
SetValue(10011 /*[PV Anlage\PV Ertrag - Nutzung\Total Energie]*/,$total);
SetValue(18033 /*[PV Anlage\PV Ertrag - Nutzung\Jahres Energie]*/,$year);
SetValue(13329 /*[PV Anlage\PV Ertrag - Nutzung\AC Frequenz]*/,$fac);
SetValue(23889 /*[PV Anlage\PV Ertrag - Nutzung\Leistung]*/,$pac);
}
?>
Eigentlich müsste „file_get_contents“ noch ausgetauscht werden gegen „Sys_GetURLContent“. Weil „file_get_contents“ läuft in einen Fehler und wird nicht abgefangen. Aber keine Ahnung wie das mit json_decode dann ist. Probier mal mit „Sys_GetURLContent“.
Beim Ausführen des Scriptes unter PV Spannung bekomm ich leider die Fehlermeldung „nicht erreichbar“?
Leistung und Frequenz werden zwar aktualisiert, jedoch mit einer Null befüllt.
Die anderen Varis werden leider gar nicht aktualisiert :-/ hmm…
Deswegen meine Frage > sollte denn da aktuell eigentlich was kommen? Ist das Gerät erreichbar? Weiß ja nicht wie das bei dir da geschaltet ist und wie dann da nichts kommt oder doch und erreichbar oder nicht…
Ja, das hab ich soweit verstanden, wenn der WR nicht erreichbar ist, kommt auch eine Null.
Nur so wie es jetzt ist, müsste der WR ja die aktuelle Leistung in die Variable schreiben bzw. das Script.