Variable aus Skript wie über WebFront schalten

Ich habe jetzt schon einige Zeit gesucht, aber noch keine Lösung gefunden.

Ich würde gerne über ein Skript eine Variable so schalten, als wäre diese über das WebFront geschaltet worden.

Hintergrund ist, dass ich ein PHP Modul erstellt habe, was mehrere Geräte zu einer Gruppe zusammen fasst und diese alle über eine Zentralfunktion gemeinsam steuert. (Alarmbeleuchtung, Zentrale Lichtsteuerung usw.)

Derzeit kann ich über mein Modul direkt Variablen setzen und auch HomeMatic Geräte ansteuern, da ich im Modul zuerst prüfe, ob es ein HM Gerät ist und dann die entsprechende Funktion ausführe. Diese Prüfung müsste ich aber jetzt für jeden Gerätetyp durchführen, der von Symcon unterstützt wird. Dabei würde es genügen, wenn einfach die Funktion ausgeführt werden würde, welche auch das WebFront auslöst. Dies würde mein Modul universell einsetzbar machen und nicht auf HM Geräte begrenzen.

Für Hinweise, wie das zu lösen ist, wäre ich sehr Dankbar.

Wenn du ein Modul schreibst, Schau dir mal die Funktion RequestAction an.
Die existiert auch in den Original-Instanzen um eine Aktion an eine Statusvariable zu binden und kannst du mit IPS_RequestAction(InstanzId,Ident) aufrufen.

Michael

Auf die Idee mit RequestAction bin ich auch schon gekommen, aber wie das so oft ist scheitert es an Kleinigkeiten. Ich habe kein IPS_ davor gesetzt :banghead:

Vielen Dank für den Tipp. Werde ich gleich mal ausprobieren.

Für alle die etwas ähnliches vor haben, hier mein Ansatz:



$TargetID = 1234; // Hier die ID der zu schaltenden Variable einsetzen
$value = xyz; //Hier den Wert eintragen, der gesetzt werden soll

$pID = IPS_GetParent($TargetID);
$VariableName = IPS_GetName($TargetID);

if (@IPS_RequestAction($pID, $VariableName, $value) == false){
   SetValue($TargetID, $value);  //Setzt die Variable direkt, falls RequestAction nicht aufgerufen werden kann.
}


Das ist leider falsch. Ändere den Namen der Variable und dein Script funktioniert nicht mehr. Du musst schon den Ident der Variable übergeben.
Michael