Wie Ereigniss "x" Sekunden nach änderung einer Variable auslösen?

Hallo,
gedacht ist folgendes, ich ändere eine Variable und möchte daraufhin ca. 5s später ein Ereigniss auslösen (Temperaturübertragung zur Fht)

Wenn ich

<?
IPS_Sleep(5000);
$temp=GetValueFloat(20902 /*[Heizungssteuerung\Sollwert Automatik]*/);
FHT_SetTemperature(54996 /*[Heizungssteuerung\FHT80b Wohnzimmer]*/, $temp);
?>

benutze und das Script bei veränderung der Variable triggere, wird der Wert 5s nach der ERSTEN Änderung übertragen. Außerdem habe ich die befürchtung daß das Script bei jeder weiteren Änderung innerhalb der 5s nochmals ausgeführt wird, was ich nicht möchte.

Hintergrund ist, ich habe auf meinem Dashboard zur Änderung der Solltemperatur je 5 Buttons für Plus und Minus (5,2,1,0.5°). Wenn ich jetzt die Temp um z.B. 6° ändern will, betätige ich 5 und 1. Natürlich soll nicht sofort beim betätigen der 5 die Änderung zur Fht übertragen werden sondern erst wenn sich der Wert eben diese 5s nicht mehr ändert.

D.h. Aktualisierungszeit + 5s = Ausführung des Scriptes bzw. Übertragung zur Fht.

wie könnte ich das lösen?
gruß
goran

IPS_Sleep

Gruß,

Tonipedia

Um zu verhindern, dass das Script innerhalb einer bestimmten Zeit nochmals läuft, musst Du eine Semaphore setzen.

–> IPS_SemaphoreEnter: IP-Symcon :: Automatisierungssoftware

Bei so „langen“ Zeiten wir 5 Sekunden würde ich evtl. auch eine eigene bauen (mittels Variable), um ggf. individueller auf die Sperre reagieren zu können, das ist aber Geschmacksache und kommt auf die Wichtigkeit der Funktion an.

Ob Du ein Sleep von 5 Sekunden willst oder nicht besser einn Timer (siehe Link bei Toni) benutzt, solltest Du Dir überlegen. Mit SLEEP ist der Event für diese Zeit (plus Laufzeit Script) belegt. 5 Sekunden ist da schon recht lange für meinen Geschmack.

Wenn Du mehrere solche Dinger machst, kann es sein, dass Dein System nicht „in time“ reagiert, wenn es soll (z.B. ein Taster gedrückt), weil gerade alle 10 Events „schlafen“.

jwka

Ich würde es wie Toni vorgeschlagen hat mit dem SkriptTimer machen.

paresy

Ah jetzt ja;
ich habe jetzt zwei Scripte,

<?
IPS_SetScriptTimer(43335 /*[Heizungssteuerung\SollTemp_Schreiben]*/, 5);
?>

wird „Bei Veränderung“ der Variable ausgelöst. Bei einer erneuten Änderung der Variable beginnt der Timer ja von neu.

das zweite Script

<?
$temp=GetValueFloat(20902 /*[Heizungssteuerung\Sollwert Automatik]*/);
FHT_SetTemperature(54996 /*[Heizungssteuerung\FHT80b Wohnzimmer]*/, $temp);
IPS_SetScriptTimer(43335 /*[Heizungssteuerung\SollTemp_Schreiben]*/, 0);
?>

wird 5s nach der letzten Änderung gestartet, überträgt die Temp und setzt den Timer wieder auf 0.

Semaphore brauche ich jetzt in diesem Fall wohl nicht, ist aber gut zu wissen das es soetwas gibt :o

Danke euch.
grüße
goran