Hallo Benjamin,
ich habe das mit 2 Skripten und einem Timer gelöst. Es wird bei bei mir für die Rolladensteuerung eingesetzt.
Das 1. Skript ist für die Steuerung zuständig, welches die neue Position per Sprachausgabe ausgibt und danach den 8 Sekunden-Timer für das 2. Skript startet.
Das 1. Skript wird z.B. über einen Knopf ausgelöst und bestimmt die bisherige Position der Rollade.
Die Idee ist, dass mit jedem Klick die PositionNew erhöht wird, und wenn der Benutzer nicht innerhalb einer gewissen Zeit von 8 Sekunden regariert der Timer abläuft und dann das zweite Skript ausführt.
Zur Ermittelung der Ausgangsposition habe ich hier zusätzlich die letzte Aktualisierungszeit der Variablen herangezogen.
Wenn PositionNew danach gesetzt wird, dann ist diese höher als die Position der Rolladen.
Hier nun das erste Skript:
$positionIsID=ICE_VariableCreate_Integer($parentID,"Position"); // existing position from shutter
$positionNewID=ICE_VariableCreate_Integer($parentID,"PositionNew",3,$var_hide); // new position
$pos=$positionNewID;
$eventFahren=ICE_EventCreate_TimeDelay(ICE_ScriptCreate($parentID,"fahren"),"TimerDelay",8);
if (IPS_GetVariable($pos)["VariableUpdated"]<IPS_GetVariable($positionIsID)["VariableUpdated"])
{
$pos=$positionIsID;
}
$new=getvalueinteger($pos);
if ($new==0) // offen
{
SetValueInteger($positionNewID,50);
ICE_voice("Roll 50.mp3");
}else
if ($new==50)
{
SetValueInteger($positionNewID,99);
ICE_voice("Roll 99.mp3");
} else
if ($new==99)
{
SetValueInteger($positionNewID,100);
ICE_voice("Roll 100.mp3");
} else
{
SetValueInteger($positionNewID,0);
ICE_voice("Roll 0.mp3");
}
IPS_SetEventActive($eventFahren,true); // start the timer of 2nd script
Und hier das 2. Skript, dass sich um die Ausführung kümmert:
if ($IPS_SENDER == "TimerEvent")
{
echo "ID:".$_IPS['EVENT'];
IPS_SetEventActive($_IPS['EVENT'],false); // stop timer
}
$positionNew=getvalueinteger(ICE_VariableCreate_Integer($parentID,"PositionNew",3,$var_hide,0));
ICE_voice("und los.mp3");
SC_MOVE($parentID,$positionNew);
ICE_voice dient nur zur Sprachausgabe, ICE_VariableCreate_Integer der einfacheren Erstellung von Variablen durch das Skript, damit die benötigten Variablen selbst erzeugt werden und man das Skript bei allen Rolladen OHNE Anpassung verwenden kann.
Sicher kann man das Skript auch zusammenfügen und über IPS_SENDER und IF THEN auswerten, aber ich denke, es ist so vielleicht verständlicher.
Ich hoffe, dass du das Skript und die Beschreibung gut nachvollziehen kannst und bald eingesetzt wird.
Viel Erfolg!