höchstwahrscheinlich bin ich wieder mal zu kompliziert unterwegs.
Ich möchte eine Minute vor einem zylischen Ereignis per Sprache benachrichtigt werden.
Das Script habe ich mal so gebaut:
Ich prüfe minütlich per Unixtimestamp…
Gibt es eine einfachere Möglichkeit ?
Schöner wäre es zB. wenn das Ereignis „geändert/bearbeitet“ wurde, ein Actionscript zu starten und ein weiteres Ereignis (einfach eine Minute zuvor) erstellt, das ein Benachrichtigungsscript ausführt ?
<?php
// Jalousien schließen in einer Minute
$EreignisID = 49303;
$EreignisInfo = IPS_GetEvent($EreignisID);
$NextRun = $EreignisInfo['NextRun'];
#echo "Nächste Laufzeit: " . $NextRun . "
";
if ($NextRun > 0) {
$BeforeXMinutes = $NextRun - (60*2);
#echo "X Minuten vorher: " . $BeforeXMinutes . "
";
#echo "Unix Timestamp: " . time() . "
";
if (time() > $BeforeXMinutes ){
Send_Message();
IPS_SetEventActive(57096, false);
}
}
function Send_Message() {
//Globale Variablen
include("15096.ips.php");
//TextVariables
SetValueString($Text_Mail, "");
SetValueString($Text_Sprache, "Hallo, die Jalousien werden in einer Minute geschlossen.");
SetValueString($Text_Webfront, "");
SetValueString($Text_Telegram, "");
IPS_RunScript($Benachrichtigung);
}
Installiere aus dem Store das ‚Universal Ereignis‘ damit kannst du ein Script bei Veränderungen eines zyklischen Ereignis starten.
Dann mit NextRun die nächste Zielzeit ermitteln und den eigenen Timer auf eine Minute vorher stellen.
@Senior, natürlich eine gute Idee, jedoch passt das nicht zu meiner Anforderung, da ich das zykliche Ereignis „anpassbar“ im Webfront habe, und ich möchte nicht die Zeit für Benachrichtigung, sondern zu Jalousie schliessen dort einstellen können.
von der Soll-zeit z.B. 60 sec subtrahieren und somit deine Meldezeit ermitteln, dann die Meldezeit mit der Ist-zeit vergleichen und dann deine Meldung absetzen.
so ähnlich <?php
$jetzt = time();
$jalzeit = ($jetzt +60);//ersetzen durch die eingestellte Sool-Zeit GetValueInteger
Es hat ja wie im ersten Beispiel schon funktioniert, jedoch eben mit „Zusatzereignisen“ und fehlender Übersichtlichkeit.
Michaels Modul ist dafür perfekt.
Ich kann damit das zyklische Ereignis „Jalousie schliessen“ bei Änderung triggern, und einfach mein Benachrichtungscript ausführen.
<?php
// Jalousien schließen in einer Minute
// Reagiert auf Änderungen des Ereignises mit Hilfe von "Universeller Trigger" Modul
$E_Sprache = 17483;
#Falls Script vom eigenen Ereignis aufgerufen, Nachricht senden und Tschuess
if ( $_IPS["SENDER"] === "TimerEvent" ) {
Send_Message();
return;
}
$E_ID = 49303;
$E_Info = IPS_GetEvent($E_ID);
$NextRun = $E_Info['NextRun'];
if ($NextRun > 0) {
IPS_SetEventActive($E_Sprache, true);
$hour = date('G', $NextRun);
$minute = date('i', $NextRun);
$second = date('s', $NextRun);
$Next = date('H:i:s', $NextRun);
IPS_SetEventCyclicTimeFrom($E_Sprache, $hour, $minute -1, $second);
#IPS_LogMessage($_IPS['SELF'], "Jalousie schließen wurde angepasst: " . $Next);
} else {
IPS_SetEventActive($E_Sprache, false);
}
//Funktion
function Send_Message() {
//Globale Variablen
include("15096.ips.php");
//TextVariables
SetValueString($Text_Mail, "");
SetValueString($Text_Sprache, "Hallo, die Jalousien werden in einer Minute geschlossen.");
SetValueString($Text_Webfront, "");
SetValueString($Text_Telegram, "");
IPS_RunScript($Benachrichtigung);
}