Timer 5 Min. alle 30 Min.

Ich getrau mich es nach 10 Jahren IPS eigentlich garnicht zu fragen, aber …

Alle 30 Min soll „State“ eines HM-Devices für 5 Min. an sein.

Mein Script:

// Pumpe 5 min an

$id = 49282 /*[Homematic\Dach Pumpe\SWITCH]*/;

if($_IPS['SENDER'] == "TimerEvent") {
    
      IPS_SetScriptTimer($_IPS['SELF'], 0);
      HM_WriteValueBoolean($id, "STATE" , false);
    }
else {
      IPS_SetScriptTimer($_IPS['SELF'], 300);
      HM_WriteValueBoolean($id, "STATE" , true);
}

schaltet die Pumpe an und nach 5 Min. aus.
Soweit, so gut!
Wenn ich das Device mit einem Schalter einschalte, geht es nach 5 Min. wieder aus. Alles OK.
Aber, wenn ich das Script mit einem zyklischen Ereignis alle 30 Min. starte, wird ja die Bedingung „TimerEvent“ von diesem Ereignis erfüllt und das Device bleibt aus.

Kann jemand meinen Knoten lösen?


if($_IPS['SENDER'] == "TimerEvent") {

ändern zu


if($_IPS['SENDER'] == "TimerEvent" && $_IPS['EVENT'] != $id_von_30_min_timer) {

paresy

… nur mal so aus dem Kopf …


// Pumpe 5 min an

$id = 49282 /*[Homematic\Dach Pumpe\SWITCH]*/;

if($_IPS['SENDER'] == "TimerEvent") {
  
   if( $_IPS['EVENT'] != xxxxx ){
      IPS_SetScriptTimer($_IPS['SELF'], 0);
      HM_WriteValueBoolean($id, "STATE" , false);
    }
  else {
      IPS_SetScriptTimer($_IPS['SELF'], 300);
      HM_WriteValueBoolean($id, "STATE" , true);

 }
}


xxxxx = ID Deines 30min Timers

Gruß

Swifty

Danke dir, es kann so einfach sein.

… da war ich wieder zu langsam … :banghead:

Da Du ja Homematic benutzt kannst Du sogar nur mit dem 30-Minuten-Timer und mit ON_TIME arbeiten:

$id = 49282 /*[Homematic\Dach Pumpe\SWITCH]*/; 

if($_IPS['SENDER'] == "TimerEvent") { 
      HM_WriteValueFloat($id, "ON_TIME" , 300);
      HM_WriteValueBoolean($id, "STATE" , true); 
}

Dann kümmert sich der HM-Aktor selbst ums ausschalten.

… falls der Aktor „ONTIME“ unterstützt[emoji3]
Nicht jeder Aktor kennt dieses Attribut.

Daran hab ich ja gar nicht gedacht. Ist auch eine gute Lösung, die funktioniert.

Danke für alle Tips