Script Timer

Hallo brauche ständig für irgendwelche Abläufe eine Einschaltverzögerung oder eine begrenzte Laufzeit. Hierfür scheint mir der Script Timer die richtige Wahl… Bis jetzt hab ich mich der hier geposteter Scripts bedient aber nie wirklich verstanden wie das Ding funktioniert…

Aus der Beschreibung des Befehls werde ich nicht schlau und auch das Suchen hier im Forum hat mich jetzt nur noch mehr verwirrt…

Alle Scripte die hier gepostet werden sehen ähnlich aus, unterscheiden sich aber dennoch und wirklich zum Laufen bekomme ich sie auch nicht.

Kann mir jemand vielleicht anhand eines Beispiels erklären wie ich den Befehl richtig benutze und vor allem was wo passiert oder übergeben wird…
Was kommt von IPS, was aus dem Script, Was bedeutet $IPS_SENDER == „Designer /TimerEvent“ usw…

Vielleicht sollte ich dazu sagen das ich mit meinem PHP noch sehr am Anfang stehe… :slight_smile:

Du solltest mal in der Doku nachschauen und das an einfachen Beispielen nachstellen. An fertigen Skripten lernen, kann u.U. schwierig sein.

Erläuterungen

Beispiel

Hallo Franky,

deine Probleme kann ich verstehen, so ging es den meisten hier. Mir natürlich auch. Also was möchtest du denn z.B. genau für eine gewisse zeit schalten? Falls es ein FS20 Schalter ist, geht das ja ganz einfach mit dem Befehl:

FS20_SwitchDuration ( integer $InstanzID, boolean $Status, integer $Dauer ) -> Schaltet das Gerät mit der ID InstanzID auf Wert Status für Dauer Sekunden

Falls du etwas anderes verzögern oder für eine bestimmte zeit schalten willst, dann geht das am Einfachsten mit dem Beispiel von Boui:

 if($_IPS['SENDER'] == "TimerEvent")
 {
  //Aus Befehl
  ...

  //Timer ausschalten
  IPS_SetScriptTimer($_IPS['SELF'], 0);
 } else {
  //An Befehl
  ...
 
  //Timer start
  IPS_SetScriptTimer($_IPS['SELF'], 60);
 }

Der Befehl IPS_SetScriptTimer startet ein Skript nach einer vorgegebenen Zeit. Der Befehl $_IPS[‚SENDER‘] erkennt, ob der Timer das Skript gestartet hat, oder was anderes. Das Beispiel macht nun folgendes:

  1. Es prüft ob es vom Timer gestartet wurde -> Wenn ja dann setzt es denn Timer wieder auf 0 und mit einem weiteren Befehl könntest du etwas wieder ausschalten.

  2. Falls das Skript nicht vom Timer gestartet wurde (also von Dir oder einem Event) dann setzt es den Timer auf 60 und du könntest mit einem weiteren Befehl etwas für die angegebenen 60 Sekunden einschalten.

Aus gleichem Skript kann man aber auch eine Verzögerung von z.B. den 60 Sek. bauen und aus einer Kombination von 2 mal dem Skript, in etwas abgewandelter Form, eine Verzögerung plus Einschaltdauer. Guck dir das Beispiel mal genau an. Es ist eigentlich recht einfach zu verstehen.

Ansonsten gib mal ein genaueres Beispiel, was du schalten bzw. verzögern willst. Dann bauen wir mal ein Beispiel für dich.

Hab heute leider nicht mehr die Zeit mich komplett einzulesen aber beim überfliegen konnte ich schon die ein oder andere Unklarheit beseitigen.
Das war genau das, was ich gesucht habe. Werde mich die Tage mal damit beschäftigen und experimentieren. :slight_smile:

Dann kommt bestimmt noch mal die ein oder andere Frage :wink:

Besten Dank schon mal!

Ergänzung:

@ Boui

Der Link zur Erklärung der Systemvariablen und ihre Zusammenhänge waren wohl schon mal der große Durchbruch für mich :wink: Das hatte ich vergeblich gesucht.

@ obicom

In Verbindung mit deiner Erläuterung sollte ich es jetzt wohl hinbekommen. Langsam erschließt sich mir die dahinter verborgene Logik :smiley:

Besten Dank an euch Zwei!

Hallo zusammen, ich wurde glücklicherweise auf diesen Beitrag verwiesen. Hier meine Frage, da meine php Kenntnisse leider sauschlecht sind benötige ich mal bitte eure Hilfe. Und zwar möchte ich ein Script ausführen lassen wenn eine Variable länger als beispielsweise 20 Sekunden auf „true“ steht. Für euch ist das bestimmt ein Klaks. Ich danke schonmal ganz doll.

Gruß

Felix

Hallo Felix,

das Ergebnis steht doch in Post 3. Wenn deine Variable auf true geht, triggerts Du das Script damit und setzt den Timer aktiv für deine Zeit. Ist die Variable dann bei Abfrage immer noch true führst Du etwas aus.

Danke für die Antwort aber irgendwie checke ich die Zusammenhänge nicht. Hier nochmal mein konkretes Beispiel.

Wenn die Variable 58994 länger als 20 s auf true steht dann löse die Aktion 12531 so lange aus bis Variable 58994 wieder auf false steht.

Sorry wenn ich euch damit belästige aber kann mir das jemand Idiotensicher schreiben?

Vielen Dank.

Mal so schnell zusammen getippt, ob es so funktioniert wie Du es haben willst, weis ich nicht.

Trigger auf Variable 58994 bei Variablenänderung.

if(($IPS_SENDER == "TimerEvent") && (GetValue(58994))) // nach 20 sec prüfen
{
    if(!GetValue(12531)) SetValue(12531, true); // wenn noch nicht aktiv, auf aktiv setzen
    IPS_SetScriptTimer($IPS_SELF, 0); // Timer beenden
    return; // Sript verlassen
}

if(GetValue(58994)) // wenn Variable auf true
{
   IPS_SetScriptTimer($IPS_SELF, 20); // Timer für 20 sec setzen
}
else // sonst
{
   IPS_SetScriptTimer($IPS_SELF, 0); // Timer löschen und
   if(GetValue(12531)) SetValue(12531, false); // prüfen ob Variable aktiv und auf false setzen
}

Danke für die schnelle Rückmeldung. Ich werde es heute Abend mal ausprobieren.

Mir ist teilweise nicht klar wo zb. die IDs der Aktionen und Variablen eingetragen werden müssen aber anhand dieser Beispiele wird mir das klarer.

Danke

Ich hab dir das Script noch mal angepasst.

Mmh funktioniert leider nicht. Fehlermeldung" Syntax Error, unexpected t_boolean_and in on line 2".

Was hast Du denn für einen Variablentyp Wenn es kein bool ist wird das so nix. Hast aber auch nichts dazu geschrieben.

Das ist doch aber ein Boolean. Türsensor von HM. ( kein Griffstellungssensor)

Es sind 2 Variablen im Script und beide auf bool ausgelegt.

Schreib doch einfach genau was Du vorhast mit welchen Komponenten usw und lass Dir nicht alles aus der Nase ziehen.

Nur zur Anmerkung. Ich hab das Script jetzt getestet, funktioniert einwandfrei.

Wenn Du HM Schalter setzen willst, geht das so nicht. Dort sieht der Befehl so aus.

HM_WriteValueBoolean: IP-Symcon :: Automatisierungssoftware

Sorry das ich so schreibfaul bin aber ich kann zur Zeit nur auf dem Handy schreiben. Also, ich habe einen HM Türsensor an meinen Kühlschrank gebaut und möchte darüber informiert werden wenn die Tür länger als 20 Sekunden geöffnet ist. Als Signalgeber nutze ich einen Funkgong (FS20). Betätigt wird dieser mit dem Befehl file_get_contents(„http://192.168.2.242/preset?Switch=27&value=on“);
weil ich eine XS1 zum ansteuern nutze. Die HM Komponenten steuere ich mit dem LAN-Adapter an. Reicht die Info oder brauchst du noch was?

Danke nochmal,

Gruß

Felix

if(($IPS_SENDER == "TimerEvent") && (GetValue(58994))) // nach 20 sec prüfen
{
    file_get_contents("http://192.168.2.242/preset?Switch=27&value=on");
    IPS_SetScriptTimer($IPS_SELF, 0); // Timer beenden
    return; // Script verlassen
}

if(GetValue(58994)) // wenn Variable auf true
{
   IPS_SetScriptTimer($IPS_SELF, 20); // Timer für 20 sec setzen
}
else // sonst
{
   IPS_SetScriptTimer($IPS_SELF, 0); // Timer löschen und
   file_get_contents("http://192.168.2.242/preset?Switch=27&value=off");
}
1 „Gefällt mir“

Der Fehler ist leider immer noch da.

ImageUploadedByTapatalk1312398257.587059.jpg

Dann hast Du die falsche ID eingetragen. Du musst die state ID deines HM Sensor eintragen und auf diese triggern, nicht die Instanz ID.

Ist auf deinem Bild leider nicht zuerkennen.

Stop!! Du hast einen Zeilenumbruch in der ersten Zeile, das geht nicht!!! Muss alles in eine Zeile so wie es Orginal ist.

Hier noch mal in richtiger Qualität.

Dann nochmal zum mitschreiben. :smiley:

So gehört es

if(($IPS_SENDER == "TimerEvent") && (GetValue(58994)))

und nicht so.

if($IPS_SENDER == "TimerEvent") && 
(GetValue(58994)))