ich bin an dem Thema noch dran, der erste TEST-Raspberry läuft, die I/O-Schnittstellen (GPIO/I2C) kann ich aber nicht wirklich nachbilden …
Ich werde jetzt noch einen meiner AKTIVEN wieder auf die aktuelle Beta nehmen.
Dies führt bei den Versionen mit dem geänderten PHP fast immer zum Absturz des IPS-Dienstes!
Ob dies am Inhalt des Scriptes (Generalabfrage aller Werte welche uebertragen werden sollen) auf dem PI liegt habe ich noch nicht untersucht, dieser ist:
<?
// GA ausfuehren fuer alle Variablen im Ordner
$Par_ID=IPS_GetParent($_IPS['SELF']);
$variablen_array=IPS_GetChildrenIDs($Par_ID);
$var_ids = array();
foreach ($variablen_array as $value) //durchsucht alle Objekte unter PAR_ID
{
$var_object_type=IPS_GetObject($value);
$ObjTyp=$var_object_type['ObjectType'];
$Name=IPS_GetName($value);
// Ermittlung Variable
If ($ObjTyp==2) { //Prüfung ob Objekt Variable
//echo $Name;
$Variable=IPS_GetVariable ($value);
$ObjInfo=$var_object_type['ObjectInfo'];
$Nummer= (int) substr($ObjInfo, -2);
//echo " $ObjInfo $Nummer ";
$wert=(int) shell_exec("/usr/local/bin/gpio read $Nummer");
if ($wert==0) $wert=false;
else $wert=true;
//echo " $value - $wert
";
If (GetValueBoolean($value)!=$wert) SetValueBoolean($value,$wert);
}
}
IPS_Sleep(1000);
//Variablen übertragen
$variablen_array=IPS_GetChildrenIDs($Par_ID);
$var_ids = array();
foreach ($variablen_array as $value) //durchsucht alle Objekte unter PAR_ID
{
$var_object_type=IPS_GetObject($value);
$ObjTyp=$var_object_type['ObjectType'];
$Name=IPS_GetName($value);
// Ermittlung Variable
If ($ObjTyp==2) { //Prüfung ob Objekt Variable
$Variable=IPS_GetVariable ($value);
$ObjID=$var_object_type['ObjectID'];
//echo "Object $ObjID
";
$ScriptID=@IPS_GetScriptIDByName("uebertragen",$ObjID);
if (@IPS_ScriptExists($ScriptID)) {
IPS_RunScript($ScriptID);
//echo "Script=$ScriptID gestartet
";
}
}
}
?>
Bitte beheb diesen Fehler - geht in den alten Versionen tadellos.
auf einem Testsystem ja - auf einem nein
Bin jetzt gerade dabei SYMCON neu zu installieren und auch ein Raspi FW-Update zu machen - melde mich nochmals
ich hatte mir ja bereits vorgestern einen jungfräulichen PI1 neu aufgesetzt, auf diesen habe ich gestern die „am häufigsten abstürzende SYMCON-Installation“ aufgespielt - und keinen Absturz gehabt seit gestern Abend (ca. 24h).
Auf meinen aktiven PI2 konnte ich den Fehler ja relativ sicher auslösen (vorhergehende Beiträge). Ich habe mir nun jetzt die Mühe gemacht ein Produktivsystem ebenfalls ganz jungfräulich aufzusetzen. Diesmal habe ich die seit 24h funktionierende Symcon Installation des 1.Testsystems aufgespielt.
Hier ist der Fehler da.
Ich habe nun folgendes Script auf dem „jungfräulichen PI1“ und dem „jungfräulichen PI2“ gestestet und bin überzeugt, der FEHLER TRITT NUR AM PI2 auf!
Ich habe „quick and dirty“ relativ weit unten im folgenden Script ein „Goto“ kommentiert, damit kann man den IPS-Absturz zu- und abschalten ;-))) (Spätestens beim 5.Versuch)
Wenn Du das nicht bei euch nachstellen kannst - spring ich aus dem Fenster …
<?
// GA ausfuehren fuer alle Variablen im Ordner
//
//
//
$Par_ID=IPS_GetParent($_IPS['SELF']);
//
//Auslesen I2C Bus und Umrechnung
$dezzahl= 123; //hexdec( shell_exec("i2cget -y 1 $I2C_Adresse"));
//echo "
Dezzahl $dezzahl";
$i2c_arr=array();
if ($dezzahl>=128) $i2c_arr[7] =1; else $i2c_arr[7] =0;
if ($dezzahl%128>=64) $i2c_arr[6] =1; else $i2c_arr[6] =0;
if ($dezzahl%64>=32) $i2c_arr[5] =1; else $i2c_arr[5] =0;
if ($dezzahl%32>=16) $i2c_arr[4] =1; else $i2c_arr[4] =0;
if ($dezzahl%16>=8) $i2c_arr[3] =1; else $i2c_arr[3] =0;
if ($dezzahl%8>=4) $i2c_arr[2] =1; else $i2c_arr[2] =0;
if ($dezzahl%4>=2) $i2c_arr[1] =1; else $i2c_arr[1] =0;
if ($dezzahl%2>=1) $i2c_arr[0] =1; else $i2c_arr[0] =0;
//
//
$variablen_array=IPS_GetChildrenIDs($Par_ID);
$var_ids = array();
foreach ($variablen_array as $value) //durchsucht alle Objekte unter PAR_ID
{
$var_object_type=IPS_GetObject($value);
$ObjTyp=$var_object_type['ObjectType'];
$Name=IPS_GetName($value);
// Ermittlung Variable
If ($ObjTyp==2) { //Pruefung ob Objekt Variable
//echo $Name;
$Variable=IPS_GetVariable ($value);
$ObjInfo=$var_object_type['ObjectInfo'];
$Nummer= (int) substr($ObjInfo, -2);
$wert=$i2c_arr[$Nummer];
if ($wert==0) $wert=false;
else $wert=true;
//echo "
$ObjInfo $Nummer $wert";
If (GetValueBoolean($value)==$wert) SetValueBoolean($value,!$wert);
}
}
//IPS_Sleep(1000);
//Variablen übertragen
$variablen_array=IPS_GetChildrenIDs($Par_ID);
$var_ids = array();
foreach ($variablen_array as $value) //durchsucht alle Objekte unter PAR_ID
{
$var_object_type=IPS_GetObject($value);
$ObjTyp=$var_object_type['ObjectType'];
$Name=IPS_GetName($value);
// Ermittlung Variable
If ($ObjTyp==2) { //Prüfung ob Objekt Variable
$Variable=IPS_GetVariable ($value);
$ObjID=$var_object_type['ObjectID'];
//echo "Object $ObjID
";
$ScriptID=IPS_GetScriptIDByName("uebertragen",$ObjID);
//Goto Ende_Script; //folgende Zeilen führen auf einem RASPI PI2 zum Absturz von IPS, auf dem PI1 nicht
//eindeutig reproduzierbar - spätestens beim 5. Ausführen des Scripts
if (IPS_ScriptExists($ScriptID)) {
IPS_RunScript($ScriptID);
//echo "Script=$ScriptID gestartet
";
}
}
}
Ende_Script:
?>