Auf Grundlage von diesem Thema (IP-Symcon Community Forum) und dieser Ausführung (IP-Symcon Community Forum) möchten wir zu IP-Symcon 5.0 noch eine neue Funktion einführen die maßgeblich das Schreiben von Skripte beeinflussen wird.
Seit IP-Symcon 1.0 gibt es für jedes schaltbare Gerät eine oder mehrere Funktionen, die es erlauben einen Schaltbefehl (=Aktion) auszuführen. Dieser Befehl wurde dokumentiert und jeder Nutzer musste diesen nachschlagen/lernen. Mit Version 3.0 kam das WebFront. Dort war es möglich direkt an der Variable eine Aktion aufzurufen. Technisch ist dies möglich, da intern eine Zuordnung zwischen dem Ident der Variable und der Funktion zum Schaltbefehl besteht. Dies findet sich in den PHP Modulen auch unter der Modul-Funktion „RequestAction“ wieder. Für alle nativen Instanzen konnte dies lange über die undokumentierte und etwas komplexe Funktion IPS_RequestAction aufgerufen werden, welche mittlerweile viele PHP Module (z.B. Alexa, Assistant, HomeKit) verwenden.
Noch einmal einen Schritt zurück. In der Theorie haben wir in der Vergangenheit versucht immer Geräte (=Instanzen) als Ziel auszuwählen. Prominente Module waren dabei das (alte) Shutter Control / Heating Control. Mittlerweile geht der Trend dazu über die Ziel-Variable auszuwählen, da dadurch eine viel einfachere Verknüpfung erstellt werden kann. Bisher gab es jedoch keine Funktion die dies einfach für alle Anwender/Modul-Entwickler zur Verfügung gestellt hat.
Dies möchten wir mit der RequestAction Funktion ändern. Die Funktion erlaubt es die (Variablen-)Aktion auf einer beliebige Variable auszuführen. Sofern dort eine Aktion definiert ist, wird diese ausgeführt - unabhängig davon, welches echte physikalische Gerät dahinter versteckt ist.
Auf lange Sicht bedeutet dies, dass wir uns nach und nach von den hardwarespezifischen Funktionen (wie z.B. EIB_Switch) verabschieden können und fast immer die RequestAction Funktion nutzen können. Als Grundsatz würde dann gelten: Alles was du im WebFront schalten kannst, kannst du auch mit RequestAction schalten. Und man muss sich nur noch spezielle Funktionen merken, wenn man wirklich spezielle Dinge schalten möchte. (z.B. Dimmen mit benutzerdefinierter Rampe)
Man könnte sich nun die Frage stellen, warum wir nicht einfach SetValue dafür nehmen. Die Antwort ist einfach: SetValue setzt weiterhin den Wert einer Variable. Wir wollen jedoch das Gerät schalten, die dann wiederum (sofern erfolgreich) den Wert der Variable aktualisiert.
Ein paar offene Fragen zu der Funktion gibt es noch:
[ul]
[li]Sollte die Funktion intelligent das Prozent-Suffix auswerten, sodass dann 0-100% angegeben werden kann?[/li][li]Sollte die Funktion den eingegebenen Wert anhand vom Profil validieren? z.B. sollte bei Schrittweite 0,5 nur diese Schrittweite erlaubt werden?[/li][/ul]
Ich freue mich auf euer Feedback, zumal es für die nächsten Jahre einiges ändern/vereinfachen wird.
Beispiel zum Schalten von HomeMatic:
//Vorher
HM_WriteValueBoolean(12345, "STATE", true); //12345 ist die Instanz
//Jetzt
RequestAction(23456, true); //23456 ist die STATE Variable
paresy
PS: Für euch Entwickler gibt es auch noch RequestActionEx, welche den Sender in der Systemvariable beeinflussen kann.