Nach CCU-Neustart legt IPS neue Variablen an

Moin,

ich habe seit etwa einem Jahr ein Problem mit meinen ausgelesenen Variablen der CCU. :mad:
Gestern mal wieder…

Nach Neustart meiner CCU2 legte mir IPS die Variablen, die ich mit einem Script aus der CCU auslese neu an.
Zum Beispiel hat dann die Variable „Anwesend“ nicht mehr die ID „12345“ sondern eine neue ID, meinetwegen „54321“. :wink:
Somit gehen sämtliche Scripte, die sich einer solchen Variablen bedienen, nicht mehr. :frowning:

Im vergangenem Jahr hatte ich das Problem etwa drei oder viermal.
Und nun schon wieder.:eek:

Kennt jemand das Problem?

Ich verwende IPS 3.4 mit der CCU2.

Gruß

Darklord

Poste doch mal das Skript welches die Variablen ausliest. Bei CCU und/oder IPS sehe ich das Problem nach Deiner Schilderung eher nicht.

Hallo Kronos,

sitze gerade im Büro, kann ich heute Abend gerne machen. :cool:

Allerdings glaube ich nicht dass dies daran liegt.
Dieses Script läuft schon seit einigen Jahren auf dem Rechner.
Könnte etwas mit Win10 zu tun haben, ich bin vor etwa einem Jahr von Win7 auf Win10 umgestiegen.

Es gab / gibt irgendwo im Forum ein Skript, welches tatsächlich Variablen in IPS gelöscht hat, wenn die CCU diese nicht mehr gemeldet hat.

Je nach IPS Version gibt es aber ab 3.1 glaube ich das HomematicExtended Modul von mir. Dieses macht das auf jeden Fall nicht :slight_smile:
Michael

Hallo,

anbei das Script, dieses ist nicht von mir sondern habe ich hier aus dem Forum. :rolleyes:

Edit: Scheint sich um das betreffende Script zu handeln.
Siehe letzten Absatz im Script.

    Nur seltsam dass ich bisher keine Probleme damit hatte...   :confused:
<?
// Variablen vorgeben
$ccu_ip = '111.222.333.444';  // IP der Homematic-CCU
//$ccu_ip = GetValueString(31569 /*[Scripte\Global\Zustände / Moden / Variablen\IP_CCU2]*/ );

$par_id = IPS_GetParent($_IPS['SELF']);
$vars_new[] = $_IPS['SELF'];   // um zu verhindern, 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;
        }
    }
}
?>

Außerdem unterstützt das Script keine Float-Variablen.
Klare Empfehlung: Umsteigen auf das Modul :wink:
Michael

Äääähhhh,

Zitat von Dir:

Achtung! Nur mit IPS4.1 und höher zu nutzen!

Um umzusteigen auf IPS 4 fehlt mir gerade die Zeit. :banghead:

Es gibt noch ein Thread mit dem 3.x Modul.
Bzw. die dll ist auch auf GitHub, einfach das Readme lesen:

Michael

OK, danke…
Hätte vielleicht genauer nachlesen sollen.

Ich danke Euch alle mal… :wink:

Werde das die nächsten Tage mal installieren und Euch natürlich auf dem laufendem halten. :stuck_out_tongue:

Gruß

Darklord