Actionsscript

Hallo,

ich habe an eine Boolean ein Actionsskript gehängt

<?
$ScriptID             =     $_IPS['SELF'];
$Parent             =     IPS_GetParent($ScriptID);
$ObjektIdentAN = "AN";
$ObjektIdentAUS = "AUS";  
$objektAN = IPS_GetObjectIDByIdent ($ObjektIdentAN, $Parent);
$objektAUS = IPS_GetObjectIDByIdent ($ObjektIdentAUS, $Parent);


if ($_IPS['SENDER'] == "WebFront"){ 
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']); 
    if ($_IPS['VALUE']){ 
      IPS_RunScript($objektAN);
    }
    else {
      IPS_RunScript($objektAUS);
    }
}

und zwei Skripte mit Ident AN und AUS.

AN

<?
$ScriptID             =     $_IPS['SELF'];
$Parent             =     IPS_GetParent($ScriptID); 

RequestAction($Parent, true); 
 
 if (GetValue($Parent)){
  IPS_SetScriptTimer($_IPS['SELF'], 0);
}
else{
  
     RequestAction($Parent, true);
  
  IPS_SetScriptTimer($_IPS['SELF'], 8);
}

leider lässt sich der Stecker damit gar nicht mehr schalten, weder über WF noch über die Skripte An und Aus.

Ohne das Actionsscript kann ich mit den Skripten problemlos schalten.

wo liegt mein Denkfehler?

Gruß

Oliver

Ohne Screenshot vom Objektbaum nicht nachzuvollziehen.
Michael

Hallo,

hier gerne

Gruß

Oliver

hier noch das Anscript mit Ident

Also ist das eine Instanz mit Statusvariable wo du jetzt dein Aktions-Skript eingetragen hast.
Dann hast du mehrere Fehler.
Zum einen darfst du nicht einfach mit SetValue die Statusvariable ändern. Das macht Symcon bzw. das Modul wenn der Aktor seinen Zustand ändert.

Und, du hast eine Endlosschleife gebaut.
Deine an und aus Scripte benutzen RequestAction auf die Statusvariable, was wiederum dein Aktions-Skript auslöst, was dein an/aus Skript starten, was das Aktions-Skript auslöst und so weiter.

Eine Schaltaktionen wird also auch nie ausgelöst.
Du darfst in eigenen Aktions-Skripten kein RequestAction benutzen, sondern musst auf die Instanz-Funktionen zurückgreifen:

Michael

ok,
wenn das setvalue hier nicht geht, was muss ich machen. in der Doku stand das mit dem Setvalue.

bei den Tasmota kann ich auf Tasmota_Setpower wechseln, aber bei den inline geräten geht sowit mir bekannt nur der RequestAction. Was mach ich da?

Gruß

Oliver

Das in der Doku bezieht sich auf selbst angelegte Variablen. Nicht auf Statusvariablen einer Instanz.
Da kommt eigentlich auch eine schöne Meldungen das so eine Variable read-only ist. Leider fehlt das aktuell bei Statusvariablen von PHP-Modulen.

Und wegen dem eventuell fehlenden Instanz-Funktionen; im Zweifel im passenden Thema den Autor darauf ansprechen.
Michael

Du kannst sonst auch IPS_RequestAction($InstanzID, $IdentDerVariablen, $Wert); aufrufen. Das schaltet die Variable im Sinne der Instanz und umgeht somit ein mögliches Aktionsskript. Falls die Variablennamen nicht selbsterklärend sind: $InstanzID ist die ID der Instanz, bei dir also 21811, $IdentDerVariablen ist der Ident der Variablen, die du schalten möchtest. Den findest du schnell via Doppelklick heraus. $Wert ist der Wert auf den du die Variable schalten möchtest.