IPS_GetVariable

Hallo,

ich habe eine Reflexlichtschranke an meinen Stromzähler die an einen LCN-B8 hängt. Nun lasse ich ein Skript starten mit den Event „True“. Wenn ich jetzt im Skript meine Information dieser Status-Variable ansehe dann steht da bei „ValueBoolean“ mal eine 1 und mal nichts (0):

Skript:

<?
$TimerWert = IPS_GetVariable(44087 /*[Unser Zuhause\LCN\KG\Modul 6 SH2/1\Binary Input 8\Status]*/);
$status = $TimerWert["VariableValue"]["ValueBoolean"];
$temp = $TimerWert["VariableChanged"];
$time = date("H:i:s", $temp);

$alt = GetValueString(47081);
SetValueString(47081 /*[TEST]*/,$alt."
".$status." - ".$time);

?>

Ergebnis:


1 - 11:30:26
1 - 11:30:44
 - 11:31:03
1 - 11:31:20
 - 11:31:38
 - 11:31:56
1 - 11:32:13
1 - 11:32:31
 - 11:32:49
 - 11:33:07
 - 11:33:07
 - 11:33:25
1 - 11:33:42
1 - 11:33:59
1 - 11:34:19
 - 11:34:51
1 - 11:35:09
 - 11:35:27
 - 11:35:43
 - 11:35:56
 - 11:36:12
1 - 11:36:34
 - 11:37:04
1 - 11:37:21
1 - 11:37:38
 - 11:37:56
 - 11:38:14

Eigendlich müste doch wenn ich auf True Triggere immer eine 1 davorstehen.
Wo liegt der Fehler?
Hat jemand einen Tipp?

Gruß
Christian

Du musst $IPS_VALUE nutzen. Der Zeitpunkt an dem IPS_GetVariable aufgerufen wird im Skript muss nicht dem Wert entsprechen, der zum Triggerzeitpunkt dort gestanden hat. Dies ist durch die parallele Abarbeitung innerhalb von IP-Symcon zu erklären.

paresy

Danke paresy,

wie bekomme ich dann die genaue Zeit zum Triggerzeitpunkt?

http://php.net/manual/de/function.microtime.php

Genauer bekommst du es nicht.

@paresy
Da hab ich auch mal eine Frage dazu, habe da ein ähnliches Problem.
Du schlägst die microtime Funktion vor. Ok das verstehe ich. Wie löst Du das wenn man mehrere Trigger innerhalb einiger Millisekunden hat, welche das gleiche Script aufrufen mit dem speichern der Werte z.B. in eine Datei? Hier läuft das Script ja dann mehrmals parallel. Dazu müßte man ja eine Art Puffer aufbauen.

IPS_EnterSemaphore sollte dort helfen

paresy

Danke, das sollte mein Problem lösen.