(ERLEDIGT) DOIF kommt nicht über CMD1 oder CMD3 hinaus...

Begonnen von misux, 02 Juni 2018, 22:10:44

Vorheriges Thema - Nächstes Thema

misux

HI! Irgendwie habe ich mir mein DOIF zerschossen finde aber den Fehler nicht...

Wenn TVTime on oder off geht  Schafft mein DOIF nur den CMD_1 oder den CMD_3... mehr interessiert ihn nicht... Wo liegt mein Fehler? Könnte mir jemand auf die sprünge helfen?


([LichtSensor:brightness] < 6.5 and [?TVTime:state] eq "off" and [?15:00-22:15]) (set WZBodenLed on)
DOELSEIF
([LichtSensor:brightness] < 5.5 and [?TVTime:state] eq "off" and [?15:00-22:15]) (set WZEZ_WZFLed on)
DOELSEIF
([?LichtSensor:brightness] < 6.5 and [TVTime:state] eq "off" and [?15:00-22:15]) (set WZBodenLed on)
DOELSEIF
([?LichtSensor:brightness] < 5.5 and [TVTime:state] eq "off" and [?15:00-22:15]) (set WZEZ_WZFLed on)
DOELSEIF
([TVTime:state] eq "off" and [22:15-05:00] and [?PartyTime:state] eq "off") (set WZEZ_WZFLed on-for-timer 600) (set WZBodenLed on-for-timer 900)
DOELSEIF
([TVTime:state] eq "off" and [?22:15-05:00] and [PartyTime:state] eq "on") (set WZBodenLed on) (set WZEZ_WZFLed on)
DOELSEIF
([?TVTime:state] eq "off" and [?22:15-08:00] and [PartyTime:state] eq "off") (set WZBodenLed off) (set WZEZ_WZFLed off)
DOELSEIF
([TVTime:"on"] and [?WZBodenLed:"on"]) (set WZBodenLed off)
DOELSEIF
([TVTime:"on"] and [?WZEZ_WZFLed:"on"]) (set WZEZ_WZFLed off)
DOELSEIF
([LichtSensor:brightness] > 6.5) (set WZBodenLed off)
DOELSEIF
([LichtSensor:brightness] > 5.5) (set WZEZ_WZFLed off)

Damian

Das hat etwas mit Logik zu tun: eine Zahl die kleiner als 5,5 ist, ist immer auch kleiner als 6,5 ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

misux

 :o

OKay, verstehe, aber wie gebe ich dem DOIF zu verstehen das er bei diesen Werten schalten soll aber AUCH wenn diese dadrunter sind und auf einmal TVTime on oder off geschaltet wird...

Damian

#3
Zitat von: misux am 02 Juni 2018, 22:21:51
:o

OKay, verstehe, aber wie gebe ich dem DOIF zu verstehen das er bei diesen Werten schalten soll aber AUCH wenn diese dadrunter sind und auf einmal TVTime on oder off geschaltet wird...

Bei kleiner zuerst kleine Zahlen abfragen, bei größer mit großen anfangen - das gilt für alle Programmiersprachen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

misux

Hmm... habe es versucht anzupassen... jetzt hängt er komplett beim CDM_1 egal ob ich TVTime on oder off schalte...


([?LichtSensor:brightness] < 5.5 and [TVTime:state] eq "off" and [?15:00-22:45]) (set WZEZ_WZFLed on)
DOELSEIF
([LichtSensor:brightness] < 5.5 and [?TVTime:state] eq "off" and [?15:00-22:45]) (set WZEZ_WZFLed on)
DOELSEIF
([?LichtSensor:brightness] < 6.5 and [TVTime:state] eq "off" and [?15:00-22:45]) (set WZBodenLed on)
DOELSEIF
([LichtSensor:brightness] < 6.5 and [?TVTime:state] eq "off" and [?15:00-22:45]) (set WZBodenLed on)
DOELSEIF
([TVTime:state] eq "off" and [22:45-05:00] and [?PartyTime:state] eq "off") (set WZEZ_WZFLed on-for-timer 600) (set WZBodenLed on-for-timer 900)
DOELSEIF
([TVTime:state] eq "off" and [?22:45-05:00] and [PartyTime:state] eq "on") (set WZBodenLed on) (set WZEZ_WZFLed on)
DOELSEIF
([?TVTime:state] eq "off" and [?22:45-08:00] and [PartyTime:state] eq "off") (set WZBodenLed off) (set WZEZ_WZFLed off)
DOELSEIF
([LichtSensor:brightness] > 6.5) (set WZBodenLed off)
DOELSEIF
([LichtSensor:brightness] > 5.5) (set WZEZ_WZFLed off)

misux

#5
Habe es jetzt mal komplett neu gemacht weil irgendwie nix mehr funktioniert hat...

Habe aber immernoch das Problem das bei TVTime "on" bleibt er jedesmal bei cmd:1 hängen und cmd_3 ignoriert er... egal ob ich kleiner zuerst setze oder größer...

([TVTime:state] eq "on" and [?LichtSensor:brightness] < 5.5) (set WZEZ_WZFLed off)
DOELSEIF
([?TVTime:state] eq "on" and [LichtSensor:brightness] < 5.5) (set WZEZ_WZFLed off)
DOELSEIF
([TVTime:state] eq "on" and [?LichtSensor:brightness] < 6.5) (set WZBodenLed off)
DOELSEIF
([?TVTime:state] eq "on" and [LichtSensor:brightness] < 6.5) (set WZBodenLed off)
DOELSEIF
([TVTime:state] eq "off" and [?PartyTime:state] eq "off") (set WZEZ_WZFLed on-for-timer 600) (set WZBodenLed on-for-timer 900)
DOELSEIF
([TVTime:state] eq "off" and [PartyTime:state] eq "on") (set WZBodenLed on) (set WZEZ_WZFLed on)
DOELSEIF
([?TVTime:state] eq "off" and [PartyTime:state] eq "off") (set WZBodenLed off) (set WZEZ_WZFLed off)

choetzu

Hmm, ich versteh nicht ganz wieso du einmal bei cmd1 auf on triggerst und dann bei cmd2 auf < 5.5.. evtl gehts ja so..


([TVTime:state] eq "on" and [LichtSensor:brightness] < 5.5 and [?WZEZ_WZFLed] eq "on") (set WZEZ_WZFLed off
DOELSEIF
([TVTime:state] eq "on" and [LichtSensor:brightness] < 6.5 and [?WZBodenLed] eq "on") (set WZBodenLed off)
..........

Natürlich darf kein do always gesetzt sein..
Raspi3, EnOcean, Zwave, Homematic

misux

Zitat von: choetzu am 03 Juni 2018, 09:09:33
Hmm, ich versteh nicht ganz wieso du einmal bei cmd1 auf on triggerst und dann bei cmd2 auf < 5.5..

Hmmm.... Jetzt wo du es sagst... Weiß ich das auch nicht so genau....  ::)

Werde dein Beispiel mal antesten...

Danke!

misux

#8
das ist eigenartig... das funktioniert auch nicht... Habe jetzt mal was genz einfaches getestet... leider ignoriert er die zweite TVTime ON sequenz auch... er bleibt beim ertsen cmd stehen...
Da stimmt doch was nicht... ???


([TVTime:state] eq "on" and [Tageslicht_indoorSensor] eq "Nacht" and [?14:00-22:15]) (set WZEZ_WZFLed off)
DOELSEIF
([TVTime:state] eq "off" and [Tageslicht_indoorSensor] eq "Nacht" and [?14:00-22:15]) (set WZEZ_WZFLed on)
DOELSEIF
([TVTime:state] eq "on" and [Tageslicht_indoorSensor] eq "Nacht" and [?14:00-22:15]) (set WZBodenLed off)
DOELSEIF
([TVTime:state] eq "off" and [Tageslicht_indoorSensor] eq "Nacht" and [?14:00-22:15]) (set WZBodenLed on)

rischbiter123

Ich bin mir nicht ganz sicher, aber arbeitet DOIF nicht so, dass es bei einer Triggerung die einzelnen Zweige nacheinander abarbeitet, bis es eine Übereinstimmung findet und dann den entsprechenden Befehl ausführt? Und dort dann praktisch bis zur nächsten Änderung wartet? Wenn ja, dann müssten doch die Befehle, die bei gleicher Bedingung ausgeführt werden sollen, auch in einem Zweig stehen.
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

choetzu

Dein ist erneut anders :)

Rischbiter123 hat recht. Zudem macht cmd3 nicht Sinn, weil es genau die selbe Bedingung hat wie cmd3. So sollte es eigentlich gehen, oder?


([TVTime:state] eq "on" and [Tageslicht_indoorSensor] eq "Nacht" and [?14:00-22:15])
(set WZEZ_WZFLed off)
(set WZBodenLed off)
DOELSEIF
([TVTime:state] eq "off" and [Tageslicht_indoorSensor] eq "Nacht" and [?14:00-22:15])
(set WZEZ_WZFLed on)
(set WZBodenLed on)
Raspi3, EnOcean, Zwave, Homematic

misux

Ich hatte ja im POST #5 ja das gleiche Problem obwohl die Bedingungen unterschiedlich waren, deshalb habe ich die komplett abgespeckte Variante versucht um nachvollziehen zu können wo das Problem
liegt...

Werde heute Abend mal folgendes probieren und schauen ob das funktioniert...


([LichtSensor:brightness] < 5.5 and [TVTime:state] eq "off" and [?15:00-22:15]) (set WZBodenLed on)
DOELSEIF
([LichtSensor:brightness] < 6.5 and [TVTime:state] eq "off" and [?15:00-22:15]) (set WZEZ_WZFLed on)
DOELSEIF
([TVTime:state] eq "off" and [22:15-05:00] and [?PartyTime:state] eq "off") (set WZEZ_WZFLed on-for-timer 600) (set WZBodenLed on-for-timer 900)
DOELSEIF
([TVTime:state] eq "off" and [?22:15-05:00] and [PartyTime:state] eq "on") (set WZBodenLed on) (set WZEZ_WZFLed on)
DOELSEIF
([?TVTime:state] eq "off" and [?22:15-08:00] and [PartyTime:state] eq "off") (set WZBodenLed off) (set WZEZ_WZFLed off)
DOELSEIF
([TVTime:"on"] and [?WZBodenLed:"on"]) (set WZBodenLed off)
DOELSEIF
([TVTime:"on"] and [?WZEZ_WZFLed:"on"]) (set WZEZ_WZFLed off)
DOELSEIF
([LichtSensor:brightness] > 6.5) (set WZBodenLed off)
DOELSEIF
([LichtSensor:brightness] > 5.5) (set WZEZ_WZFLed off)

Damian

Ohne mich mit der Logik der Abfragen auseinandersetzen zu wollen, diese Syntax:

Zitat[?WZBodenLed:"on"]

macht wenig Sinn.

Ohne Fragezeichen
Zitat[WZBodenLed:"on"]
ist diese Ereignisabfrage im Augenblick des Events true und sonst ist sie immer false. Mit Fragezeichen verhinderst du den Trigger des Events. Somit ist
Zitat[?WZBodenLed:"on"]
niemals wahr.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

misux

#13
Aber stellt das Fragezeichen nicht eine reine Abfrage des Zustands dar ohne zu Triggern wenn sich der Status ändert??

Oder muss das dann so klingen:

[?WZBodenLed:state] eq "on"

Also zum Verständnis:

Zitat[?WZBodenLed:"on"]
alles Mist?

Zitat[WZBodenLed:"on"]
Abfrage und Triggerung auf den Zustand?

Zitat[WZBodenLed:state] eq "on"
Abfrage und Triggerung auf den Zustand?

Zitat[WZBodenLed] eq "on"
Abfrage und Triggerung auf den Zustand?

Ist das so korrekt?



Damian

Zitat von: misux am 04 Juni 2018, 12:32:43
Aber stellt das Fragezeichen nicht eine reine Abfrage des Zustands dar ohne zu Triggern wenn sich der Status ändert??

Oder muss das dann so klingen:

[?WZBodenLed:state] eq "on"

Also zum Verständnis:

[?WZBodenLed:"on"] reine Abfrage des Zustandes?

[WZBodenLed:"on"] Abfrage und Triggerung auf den Zustand

[?WZBodenLed:"on"] alles Mist

[WZBodenLed:"on"] Abfrage und Triggerung auf den Zustand


Ist das so korrekt?

Nein, sobald Anführungszeichen vorkommen, fragst du Events ab.

Abfrage eines Zustandes bedeutet Abfrage eines Status z. B. [WZBodenLed] oder Abfrage eines Readings z. B. [WZBodenLed:state], denn nur diese können einen bestimmten Wert (Zustand) beinhalten/speichern. Nur nur dort macht das Fragezeichen am Anfang einen Sinn.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF