[working as designed] Status Variable und FS20_SwicthMode

Hallo zusammen,

mir ist aufgefallen, dass bei Verwendung der Befehle FS20_SwicthMode und FS20_SwitchDuration die Status Variable des FS20TX nicht aktualisiert wird.

Ist das Absicht oder ein Bug?

Wenn ich in IPS direkt auf die Instance gehe und im Testcenter ON / OFF klicke, klappt die Aktualisierung der Status Variable problemlos…

Gruß Hooker

Hallo @Hooker,

also normalerweise, sollte es ganz einfach funktionieren. ist aber schlecht zu sagen, ohne zu wissen was du da eingetragen hast.
häng doch mal eine auszug on deinem skript bei.dann kann man mal sehen ob alles richtig ist. gruss uwe.

Hallo,

anbei mal ein Skript. Vielleicht noch als Korrektur - dass Problem besteht eigentlich nur mit dem SwitchDuration…

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : test.ips.php
Trigger  :
Interval :
*/
echo 'vorher: ';
$status = GetValueBoolean('Licht_Flur');
if($status != true){ echo "aus";}else {echo "an";}
echo '<br>';
$status = FS20_SwitchDuration(64311,true,3);
echo 'schalten ';
if($status != true){ echo "fehlgeschalgen";}else{ echo "erfolgreich";}
echo '<br>';
echo 'nachher: ';
$status = GetValueBoolean('Licht_Flur');
if($status != true){ echo "aus";}else{ echo "an";}
IPS_Sleep(4000);
echo '<br>';
echo 'nach 4 Sekunden: ';
$status = GetValueBoolean('Licht_Flur');
if($status != true){ echo "aus";}else{ echo "an";}

?>

Ergebnis:

vorher: aus
schalten erfolgreich
nachher: an
nach 4 Sekunden: an <— müsste doch aus sein oder?

Wenn das der Fall ist, dann ist alles in Ordnung. Das bei SwitchDuration die Statusvariable nicht aktualisiert wird, ist beabsichtigt.

Der Grund: Es gibt bei FS20 keine Zustandsmeldungen, deshalb werden dir auch keine gemeldet.

Falls du die Variable zurücksetzen möchtest, musst du eben selbst „Hand anlegen“. Den Weg über IPS_Sleep(…) ist aber nicht ratsam, weil während der 4 s Wartezeit kein anderes Skript ausgeführt werden kann. Zweitens würde ich die Echos auskommentieren, die sind nur während des debuggen (überprüfen) deines Skriptes sinnvoll.

Probiere besser diese Variante:

<?

/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Probe.ips.php
Trigger  : Execute oder RunScript
Interval : keines
*/

$instance=64311;
$duration=3;
$status=GetValueBoolean('Licht_Flur');

switch($IPS_SENDER) {
   case "Execute":
   case "RunScript":
      $success=FS20_SwitchDuration($instance,(!$status),(int)$duration);
      IPS_SetScriptTimer($IPS_SELF,(int)$duration);
   break;
   case "TimerEvent":
      IPS_SetScriptTimer($IPS_SELF,0);
      SetValueBoolean('Licht_Flur',(!$status));
   break;
}

?>

Gruß
Günter

Das habe ich gerade heute morgen auch zufällig festgestellt.

Ich denke aber, dass der „FS20_SwitchDuration“-Befehl beim Zurückschalten garnichts mehr bewirken kann, da mit dem Befehl ?wahrscheinlich? nur ein Telegramm -für xx-Sekunden anzuschalten (oder auszuschalten)- an die Steckdose gesandt wird und das Ausschalten nicht durch ein Telegramm aus IPS sondern in der Steckdose selbst erfolgt.

Der Script wäre dann zum Zeitpunkt des Zurückschaltens schon längst abgearbeitet und könnte garnicht mehr eingreifen. (wenns so ist)

Edit:

–uups, ist ja gerade schon beantwortet worden