Hallo,
ich versuche bisher erfolglos mittels DOIF ein HUEDevice zu steuern. Ziel: wenn ich einen der Rolladentaster für runter drücke, dann soll bei einer Außenhelligkeit <5 die Lava_Lampe hochdimmen. Das Problem ist, dass die Bedingung [Lichtsensor:brightnes] im DOIF nicht wirkt. Die Lampe geht auch bei einer Helligkeit >5 an. Mein DOIF:
(([Taster_EZ:buttons] eq "pressed" and [Taster_EZ:state] eq "B0") or ([Taster8_EZ_L:buttons] eq "pressed" and [Taster8_EZ_L:state] eq "B0") and [Lichtsensor:brightness]<5) (set Lava_Lampe pct 100 : ct 380 : transitiontime 200) DOELSEIF (([Taster_EZ:buttons] eq "pressed" and [Taster_EZ:state] eq "A0") or ([Taster8_EZ_R:buttons] eq "pressed" and [Taster8_EZ_R:state] eq "A0") and [Lichtsensor:brightness]<5) (set Lava_Lampe pct 100 : ct 380 : transitiontime 200) DOELSE
Was mache ich falsch?
Zitat von: rih am 22 Juli 2017, 10:34:43Was mache ich falsch?
Verschiedenes. Code nicht in Code-Tags, kein List angefügt, keine Leerzeichen um die ">"...
Hallo,
Leerzeichen um die die < brachten keinen Erfolg. Was ist mit den Codetags gemeint? List gibt aus:
Internals:
CFGFN
DEF (([Taster_EZ:buttons] eq "pressed" and [Taster_EZ:state] eq "B0") or ([Taster8_EZ_L:buttons] eq "pressed" and [Taster8_EZ_L:state] eq "B0") and [Lichtsensor:brightness] < 5) (set Lava_Lampe pct 100 : ct 380 : transitiontime 200) DOELSEIF (([Taster_EZ:buttons] eq "pressed" and [Taster_EZ:state] eq "A0") or ([Taster8_EZ_R:buttons] eq "pressed" and [Taster8_EZ_R:state] eq "A0") and [Lichtsensor:brightness] < 5) (set Lava_Lampe pct 100 : ct 380 : transitiontime 200) DOELSE
NAME Lava_Lampe_Auto
NR 2137
NTFY_ORDER 50-Lava_Lampe_Auto
STATE cmd_3
TYPE DOIF
Readings:
2017-07-22 10:48:18 Device Lichtsensor
2017-07-22 10:46:50 cmd 3
2017-07-22 10:46:50 cmd_event Taster_EZ
2017-07-22 10:46:50 cmd_nr 3
2017-07-22 10:48:18 e_Lichtsensor_brightness 2163
2017-07-22 10:46:50 e_Taster_EZ_buttons released
2017-07-22 10:46:50 e_Taster_EZ_state A0
2017-07-22 10:46:50 state cmd_3
Condition:
0 (ReadingValDoIf($hash,'Taster_EZ','buttons') eq "pressed" and ReadingValDoIf($hash,'Taster_EZ','state') eq "B0") or (ReadingValDoIf($hash,'Taster8_EZ_L','buttons') eq "pressed" and ReadingValDoIf($hash,'Taster8_EZ_L','state') eq "B0") and ReadingValDoIf($hash,'Lichtsensor','brightness') < 5
1 (ReadingValDoIf($hash,'Taster_EZ','buttons') eq "pressed" and ReadingValDoIf($hash,'Taster_EZ','state') eq "A0") or (ReadingValDoIf($hash,'Taster8_EZ_R','buttons') eq "pressed" and ReadingValDoIf($hash,'Taster8_EZ_R','state') eq "A0") and ReadingValDoIf($hash,'Lichtsensor','brightness') < 5
Devices:
0 Taster_EZ Taster8_EZ_L Lichtsensor
1 Taster_EZ Taster8_EZ_R Lichtsensor
all Taster_EZ Taster8_EZ_L Lichtsensor Taster8_EZ_R
Do:
0:
0 set Lava_Lampe pct 100 : ct 380 : transitiontime 200
1:
0 set Lava_Lampe pct 100 : ct 380 : transitiontime 200
2:
0
Helper:
event brightness: 2163,2163
globalinit 1
last_timer 0
sleeptimer -1
timerdev Lichtsensor
timerevent brightness: 2163,2163
triggerDev Lichtsensor
timerevents:
brightness: 2163
2163
timereventsState:
brightness: 2163
state: 2163
triggerEvents:
brightness: 2163
2163
triggerEventsState:
brightness: 2163
state: 2163
Internals:
Itimer:
Readings:
0 Taster_EZ:buttons Taster_EZ:state Taster8_EZ_L:buttons Taster8_EZ_L:state Lichtsensor:brightness
1 Taster_EZ:buttons Taster_EZ:state Taster8_EZ_R:buttons Taster8_EZ_R:state Lichtsensor:brightness
all Taster_EZ:buttons Taster_EZ:state Taster8_EZ_L:buttons Taster8_EZ_L:state Lichtsensor:brightness Taster8_EZ_R:buttons Taster8_EZ_R:state
Regexp:
0:
1:
All:
State:
Trigger:
Attributes:
Lass DOELSE weg. Erklärung gibt es, wenn mein PC wieder läuft.
Hallo Per,
DOELSE weglassen verändert leider nichts. Ein Attr. do allways bewirkt ebenfalls nichts.
Ich habe den Einsteigerleitfaden zum DOIF gelesen und glaube zu verstehen, warum ich das DOELSE weglassen soll, aber wie gesagt ändert das Weglassen am Verhalten nichts. Oder braucht es da noch eine besondere Aktion wie das DOIF neu anlegen etc.?
Hier nochmal der aktuelle Definitionsteil in Code Tags:
(([Taster_EZ:buttons] eq "pressed" and [Taster_EZ:state] eq "B0") or ([Taster8_EZ_L:buttons] eq "pressed" and [Taster8_EZ_L:state] eq "B0") and [Lichtsensor:brightness] < 5) (set Lava_Lampe pct 100 : ct 380 : transitiontime 200) DOELSEIF (([Taster_EZ:buttons] eq "pressed" and [Taster_EZ:state] eq "A0") or ([Taster8_EZ_R:buttons] eq "pressed" and [Taster8_EZ_R:state] eq "A0") and [Lichtsensor:brightness] < 5) (set Lava_Lampe pct 100 : ct 380 : transitiontime 200)
Mach mal ein Test-DOIF, welches nur verschiedene brightness-Werte abfragt.
Oder versuch mal:
[Lichtsensor:brightness:d] < 5
Erklärung (https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen)
Trotz Forum lesen und rumprobieren bin ich noch nicht weiter gekommen. :(
Der Lichtsensor an sich funktioniert. Die Brightness-Werteabfrage verwende ich auch in anderen DOIF's und Notify's. Das mit dem d wie dezimal habe ich versucht, keine Änderung.
Was mich wundert, warum steht im obigen List unter Helper "timerdev Lichtsensor" und "timerevent brightness"?
ZitatDie Lampe geht auch bei einer Helligkeit >5 an
Du hast folgende Bedingung
A or B and C > 5
A lässt die Bedingung unabhängig von C > 5 wahr werden. Da "and" höherrangig ist als "or". siehe http://www.schmidma.de/selfhtml/perl/sprache/operatoren.htm#rangfolge
Ich habe doch aber entsprechend Klammern gesetzt. Und warum lässt A die Bedingung wahr werden, wenn doch das "and" höherwertiger als "or" ist? Verstehe ich immer noch nicht.
Egal, habe das DOIF jetzt umgebaut (ohne DOELSEIF). So funktioniert es. Allerdings geht das Hochdimmen nicht, aber das ist eine andere Baustelle ...
((([Taster_EZ:buttons] eq "pressed" and [Taster_EZ:state] eq "B0") or ([Taster8_EZ_L:buttons] eq "pressed" and [Taster8_EZ_L:state] eq "B0") or ([Taster_EZ:buttons] eq "pressed" and [Taster_EZ:state] eq "A0") or ([Taster8_EZ_R:buttons] eq "pressed" and [Taster8_EZ_R:state] eq "A0")) and [Lichtsensor:brightness] < 5) (set Lava_Lampe pct 100 : ct 380 : transitiontime 200)
ZitatIch habe doch aber entsprechend Klammern gesetzt.
aber an der falschen Stelle, die roten Klammern sind nutzlos.
Zitatwenn doch das "and" höherwertiger als "or" ist
eben drum, die höherwertige Verknüpfung erfolgt zuerst.
A or B and C<5 ist eben nicht (A or B) and C<5
Zitat(([Taster_EZ:buttons] eq "pressed" and [Taster_EZ:state] eq "B0") or ([Taster8_EZ_L:buttons] eq "pressed" and [Taster8_EZ_L:state] eq "B0") and [Lichtsensor:brightness] < 5)