Hallo Gemeinde,
seit ein paar Tagen läuft das Skript auf Post 76 bei mir nicht mehr fehlerfrei.
Das Skript bricht mit folgendem Fehler ab:
Abort Processing during exceed of maximal ErrorCount: Cannot auto-convert value for parameter VariableValue
Error in Script /var/lib/symcon/scripts/34194.ips.php on Line 135
das ist der Code von Zeile 135
SetValue ($vid,$value); // Schreibe Wert in die Variable
mich wundert ausserdem, dass der JSON String bei mir so aussieht:
{"__type":"LiveDataUI","Timestamp":{"__type":"DateTime","DateTime":"2016-08-09T11:07:20","Kind":"Unspecified"},"PV":2131,"FeedIn":1919,"GridConsumption":0,"DirectConsumption":null,"SelfConsumption":212,"SelfSupply":212,"TotalConsumption":212,"DirectConsumptionQuote":null,"SelfConsumptionQuote":10,"AutarkyQuote":100,"BatteryIn":null,"BatteryOut":null,"BatteryChargeStatus":null,"OperationHealth":null,"BatteryStateOfHealth":null,"ModuleTemperature":null,"EnvironmentTemperature":null,"WindSpeed":null,"Insolation":null,"InfoMessages":[],"WarningMessages":[],"ErrorMessages":[],"Info":{}}
Hier ist mein Skript:
// Hier die LogIn Daten für das SunnyPortal eintragen:
$login_email = '****************';
$login_pass = '*****************';
// Hier muss die ID der neu angelegten Kategorie eingetragen werden und als ID der Parent der neu angelegten Kategorie. Bei mir liegen alle Scripte in der Kategorie 'Scripte'
$ParentID = IPS_GetCategoryIDByName ("SMA", 54812 /*[Schnittstellen]*/);
// *****************************************************************************
// Ab hier braucht nichts mehr verändert werden
// *****************************************************************************
// Erster Aufruf und Anmeldung am SunnyPortal
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.sunnyportal.com/Templates/Start.aspx');
# ctl00$ContentPlaceHolder1$Logincontrol1$txtUserName << Feldbezeichnung für Benutzername
# ctl00$ContentPlaceHolder1$Logincontrol1$txtPassword << Feldbezeichnung für Passwort
# ctl00$ContentPlaceHolder1$Logincontrol1$LoginBtn << Feldbezeichnung für LogIn Button
curl_setopt($ch, CURLOPT_POSTFIELDS,'ctl00$ContentPlaceHolder1$Logincontrol1$txtUserName='.urlencode($login_email).'&ctl00$ContentPlaceHolder1$Logincontrol1$txtPassword='.urlencode($login_pass).'&__EVENTTARGET=ctl00$ContentPlaceHolder1$Logincontrol1$LoginBtn');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie_sma.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie_sma.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30');
curl_setopt($ch, CURLOPT_REFERER, "https://www.sunnyportal.com");
$result = curl_exec($ch);
for ($i=1; $i <= 11; $i++){ // Werte 3 Minuten lang holen
// for ($i=1; $i <= 117; $i++){ // Werte 30 Minuten lang holen
// Zweiter Aufruf unter Verwendung des erzeugten Cookies um die Daten abzurufen
curl_setopt($ch, CURLOPT_URL,"http://www.sunnyportal.com/homemanager");
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie_sma.txt');
curl_setopt($ch, CURLOPT_POST, 0);
$result = curl_exec($ch);
$result = json_decode($result,true);
foreach ($result as $key => $value) {
$vid = @IPS_GetVariableIDByName($key,$ParentID);
if ($vid === false) { // überprüfe ob Variable existiert - falls nicht, werden diese neu angelegt
$vid = IPS_CreateVariable(2);
if (strpos($key,'Message') !== false or strpos($key,'Info') !== false or $key == "Timestamp"){ // setzte Variabletyp auf String, für Text-Meldungen
$vid = IPS_CreateVariable(3);
}
IPS_SetParent($vid, $ParentID);
IPS_SetName($vid, $key);
}
if ($key == "Timestamp") {
$value1 = (substr($value,6,10));
$value = date("d.m.Y \- H:i:s \U\h\r",$value1);
}
if (is_array($value)){ // Warnung, Info und Error sind String Arrays
setValue($vid,""); // Variable löschen, da ein leeres Array übermittelt wird, wenn keine Nachricht vorliegt
foreach ($value as $message) {
SetValue($vid,$message); // Schreibe Nachricht in die Variable
}
} else { // restliche Daten werden hier in die entsprechenden Varibalen geschrieben
if ($value == "") { // bei NULL wird der Wert mit 0 überschrieben
$value=0;
}
SetValue ($vid,$value); // Schreibe Wert in die Variable
}
}
sleep (15); // 15 Sekunden warten bevor die nächsten Daten geholt werden
};
curl_close($ch);
?>
läuft es bei euch noch fehlerfrei?