HM-Variable über Webfront setzen

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 :confused:

HM_WriteValueBoolean: IP-Symcon :: Automatisierungssoftware

Edit: Ich kenne jetzt die CCU nicht, aber was willst Du mit den ganzen Scripten bezwecken.

HM-Variablen können nur über XML-API gelesen und gesetzt werden.

Probier es doch mal so.

In deiner vorherigen Version hast Du ja immer den bestehenden Status gelesen und wieder geschrieben, es hat sich also nicht geändert.

Dieses Skript als Actionskript auf die Variable.

<? 
$ccu_ip = '192.168.0.30'; 
 
if($IPS_SENDER == "WebFront") 
{ 
   SetValue($IPS_VARIABLE, $IPS_VALUE); 
} 
 
fopen('http://'.$ccu_ip.'/config/xmlapi/statechange.cgi?ise_id=3630&new_value='.$IPS_VALUE, 'r'); 
 
?> 

Jetzt wird der geklickte Wert an die HM-Systemvariable 3630 geschrieben

Habe das Script eingefügt. Leider ohne Erfolg. Die HM-Variable ändert sich nicht.

Funktioniert denn ein einfaches

fopen('http://192.168.0.30/config/xmlapi/statechange.cgi?ise_id=3630&new_value=true','r');

Und/oder auch false?

Ja, das Script funktioniert, auch mit FALSE. Die HM-Variable schaltet.

Bist Du dir sicher das Du der IPS-Variable auch das Skript als Actionskript eingetragen hast.

Mach doch bitte mal einen Screenshot des Variablenprofiles.

Ja, das habe ich gemacht.

variablenprofil.jpg