Variable nach definierter Zeit zurück setzen

Hallo,

wie bekomme ich es hin, eine Variable (Boolean) nach dem sie auf true gesetzt wurde nach einer definierten zeit wieder auf false zu setzten?

Steve

AktionsScript bei „Änderung“ oder ggf. „Aktualisiserung“. Darin bei „neuer Wert“ true einen Scripttimer setzen.
Der Scripttimer ruft dann zur definierten Zeit das Script erneut auf.
Prüfen ob das Script durch den Timer gestartet wurde und Variable ausschalten.

Ist auch in der Doku ganz gut beschrieben
Wie kann ich...? — IP-Symcon :: Automatisierungssoftware…_ein_Ger%C3%A4t_einschalten_und_nach_60_Sekunden_wieder_aussschalten

In dem Moment, wo Du die Variable True setzt, setzt Du einen ScriptTimer auf ein Skript. Dieses Skript deaktiviert den Timer uns setzt die Variable auf false.

Bitte helft mir mal auf die Sprünge,

folgender Code steht in dem AktionsScript:

// Template ID: {FCE37F48-DA3F-45DD-AC77-71343792CC2D}
// Template Name: Auf Wert schalten
$ident = "STATE";
$value = true;
$target = $_IPS['TARGET'];
if (IPS_InstanceExists($target)) {
  $target = IPS_GetObjectIDByIdent($ident, $target);
}
RequestAction($target, $value);

Wie integriere ich darin an Hand des oben gezeigten AktionsSkript den ScriptTimer?

Steve

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
    ...
 
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
    ...
 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 60);
}

SkriptTimer funktionieren nicht mit den Skripten in Ereignissen. Du musst hierfür ein eigenes Skriptobjekt erstellen, falls du das nicht sowieso schon hast.

Das Skript selbst musst du leicht anpassen, da du nicht mehr per Systemvariable an das Ziel kommst. Ich habe das Skript also mal auf das nötigste runtergekürzt. Das könnte so aussehen:


$targetID = 12345; // TODO: Hier 12345 durch ID der zu schaltenden Variable ersetzen
if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
    RequestAction($targetID, false);
 
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
    RequestAction($targetID, true);
 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 60); // TODO: Hier eventuell die Dauer anpassen, aktuell 60 Sekunden = 1 Minute
} 

vielen Dank, funktioniert prima:)

Mich interessiert trotzdem, wie man genau auf so einen Skript kommt. Gibt es ein Video oder eine Anleitung um sich weiter zu bilden bezüglich IPS und PHP?

Steve

Bezüglich IPS empfehle ich die Dokumentation. Da steht alles drin was man braucht.

Skripttechnisch ist meiner Meinung nach das „Nach Zeit zurückschalten“ die einzige Standardsitutation, die noch ein Skript erfordert. Und auch die fällt wohl im Laufe dieses Jahres mit dem Ablaufplan weg. In nahezu allen anderen Situationen gibt es entweder ein schönes Modul dafür oder du kannst es mit Ereignissen lösen. Skripte gehen manchmal zwar schneller, wenn man in der Materie steckt, aber dafür würde ich persönlich nicht extra PHP lernen.