Zuerst entschuldige ich mich für die Überschrift, aber mir fiel gerade keine andere Bezeichnung dafür ein :-). Es geht um Lichtaktoren, die noch aktiv sind. Vorweg sei gesagt, dass das Script nicht von mir ist, sondern nur abgewandelt wurde. Ursprünglich ging es um die Anzeige von offenen Fenstern im Homematic Forum. Von Jerome Pech wurde das Script im Anschluss noch etwas veredelt und durch einige Geräte ergänzt.

Zuerst müssen wir eine Variable vom Typ Zeichenkette anlegen. Ich habe Sie “Brennende Lichter” genannt. Die kannst du nennen, wie du möchtest, sofern du im Script ganz unten die Variable ebenfalls änderst.

Außerdem müssen wir ein Gewerk namens “LICHTER” anlegen.

Diesem Gewerk fügen wir nun alle Aktoren hinzu, die Licht schalten können und die später angezeigt werden wollen.

Ich habe in das Script alle Aktoren eingefügt, die bei mir verbaut und für Lichter verantwortlich sind. Du kannst Aktoren (Das sind die Typenbezeichnungen nach “…var dev=dom.GetObject(item.Device());…”) selbstständig hinzufügen, falls du Lichter mit Aktoren schalten solltest, die in der unteren Aufzählung nicht vorhanden sind.

Anschließend einfach das Script in einem Programm alle 5min ausführen lassen. Es geht natürlich auch in kürzeren oder längeren Abständen; Bei mir lief das Script aber alle 5min problemlos durch.

var sec=dom.GetObject("Lichter");
if (sec) {
 string i; string list; list="";
 foreach(i,sec.EnumUsedIDs()) {
  var channel=dom.GetObject(i);
  boolean isOn = false;
  if(channel.IsTypeOf(OT_CHANNEL)) {
   var dev=dom.GetObject(channel.Device());
   if((dev.HssType()=="HM-LC-Sw4-DR") || 
(dev.HssType()=="HM-LC-Sw1-DR") || 
(dev.HssType()=="HM-LC-Sw1PBU-FM") || 
(dev.HssType()=="HM-LC-Dim1T-FM") || 
(dev.HssType()=="HM-LC-Sw2PBU-FM") || 
(dev.HssType()=="HM-LC-Sw1PBU-FM") || 
(dev.HssType()=="HM-LC-Sw1-FM") || 
(dev.HssType()=="HmIP-BSM" ) || 
(dev.HssType()=="HM-LC-RGBW-WM")) {
    var state=channel.DPByHssDP("STATE");
    if (!state) {
     var level=channel.DPByHssDP("LEVEL");
     if (level.Value() > 0) {
      isOn = true;
     }
    } else {
     if(state.Value()) {
      isOn = true;
     }
    }
    if (isOn == true) {
     list=list#channel.Name()#", ";
    }
   }  
  }
 }
 if (list.Length() > 2) {
  list = list.Substr(0,list.Length()-2);
 } else {
  list = "Alles aus :)";
 }
} else {
  list = "FEHLER - GEWERK PRUEFEN!";
}
 
WriteLine(list);
 
dom.GetObject("Brennende Lichter").State(list);

Für die Pushnachrichten-Nutzer (Pushover, Telegram, etc.) können im Anschluss und einem neuen Programm, die brennenden Lampen verschickt werden.

var a = dom.GetObject("Brennende Lichter").Value();
var b = "Folgende Lampen sind noch an: "#a;
if(a.Value()<>"")
  {dom.GetObject("Telegram").State(b);}
    else{};

 

PS: Falls gewünscht, kann man (wie ich), 30 sec. vorher nochmal eben das Programm aufrufen, um die aktuellsten Werte zu haben.

var programObj = dom.GetObject("Script - Brennende Lampen suchen");
programObj.ProgramExecute();

Print Friendly, PDF & Email

Kommentar schreiben