Zyklisches Script mit Ausschaltverzögerung

Hallo Zusammen,

ich stehe gerade etwas auf dem Schlauch. Ich möchte eine Pumpe (Luftpumpe) stündlich für 5 Minuten anschalten.

Also das Script aus …/wie-kann-ich/#… genommen und zumindest das Ausschalten funktioniert nach 5 Minuten.
Dazu noch ein Auslösendes Ereigniss, so das wenn ich die Pumpe vom Webfront aus einschalte, sie nach 5 Minuten ausgeht.

Doch wie erstelle ich nun daszyklische Ereigniss.
Das ist ja auch nur ein „TimerEvent“ und wird von IPS als solches intepretiert, somit passiert genau nichts.

Mein Script:

<?
if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
    HM_WriteValueBoolean(41156 , "STATE", false);
 
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
    HM_WriteValueBoolean(41156 , "STATE", true);
 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 60*5);
}
?>

Der Objektbaum sieht so aus:

Hallo,

bei mir sieht das so aus:


$id_pumpe = 12345;
$on_time 	= 5*60;	// on-time in Sekunden, könnte auch aus einer Variablen ausgelesen werden

if($_IPS['SENDER'] == "TimerEvent")
{
     // timer setzen für $on_time (5 min)
   HM_WriteValueFloat($id_pumpe, 'ON_TIME', $on_time);
     // Pumpe an
   HM_WriteValueBoolean($id_pumpe, 'STATE', true); 
}

Grüße, Gerhard

Hi,
wie wäre es mit einem zyklischen Stundentimer und dann:


Switch ($_IPS['SENDER']){ 
        case "TimerEvent":
            if (IPS_GetName($_IPS['EVENT']) == 'ScriptTimer'){
                HM_WriteValueBoolean(41156 , "STATE", false);
                IPS_SetScriptTimer($_IPS['SELF'], 0);
                return;
            }
            else{
                HM_WriteValueBoolean(41156 , "STATE", true);
                IPS_SetScriptTimer($_IPS['SELF'], 300);
           }
}

Ralf

Hallo Zusammen,

danke für die Rückmeldungen.

@Gerhard und Ralf
Euer Script macht ja nichts anderes wie meins. Das ist ja auch richtig so. Mein Script an sich funktioniert ja auch.

Was nicht geht, ist der Aufruf der stündlich erfolgt, da diser von IPS ja auch nur als „TimerEvent“ intepretiert wird.
War vielleicht im Screenshot etwas unverständlich, da ich dort den Timer für Stündlich gelöscht hatte.

Sowohl bei Ereignis 42978 als auch bei 37588 schaltet er die Pumpe aus.
man müsste wohl die Ereignisse anhand der ID interpretieren und dann entsprechend reagieren.
Aber daran bin ich gescheitet.

Genau, in $_IPS[‚EVENT‘] steht die ID des auslösenden Ereignisses.

am allereinfachsten und das mache ich meist auch so, damit die Scripte übersichtlich bleiben, teilst du es in 2 Scripte auf… eins das vom zyklischen Timer gestartet wird, das macht nichts anderes als das 2. Script aufzurufen, welches dann seinen internen Timer aufzieht usw. , dann kannst du entsprechend den Beiträgen oben nach TimerEvent und sonstiges unterscheiden.

Hi Jossel,
die Zeile

if (IPS_GetName($_IPS['EVENT']) == 'ScriptTimer'){

macht den Unterschied zu deinem Script. Hiermit kann man unterscheiden ob es ein „normaler“ Timer oder ein Scripttimer war. Beim normalen Timer (zyklisch 1 Stunde) schaltest Du ein und aktivierst einen 5min ScriptTimer und wenn der ScriptTimer ausgelaufen ist schaltest Du die Pumpe ab und löscht den ScriptTimer.

Ralf

Danke für die Tipps…

Ich hab es jetzt folgendermassen gelößt:

<?
if($_IPS['SENDER'] == "TimerEvent" && $_IPS['EVENT'] == 42978)
{
    //Aus Befehl
    HM_WriteValueBoolean(41156 , "STATE", false);
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
}
else
{
    //An Befehl
    HM_WriteValueBoolean(41156 , "STATE", true);
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 300);
}
?>