Laufzeitproblem

Hallo an Alle, ich habe eine Booleanvariable die 2 Skripte auf Aktualisierung triggert. (Bewegungsmelder) Im Skript frage ich den Wert der Variable ab und wenn diese True ist schalte ich Aktoren ein.Ab und zu habe ich das Problem, dass die Varaiable ($_IPS[“value”] noch nicht auf true gesetzt ist obwohl die Variable true ist. Hat jemand Ideen? Wie gesagt es ist nur manchmal.

Das ist sehr unwahrscheinlich, da das Script ja nur deshalb aufgerufen wird, weil die Boolvariable sich ändert bzw. true ist, je nach dem wie du das Ereignis konfiguriert hast.

Wenn du zwei Boolvariablen als Auslöser hast, dann solltest du die Variablen explizit abfragen, um sicher festzustellen ob eine Aktiv ist.

Ich habe es wie folgt umgesetzt, das läuft in mehreren Räumen stabil:

<?

$LeuchteID = 45776;
$debug = true;

$InnenLichtFrei = GetValueBoolean(22352);
$Bewegung1 = GetValueBoolean(37404);
$Bewegung2 = GetValueBoolean(39197);
$einschaltdauer = GetValueInteger(26870);
$automatik = GetValueBoolean(44757);

if (($_IPS['SENDER'] == "Variable") AND ($automatik)) {
    if ($InnenLichtFrei) {
        RequestAction($LeuchteID, True);
        if ($debug)
            IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Bewegung ". $_IPS['VARIABLE'] . " " . boolStringEinAus($_IPS['VARIABLE']) . " und InnenlichtFrei = " . boolStringEinAus($InnenLichtFrei) . "--> Licht EIN");
    } else {
        if ($debug)
            IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Bewegung ". $_IPS['VARIABLE'] . " " . boolStringEinAus($_IPS['VARIABLE']) . " und InnenlichtFrei = " . boolStringEinAus($InnenLichtFrei) . "--> KEIN Licht");
    }
    IPS_SetScriptTimer($_IPS['SELF'], $einschaltdauer);
}

if ($_IPS['SENDER'] == "TimerEvent")  {
    if ((!$Bewegung1 AND !$Bewegung2)) { // nur ausschalten, wenn kein Bewegungsmelder mehr aktiv
        RequestAction($LeuchteID, false);
    	IPS_SetScriptTimer($_IPS['SELF'], 0);
        if ($debug)
            IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Keine Bewegung --> Licht AUS");
    }
}


function boolStringEinAus($bValue = false) {                      // returns string
    return ($bValue ? 'ein         ' : 'aus         ');
}

Ich denke, die Variablennamen sind sprechend genug :wink: .

Objektbaum dazu
grafik

Du hast mich falsch verstanden eine Variable löst zwei Skripte aus. Jeweils mit einem Ereignis auf Aktualisierung ohne Bedingung. Der Phänomen tritt nur manchmal auf und ich gebe im Debug innerhalb der Abfragen den Wert und die VariablenID aus. Dabei ist mir aufgefallen das das Ereignis auslöst aber der Variablenwert nicht true ist obwohl er es sein müsste.

ok, dann habe ich wohl nicht richtig gelesen

Bedeutet auch ein Aktualisieren der Variable mit False würde das Ereignis auslösen, bei LCN Binäreingängen werden z.B. immer alle 8 Eingänge geschrieben/aktualisiert.

Das Ereignis wird doch durch die Aktualisierung der Variablen, also hoffentlich durch True, ausgelöst und somit das Script aufgerufen.
Könnte es sein, dass die Variable nur sehr kurz True ist und bei der expliziten Abfrage im Script schon wieder false?

Ich versuch mal das Ereignis nur auf True zu triggern. Ich berichte vom Ergebnis.

Hallo Ralf, also ich habe jetzt die beiden Skripte zu einem zusammengefasst. Jetzt gibt es also nur ein Ereignis für die Variable. Der Wert in $_IPS[„VALUE“] stimmt jetzt immer. Ich habe den Trigger wieder auf Aktualisierung gestellt. Hatte wahrscheinlich was mit den zwei Triggern zu tun. Ich beobachte weiter.

1 „Gefällt mir“