Hallo an alle,
ich habe ein DOIF, welches die Rollladen an der Wohnrimmertür auf Schlitz fahren soll, wenn man die Tür kippt oder die Rollladen hoch fahren soll, wenn man die Tür öffnet usw.
Jetzt mein Problem von dem ich hoffe, dass mir jemand helfen kann. Wenn die Beschattung eingeschaltet ist, sind alle Rollladen auf 21%. Ist jetzt allerdings die Tür gekippt und ich schalte die Beschattung aus sollen alle Rollladen hoch fahren. Die Tür fährt aber nicht hoch sondern schaltet cmd5 welches eigentlich erst bei unter 20% schalten soll und fährt 1% runter statt hoch.
ich hab mal das List angehangen.
Vielen Dank im Voraus
Christian
Internals:
DEF ([GriffWzTuer:state] eq "closed" and [RolloWzTuerKipp1:state] eq "0") (set RolloWzTuer 0)
DOELSEIF ([GriffWzTuer:state] eq "open" and [RolloWzTuer:level] < 100) (set RolloWzTuer 100)
DOELSEIF ([GriffWzTuer:state] =~ "closed|tilted" and [autoRolloWzTuer:state] eq "cmd_4") (set RolloWzTuer 19)
DOELSEIF ([GriffWzTuer:state] =~ "closed|tilted" and [Beschattung_Manuell:state] eq "on") (set RolloWzTuer 21)
DOELSEIF ([GriffWzTuer:state] eq "tilted" and [RolloWzTuer:level] < 20) (set RolloWzTuer 20)
MODEL FHEM
NAME RolloWzTuerKipp
NR 36
NTFY_ORDER 50-RolloWzTuerKipp
STATE cmd_4
TYPE DOIF
READINGS:
2019-06-17 21:37:16 Device RolloWzTuer
2019-06-17 21:37:10 cmd 4
2019-06-17 21:37:10 cmd_event GriffWzTuer
2019-06-17 21:37:10 cmd_nr 4
2019-06-17 21:37:10 e_GriffWzTuer_state tilted
2019-06-17 21:37:16 e_RolloWzTuer_level 21
2019-06-17 21:36:21 mode enabled
2019-06-17 21:37:10 state cmd_4
Regex:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "closed" and ::ReadingValDoIf($hash,'RolloWzTuerKipp1','state') eq "0"
1 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "open" and ::ReadingValDoIf($hash,'RolloWzTuer','level') < 100
2 ::ReadingValDoIf($hash,'GriffWzTuer','state') =~ "closed|tilted" and ::ReadingValDoIf($hash,'autoRolloWzTuer','state') eq "cmd_4"
3 ::ReadingValDoIf($hash,'GriffWzTuer','state') =~ "closed|tilted" and ::ReadingValDoIf($hash,'Beschattung_Manuell','state') eq "on"
4 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "tilted" and ::ReadingValDoIf($hash,'RolloWzTuer','level') < 20
devices:
0 GriffWzTuer RolloWzTuerKipp1
1 GriffWzTuer RolloWzTuer
2 GriffWzTuer autoRolloWzTuer
3 GriffWzTuer Beschattung_Manuell
4 GriffWzTuer RolloWzTuer
all GriffWzTuer RolloWzTuerKipp1 RolloWzTuer autoRolloWzTuer Beschattung_Manuell
do:
0:
0 set RolloWzTuer 0
1:
0 set RolloWzTuer 100
2:
0 set RolloWzTuer 19
3:
0 set RolloWzTuer 21
4:
0 set RolloWzTuer 20
5:
helper:
event deviceMsg: 21 (to nanoCUL),level: 21,motor: Halt:21,pct: 21,21,timedOn: Runter
globalinit 1
last_timer 0
sleeptimer -1
timerdev GriffWzTuer
timerevent battery: ok,contact: tilted (to nanoCUL),tilted,trigDst_1F7650: noConfig,trigger_cnt: 118
triggerDev RolloWzTuer
DOIF_eventas:
cmd_nr: 4
cmd: 4
cmd_event: GriffWzTuer
state: cmd_4
timerevents:
battery: ok
contact: tilted (to nanoCUL)
tilted
trigDst_1F7650: noConfig
trigger_cnt: 118
timereventsState:
battery: ok
contact: tilted (to nanoCUL)
state: tilted
trigDst_1F7650: noConfig
trigger_cnt: 118
triggerEvents:
deviceMsg: 21 (to nanoCUL)
level: 21
motor: Halt:21
pct: 21
21
timedOn: Runter
triggerEventsState:
deviceMsg: 21 (to nanoCUL)
level: 21
motor: Halt:21
pct: 21
state: 21
timedOn: Runter
internals:
itimer:
readings:
0 GriffWzTuer:state RolloWzTuerKipp1:state
1 GriffWzTuer:state RolloWzTuer:level
2 GriffWzTuer:state autoRolloWzTuer:state
3 GriffWzTuer:state Beschattung_Manuell:state
4 GriffWzTuer:state RolloWzTuer:level
all GriffWzTuer:state RolloWzTuerKipp1:state RolloWzTuer:level autoRolloWzTuer:state Beschattung_Manuell:state
trigger:
uiState:
uiTable:
Attributes:
do always
Das DOIF zeigt cmd_4, das sieht i.O. aus.
cmd_5 wird nur ausgeführt, wenn auch [RolloWzTuer:level] < 20. Das bedeutet der Rolladen wurde vorher auf < 20 gebracht.
Da müsstest Du Dir die Events genauer ansehen, die beteiligt sind. Und die beteilligten Parameter und das DOIF loggen und das analysieren.
Vielleicht hast Du gedanklich die Richtungen verwechselt und es müsste > 20 heissen.
Hallo Ellert,
Cmd4 ist in dem Moment richtig. Dann ist die Rolllade auf level 21. Schalte ich aber jetzt die Beschattung aus, ist ein anderes doif, dass bei ,,aus" alles hoch fährt. Das hier beschriebene doif schaltet dann aber auf cmd5 sprich level 20 obwohl der Wert vorher 21 und damit nicht kleiner 20 war. Das leuchtet mir nicht ein, da da extra kleiner 20 steht. Wieso löst das trotzdem aus??
Grüße
Poste bitte mal ein list vom fehlerzustand. Das sagt mehr aus.
Gesendet von meinem Telekom Puls mit Tapatalk
Oder Du schaust Dir mal AutoShuttersControl (ASC) an.
https://commandref.fhem.de/commandref_DE.html#AutoShuttersControl
Das Modul steuert in Beschattung und noch mehr.
Zitat von: seule3008 am 17 Juni 2019, 23:56:15
Hallo Ellert,
Cmd4 ist in dem Moment richtig. Dann ist die Rolllade auf level 21. Schalte ich aber jetzt die Beschattung aus, ist ein anderes doif, dass bei ,,aus" alles hoch fährt. Das hier beschriebene doif schaltet dann aber auf cmd5 sprich level 20 obwohl der Wert vorher 21 und damit nicht kleiner 20 war. Das leuchtet mir nicht ein, da da extra kleiner 20 steht. Wieso löst das trotzdem aus??
Grüße
Moin
Und wieder komme ich mit meiner Weisheit, ein Element nur an einer Stelle zu steuern!
Nimm das Ergebnis aus dem anderen DOIF und packe es als Bedingung X in dieses hinein!
Gruss Christoph
Ich vermute, dass bei der Ausführung vom 1. Zweig eine Position unter 20 erreicht wird und dann der fünfte Zweig ausgeführt wird.
Das wäre mit einem Logmitschnitt zu prüfen und wenn sich die Vermutung als richtig erweist, dann könnte man als erste Maßnahme den Positionstrigger im fünften Zweig abschalten.
Jungs ihr seid die Besten.
Alles in deinem DOIF war des Problems Lösung. Wieso ich das nicht direkt gemacht habe, weiß ich nicht. Wahrscheinlich war das zu einfach :)
Vielen Dank und viele Grüße
Christian
Hallo nochmal,
das Problem ist trotz das alles in einem DOIF war nicht gelöst. Ich habe allerdings festgestellt, dass wenn ich pct 100 als Befehl verwende tritt der Fehler auf und wenn ich Hoch als Befehl verwende nicht.
Ich hatte das ganze in 2 DOIF weil eins das Attribut do always hat und das andere nicht. Oder kann ich in einem DOIF einzelne Befehle mit diesem Attribut versehen und andere nicht??
Mit freundlichen Grüßen
Christian
Zitat von: seule3008 am 19 Juni 2019, 20:01:38
Hallo nochmal,
das Problem ist trotz das alles in einem DOIF war nicht gelöst. Ich habe allerdings festgestellt, dass wenn ich pct 100 als Befehl verwende tritt der Fehler auf und wenn ich Hoch als Befehl verwende nicht.
Ich hatte das ganze in 2 DOIF weil eins das Attribut do always hat und das andere nicht. Oder kann ich in einem DOIF einzelne Befehle mit diesem Attribut versehen und andere nicht??
Mit freundlichen Grüßen
Christian
Du kannst logische Wiederholung mit do always von zyklisch sendenden Sensoren elegant über DOIF_Readings entkoppeln:
https://fhem.de/commandref_DE.html#DOIF_DOIF_Readings
Moin
so langsam verstehe ich nix mehr. Das DOIF schaltet was es will. Seit gestern Abend war der Status von autoRolloWzTuer nicht mehr cmd_4 und es steht auch in den readings cmd_1 aber trotzdem schaltet es immer wieder obwohl da steht, es soll nur schalten, wenn die Tür "closed" or "tildet" AND cmd_4 ist. Gibt es irgendwo eine schritt für schritt Auswertung des Codes wie z.b. in Exel??
Internals:
DEF ([GriffWzTuer:state] eq "closed" and [RolloWzTuerKipp1:state] eq "0") (set RolloWzTuer 0)
DOELSEIF ([GriffWzTuer:state] eq "open" and [RolloWzTuer:level] < 100) (set RolloWzTuer 100)
DOELSEIF ([GriffWzTuer:state] eq "tilted" and [RolloWzTuer:level] < 20) (set RolloWzTuer 20)
DOELSEIF ([GriffWzTuer:state] eq "closed" or "tilted" and [autoRolloWzTuer:state] eq "cmd_4") (set RolloWzTuer 20)
DOELSEIF ([GriffWzTuer:state] eq "closed" or "tilted" and [Beschattung_Manuell:state] eq "on") (set RolloWzTuer 20)
MODEL FHEM
NAME RolloWzTuerKipp
NR 36
NTFY_ORDER 50-RolloWzTuerKipp
STATE cmd_4
TYPE DOIF
READINGS:
2019-06-23 05:59:17 Device RolloWzTuer
2019-06-23 05:59:11 cmd 4
2019-06-23 05:59:11 cmd_event autoRolloWzTuer
2019-06-23 05:59:11 cmd_nr 4
2019-06-22 20:10:56 e_GriffWzTuer_state closed
2019-06-23 05:59:11 e_RolloWzTuerKipp1_state 1
2019-06-23 05:59:17 e_RolloWzTuer_level 20
2019-06-23 05:59:11 e_autoRolloWzTuer_state cmd_1
2019-06-22 14:56:20 mode enabled
2019-06-23 05:59:11 state cmd_4
Regex:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "closed" and ::ReadingValDoIf($hash,'RolloWzTuerKipp1','state') eq "0"
1 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "open" and ::ReadingValDoIf($hash,'RolloWzTuer','level') < 100
2 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "tilted" and ::ReadingValDoIf($hash,'RolloWzTuer','level') < 20
3 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "closed" or "tilted" and ::ReadingValDoIf($hash,'autoRolloWzTuer','state') eq "cmd_4"
4 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "closed" or "tilted" and ::ReadingValDoIf($hash,'Beschattung_Manuell','state') eq "on"
devices:
0 GriffWzTuer RolloWzTuerKipp1
1 GriffWzTuer RolloWzTuer
2 GriffWzTuer RolloWzTuer
3 GriffWzTuer autoRolloWzTuer
4 GriffWzTuer Beschattung_Manuell
all GriffWzTuer RolloWzTuerKipp1 RolloWzTuer autoRolloWzTuer Beschattung_Manuell
do:
0:
0 set RolloWzTuer 0
1:
0 set RolloWzTuer 100
2:
0 set RolloWzTuer 20
3:
0 set RolloWzTuer 20
4:
0 set RolloWzTuer 20
5:
helper:
event deviceMsg: 20 (to nanoCUL),level: 20,motor: stop:20,pct: 20,20,timedOn: Runter
globalinit 1
last_timer 0
sleeptimer -1
timerdev autoRolloWzTuer
timerevent cmd_nr: 1,cmd: 1,cmd_event: timer_1,cmd_1
triggerDev RolloWzTuer
DOIF_eventas:
cmd_nr: 4
cmd: 4
cmd_event: autoRolloWzTuer
state: cmd_4
timerevents:
cmd_nr: 1
cmd: 1
cmd_event: timer_1
cmd_1
timereventsState:
cmd_nr: 1
cmd: 1
cmd_event: timer_1
state: cmd_1
triggerEvents:
deviceMsg: 20 (to nanoCUL)
level: 20
motor: stop:20
pct: 20
20
timedOn: Runter
triggerEventsState:
deviceMsg: 20 (to nanoCUL)
level: 20
motor: stop:20
pct: 20
state: 20
timedOn: Runter
internals:
itimer:
readings:
0 GriffWzTuer:state RolloWzTuerKipp1:state
1 GriffWzTuer:state RolloWzTuer:level
2 GriffWzTuer:state RolloWzTuer:level
3 GriffWzTuer:state autoRolloWzTuer:state
4 GriffWzTuer:state Beschattung_Manuell:state
all GriffWzTuer:state RolloWzTuerKipp1:state RolloWzTuer:level autoRolloWzTuer:state Beschattung_Manuell:state
trigger:
uiState:
uiTable:
Attributes:
do always
Mit freundlichen Grüßen
Christian
Zitat von: seule3008 am 23 Juni 2019, 09:57:44
Moin
so langsam verstehe ich nix mehr. Das DOIF schaltet was es will.
DOELSEIF ([GriffWzTuer:state] eq "closed" or "tilted" and [autoRolloWzTuer:state] eq "cmd_4") (set RolloWzTuer 20)
Das Modul schaltet nicht was es will, sondern was du ihm gesagt hast - das ist ein feiner Unterschied ;)
Wie kommst du auf diese Syntax?
Zitat[GriffWzTuer:state] eq "closed" or "tilted"
Sie funktioniert nicht in DOIF und in keiner mir bekannten Programmiersprache.
"tilted" ist für sich immer wahr, also macht das Modul das, was du definiert hast.
Du meinst sicherlich
([GriffWzTuer:state] eq "closed" or [GriffWzTuer:state] eq "tilted") and [autoRolloWzTuer:state] eq "cmd_4")
Nicht nur der Vergleich muss so definiert werden, ebenso ist die Klammerung wichtig, da or eine niedrigere Priorität hat als and.
Leider kommt man auch bei DOIF nicht um die Grundlagen der Informatik herum.
... aber man kann es ja noch lernen :)
Hallo Damian,
ich hatte auch schon diese Schreibweise: DOELSEIF ([GriffWzTuer:state] =~ "closed|tilted" and [autoRolloWzTuer:state] eq "cmd_4") (set RolloWzTuer 19),
Und trotzdem macht er das. Ich versuche mal das, was du mir geschrieben hast. Allerdings reagiert er auch immer, wenn die Rolllade oben ist also sprich 100% und das auch so in den readings steht. Kippe ich dann die Tür, fährt er wieder runter obwohl der Wert eindeutig großer als 20% ist. Er schaltet dann CMD_3
Vielen Dank für deine Hilfe. Ich habe schon für meine Laienkenntnisse viel mit hem und DOIF umgesetzt aber manchmal verstehe ich nicht was er da macht. Ein Tool, dass den Code schritt für schritt auswertet und einen damit besser verstehen lässt wo der knoten im Kopf ist gibt es nicht oder?
Gruß
Christian
In der Schreibweise die du gerade Beschrieben hast :
([GriffWzTuer:state] eq "closed" and [RolloWzTuerKipp1:state] eq "0") (set RolloWzTuer 0)
DOELSEIF ([GriffWzTuer:state] eq "open" and [RolloWzTuer:level] < 100) (set RolloWzTuer 100)
DOELSEIF ([GriffWzTuer:state] eq "closed" or [GriffWzTuer:state] eq "tilted" and [autoRolloWzTuer:state] eq "cmd_4") (set RolloWzTuer 20)
DOELSEIF ([GriffWzTuer:state] eq "closed" or [GriffWzTuer:state] eq "tilted" and [Beschattung_Manuell:state] eq "on") (set RolloWzTuer 20)
DOELSEIF ([GriffWzTuer:state] eq "tilted" and [RolloWzTuer:level] < 20) (set RolloWzTuer 20)
tritt der selbe Fehler auf. Er fährt immer wieder die Rolllade runter auf 20% (cmd_3)obwohl im reading von [autoRolloWzTuer:state] eindeutig cmd_1 steht. Ich hab nochmal ein list angehangen.
Internals:
CFGFN
DEF ([GriffWzTuer:state] eq "closed" and [RolloWzTuerKipp1:state] eq "0") (set RolloWzTuer 0)
DOELSEIF ([GriffWzTuer:state] eq "open" and [RolloWzTuer:level] < 100) (set RolloWzTuer 100)
DOELSEIF ([GriffWzTuer:state] eq "closed" or [GriffWzTuer:state] eq "tilted" and [autoRolloWzTuer:state] eq "cmd_4") (set RolloWzTuer 20)
DOELSEIF ([GriffWzTuer:state] eq "closed" or [GriffWzTuer:state] eq "tilted" and [Beschattung_Manuell:state] eq "on") (set RolloWzTuer 20)
DOELSEIF ([GriffWzTuer:state] eq "tilted" and [RolloWzTuer:level] < 20) (set RolloWzTuer 20)
MODEL FHEM
NAME RolloWzTuerKipp
NR 48235
NTFY_ORDER 50-RolloWzTuerKipp
STATE cmd_3
TYPE DOIF
READINGS:
2019-06-23 10:51:59 Device RolloWzTuer
2019-06-23 10:51:41 cmd 3
2019-06-23 10:51:41 cmd_event GriffWzTuer
2019-06-23 10:51:41 cmd_nr 3
2019-06-23 10:51:41 e_GriffWzTuer_state closed
2019-06-23 10:51:59 e_RolloWzTuer_level 20
2019-06-23 10:51:15 mode enabled
2019-06-23 10:51:41 state cmd_3
Regex:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "closed" and ::ReadingValDoIf($hash,'RolloWzTuerKipp1','state') eq "0"
1 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "open" and ::ReadingValDoIf($hash,'RolloWzTuer','level') < 100
2 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "closed" or ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "tilted" and ::ReadingValDoIf($hash,'autoRolloWzTuer','state') eq "cmd_4"
3 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "closed" or ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "tilted" and ::ReadingValDoIf($hash,'Beschattung_Manuell','state') eq "on"
4 ::ReadingValDoIf($hash,'GriffWzTuer','state') eq "tilted" and ::ReadingValDoIf($hash,'RolloWzTuer','level') < 20
devices:
0 GriffWzTuer RolloWzTuerKipp1
1 GriffWzTuer RolloWzTuer
2 GriffWzTuer autoRolloWzTuer
3 GriffWzTuer Beschattung_Manuell
4 GriffWzTuer RolloWzTuer
all GriffWzTuer RolloWzTuerKipp1 RolloWzTuer autoRolloWzTuer Beschattung_Manuell
do:
0:
0 set RolloWzTuer 0
1:
0 set RolloWzTuer 100
2:
0 set RolloWzTuer 20
3:
0 set RolloWzTuer 20
4:
0 set RolloWzTuer 20
5:
helper:
event deviceMsg: 20 (to nanoCUL),level: 20,motor: stop:20,pct: 20,20,timedOn: Runter
globalinit 1
last_timer 0
sleeptimer -1
timerdev GriffWzTuer
timerevent battery: ok,contact: closed (to nanoCUL),closed,trigDst_1F7650: noConfig,trigger_cnt: 206
triggerDev RolloWzTuer
DOIF_eventas:
cmd_nr: 3
cmd: 3
cmd_event: GriffWzTuer
state: cmd_3
timerevents:
battery: ok
contact: closed (to nanoCUL)
closed
trigDst_1F7650: noConfig
trigger_cnt: 206
timereventsState:
battery: ok
contact: closed (to nanoCUL)
state: closed
trigDst_1F7650: noConfig
trigger_cnt: 206
triggerEvents:
deviceMsg: 20 (to nanoCUL)
level: 20
motor: stop:20
pct: 20
20
timedOn: Runter
triggerEventsState:
deviceMsg: 20 (to nanoCUL)
level: 20
motor: stop:20
pct: 20
state: 20
timedOn: Runter
internals:
itimer:
readings:
0 GriffWzTuer:state RolloWzTuerKipp1:state
1 GriffWzTuer:state RolloWzTuer:level
2 GriffWzTuer:state autoRolloWzTuer:state
3 GriffWzTuer:state Beschattung_Manuell:state
4 GriffWzTuer:state RolloWzTuer:level
all GriffWzTuer:state RolloWzTuerKipp1:state RolloWzTuer:level autoRolloWzTuer:state Beschattung_Manuell:state
trigger:
uiState:
uiTable:
Attributes:
do always
Gruß
Christian
Hallo Damian,
ich glaube jetzt hab ich es. Die Klammern waren es scheinbar. Vielen Dank für deine Hilfe. Ich beobachte das jetzt mal aber bei meinen Tests gerade ist es nicht mehr aufgetreten.
Viele Grüße
Christian