Das erste Programm dient zum Erkennen von offenen oder gekippten Fenstern beim Abschließen der Haustür.
Und das zugehörige Skript:
Code: Alles auswählen
! Meldung Fenster/Türen schließen
! Version 2.9.2, Autor: dtp
! Liste der Gewerke für die Türen- und Fenster-Sensoren (trennen mit "\t")
string tradesList = "Verschluss";
! Listen geöffneter und gekippter Fenster und Türen, die nicht berücksichtigt werden sollen (trennen mit "\t")
string exTiltList = "UG Keller Fenster"; ! gekippte Fenster und Türen
string exOpenList = ""; ! geöffnete Fenster und Türen
! Schlüsselbegriffe von Fenstern und Türen mit Priorität 2 (trennen mit "\t")
string highPrioKeywordsList = "EG\tUG";
! Namen der verwendeten Systemvariablen
string svPushText = "CCU SV Push Text"; ! gem. zPNS-xx, obligatorisch
string svPushPrio = "CCU SV Push Prio"; ! gem. zPNS-xx, obligatorisch
string svPushoverSound = "CCU SV Pushover Sound"; ! gem. zPNS-Po, optional
! Name des zentralen Push-Nachrichten-Programms
string zPNP = "CCU PRG Push-Nachrichten"; ! obligatorisch
! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################
! +++++ Deklaration weiterer Variablen +++++
var device;
string trade; string index; string list = ""; string stateList = ""; string message; string highPrioKeyword;
integer prio = 0;
! +++++ Sound für Pushover-Nachricht +++++
if(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).State("alien");}
! +++++ Auslesen der Fenster- und Türenzustände und Erzeugen einer Liste +++++
foreach(trade, tradesList){
foreach(index, dom.GetObject(ID_FUNCTIONS).Get(trade).EnumUsedIDs()){
if(dom.GetObject(index).IsTypeOf(OT_CHANNEL)){
device = dom.GetObject(dom.GetObject(index).Device());
if(!exTiltList.Contains(device.Name())){
if((device.HssType() == "HM-Sec-RHS") || (device.HssType() == "HmIP-SRH")){
if(dom.GetObject(index).DPByHssDP("STATE").Value() == 1){
list = list#"\n- "#device.Name()#"<font color=orange> gekippt</font>.";
stateList = stateList#dom.GetObject(index).DPByHssDP("STATE").Value();
}
}
}
if((!exOpenList.Contains(device.Name())) || (!exOpenList.Contains((device.Channel()).Name()))){
if((device.HssType() == "HM-Sec-RHS") || (device.HssType() == "HmIP-SRH")){
if(dom.GetObject(index).DPByHssDP("STATE").Value() == 2){
list = list#"\n- "#device.Name()#"<font color=red> offen</font>.";
stateList = stateList#dom.GetObject(index).DPByHssDP("STATE").Value();
}
}
if((device.HssType() == "HM-Sec-SC") || (device.HssType() == "HM-Sec-SC-2") || (device.HssType() == "HM-Sec-SCo") || (device.HssType() == "HMIP-SWDO")){
if((dom.GetObject(index).DPByHssDP("STATE").Value() == 1) || (dom.GetObject(index).DPByHssDP("STATE").Value() == true)){
list = list#"\n- "#device.Name()#"<font color=red> offen</font>.";
stateList = stateList#"2";
}
}
if((device.HssType() == "HmIPW-FIO6")){
if(dom.GetObject(index).DPByHssDP("STATE").Value() == true){
list = list#"\n- "#(device.Channel()).Name()#"<font color=red> offen</font>.";
stateList = stateList#"2";
}
}
}
}
}
}
! +++++ Setzen der Priorität in Abhängigkeit vom Zustand der Fenster und Türen sowie der Schlüsselbegriffe +++++
if(stateList.Contains("2")){
foreach(highPrioKeyword, highPrioKeywordsList){
if((list.Trim().StrValueByIndex("\n", stateList.Trim().Find("2"))).Contains(highPrioKeyword)){prio = 2; break;}
}
if(prio != 2){prio = 1;}
}
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State(prio);
! +++++ Erzeugen der Nachricht +++++
if(prio == 2){message = "<font color=red>Achtung, Fenster/Türen schließen!</font>";}
else{message = "<font color=orange>Achtung, Fenster/Türen schließen!</font>";}
if(list != ""){
message = message#list;
! +++++ zPNP ausführen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
}
Hier eine Beispiel für eine entsprechende Push-Nachricht (siehe roter Rahmen).
Das zweite Programm verwende ich zum Erfassen sämlticher Fenstern und Türen des Hauses, die während der Abwesenheit betätigt werden könnten.
Das zugehörige Skript:
Code: Alles auswählen
! Meldung Fenster in Abwesenheit betätigt
! Version 2.2.2, Autor: dtp
! Namen der verwendeten Systemvariablen
string svPushText = "CCU SV Push Text"; ! gem. zPNS-xx, obligatorisch
string svPushPrio = "CCU SV Push Prio"; ! gem. zPNS-xx, obligatorisch
string svPushoverSound = "CCU SV Pushover Sound"; ! gem. zPNS-Po, optional
! Name des zentralen Push-Nachrichten-Programms
string zPNP = "CCU PRG Push-Nachrichten"; ! obligatorisch
! #####################################################################
! ##### ab hier bitte keine weiteren Einstellungen mehr vornehmen #####
! #####################################################################
! +++++ Deklaration weiterer Variablen +++++
string message;
var source = dom.GetObject("$src$");
var device = dom.GetObject(source.Channel());
! +++++ Setzen der Priorität für die Push-Nachricht +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushPrio)).State("1");
! +++++ Sound für Pushover-Nachricht +++++
if(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)){(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushoverSound)).State("alien");}
! +++++ Erzeugen der Nachricht +++++
if(source.Value() == 0){
message = "<font color=red>Achtung, "#device.Name()#" wurde in Abwesenheit geschlossen.</font>";
}
if(source.Value() == 1){
message = "<font color=red>Achtung, "#device.Name()#" wurde in Abwesenheit gekippt.</font>";
}
if(source.Value() == 2){
message = "<font color=red>Achtung, "#device.Name()#" wurde in Abwesenheit geöffnet.</font>";
}
! +++++ zPNP ausführen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
Bis dann,
Thorsten