Hallo Thomas,
Genau das mach ich ja, nur versuche ich in einem Script alle Fenstergriffe abzufragen. Hab das wohl im ersten Post unterschlagen oder nicht richtig ausgedückt. Somit wird, wenn ein Fenster geschlossen wird, das Script ausgelöst und eine Meldung für alle noch anderen offenen Fenster ausgegeben. Genau das möchte ich verhindern.
Hier mal das komplette Script. Bin auch für andere Lösungen offen.
<?
// Wenn ein Fensterzu lange offen ist wird ein "Alarm" in Form einer Sprachausgabe ausgelöst.
// Dabei wird der Temperaturunterschied zur Aussentemperatur berücksichtigt. Je grösser der Temperaturunterschied umso kürzer werden die Lüftungszeiten.
// Querlüften wird vorausgesetzt.
$offsetgmt = (date("Z")); // Offset zur GMT in Stunden (date("Z")/3600) = (date("O")/100) siehe http://php.net/manual/de/function.date.php
echo "gmtoffset ".$offsetgmt."
";
$timeH = date("H:i",time());
$time = time();
echo $time." - ".date("H:i",time())."
";
// Mangels flächendeckender Temperatursensoren erst mal jahreszeitenabhängig.
if (date("n",time())== 12 or date("n",time())== 1 or date("n",time())== 2) // dez - jan - feb // n ist die Monatszahl ohne führende Null
{$alarmschwelle = 5*60;} // 5 Minuten
elseif (date("n",time())== 11 or date("n",time())== 3) // nov - mar
{$alarmschwelle = 10*60;} // 10 Minuten
elseif (date("n",time())== 10 or date("n",time())== 4) // okt - apr
{$alarmschwelle = 15*60;} // 15 Minuten
elseif (date("n",time())== 9 or date("n",time())== 5) // sep - mai
{$alarmschwelle = 20*60;} // 20 Minuten
elseif (date("n",time())== 8 or date("n",time())== 6 or date("n",time())== 7) // aug - jun - jul
{$alarmschwelle = 25*60;} // 25 Minuten
//test alarmschwelle
$alarmschwelle = 10; // sekunden
echo "Alarmschwelle ".$alarmschwelle."
";
// zeitpunkt wann das fenster geöffent wurde
$Objects = IPS_GetChildrenIDs(46582 /*[WFs\wha\Übersicht\Offene Fenster und Türen]*/ );
$ScriptID = 30868 /*[Logisch\Alarme\FensterTueren\Fenster-DG-WC]*/;
$AnzOffen = 0;
foreach ($Objects as $CurrentObjectID)
{
$Object = IPS_GetObject($CurrentObjectID);
if ($Object['ObjectType'] == 6)
{
//Zustand und Dauer erfassen und ggf Alarm ausgeben
$Link = IPS_GetLink($CurrentObjectID);
// print_r($Link);
$LinkVar = IPS_GetVariable($Link['TargetID']);
// print_r($LinkVar);
$LinkValue = GetValue($Link['LinkChildID']);
$LinkAktua = $LinkVar['VariableChanged'];
$LinkName = IPS_GetName($CurrentObjectID);
echo $LinkName."
";
$OffenSeit = $time - $LinkVar['VariableChanged'];
// echo "Link Wert ".$LinkValue."
";
if ($LinkValue <> 1)
{$AnzOffen++;} // Variablen zählen
$LinkAkt = GetValue($Link['LinkChildID']);
if ($LinkValue <> 1 and $LinkAktua < $time - $alarmschwelle)
{
echo date("H:i",$time - $alarmschwelle)."
";
echo "alarm
";
echo "Aktualisiert ".$LinkAktua." offen seit ".date("H:i",$OffenSeit-$offsetgmt)."
";
// Webfronts
$WFC_W = 36122 /*[Wolf]*/ ;
$WFC_S = 58027 /*[Sonja]*/ ;
$WFC_SH = 37821 /*[HandyS]*/;
// PushNotifications auf Androids
WFC_PushNotification($WFC_W, 'Warnung', $LinkName.' ist seit '.date("H:i",$OffenSeit-$offsetgmt).' offen !', '', 0);
// WFC_PushNotification($WFC_S, 'Warnung', 'Fenster '.'DG WC'.' ist seit '.date("H:i",$OffenSeit-$offsetgmt).' offen !', '', 0);
// WFC_PushNotification($WFC_SH, 'Warnung', 'Fenster '.'DG WC'.' ist seit '.date("H:i",$OffenSeit-$offsetgmt).' offen !', '', 0);
// WF Popup Ausgaben
// WFC_SendPopup($WFC_W, "Warnung", "Fenster "."DG WC"." ist seit über ".date("H:i",$OffenSeit-$offsetgmt)." Stunden offen !");
/* WFC_SendPopup($WFC_S, "Warnung", "Fenster "."DG WC"." ist seit über ".date("H:i",$OffenSeit-$offsetgmt)." Stunden offen !");
WFC_SendPopup($WFC_SH, "Warnung", "Fenster "."DG WC"." ist seit über ".date("H:i",$OffenSeit-$offsetgmt)." Stunden offen !");
*/
// --- audioNotification senden // funktioniert nicht
//WFC_AudioNotification($WFC_W, 'Alarm!', 39707 /*[Logisch\Alarme\Ausgaben\Sirene\Alarm_01.mp3]*/ ); //55541 ist die ID des Media Objekts in IP-Symcon
//WFC_AudioNotification($WFC_W, 'Alarm!', 50487 /*[Logisch\Alarme\Ausgaben\Sirene\Alarm_01.wav]*/ ); //55541 ist die ID des Media Objekts in IP-Symcon
}
else
{
echo "kein alarm
";
}
/*Event anlegen falls noch nicht vorhanden*/
$EventName = "LinkID: ".$CurrentObjectID." ObjectID: ".$Link['LinkChildID'];
$EventID = @IPS_GetEventIDByName($EventName, $ScriptID);
if ($EventID === false)
{
$EventID = IPS_CreateEvent(0);
IPS_SetName($EventID, $EventName);
IPS_SetEventTrigger($EventID, 1, $Link['LinkChildID']);
// IPS_SetEventTriggerValue($EventID, '<>1');
IPS_SetParent($EventID, $ScriptID);
IPS_SetEventActive($EventID, true);
}
}
}
echo "Anzahl offen ".$AnzOffen."
";
if ($AnzOffen > 0)
{IPS_SetScriptTimer($_IPS['SELF'], 60);}
else
{IPS_SetScriptTimer($_IPS['SELF'], 0);}
IPS_RunScript (40204 /*[Logisch\FensterTüren\HC\HC Fenster u Türen]*/);
?>