Überprüfen, ob ein Fenster geöffnet ist (via Links)

  1. Ein Skript erstellen und von unter per Copy&Paste befüttern.
  2. Alle Variablen, die einen Fensterstatus angeben per Link unterhalb des Skriptes verlinken.
  3. Skript ausführen.
  4. Entweder Ereignisse auf alle Status hinzufügen (aufwendig, aber toll), oder Skript alle x Sekunden ausführen (simpel, aber mehr CPU-Verbrauch)

Der Clou ist, dass ihr nichts am Skript ändern müsst, wenn neue Fenster hinzukommen.


<?

 $offen = false;
 foreach(IPS_GetChildrenIDs($_IPS['SELF']) as $id) {
  if(IPS_LinkExists($id)) {
    $link = IPS_GetLink($id);
    if(IPS_VariableExists($link['TargetID'])) {
     $variable = IPS_GetVariable($link['TargetID']);
     switch(GetProfileName($variable)) {
      case "~Window.Hoppe":
        if(GetValue($link['TargetID']) == 0 || GetValue($link['TargetID']) == 2) {
         $offen = true;
       }
      break;
      case "~Window.HM":
        if(GetValue($link['TargetID']) == 1 || GetValue($link['TargetID']) == 2) {
         $offen = true;
       }
      break;
      case "~Window.Reversed":
        if(!GetValue($link['TargetID'])) {
         $offen = true;
       }
      break;
      default:
        if(GetValue($link['TargetID'])) {
         $offen = true;
       }
      break;
     }
     if($offen) {
      break;
     }
    }
  }
 }
 
 SetValue(CreateVariableByIdent($_IPS['SELF'], "STATUS", "Fensterstatus", "~Window", 0), $offen);

function GetProfileName($variable) {
 if($variable['VariableCustomProfile'] != "")
  return $variable['VariableCustomProfile'];
 else
  return $variable['VariableProfile'];
}

function CreateVariableByIdent($id, $ident, $name, $profile, $type)
 {
     $vid = @IPS_GetObjectIDByIdent($ident, $id);
     if($vid === false)
     {
         $vid = IPS_CreateVariable($type);
         IPS_SetParent($vid, $id);
         IPS_SetName($vid, $name);
         IPS_SetIdent($vid, $ident);
         IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']);
         IPS_SetVariableCustomProfile($vid, $profile);
     }
     return $vid;
}

?>

paresy

Schönes Script, geht leider nicht so ganz. Es zeigt bei mir immer geöffnet an. Braucht man dazu die neueste Beta oder müsste die Aktuelle reichen? Genaueres probieren kann ich erst heute Abend.

Bei mir funkt es richtig

Was für Fenstersensoren hast du? Vielleicht hab ich ja irgendein Fensterprofil vergessen :slight_smile:

paresy

Gerade eingespielt und getestet.

HM funktioniert!

Tip Top, danke paresy!

Ich habe mehrere eigene Profile. Wenn das Skript auf ein Link mit unbekannten Profil stößt arbeitet es den Rest anscheinend nicht ab. Ich muss noch weiter schauen. Aber Später…

Moin…

… in diesem Post habe ich meine Variante zum Fensterstatus gepostet. Ist von paresy inspiriert, jedoch wollte ich mir die Links ersparen. Es werden nur Ereignisse von den FK-Variablen benötigt.

Fensterstatus abfragen und in String schachteln

Gruß,
Peter

Habe mal versucht den case für die FHT´s mit unterzubringen, was mir aber irgendwie nicht gelingt, status bleibt immer geschlossen.
Kommt mir vor als wenn er das Profil nicht korrekt ermitteln kann, da der case nie eintrifft.
Jemand eine Idee?


      case "~Window":
        if(GetValue($link['TargetID']) == 1 ) {
         $offen = true;
        }
      break;

Erledigt, Links falsch eingeordnet :o