[gelöst] Änderung eines Readings als Auslöser für ein DOIF

Begonnen von FHEM_newbie, 03 April 2022, 18:51:05

Vorheriges Thema - Nächstes Thema

FHEM_newbie

Mein Garagentor ist über die I/O Box von Hörmann und ESPEasy an FHEM angebunden. Ich möchte nun über ein DOIF das Event "Tor öffnet sich" verarbeiten. D.h. der Schalter TorZu (Reading von ESPEasy) ändert sich in diesem Fall von ON zu OFF. Geht das mit Event-on-Change? Ich will ja aber nur die Richtung von ON zu OFF abfragen und nicht anders herum. Irgendwie stehe ich auf dem Schlauch und wäre für einen Tipp dankbar.

Damian

z. B.
DOIF ([Garagentor:state] eq "on") DOELSEIF ([Garagentor:state] eq "off")
attr cmdState öffnet sich|geschlossen


Woanders kannst du auf den Status des DOIF-Devices "öffnet sich" abfragen. Wenn es bereits geöffnet ist, gibt es keine Statusänderung.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM_newbie

Vielen Dank! Ich dachte erst du hättest mich missverstanden, aber es funktioniert (nach kurzem Nachdenken) und auch in der Praxis tatsächlich:

define di_Torstatus DOIF ([ESPEasy_Supramatic:StateTorZu] eq "off") DOELSEIF ([ESPEasy_Supramatic:StateTorZu] eq "on")
attr di_Torstatus cmdState öffnet sich|geschlossen


Und dann frage ich diTorstatus eq "öffnet sich" im anderen DOIF ab.
Nur aus Interesse: Eine "direkte" Lösung ohne das Hilfs-DOIF gibt ist nicht, oder doch?

Damian

Zitat von: FHEM_newbie am 03 April 2022, 23:38:06
Vielen Dank! Ich dachte erst du hättest mich missverstanden, aber es funktioniert (nach kurzem Nachdenken) und auch in der Praxis tatsächlich:

define di_Torstatus DOIF ([ESPEasy_Supramatic:StateTorZu] eq "off") DOELSEIF ([ESPEasy_Supramatic:StateTorZu] eq "on")
attr di_Torstatus cmdState öffnet sich|geschlossen


Und dann frage ich diTorstatus eq "öffnet sich" im anderen DOIF ab.
Nur aus Interesse: Eine "direkte" Lösung ohne das Hilfs-DOIF gibt ist nicht, oder doch?

Direkt im gleichen DOIF geht genauso gut. Eigentlich ist das der Standardfall beim DOIF - nur bei Änderung des Zustands auszulösen. Im DOELSEIF-Fall musst du nichts eintragen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM_newbie

#4
Sorry jetzt muss ich nochmal blöd fragen: wenn mein Tor den ganzen Tag offen steht, dann trifft doch
([ESPEasy_Supramatic:StateTorZu] eq "off")  auch zu, das heißt eigentlich macht die Funktion nicht das was ich eigentlich wollte: nur im Moment des Öffnens auslösen.
Als Ergänzung noch: das Tor ist nicht die einzige Bedingung, ich verknüpfe über UND mit der Helligkeit und schalte damit ein Aussenlicht.

Damian

#5
define di_Torstatus DOIF ([ESPEasy_Supramatic:StateTorZu] eq "off") (tue etwas wenn sich das Tor öffnet) DOELSEIF ([ESPEasy_Supramatic:StateTorZu] eq "on")

Es gibt ja nur den Trigger beim Öffnen des Tores. Wenn das Tor offen ist, dann gibt es einen Trigger und dann wird auch nichts ausgeführt. Wenn du etwas mit UND verknüpfst dann musst du dort die Trigger rausnehmen. Von weiteren Bedingung hast aber anfangs nichts gesagt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM_newbie

Da hast du recht, ich hatte die zweite Bedingung erst nicht erwähnt - aber immerhin doch noch begriffen, dass sie hier relevant ist.  ;)
Was meinst du mit Trigger rausnehmen? Wenn das Aussenlicht eingeschaltet wurde den di_Torstatus wieder auf geschlossen setzen?

Damian

Zitat von: FHEM_newbie am 04 April 2022, 22:54:04
Da hast du recht, ich hatte die zweite Bedingung erst nicht erwähnt - aber immerhin doch noch begriffen, dass sie hier relevant ist.  ;)
Was meinst du mit Trigger rausnehmen? Wenn das Aussenlicht eingeschaltet wurde den di_Torstatus wieder auf geschlossen setzen?

Mit Fragezeichen definiert man eine reine Abfrage ohne Trigger, z. B.

define di_Torstatus DOIF ([ESPEasy_Supramatic:StateTorZu] eq "off" and [?bla:state] eq "on"]) (tue etwas wenn sich das Tor öffnet) DOELSEIF ([ESPEasy_Supramatic:StateTorZu] eq "on")
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM_newbie

Okay, nur um zu schauen, ob ich es richtig verstanden habe:

define di_Torstatus DOIF ([ESPEasy_Supramatic:StateTorZu] eq "off" and [Wetterstation:Wind] eq "windig") (tue etwas wenn sich das Tor öffnet) DOELSEIF ([ESPEasy_Supramatic:StateTorZu] eq "on")

wird ausgeführt wenn das Tor gerade geöffnet wird und es gleichzeitig beginnt windig zu werden, also Chance = fast 0

define di_Torstatus DOIF ([?ESPEasy_Supramatic:StateTorZu] eq "off" and [?Wetterstation:Wind] eq "windig") (tue etwas wenn sich das Tor öffnet) DOELSEIF ([ESPEasy_Supramatic:StateTorZu] eq "on")

wird ausgeführt wenn das Tor offen ist und es gleichzeitig windig ist

Das mit den Fragezeichen ist mir bisher noch nicht untergekommen, da muss ich mal meine ganzen DOIFs auf Richtigkeit prüfen...
Wobei ich eigentlich den Eindruck hatte, dass ein DOIF wie das erste trotzdem ausgeführt wird, obwohl das dann ja recht unwahrscheinlich wäre. Oder liegt das daran, dass ich < verwendet habe, z.B für eine Helligkeit unterhalb einer Schwelle?

Damian

Also mit

define di_Torstatus DOIF ([?ESPEasy_Supramatic:StateTorZu] eq "off" and [?Wetterstation:Wind] eq "windig") (...)

wird hier nie etwas von alleine passieren. Du musst dir schon überlegen, welches Device soll hier die Überprüfung der Bedingung auslösen. Bei diesem Device darfst du kein Fragezeichen setzen.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEM_newbie

Hmm, es scheint, ich habe es nicht richtig verstanden....  :'(

FHEM_newbie

Nach nochmaliger Betrachtung, glaube ich es jetzt endlich richtig verstanden zu haben:


define di_Torstatus DOIF ([ESPEasy_Supramatic:StateTorZu] eq "off" and [?Wetterstation:Wind] eq "windig") (tue etwas wenn sich das Tor öffnet) DOELSEIF ([ESPEasy_Supramatic:StateTorZu] eq "on")


wird ausgeführt wenn das Tor gerade geöffnet wird und es gleichzeitig windig ist


define di_Torstatus DOIF ([?ESPEasy_Supramatic:StateTorZu] eq "off" and [Wetterstation:Wind] eq "windig") (tue etwas wenn sich das Tor öffnet) DOELSEIF ([ESPEasy_Supramatic:StateTorZu] eq "on")


wird ausgeführt wenn es beginnt windig zu sein und gleichzeitig das Tor offen ist. Richtig?

Danke für die Geduld und die Mühe des Erklärens!

Damian

Zitat von: FHEM_newbie am 12 April 2022, 22:34:23
Nach nochmaliger Betrachtung, glaube ich es jetzt endlich richtig verstanden zu haben:


define di_Torstatus DOIF ([ESPEasy_Supramatic:StateTorZu] eq "off" and [?Wetterstation:Wind] eq "windig") (tue etwas wenn sich das Tor öffnet) DOELSEIF ([ESPEasy_Supramatic:StateTorZu] eq "on")


wird ausgeführt wenn das Tor gerade geöffnet wird und es gleichzeitig windig ist


define di_Torstatus DOIF ([?ESPEasy_Supramatic:StateTorZu] eq "off" and [Wetterstation:Wind] eq "windig") (tue etwas wenn sich das Tor öffnet) DOELSEIF ([ESPEasy_Supramatic:StateTorZu] eq "on")


wird ausgeführt wenn es beginnt windig zu sein und gleichzeitig das Tor offen ist. Richtig?

Danke für die Geduld und die Mühe des Erklärens!
ja, in diesem Beispiel kann man beide Abfragen ohne Fragezeichen als Trigger sinnvollerweise zulassen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF