GetValue einer Boolean StatusVariable???

Kann es sein, dass GetValue einer Boolean StatusVariable eine „Null“ retourniert, wenn die StatusVariable „false“ ist? Ich hatte eine 0 erwartet! Kann mich jemand aufklären?

Ich lege ein Snippet bei zur Veranschaulichung. Das Problem tritt auf, wenn $StatusVariableContent auf eine Variable zurückgreift, welche auf False gesetzt ist.


<?

echo "skript SensorenAuslesen aufgerufen";


if ($IPS_SENDER == "Execute")
	{
	echo "  test-execution";
   $id= 29469 /*[EingangsBereich\Bewegungsmelder #1 FBH63AP-rw\Bewegungsstatus]*/;
	}
	else
	{
	echo "IPS_VARIABLE: " . $IPS_VARIABLE;
	echo nl2br("
 
");
   $id= $IPS_VARIABLE;
	//	$id_par=IPS_GetParent($IPS_VARIABLE);
	}

$id_par=IPS_GetParent($id);

echo	"IPS_GetStatusVariableIdents: " . print_r(IPS_GetStatusVariableIdents($id_par));
echo nl2br("
 
");

(array)$StatusVariablesID = (IPS_GetChildrenIDs($id_par));
$StatusVariablesNr = count($StatusVariablesID);
print_r($StatusVariablesID);


// print_r($StatusVariablesNr);
for ($x=0; $x < ($StatusVariablesNr); $x++) {
	echo nl2br( "Index: ". $x."  IPS_GetName: " . IPS_GetName($StatusVariablesID[$x])." GetValue:" . GetValue($StatusVariablesID[$x]). "
");
	$StatusVariableArray[$x]["VarID"] = $StatusVariablesID[$x];
	$StatusVariableArray[$x]["VarName"] = IPS_GetName($StatusVariablesID[$x]);
	$StatusVariableArray[$x]["VarContent"] = GetValue($StatusVariablesID[$x]);

	}
	echo nl2br("
 
");
print_r($StatusVariableArray); // $StatusVariableArray enthält alle StatusInfos des abrufenden Sensors



$conn=odbc_connect('IpSymconBellaria','','');
$sql="SELECT * FROM tblSensorsLog";
$rs=odbc_exec($conn,$sql);
$SqlInsDef = "INSERT INTO tblSensorsLog (TimeStampIpSymcom, SensorID, StatusVariableID, StatusVariableName, StatusVariableContent)";

for ($x=0; $x < ($StatusVariablesNr); $x++) {
	$SensorID = IPS_GetParent($id);
	$StatusVariableID = $StatusVariablesID[$x];
	$StatusVariableName = IPS_GetName($StatusVariablesID[$x]);
	$StatusVariableContent = GetValue($StatusVariablesID[$x]);
	$TimeStampIpSymcom = date("Y-m-d H:i:s");
	(string) $odbcValuesString = "#" . $TimeStampIpSymcom . "#, " . $SensorID . ", ". $StatusVariableID. ", '".$StatusVariableName . "', ".$StatusVariableContent ;
	$SqlStatement = $SqlInsDef . "  VALUES (" . $odbcValuesString. ");";
	echo nl2br("
 SqlStatement: ". $SqlStatement);
	$stmt = odbc_prepare($conn, $SqlStatement);


/* check for errors */
if (!odbc_execute( $stmt))
{
/* error */
echo "Whoops odbc error";
}



	}

?>

setz ein (int) davor.

Danke Rainer. Highly appreciated - insbesondere die Geschwindigkeit! Wenn ich das richtig verstehe, geht das aber nur wenn $StatusVariableContent ein Boolean oder ein Integer ist. Bei meinen Bewegungsmeldern ist dies zwar der Fall, aber $StatusVariableContent könnte theoretisch auch ein String sein. Fällt Dir ein, wie man den Fall in allgemeineren Form lösen kann?

Hi,

ich hoffe ich darf stören, ich habe seit 2.5 einen ähnlichen Fehler.

    switch(GetValueBoolean($FensterStateID))
    {
        case TRUE:
        SetValueBoolean($SetFensterStatusID, TRUE);
        break;
        case FALSE:
        SetValueBoolean($SetFensterStatusID, FALSE);
        break;
    }

Mit 2.4 gab es bei GetValueBoolean ein False bei geschlossenem Fenster. Seit 2.5 gibt es nichts mehr. Wohin soll dieses ominöse (int)?

Die Meldung lautet „Wrong parameter type for getvalueboolean()“ . Es Handelt sich hierbei um Homematic Kontakte.

MfG
Kris

Hallo Kris,

vielleicht hilft die Beschäftigung mit dem Skript weiter. Im unteren Teil geht es um die Kontakte :

Gruß
Bruno

Zur Frage mit dem (INT)

switch(GetValueBoolean((int)$FensterStateID))

… aber ich vermute aber dass etwas mit der Varibale „$FensterStateID“ nicht stimmt, die InstanzID ist im Normalfall immer ein INTEGER
(im schlimmsten Fall wird eben durch das (INT) auf 0 konvertiert)

tgusi74

Hi,

Powerfreddy
danke, den link kannte ich schon. Mich wundert halt das verhalten seit 2.5 mit 2.4 hat es funktioniert und ich kann so erstmal keinen Fehler erkennen.

tgusi74

aber ich vermute aber dass etwas mit der Varibale "$FensterStateID nicht stimmt

danke, $FensterStateID und $SetFensterStatusID sind beides Boolean Variablen.

MFG
Kris

IPS 2.4 hat Strings als Parameter erlaubt, weil es diese dann entsprechend für die IPS 1.x Kompatibilität konvertiert hat. Seit 2.5 erwartet IPS korrekterweise einen Integer. PHP konvertiert Strings aber nicht immer automatisch korrekt nach Integer… Dadurch tritt das Problem auf.

paresy

HI,

paresy
danke. Ich habe die Boolean- gegen Integervariable ausgetauscht und die Abfrage der HM-State geändert und nun klappt es.

Mfg
Kris