Servus zusammen,
ich experementiere momentan mit IPS um BACnet Datenpunkte via RestAPi abzufragen.
Da es sich dabei um eine relativ umfangreiche Anlage handelt sind auch entsprechend viele Variablen und Abfragen vorhanden.
IPS läuft dabei auf einem Ubuntu Server 14.04. und fragt die API lokal ab ( 127.0.0.1 )
Ich habe momentan 50 PHP Threads aufgemacht um zu testen ob es besser wird, aber leider bekomme ich tonnenweise Meldungen dieser art :
08.07.2016 12:15:45*| ScriptEngine*| Too many scripts at once. Dropping execution…
Ich habe ca. 230 Variablen die jeweils ein eigenes Script und ein passendes Event dazu haben :
<? function httpGet($url)
{
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
// curl_setopt($ch,CURLOPT_HEADER, false);
$output=curl_exec($ch);
curl_close($ch);
$output = json_decode($output);
return $output;
}
function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(__FUNCTION__, $d);
}
else {
// Return array
return $d;
}
}
$data = httpGet("http://127.0.0.1:47800/api/v1/bacnet/devices/2098177/objects/3.541?properties=present-value");
if (property_exists($data,"present-value")) {
$data = objectToArray($data);
$value = $data["present-value"];
$id = IPS_GetParent($_IPS["SELF"]);
SetValue($id,$value);}
?>
Wenn ich die API Deaktiviere und die Abfragen ins leere laufen beträgt die Scriptlaufzeit immer nur noch 0,8 ms da der Befehl dann über die Abfrage if ( property_exists ) abgebrochen wird.
Logischerweise denke ich doch das dies dann nicht zu „too many scripts“ führt, was mir in den Meldungen aufgefallen ist das es keine „Warteschlange füllt sich“ Meldungen mehr gibt ? Kann das sein ?
LG
Flobo