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
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.