CLICK: Hier ist eine Schnellanleitung mit allen Scripten Schrit für Schritt
Das folgende Script schlägt auf dem Smartphone Alarm, wenn Fenster länger als z.B. 15 Minuten geöffnet ist.
Ich verwende dafür http://www.NotifyMyAndroid.com was bis zu 5 Nachrichten pro Tag kostenlos ist und für beliebig viele Nachrichten nur einmalig 3,88€ kostet.
Für die 3,88€ wird dann aber auch meine ganze Familie benachrichtigt, da die App mit einem Login auf beliebig vielen Androids parallel installiert werden kann.
Das Script kann sehr leicht auf andere Dienste wie Prowl(IOS) oder SMS-Benachrichtigung umgestellt werden, da als "Warnung" nur eine spezielle URL aufgerufen wird.
Das Script läuft bei mir 1 Mal pro Minute.
Es prüft dann, welche Fenster offen sind und speichert die Zeit in einer Systemvariablen.
Sollte ein Fenster länger als 900 Sekunden (15 Minuten) offen stehen, so wird eine Nachricht mit Fensternamen und Öffnungszeit abgesetzt.
Diese Nachricht kommt dann jede Minute, bis das Fenster geschlossen wird.
Notwendig sind nur ein paar wenige Einstellungen:
1. Favoritenliste, in der alle Fenster- und Drehgriffkontakte gespeichert werden. Bei mir : Fav_Fenster
2. Eine Systemvariable, in der die benötigten Infos gespeichert werden. Bei mir : OpenWindowArr
3. Eine Registrierung bei http://www.NotifyMyAndroid.com und dort einen neuen API-Key erstellen. Bei mir: ####Hier den API-Key von NotifyMyAndroid eingeben####
4. Die App NotifyMyAndroid muss natürlich auf dem Smartphone installiert werden
Wer möchte, kann die maximale Lüftungsdauer abhängig von der Außentemperatur machen.
Hierfür muss zusätzlich eine Systemvariable AussenTemperatur erstellt werden in der eine Zahl steht.
Siehe mein Beitrag: http://homematic-forum.de/forum/viewtop ... 93#p171893
Alle weiteren Einstellungen können erst mal übernommen werden und später beliebig angepasst werden.
Code: Alles auswählen
!--------------------------------------------------!
!--------Grundeinstellungen------------------------!
!--------------------------------------------------!
string FavoritenNameFensterkontakte ='Fav_Fenster'; ! Favoritenliste in der alle relevanten Fenster- und Drehgriffkontakte gespeichert werden
string SystemVariableFensterInfo ='OpenWindowArr'; ! Systemvariable, in der gespeichert wird, wann welches Fenster geöffnet wurde
!--------------------------------------------------!
!---------NotifyMyAndroid Einstellungen------------!
!--------------------------------------------------!
string NotifyMyAndroidApiKey='####Hier den API-Key von NotifyMyAndroid eingeben####';
integer NotifyMyAndroidMsgPriority=2; !Höchste Priorität = 2 Niedrigste Priorität = -2
string NotifyMyAndroidMsgApplication='FensterAlarm'; ! Einstellung erst mal so lassen und später ändern!
string NotifyMyAndroidMsgDescription='15Min_FensterTimeout'; ! Einstellung erst mal so lassen und später ändern!
!--------------------------------------------------!
!---------Timeout Einstellungen--------------------!
!--------------------------------------------------!
integer maxSecondsOpenWindow =900; ! In Sekunden: Danach wird Alarm ausgelöst
!--- Wenn es eine SystemVariable AussenTemperatur gibt, Sekunden automatisch anpassen.
!--- Falls die SystemVariable AussenTemperatur nicht vorhanden ist,
!--- gilt die oben definierte Zeit maxSecondsOpenWindow
var AussenTemperatur=dom.GetObject('AussenTemperatur');
if(AussenTemperatur.Count()){
real Temperatur1=AussenTemperatur.Variable();
if(Temperatur1>19){
!---Bei mehr als 19Grad darf auch beliebig lange gelüftet werden!
quit;
}
else{
if(Temperatur1>15){
!---Bei mehr als 15Grad darf 15 Minuten gelüftet werden!
maxSecondsOpenWindow=900;
}else{
if(Temperatur1>8){
!---Bei mehr als 8Grad darf 10 Minuten gelüftet werden!
maxSecondsOpenWindow=600;
}else{
!---Bei weniger als 8Grad darf nur 5 Minuten gelüftet werden!
maxSecondsOpenWindow=300;
}
}
}
}
WriteLine(maxSecondsOpenWindow);
!---Die Möglichkeiten Infos zu speichern sind begrenzt. Deswegen benötigen
!---wir 2 Trennzeichen, die nicht im Namen der Fensterkontakte vorkommen dürfen.
string SplitValue1='$'; ! Max 1 Zeichen - Wird aus Namen des Fensterkontakts entfernt
string SplitValue2='%'; ! Max 1 Zeichen - Wird aus Namen des Fensterkontakts entfernt
integer offeneFenster = 0;
string newString='';
string itemID;
string item1;
string itemTMP='';
string OpenWindowWarnList='';
var myFavorites = dom.GetObject(FavoritenNameFensterkontakte);
var OpenWindowArr=dom.GetObject(SystemVariableFensterInfo);
var tNow=system.Date('%F %X').ToTime().ToInteger();
foreach(itemID, myFavorites .EnumUsedIDs()) {
var item = dom.GetObject(itemID);
if (item.IsTypeOf(OT_CHANNEL)) {
var device = dom.GetObject(item.Device());
! HM-Sec-SC Tuerfensterkontakte
! HM-Sec-SC-2 Tuerfensterkontakte 2 - Offensichtlich gibt es jetzt eine Version mit -2
! HM-Sec-RHS Fenster-Drehgriffsensoren
if ((device.HssType() == "HM-Sec-SC") ||
(device.HssType() == "HM-Sec-SC-2") ||
(device.HssType() == "HM-Sec-RHS")) {
boolean notFound=true;
integer newTime=0;
if(item.State() > 0){offeneFenster =offeneFenster +1;}
foreach(item1,OpenWindowArr.Variable().Split(SplitValue2)){
if(notFound){
if(item1.StrValueByIndex(SplitValue1,0)==itemID){
notFound=false;
if(item.State() > 0){
if( item1.StrValueByIndex(SplitValue1,1)=='0'){
newTime=tNow;
}else {
newTime=item1.StrValueByIndex(SplitValue1,1).ToInteger();
if((tNow - newTime) > maxSecondsOpenWindow){
if(OpenWindowWarnList.Length()>0){OpenWindowWarnList= OpenWindowWarnList+SplitValue2;}
string itemName='';
string itemName1='';
foreach(itemTMP,item.Name().Split(SplitValue1)){itemName1=itemName1+itemTMP;}
foreach(itemTMP,itemName1.Split(SplitValue2)){itemName=itemName+itemTMP;}
OpenWindowWarnList=OpenWindowWarnList+ itemID + SplitValue1 +(tNow - newTime).ToString()+ SplitValue1+ itemName;
}
}
}else{
newTime=0;
}
}
}
}
if(newString.Length()>0){
newString = newString + SplitValue2;
}
newString = newString + itemID + SplitValue1 + newTime;
}
}
}
OpenWindowArr.Variable(newString);
!Wer möchte, kann die Liste der offenen Fenster in
!einer Systemvariable speichern um sie evtl. anderweitig zu nutzen
dom.GetObject('OpenWindowWarnList').Variable(OpenWindowWarnList);
if(OpenWindowWarnList.Length()>0){
string msgEvent='';
foreach(itemTMP,OpenWindowWarnList.Split(SplitValue2)){
newTime=itemTMP.StrValueByIndex(SplitValue1,1).ToInteger();
string xName=itemTMP.StrValueByIndex(SplitValue1,2);
msgEvent = msgEvent + xName+ ' - ' + ((newTime/60).ToInteger()+1).ToString()+' Minuten;';
}
string urlEncodeEvent='';
string urlEncodeEvent1='';
foreach(itemTMP,msgEvent.Split(' ')){if (urlEncodeEvent1.Length()>0){urlEncodeEvent1=urlEncodeEvent1+'%20';}urlEncodeEvent1=urlEncodeEvent1+itemTMP;}
foreach(itemTMP,urlEncodeEvent1.Split('&')){if (urlEncodeEvent.Length()>0){urlEncodeEvent=urlEncodeEvent+'%26';}urlEncodeEvent=urlEncodeEvent+itemTMP;}
string urlEncodeDescription='';
string urlEncodeDescription1='';
foreach(itemTMP,NotifyMyAndroidMsgDescription.Split(' ')){if (urlEncodeDescription1.Length()>0){urlEncodeDescription1=urlEncodeDescription1+'%20';}urlEncodeDescription1=urlEncodeDescription1+itemTMP;}
foreach(itemTMP,urlEncodeDescription1.Split('&')){if (urlEncodeDescription.Length()>0){urlEncodeDescription=urlEncodeDescription+'%26';}urlEncodeDescription=urlEncodeDescription+itemTMP;}
string urlEncodeApplication='';
string urlEncodeApplication1='';
foreach(itemTMP,NotifyMyAndroidMsgApplication.Split(' ')){if (urlEncodeApplication1.Length()>0){urlEncodeApplication1=urlEncodeApplication1+'%20';}urlEncodeApplication1=urlEncodeApplication1+itemTMP;}
foreach(itemTMP,urlEncodeApplication1.Split('&')){if (urlEncodeApplication.Length()>0){urlEncodeApplication=urlEncodeApplication+'%26';}urlEncodeApplication=urlEncodeApplication+itemTMP;}
string url = 'http://www.notifymyandroid.com/publicapi/notify' +
'?apikey=' + NotifyMyAndroidApiKey +
'&application='+ urlEncodeApplication +
'&event='+ urlEncodeEvent +
'&description=' + urlEncodeDescription+
'&priority=' + NotifyMyAndroidMsgPriority;
string stderr;
string stdout;
system.Exec("wget -q -O - "#url, &stdout, &stderr);
}