In der DOKU habe ich schon was zu IPS_CreateEvent + SetEvent durchgelesen.
Dazu finde ich leider aber keine Möglichkeit, mit der ich in einem Skript ein Ereignis neu anlegen kann mit Startzeitpunkt in X Minuten. Das Ereignis sollte nach Ausführung deaktiviert werden.
Hat jemand dies vielleicht umgangen mit Berechnung der aktuellen Uhrzeit + x Minuten und der Anlage über eine einmalige Uhrzeit???
Ich lasse über eine Windberechnung meine Jalousien bei zu starkem Wind hochfahren.
Nach 45 Minuten oder auch 60 Minuten möchte ich die Jalousien wieder auf den alten Stand zurückfahren.
(Eine erneute Windprüfung wird natürlich vorgenommen)…
Bisher ist das mit einem SLEEP gelöst und eine hochsetzung in der PHP.INI :-(.
Hier das Zurückfahrskript mit dem SLEEP.
Bisher schaut das Zurückfahrskript so aus:
<?
// Zurückfahrskript
$windauslesen=GetValueInteger(57196 /*[Wind\DS2423 Windzaehler\Zähler Wind \Wind m/s]*/);
if ($windauslesen>=14)//Prüfung ob Wind immer noch da ist, falls ja goto exit:
{
goto sprungmarke_exitfalse;
}
else
{
sleep(2700); // Es wird 45 Minuten gewartet zyklisches Ere. bis Jalousien wieder runter fahren.
$zurueckkueche=GetValueInteger(43159 /*[Raffstoren\1.Küche Raffstore\Alter Stand]*/);
$zurueckessen=GetValueInteger(29601 /*[Raffstoren\2.Essen Raffstore\Alter Stand]*/);
$zurueckwohnen=GetValueInteger(20320 /*[Raffstoren\3.Wohnen Raffstore\Alter Stand]*/);
ZW_DimSet(31642 /*[Raffstoren\1.Küche Raffstore]*/, $zurueckkueche); // zurückfahren der Jalousien auf ausgangsposition
sleep(6);
ZW_DimSet(48945 /*[Raffstoren\2.Essen Raffstore]*/, $zurueckessen); // zurückfahren der Jalousien auf ausgangsposition
sleep(6);
ZW_DimSet(15030 /*[Raffstoren\3.Wohnen Raffstore]*/, $zurueckwohnen); // zurückfahren der Jalousien auf ausgangsposition
SetValueInteger(41711 /*[Raffstoren\hochgefahren]*/, 0); //Rücksetzung auf nicht ausgeführt
goto sprungmarke_exittrue;
}
sprungmarke_exitfalse:
setValueBoolean(17469 /*[Raffstoren\Zurueckfahrskript durchlaufen]*/, FALSE);
goto sprungmarke_exit;
sprungmarke_exittrue:
SetValueBoolean(17469 /*[Raffstoren\Zurueckfahrskript durchlaufen]*/, TRUE);
$uhrzeit = date("H:i.s");
$mailcontent = "Der Wind ist zurueckgegangen. Deshalb fahren die Jalousien zurueck um: $uhrzeit .
Windstarke nur noch: $windauslesen m/s .
Die Jalousien fahren zurueck auf:
Kueche: $zurueckkueche %, Essen: $zurueckessen %, Wohnen: $zurueckwohnen %
(100% oben, 0% unten)";
SMTP_SendMail(26464 /*[sonstiges\E-Mail senden (SMTP)]*/, "Wind hat abgenommen - Jalousien fahren zurueck", "$mailcontent");
goto sprungmarke_exit;
sprungmarke_exit:
return;
?>
wie oben schon geschrieben, geht das mit den Scripttimer, hier noch ein Beispiel:
if ( $_IPS['EVENT'] == 12345) // Nummer von dem Auslöser.
{
IPS_SetScriptTimer($_IPS['SELF'], 3600); // erstellt und setzt den Scripttimer unterhalb dieses Scriptes
}
// und dann umgekehrt :-)
if ( $_IPS['EVENT'] == 23456) // Nummer des ScriptTimers.
{
// Hier steht das Programm welches nach 60 min ausgeführt werden soll.
IPS_SetScriptTimer($_IPS['SELF'], 0); // deaktiviert und setzt den Scripttimer wieder auf 0
}
Um es richtig zu verstehen?
Ich habe z.B. ein Ereignis dass mir eine 1 in eine Integer Variable schreibt, wenn die Jalousien - aufgrund von WIND - hochgefahren sind.
Das könnte ich verwende als AUSLÖSER für den Skripttimer.
Zu aller erst setze ich in dem ZURÜCKFAHRSKRIPT dann den Timer auf X Sekunden.
Ich hoffe meine IF Logik ist korrekt?, wenn der wind immer noch zu hoch ist, würde der Timer später (also nach weiteren 60 Minuten) nochmals durchlaufen werden.
Woher weiss ich die Nummer des Skripttimers? Ist das diesselbe Nummer wie die Auslöser Nr ?
if ( $_IPS[‚EVENT‘] == 20565) // Nummer des ScriptTimers
…
if ( $_IPS[‚EVENT‘] == 20565) // Nummer des ScriptTimers.
<?
// Zurückfahrskript
if ( $_IPS['EVENT'] == 20565) // Nummer von dem Auslöser.
{
IPS_SetScriptTimer($_IPS['SELF'], 3600); // erstellt und setzt den Scripttimer unterhalb dieses Scriptes
}
$windauslesen=GetValueInteger(57196 /*[Wind\DS2423 Windzaehler\Zähler Wind \Wind m/s]*/);
if ($windauslesen>=14)//Prüfung ob Wind immer noch da ist, falls ja goto exit:
{
goto sprungmarke_exitfalse;
}
else
{
if ( $_IPS['EVENT'] == 23456) // Nummer des ScriptTimers.
{
$zurueckkueche=GetValueInteger(43159 /*[Raffstoren\1.Küche Raffstore\Alter Stand]*/);
$zurueckessen=GetValueInteger(29601 /*[Raffstoren\2.Essen Raffstore\Alter Stand]*/);
$zurueckwohnen=GetValueInteger(20320 /*[Raffstoren\3.Wohnen Raffstore\Alter Stand]*/);
ZW_DimSet(31642 /*[Raffstoren\1.Küche Raffstore]*/, $zurueckkueche); // zurückfahren der Jalousien auf ausgangsposition
sleep(6);
ZW_DimSet(48945 /*[Raffstoren\2.Essen Raffstore]*/, $zurueckessen); // zurückfahren der Jalousien auf ausgangsposition
sleep(6);
ZW_DimSet(15030 /*[Raffstoren\3.Wohnen Raffstore]*/, $zurueckwohnen); // zurückfahren der Jalousien auf ausgangsposition
SetValueInteger(41711 /*[Raffstoren\hochgefahren (0=nein)]*/, 0); //Rücksetzung auf nicht ausgeführt
IPS_SetScriptTimer($_IPS['SELF'], 0);// deaktiviert und setzt den Scripttimer wieder auf 0
goto sprungmarke_exittrue;
}
sprungmarke_exitfalse:
setValueBoolean(17469 /*[Raffstoren\Zurueckfahrskript durchlaufen]*/, FALSE);
goto sprungmarke_exit;
sprungmarke_exittrue:
SetValueBoolean(17469 /*[Raffstoren\Zurueckfahrskript durchlaufen]*/, TRUE);
$uhrzeit = date("H:i.s");
$mailcontent = "Der Wind ist zurueckgegangen. Deshalb fahren die Jalousien zurueck um: $uhrzeit .
Windstarke nur noch: $windauslesen m/s .
Die Jalousien fahren zurueck auf:
Kueche: $zurueckkueche %, Essen: $zurueckessen %, Wohnen: $zurueckwohnen %
(100% oben, 0% unten)";
SMTP_SendMail(26464 /*[sonstiges\E-Mail senden (SMTP)]*/, "Wind hat abgenommen - Jalousien fahren zurueck", "$mailcontent");
goto sprungmarke_exit;
sprungmarke_exit:
return;
?>