Ereignis löst aus, obwohl eine Bedingung nicht erfüllt ist

Moinsen,

ich mal wieder :wink:

Mein Ziel ist, dass ich über die Anwesenheitssteuerung der G-Tags bei erkennen von gemeinsamer Abwesenheit meiner Liebsten und mir automatisch alle Lichter ausgeschaltet werden. Die Thematik wie immer möglichst ohne Nutzung von Skripten.

im zweiten Schritt soll dann beim Erkennen einer Anwesenheit (einer von uns steht quasi vor der Haustüre) das Flurlicht angehen und im Wohnzimmer gedimmtes Licht geschaltet werden. Aktuell zu Testzwecken sollen die Lichter erst geschaltet werden, wenn beide anwesend sind.

Ich scheitere jedoch schon am ersten Schritt :face_with_symbols_over_mouth:

Vorgehen meinerseits ist:
Boolean-Variable anlegen

Danach ein Ereignis hinterlegt, damit bei Erkennung von Abwesenheit von Steffi + Simon die Variable auf "abwesend"gesetzt wird.

Ich erhalte die Meldung

was korrekt ist, da meine Frau aktuell daheim ist.

Ich habe dann, ergänzend hierzu ein Ereignis auf die Aktivliste „alle Lichter aus“ gepackt:

Es wird dabei folgendes Skript angesteuert:
image

und die hinterlegten Lichter gehen aus.
Bis hierhin alles nachvollziehbar und die Ausführung klappt auch. Sind beide Referenz-Variablen abwesend, so werden alle Lichter ausgeschaltet.



Jetzt kommen wir zu Punkt 2 den ich nicht verstehe.
Möchte ich nun mit der gleichen Boolean-Variablen wieder von abwesend auf anwesend schalten, so hinterlege ich ein zweites Ereignis:

soweit noch unspektakulär - nur was ich jetzt nicht verstehe.
Warum meldet IPS jetzt

obwohl ich noch abwesend bin?
eigentlich müsste doch hier genau wie im ersten Teil die Meldung kommen

Es sind doch eben nicht beide Bedingungen erfüllt. Meine Frau ist zwar daheim, meine Wenigkeit aber nicht. Somit müsste die Aktion doch blockiert sein?

wo in den Ereignissen ist mein Fehler?

Grüße
Simon

Hallo Simon,

die Sache mit den weiteren Bedingungen ist schon etwas tricky. So ist schon Dein erster Teil nicht komplett richtig. Deine Variable Anwesenheit wird zwar auf abwesend geschaltet, wenn Deine Frau abwesend ist und danach Du auch. Wenn Du aber als erster abwesend bist und dann Deine Frau, schaltet nichts, da der Trigger auf Deiner Anwesenheit liegt. Du muss also noch einen zweiten Trigger auf Deine Frau anlegen und Deine Abwesenheit als Nebenbedingung definieren.

Der 2. Fall ist dagegen deutlich einfacher, da Du keine weitere Bedingung benötigst. Wenn einer von Euch beiden anwesend ist, dann muss auf anwesend geschaltet werden, egal ob der andere da ist oder nicht.

Grüße
Jürgen

Mit einem einfachen Skript geht das viel einfacher:

<?php
    $max = false;
    foreach (IPS_GetChildrenIDs($_IPS['SELF']) as $Child){
        $ID = IPS_GetEvent($Child)['TriggerVariableID'];
        $max = max($max, GetValue($ID));
    }

    SetValue(IPS_GetParent($_IPS['SELF']), $max);

Das Skript dann durch beliebig viele An/Abwesenheiten triggern. Das Ergebnis ist dann immer korrekt.

Grüße
Jürgen

1 „Gefällt mir“

Danke für den Hinweis, da muss man erstmal drauf kommen :wink:
Ich habe die Einstellungen jetzt wie von dir vorgeschlagen umgesetzt und es läuft ohne Script und ist für mich somit nachvollziehbar.

schaue ich mir am Wochenende mal an - solange ich das Script nachvollziehen kann nutze ich es dann auch :smiley:
Ich nehme an die „TriggerVariableID“ wären dann die IDs meine G-Tags?

Dein Konzept sieht eigentlich soweit korrekt aus. Funktioniert das abgesehen von der Darstellung?

Die Darstellung ob ein Ereignis blockiert ist hängt nur von den erweiterten Bedingungen ab. Bist du also abwesend und deine Frau nicht, dann ist das Ereignis, das auf ihre Abwesenheit reagiert aktiv. Denn würde die Variable nun auf „Abwesend“ wechseln, würde die dazugehörige Aktion ausgeführt werden. Anders herum ist das Ereignis, welches auf deine Abwesenheit reagiert, inaktiv, da die erweiterte Bedingung, dass deine Frau abwesend ist, nicht erfüllt ist. Würdest du jetzt also (noch einmal) das Haus verlassen, dann würde die Aktion nicht ausgeführt werden, denn deine Frau ist ja zu Hause.