Ereignis: Wert 1x unterschritten

Ich muss mich wieder mal in IPS einarbeiten, nachdem ich 3-4 Jahre damit nichts gemacht habe, und alles vergessen habe. Ich muss ein Skript auslösen wenn eine Float-Variable unter 40 fällt. Wie kann ich am besten eine „Refraktärzeit“ (bzw. eine Hysterese) definieren, so dass der Skript für die darauffolgenden 12 (oder 24) Stunden nicht wieder ausgelöst wird? Wenn es PHP dazu braucht, hätte mir jemand einen geeigneten Code-Snippet?
mit bestem Dank im Voraus!

Hallo,

ich versuche es mal.
Ich habe dir mal was zusammen geklickt:

Die Variable Wert ist deine Float Variable die nicht unter 40 gehen darf.
Dann habe ich ein Script (12h) angelegt, dieses darf nur 1 mal in 12 Stunden ausgeführt werden, wenn der Wert unter 40 geht.
Unter das Script habe ich ein Ereignis gelegt, welches die Variable Wert überwacht und bei Grenzunterschreitung von 40 das Script 12h ausführt.

In dem Script habe ich folgendes hinterlegt:


 //Nur zum testen ob es wirklich ausgeführt wird.
IPS_LogMessage("hi", "hi");
//Das Ergenis der Grenzunterschreitung deaktivieren
IPS_SetEventActive(28511 /*[aag\12h\Bei Grenzunterschreitung der Variable "aag\Wert" mit Grenze 40]*/, false);
//Den Script Timer auf 20 setzen, ich habe es mit 20 Sekunden getestet um zu sehen ob es funktioniert. Für 12 Stunden müsstest du also 43200 Sekunden eintragen.
IPS_SetScriptTimer(28512 /*[aag\Ereignis aktivieren]*/,20);

Dann habe ich ein Script Ereignis aktivieren angelegt, dieses aktiviert nach dem Ablauf der 12 Stunden das Ereignis für die Grenzunterschreitung wieder. Der Inhalt vom Script:


//Aktiviert das Event für die Grenzunterschreitung
IPS_SetEventActive(28511 /*[aag\12h\Bei Grenzunterschreitung der Variable "aag\Wert" mit Grenze 40]*/, true);

Grüße,
Kai

Alternative - benötigt nur ein Skript:

<?
switch ($_IPS['SENDER']){

  case "Variable":
    IPS_SetScriptTimer($_IPS['SELF'], 20);

	// Hier kannst Du noch weiteren Code schreiben, der ausgeführt werden soll.
	
	IPS_SetEventActive(58622 /*[Test für aag\Skript\Bei Grenzunterschreitung der Variable "Test für aag\Wert" mit Grenze 40]*/, FALSE);
  break;

  case "TimerEvent":
    IPS_SetEventActive(58622 /*[Test für aag\Skript\Bei Grenzunterschreitung der Variable "Test für aag\Wert" mit Grenze 40]*/, TRUE);
    IPS_SetScriptTimer($_IPS['SELF'], 0);
  break;	  
}
?>

@aag:
Bist Du von Beruf Arzt?

Hallo,

genau an sowas habe ich eben auch noch Gedacht. Also ich am klicken war. :smiley:
Aber dann war es schon fertig.

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Liebe Beide, fantastisch, vielen dank! Jetzt weiss ich wieder, warum Al Gore das Internet erfunden hat! :slight_smile:

…und ja, bin effektiv vom Beruf Arzt - wie seid Ihr drauf gekommen? :slight_smile:

Ein Kunde von mir ist Arzt. Er verwendete bei der Formulierung einer Anforderung an mich bzgl. einer Programmierung in IP-Symcon mal im gleichen Zusammenhang den Begriff Refraktärzeit. Den Begriff kannte ich vorher nicht :confused: :wink: Daher vermutete ich, dass Du auch Arzt bist :slight_smile: