PHP-Skript durch verschiedene Variablen aufrufen(ohne Ereignis)

Hi, ich möchte gerne, dass ein Skript durch verschiedene Variablen aufgerufen wird, ohne dass ich für jeden Auslöser zusätzliche Ereignisse erstellen muss. Ist sowas überhaupt möglich?

Also statt so:

Da die Variablen Rollo links/rechts von Modulen kommen und eine Standardaktion haben, kann ich ja den Aufruf des Skriptes nicht hier erstellen. Wird daher nur so wie oben gehen?

Oder könnte man ein Skript immer aufrufen wenn sich z.B. innerhalt einer Kategorie etwas ändert und dann abhängig davon welche Variable sich geändert hat innerhalb des Skriptes verzweigen?

Nein.

Auch nein.
Auslösende Ereignisse sind immer an eine Variable gebunden.

Es gibt allerdings Module im Store mit denen das klappen könnte. Wie das Universalereignis.

Was meinst du? Was ist hier dein Ziel?
Selbstverständlich kannst du auch bei Statusvariablen ein eigenes Aktionsskript hinterlegen (also über eigene Aktion die Standardaktion überschreiben).
Michael

Ich möchte aber gerne die Standardaktion und mein Skript auslösen. Aber du bringst mich da auf eine sehr naheliegende Idee! Das könnte ich natürlich machen in dem ich statt der Standardaktion das Skript hier ausführe:

RequestAction($_IPS['VARIABLE'], $_IPS['VALUE']);
RequestAction($ID_Skript_2, $_IPS['VALUE']);

Dann würden alle Variablen, die das Skript ausführen sollen zusätzlich noch ein 2. Skript aufrufen.

Dein Modul Universalereignis schaue ich mir trotzdem mal genauer an. Dafür habe ich sicher auch Anwendungsfälle.

Danke! Du hast mir mal wieder sehr geholfen :slight_smile:

So langsam erschließt sich mir der IPS Kosmos dank der immer wieder tollen Hilfestellungen hier und der Unterstützung des Symcon Supports👍

Das meine ich aber nicht, sondern wirklich das Endergebnis was du erreichen willst und nicht teile vom Weg.

Vorsicht, die erste Zeile für zu einer Endlosschleife!
Weil die Aktion ist dieses Skript, was du mit RequestAction ja wieder und wieder startest.
Wolltest du eventuell SetValue benutzen?
Michael

Wenn du die Standardaktion mit einem eigenen Script überschreibst, ist die Ursprüngliche weiterhin mit IPS_RequestAction erreichbar.

Okay. Also ich habe in einem Raum 2 Rollos, die ich über TaHoma eingebunden habe. Nun habe ich mir zusätzlich eine Dummy Instanz angelegt mit der ich auch beide Rollos zusammen fahren kann. Jetzt hat mir aber nicht gefallen, dass sich der Value von Rollo Alle nicht ändert, wenn die Rollos einzeln gefahren werden. Daher möchte ich bei einer Änderung von Position Rollo links/rechts ein Skript aufrufen, welches mir den Mittelwert der beiden Rollos berechnet und diesen dann mit SetValue() an die Variable Rollo Alle übergibt. Aktuell rufe ich das Skript mit 2 Ereignissen auf und nun war die Überlegung, ob ich es nicht direkt durch die Aktion der einzel-Rollos aufrufen kann.

könnte ich das mit der Endlosschleife damit vermeiden:

if(!IPS_SemaphoreEnter($_IPS[‚SELF‘], 1 /* sehr kurz warten */)) {

return; //Läuft bereits

}

Das dachte ich ja auch, aber @Nall-chan meinte ja, dass ich dann eine Endlosschleife bekomme. Womit er vermutlich auch recht haben wird.

Aber wenn das alles zu komplex wird, dann lasse ich es einfach beim Aufruf durch die 2 Ereignisse. Ich habe den Use-Case halt insgesamt 4 mal und dachte rein über Skripte wäre es etwas eleganter zu lösen. Aber muss auch nicht.

Mit ereignissen ist der Standardweg. Du willst aber nur die Rückmeldung anpassen (also SetValue), dabei rufst du doch garkein RequestAction auf und das kannst du gefahrlos auch ohne Rückkopplung tun.

Und zu meiner vorherigen Nachricht: Bitte mal GENAU lesen, wie die Funktion heißt.

IPS_RequestAction ist eine andere Funktionen. Die brauchst du, wie @tobiasr schon schrieb, wenn du bei einer Statusvariable eine eigene Aktion definiert hast, aber nicht diese (mit RequestAction) sondern die originale Standardaktion (der Instanz) aufrufen willst.

Wenn du einfach zwei zusammenfassen willst, probier doch mal das Blind Modul von @bumaas aus.

Michael

Edit:

Ja, aber warum, wenn die erste Zeile RequestAction eh überflüssig ist.

Edit2:

Werden sie jemals einzeln gefahren? Sonst hätte ich nur eine in der Visu verlinkt und die zweite wird über das Aktionsskript der ersten mit gefahren.
Also so in der Richtung:

IPS_RequestAction(12345, Ident der Statusvariable, $_IPS['VALUE']); // Instanz links
IPS_RequestAction(54321, Ident der Statusvariable, $_IPS['VALUE']); // Instanz rechts

Es ist eigentlich ganz einfach :slight_smile:

Du erstellst dir ein Skript , dass du für alle Variablen als Aktionsskript angibst. Dort setzt zu zunächst den Wert der Variablen, wie im Standardaktionsskript.

Dann setzt zu den deine Variable in Abhängigkeit von den betätigten Rollos:

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);


switch ($_IPS['VARIABLE']){
     case <idRolloA1>:
     case <idRolloA2>:
        $mittelwert = ....;
        SetValue (idGruppeA, $mittelwert);
        break;

     case <idRolloB1>:
     case <idRolloB2>:
        $mittelwert = ....;
        SetValue (idGruppeB, $mittelwert);
        break;

    default:
         echo "falsche ID";

}

Das ist nicht zum Zusammenfassen von Rollläden geeignet :slight_smile:

Damit wird keine Statusvariable angesteuert :laughing:

Verbesserungsvorschlag :grinning_face_with_smiling_eyes:

Dann habe ich das Problem falsch verstanden. Er möchte doch den ermittelten Mittelwert nur in die Variable zur Anzeige schreiben:

Dann macht die erste Zeile aber keinen Sinn.

Ganz genauso wollte ich es auch machen :slight_smile:

Was mir da aber noch fehlt ist die Ausführung der Standardaktion des einzelnen Rollos, der bedient wurde, denn sonst fährt der ja nicht. Hast du da noch eine Idee? Vermutlich dann durch den Aufruf von IPS_RunAction(). Wobei das ja schon wieder komplexer wird, da ich hier erst mal den passenden Befehl kennen muss. Aber klar, das ginge auch

Ah, das war mir nicht bekannt, dass es auch noch IPS_RequestAction() gibt. Wieder etwas neues gelernt :slight_smile:

Aber könnte es sein, dass der Befehl IPS_RunAction() heißt? In der Befehlsreferenz gibt es zumindest kein IPS_RequestAction() und die Suche findet den Befehl auch nicht. Vielleicht machen aber auch beide einfach das selbe.

Zu 95% werden sie wohl zusammen gefahren. Aber du weißt ja wie es ist, wenn man sich etwas überlegt hat um auch die Sonderfälle anzufangen, dann will man das auch irgendwie umsetzen.

Ok, Planänderung :slight_smile: Bei der Statusvariablen belässt du alles so wie es ist, also keine eigene Aktion. Somit kannst du weiterhin einzeln ganz normal den Rollladen bewegen.

Unter deinem Skript erstellst du für jede auslösende Variable ein Event mit Auslösung bei Änderung. Damit wird dann bei jeder Änderung der Rollladenposition das Skript aufgerufen, und deine gemeinsamen Variablen werden nachgeführt.

Ist auch eher speziell. Sollte aber eigentlich dennoch dokumentiert werden. @paresy : oder?

Genau das macht man aber nicht.
Weil was wenn das Rollo z.b. über einen direkt Angelernten Taster bedient wurde.

So wie @bumaas das schrieb ist schon korrekt. Man wertet immer den Status (also die Variable) aus und nutzt dazu ein auslösendes Ereignis.
Michael

Dann ist das so, wie ich es bisher gemacht habe ja dann doch der Standard. Ich wollte auch nur mal wissen, ob es evtl. auch anders/einfacher geht.

Und das ist auch ein guter Punkt, den ich bei meinen bisherigen Überlegungen außer acht gelassen habe!

Danke euch für den konstruktiven Austausch bei dem ich mal wieder einiges dazulernen durfte😊

1 „Gefällt mir“

@Nall-chan und @bumaas wie prüft ihr denn euren PHP-Code vorab auf z.B. Syntax-Fehler?

Irgendwie merke ich das bei mir erst wenn ich das in der Visu oder IPS entsprechend teste :frowning:

Verwendet ihr Visual Studio Code o.ä., oder editiert ihr auch direkt in der IPS-Konsole?

Ich hatte nämlich eben einen Fehler im Code, den ich einfach nicht gefunden habe und dann hat Chat-GPT den Code für mich korrigiert :wink:

Und wie kann ich am besten prüfen, wie ausgelastet die SymBox gerade ist und ob irgendwelche Skripte gerade in einer Dauerschleife laufen?

Grüße André

Ich nutze PHP Storm. Es ist kostenpflichtig, aber (für mich) jeden Cent wert. Eine wirklich gute KI ist auch dabei.

Kleine Änderungen oder kleine Testskripte mache ich in der Konsole.

Die Auslastung siehst du eigentlich gut in der Threadliste der Konsole. Solange es nicht zu Staus oder hängenden Threads kommt, ist alles gut.

Danke.

Meinst du mit der Threadliste PHP-Information?