Zyklisches Ereignis, Benachrichtigung eine Minute zuvor

Hallo,

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.

Michael

Du musst zuerst dein Meldungsskript starten und um eine Minute verzögert die Action ausführen. :banghead:

Danke euch,
werde Universal Ereignis testen.

@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.

Ich bin entzückt :slight_smile:

75BhU9.jpg

Vielleicht geht es auch so ähnlich: PHP: time - Manual,

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

SetValue(47986, $jalzeit);

$ergeb = $jalzeit - 60;
echo"$ergeb";

SetValue(38106, $ergeb);

if ($ergeb == $jetzt) {

SetValueBoolean(26486 , true);

}

@Senior
Vielen Dank für dein Beispiel.

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.

2020-08-29 20_02_36-Window.png

<?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);

}

Es gibt hier auch eine Übersicht welche Systemvariablen du im Script nutzen kannst:
GitHub - Nall-chan/IPSUniversalTrigger
Michael

Klasse:) man lernt nie aus.