Hallo zusammen,
ich bekomme es einfach nicht hin eine Homematic-Variable über das Webfront zu setzen. Beim Klicken im Webfront auf „AN“ wechselt der Button auch auf AN nur leider wird die HM-Variable nicht gesetzt. Erst nach einem erneuten Klick auf „AN“ wird die Variable auf TRUE gesetzt.
Auf der CCU ist das XML-API Script installiert.
In IPS läuft dieses Script im Minutentakt:
<?
// Variablen vorgeben
$ccu_ip = '192.168.0.30';
$par_id = IPS_GetParent($IPS_SELF);
$vars_new[] = $IPS_SELF; // um zu verhidern, dass das script später gelöscht wird
$vars_old = IPS_GetChildrenIDs($par_id);
$xml = simplexml_load_file('http://'.$ccu_ip.'/config/xmlapi/sysvarlist.cgi');
$xml = new simpleXMLElement($xml->asXML());
$i=0;
while($i < count($xml->systemVariable)) {
$var_name = $xml->systemVariable[$i]['name'];
$var_value = $xml->systemVariable[$i]['value'];
$var_ise_id = $xml->systemVariable[$i]['ise_id'];
if(empty($var_value)) $var_value == " ";
$var_type = $xml->systemVariable[$i]['type'];
$var_id = @GetIDByCCUID($var_ise_id);
$vars_new[] = $var_id;
if($var_id == false) {
switch($var_type) {
case 2: //Boolean-Variable erstellen
if($var_value == 'true') {
$var_value = TRUE;
} else {
$var_value = FALSE;
}
$new_var_id = IPS_CreateVariable(0);
SetValueBoolean("$new_var_id", $var_value);
break;
case 4: //Integer-Variable erstellen
case 16:
$new_var_id = IPS_CreateVariable(1);
SetValueInteger($new_var_id, (int)$var_value);
break;
case 20: //String-Variable erstellen
$new_var_id = IPS_CreateVariable(3);
SetValueString($new_var_id, (string)$var_value);
break;
}
IPS_SetName($new_var_id, "$var_name");
IPS_SetInfo($new_var_id, "$var_ise_id");
IPS_SetParent($new_var_id, $par_id);
} else {
switch($xml->systemVariable[$i]['type']) {
case 2: //Boolean-Variable veraendern
if($var_value == 'true') {
$var_value = TRUE;
} else {
$var_value = FALSE;
}
SetValueBoolean("$var_id", $var_value);
break;
case 4: //Integer-Variable veraendern
case 16:
SetValueInteger($var_id, (int)$var_value);
break;
case 20: //String-Variable veraendern
SetValueString($var_id, (string)$var_value);
break;
}
if(IPS_GetName($var_id) != $var_name) {
IPS_SetName($var_id, "$var_name");
}
}
$i++;
}
$var_dif = array_diff($vars_old, $vars_new);
//Variablen löschen, die in der CCU auch gelöscht wurden
if(is_array($var_dif)) {
foreach($var_dif as $val) {
IPS_DeleteVariable($val);
}
}
function GetIDByCCUID($ccuid) {
global $vars_old;
foreach ($vars_old as $ips_id) {
$info = IPS_GetObject($ips_id);
if($ccuid == $info['ObjectInfo']) {
return $ips_id;
}
}
}
?>
Ich vermute mein Script arbeitet fehlerhaft:
<?
$ccu_ip = '192.168.0.30';
$value = GetValue(22587 /*[HM-Variablen\Licht Automatik]*/);
if($IPS_SENDER == "WebFront")
{
SetValue(22587 /*[HM-Variablen\Licht Automatik]*/, $IPS_VALUE);
}
if($value == false)
{
fopen('http://'.$ccu_ip.'/config/xmlapi/statechange.cgi?ise_id=3630&new_value=false', 'r');
}
if($value == true)
{
fopen('http://'.$ccu_ip.'/config/xmlapi/statechange.cgi?ise_id=3630&new_value=true', 'r');
}
?>
Kann mir jemand helfen? Danke
PS: Ich bin totaler PHP-Anfänger