Skript bei Variablen mit Aktion

Hallo,

habe Variablen, die eine eigene Aktion auslösen indem sie einen Skript starten.
Der Skript macht dann anhand der veränderten Variable etwas.

Jetzt möchte ich mit einem weiteren Skript die Variable verändern
und gleichzeitig soll die eigene Aktion der Variable ausgeführt werden.
Die eigene Aktion scheint aber in dem Fall nicht aufgerufen zu werden.

Wie geht man da am Besten vor?

Hallo
Sollte aber funktionieren.
Hab ein Script welches bei Aenderung der Variablen 44267 ausgefuehrt werden soll.
Schreibt nur eine Logmeldung

<?
 IPS_LogMessage("Log","Script wird ausgefuehrt");
?>

Wenn ich nun mit einem anderen Script diese Variable aendere wird die LogMessage auch ausgegeben.

<?
 $id = 44267;
 $d = GetValue($id);
 $d = $d + 1;
 SetValue($id,$d);
?>

Das Problem liegt dann woanders.

Hallo,

danke für die Antwort.
Haben uns leider ich missverstanden.
Ich meine die Variablen im Baumdiagramm, die man anlegt und mit einem Aktionsskript versehen kann.
Sofern ich die Variable über das Webfront ändere, wird der Aktionsskript ausgeführt.
Sofern ich die Variable nicht übers Webfront sondern per weiterem Skript ändere, wird der Ationsskript der Variable in dem Baumdiagramm leider nicht ausgeführt.

dann leg doch einen Trigger dafür an, der auf Variablenänderung reagiert und das script dann ausführt.

Das hinterlegte Actionsscript „innerhalb“ der Variable ist nur für das Webfrontverhalten zuständig
Deswegen heisst es AKTIONscript.

…meine Befürchtung wäre,dass der Skript dann evtl. zweimal ausgeführt wird, wenn ich die Variable mit dem Aufruf des Aktionsskript und dann noch einem Ereignis versehe.
Sobald dann die Variable übers Webfront geändert wird, erfolgt erst der Aktionsskript und anschließend die Ausführung des Ereignisse bei Variablenänderung.
Vllt. wäre es besser, wenn man in der Konfiguration der Variablen mitteilen könnte, wann der Aktionsskript aufgerufen wird.

Per Checkboxen mutipel auswählbar:
-iFront/Webfront
-Skripte
-manuelle Änderung (Wert editieren)

Der Name „eigene Aktion“ bzw. Aktionsskript läßt jetzt nicht unbedingt darauf schließen, dass nur die Verwendung übers Webfront erfolgt, da verstehe ich nicht den Zusammenhang auf den du hinweist.
Reaktion erfolgt doch auf Aktion und das können ja verschiedene Auslöser sein.

Das was du suchst nennt sich Ereignis und die legt man direkt im Script an.
Das Aktionscript betrifft wirklich nur das Webfront. Da von hier aus aktiv bzw.
interaktiv gearbeitet wird. Eine Änderung der Variable aus welchem Grund
auch immer nennt man hier Ereignis und damit sollte man auch das Script triggern.

Bei diesem Ereignis kann man dann im Script auch unterscheiden WAS ausgelöst
wurde. Stichwort $_IPS[‚SENDER‘]

Wollte das Thema nochmal aufwärmen, weil ich gerade nach so langer IPS-Erfahrung drauf reingefallen bin.
Wegen dem „Bug?“ bei den iOS-Kurzbefehlen hab ich ein Script angelegt, das eine Variable auf True setzt. Jetzt wunderte ich mich warum die Aktion die bei dem setzen der Variable hinterlegt war nicht ablief.
Ich hatte das Thema vor Jahren schon mal, und es ist an einigen Stellen extrem nervig… man muss sehr genau unterscheiden wie eine Variable verändert wird, ein Ereignis sorgt im schlimmsten Fall zum doppelt ausführen, ein Actionscript läuft nicht immer an, je nachdem ob ein Webfront oder ein Script eine Variable verändert, dabei will ich doch einfach nur, dass IMMER wenn sich die Variable verändert eine Aktion ausgeführt wird.

Das ist echt umständlich.

Gar nicht umständlich.
Einfach nie die Variable selber setzen, sondern immer konsequent RequestAction bzw bei Ereignissen auf ‚Wert schalten‘ benutzen.
Dann ist es auch egal ob es eine eigene Variable oder eine Statusvariable ist.

Und bei eigenen Variablen dann nur im Aktionsskript oder dem Auswertescript einer Registervariable die Variable auf den neuen Wert gesetzt.
Michael

Was hätte denn dagegen gesprochen das Actionscript einfach immer bei einer Wertveränderung zu starten… das wäre wenigstens konsequent.

Ich habe viele eigene Module und Scripte deren Variablen-Behandlung dadurch an einigen Stellen schon umständlich ist bzw. habe ich entweder die Behandlung doppelt oder mache im Aktionscript nur noch das Wert-Setzen, aber auch nur wenn ich bei der Aktion nicht vorher prüfen will ob es erlaubt ist. Ich verstehe wieso es bei Hardware so gebaut ist, weil Symcon dann je Variable den richtigen Befehl wissen müsste um das Ergebnis zu erreichen, deswegen kann man sicher auch die Variable nicht einfach so setzen… einfacher macht es das trotzdem nicht.

Gedankenspiel:
Variable ändert Wert -> Aktion wird ausgeführt -> Hardware sendet neuen Wert -> neuer Wert wird in Variable geschrieben -> Aktion wird ausgeführt…ähhh ups wir haben eine Endlosschleife.

Dank RequestAction ist das super einfach und inzwischen egal ob eigene Aktion oder Aktion einer Instanz.
Ich habe kein Aktionsskript wo nicht erst irgendwas passiert und nur dann der neu Wert gesetzt wird.

Nur die Variable zu setzen und dann ein auslösenden Ereignis zu nutzen um darauf zu reagieren ist eine Krücke wo der User den Sinn des Aktionsskript nicht verstanden hat.
Das abstrakte Beispiel mit dem Tacho und Auto aus der Doku kennst du bestimmt.
Das wäre dann so wie durch das Aktionsskript (Gas geben) wird direkt der Tacho angesteuert und durch die Überwachung der Tachonadel wird der Motor gesteuert… Irgendwie doof :smiley:
Michael

OK, arbeiten wir mal mit einem konkreten Beispiel:
Variable für die Jalousie: 0-100%
Auslösbar aus dem Webfront - klar
Auslösbar aufgrund bestimmten Klimawerten durch Scripte

Da auch bei manueller Auslösung im Webfront bei Wind >80km/h die Jalousie nicht fahren soll (zumindest nicht runter) muss ich im Action-Script auswerten ob es fahren soll oder nicht, hab also in dem Script eine Logik.
Da auch bei Klima-Werten die selbe Regel gilt, muss ich auch dort überprüfen ob der Wind zu stark ist.

Da ich es nicht doppelt programmieren will hab ich es in ein weiteres Script ausgelagert und in beiden includiert, einzige mir bekannte sinnvolle Möglichkeit, da ich zum setzten des neuen Wertes (es gibt keine Rückmeldung von der Jalousie) das Ergebnis der Prüfung kennen muss.

Das selbe gilt übrigens für alle Lichtschalter und Steckdosen (haben alle eine manuelle Sperre, wenn die an ist darf auch nicht geschaltet werden).

Wenn dein Aktionsskript alle Bedingungen prüft und dann die Hardware mit dem korrekten Instanz-Befehl ansteuert, brauchst du kein zweites Script mit diesen Prüfungen.

Egal ob WebFront, Voicecontrol, IPSView oder ein beliebiges Ereignis kann direkt die Variable schalten (nicht auf Wert setzen!) und dadurch dein Aktionsskript starten.

Michael

Die Variable ist NUR eine Variable, keine Statusvariable einer Hardware (deswegen ja auch kein Rückkanal), die kann man nicht anders setzen. Die Alternative für jede Variable auch noch ein „Set-Script“ zu bauen, worin ich dann alles verpacke ist in Summe das gleiche.

Oben hast du geschrieben es ist eine Variable für eine Jalousie, somit ist das für mich Hardware.
Warum du jetzt den Umweg über eine Hilfvariable inkl eigenen Rückkanal zur Synchronisierung der Hilfsvariable baust, erschließt sich mir nicht wirklich.
Unnötiges verschwenden von Variablen und viel zu kompliziert bis gar Fehleranfällig wenn man etwas übersieht.
Michael

Weil es keine unterstützte Hardware ist sondern selbst implementiert.

Außerdem

Wenn dein Aktionsskript alle Bedingungen prüft und dann die Hardware mit dem korrekten Instanz-Befehl ansteuert, brauchst du kein zweites Script mit diesen Prüfungen.

Das stimmt ja so auch gar nicht, denn das Aktionskript prüft es ja NUR wenn es vom Webfront gesetzt wird, wenn ich die Aktion per Script ausführe muss ich die Prüfungen trotzdem an 2. Stelle durchführen.

Falsch.
Es wird eben nicht nur vom WebFront aufgerufen. Habe ich oben auch geschrieben. Es nennt sich Aktionsskript und nicht WebFront-Script.
Wenn du natürlich im Aktionsskript auf Sender WebFront filterst, dann funktioniert es mit Voicecontrol, Ereignissen oder anderen Scripten nicht.
Aber dann ist dein Aktionsskript schlecht umgesetzt.
Michael

Voicecontrol schon, aber nicht eben mit dem Aufruf aus anderen Scripten. Ich habe eben sehr viel Automation, das Scripte Aktionen durchführen ist bei mir häufiger als das ich es über Voice, Web oder sonstwas tue.

Scripte geht auch, einfach RequestAction in dem Script benutzen welche deine Variable ansteuern/schalten soll.
Michael