vor allem wer Kinder im Haus hat, will sich vielleicht - z. B. beim Absperren des Hauses - auflisten und per Push-Message senden lassen, in welchen Räumen noch Licht brennt.
Das macht das nachfolgende Script, das beliebig in Programme eingebaut werden kann. Die Vorlage waren ein paar vergleichbare Skripte im Forum, daher Dank an deren Autoren.
Das Script hier setzt voraus, dass
1. Aktoren/Kanäle für Innenlampen (Schalter/Dimmer) alle in das Gewerk "Licht" aufgenommen sind
2. ihnen ein Raum zugeordnet ist
3. dass in der *Raumbeschreibung* der Raumliste ein Klarname steht wie "Wohnzimmer" oder "im Wohnzimmer"
Der Raumname selbst ist beliebig und wird nicht ausgegeben
4. die CCU- oder Raspberrymatic-Version >2.29.22 ist. Sonst muss Contains() mit Find() umschrieben werden.
Das Script gibt die Liste der Räume mit eingeschaltem Licht im string "Nachricht" zur weiteren Verarbeitung aus.
Nur in meinem Beispiel: "Nachricht wird in die SV "Msg.Nachricht" geschrieben und mit "CCU SV Trigger" ein getrenntes Push-Prg, hier zPNP, ausgelöst. Das ist hier auskommentiert.
Mögliche Verbesserungen:
- Wer die Listen der einschlägigen Geräte in den Zeilen 14 und 15 erweitern will: gerne
- Mit HM-IP ist das nicht getestet, weil ich HM-IP nicht habe. Wer das tut und Fehler findet, könnte sich melden.
Grüße, EckartS
Code: Alles auswählen
! Skript.Innenlicht
! Eingeschalte Innenlampen identifizieren
! Mit getrenntem Programm Push-Nachricht versenden. EckartS, 08.2018
! Voraussetzungen:
! 1. Innenlampen alle in das Gewerk "Licht" je ein Raum zugeordnet
! 2. In der *Beschreibung* der Raumnamen steht ein Klarname wie "Wohnzimmer" oder "im Wohnzimmer"
! Der Raumname selbst ist beliebig und wird nicht ausgegeben
! 3. Nur in diesem Berspiel: Die SV "Msg.Nachricht" und "CCU SV Trigger" sind definiert, hier auskommentiert,
! bei mir für ein getrenntes Push-Prg
! Sonst steht im string "Nachricht" die Liste der Räume mit eingeschaltetem Licht zur eigenen Verarbeitung
var sec=dom.GetObject("Licht"); ! ggf. an den Name des Gewerks anpassen
! Listen ggf. um weitere Gerätetypen getrennt mit Kommata oder Leerzeichen erweitern
string schaltaktoren = "HMW-IO-12-Sw14-DR HMW-IO-12-Sw7-DR HM-LC-Sw4-DR HM-LC-Sw1-FM HM-LC-Sw2-FM HM-LC-Sw4-WM HM-LC-Sw4-SM HM-ES-PMSw1-Pl ";
string dimmeraktoren = "HMW-LC-Dim1L-DR HM-LC-Dim1T-FM HM-LC-Dim1TPBU-FM HM-LC-Dim1T-CV HM-LC-Dim2T-SM HM-LC-Dim2L-SM";
! Ausschluss (Kanalbezeichnungen getrennt mit Kommata oder Leerzeichen einfügen)
string except = "JEQ0149028:15 JEQ0713135:18"; ! die hier eingetragenen Kanäle werden ignoriert, auch wenn sie dem Gewerk "Licht" zugeordnet sind
! -- Ab hier nichts ändern --
string i; string list = ""; string x; string Nachricht = ""; string roomdesc;
foreach(i,sec.EnumUsedIDs()){
var item=dom.GetObject(i);
if(item.IsTypeOf(OT_CHANNEL)){
var dev=dom.GetObject(item.Device());
if(schaltaktoren.Contains(dev.HssType())){
var state=item.DPByHssDP("STATE");
if(state.Value()){
x=state.Name().ToString().Replace(".STATE","").Replace("BidCos-Wired.","").Replace("BidCos-RF.","").Replace("HmIP-RF.","").Replace("HmIP-Wired.","");
roomdesc = "";
var room = dom.GetObject(item.ChnRoom());
string sroom=room.Name();
if (sroom <> "") {roomdesc = roomdesc#room.EnumInfo();}
else {sroom = "%3f%3f%3f [" # x # ", kein Raum zugeordnet]";}
if (roomdesc == "") {roomdesc = "im " # sroom;}
if (!except.Contains(x)){
list = list # "- " # roomdesc # "\r\n";
}
}
}
if(dimmeraktoren.Contains(dev.HssType())){
var state=item.DPByHssDP("LEVEL");
if(state.Value()){
x=state.Name().ToString().Replace(".LEVEL","").Replace("BidCos-Wired.","").Replace("BidCos-RF.","").Replace("HmIP-RF.","").Replace("HmIP-Wired.","");
roomdesc = "";
var room = dom.GetObject(item.ChnRoom());
string sroom=room.Name();
if (sroom <> "") {roomdesc = roomdesc#room.EnumInfo();}
else {sroom = "%3f%3f%3f [" # x # ", kein Raum zugeordnet]";}
if (roomdesc == "") {roomdesc = "im " # sroom;}
if (!except.Contains(x)){
list = list # "- " # roomdesc # "\r\n";
}
}
}
}
}
! -- Auf eigene Verwendung hin anpassen -- Erstellung des Nachrichteninhalts
if (list != ""){
Nachricht = "Licht ist noch an\r\n"# list # "\r\n";
! dom.GetObject("Msg.Nachricht").State(Nachricht);
! dom.GetObject("CCU SV Trigger").State(0);
}