Offene Fenster in String

Aus Wikimatic
Wechseln zu: Navigation, Suche

Fenster offen als String

Mit diesem Skript kann eine Meldung "Die Fenster x, y und z sind noch offen." zusammengebaut werden. Dazu werden alle Fensterkontakte im Gewerk "Fenster_Tueren" abgefragt. Das Skript wird in der WebGUI in eine DANN Bedingung eingebaut. Die dazugehörige WENN Bedingung sollte günstigerweise auf die Änderung einer Systemvariable triggern, welche bei offenen Fenster gesetzt wird. So vermeidet man größere WENN Ketten bei mehreren Fenstern. Das vordefinierte Gewerk "Verschluss" funktioniert manchmal nicht, da es ein verstecktes Objekt "Verschluss" gibt und dom.GetObject im Falle das zwei gleichnamige Objekte existieren nichts zurück liefert. Deshalb muss man das Gewerk umbenennen oder ein neues erstellen. Auf ähnliche Art und Weise können natürlich auch Türen usw. abgefragt werden. Dazu muss die if Bedingung mit dem HssType angepasst werden.

   boolean firstWindow = true;

   string textReplace = "Fenster ";
   integer textReplaceLength = textReplace.Length();

   string i;
   string list = "";

   var sec=dom.GetObject("Fenster_Tueren");
   string lastWindow = " unknown ";
   integer numberOfOpenWindows = 0;
   foreach(i,sec.EnumUsedIDs())
   {
     var item=dom.GetObject(i);
     if(item.IsTypeOf(OT_CHANNEL))
     {
       var dev=dom.GetObject(item.Device());
       if((dev.HssType()=="HM-Sec-SCo") || (dev.HssType()=="HM-Sec-SC-2"))
       {
          var state=item.DPByHssDP("STATE");
          if(state.Value())
          {
             numberOfOpenWindows=numberOfOpenWindows+1;
             lastWindow = i;
          }
       }
     }
   }

   if (numberOfOpenWindows > 1)
   {
       list="Die Fenster "; 
   }
   else
   {
       list="Das Fenster ";
   }


   sec=dom.GetObject("Fenster_Tueren");
   foreach(i,sec.EnumUsedIDs())
   {
       var item=dom.GetObject(i);
       if(item.IsTypeOf(OT_CHANNEL))
       {
           var dev=dom.GetObject(item.Device());
           if((dev.HssType()=="HM-Sec-SCo") || (dev.HssType()=="HM-Sec-SC-2"))
           {
               var state=item.DPByHssDP("STATE");
               if(state.Value())
               {
                   string itemName = dev.Name().ToString();
                   ! entferne den textReplace 
                   if(itemName.Length() >= textReplaceLength)
                   {
                       itemName = itemName.Substr(textReplaceLength, itemName.Length() - textReplaceLength);
                   }
                   
                   if (firstWindow == false)
                   {
                       if (i == lastWindow)
                       {
                           list=list+" und ";
                       }
                       else
                       {
                           list=list+", ";
                       }
                   }
                   else
                   {
                       firstWindow = false;
                   }
                   list=list+itemName;
               }
           }
       }
   }

   if (numberOfOpenWindows > 1)
   {
       list=list+" sind noch offen ..."; 
   }
   else
   {
       list=list+" ist noch offen ...";
   }
   

Wenn CUxD installiert ist und ein Enigma2 Empfänger vorhanden ist, kann durch folgende ergänzte Skriptzeile eine Nachricht auf dem TV angezeigt werden.

   string url="'http://x.x.x.x/web/message?text=";
   url=url+list+"&type=3&timeout=10'";
   dom.GetObject("CUxD.CUX2801999:1.CMD_EXEC").State("wget -q -O - "#url);