FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: oli82 am 17 November 2017, 10:04:13

Titel: (NUKI Türschloss): DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 17 November 2017, 10:04:13
Guten Morgen.

Ich lasse Abends über Fhem unsere Haustür zuschließen und morgens soll sie wieder geöffnet werden.
Schließen klappt wunderbar, nur das öffnen nicht und trotz verbose 5 erhalte ich keinen Fehler.

Abend wird geprüft, ob es zwischen 23:00 - 04:00Uhr ist, das Schloß (Nuki) nicht bereits zu ist und ob der Bewegungsmelder die letzte Bewegung vor 10 Minuten registriert hat.
Das klappt!

Dann soll geprüft werden, ob es zwische 6:40 und 7:10 ist, Jemand zuhause und das Schloss noch geschlossen ist.
Das klappt leider nicht.

Hier das DOIF
([23:00-04:00] and [NUKIDevice:lockstate] ne "locked" and [EG_FlurBewegungsmelder:motion:sec] > 1200) (set NUKIDevice lock) DOELSEIF ([06:45-07:10] and [NUKIDevice:lockstate] eq "locked" and [Home:state] eq "home") (set NUKIDevice unlock)

Danke für eure Hilfe und Tips
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: Frank_Huber am 17 November 2017, 10:10:09
mach mal ein List vom Nuki wenn offen und zu.
vermute der Status passt nicht.
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: Beta-User am 17 November 2017, 10:14:07
Hatten wir das hier nicht schon mehrfach?

Bin ja kein DOIF-Experte, aber zwei genau gleichzeitig triggernde Events waren doch eher unwahrscheinlich? Da sollte also irgendwo eine Status-Abfrage statt des Triggers rein, oder ;) ?

Gruß, Beta-User
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 17 November 2017, 12:28:42
Zitat von: Frank_Huber am 17 November 2017, 10:10:09
mach mal ein List vom Nuki wenn offen und zu.
vermute der Status passt nicht.
Der Status passt. Habe während ich das DOIF erstellt habe extra geschaltet ;)

Zitat von: Beta-User am 17 November 2017, 10:14:07
Hatten wir das hier nicht schon mehrfach?
Bin ja kein DOIF-Experte, aber zwei genau gleichzeitig triggernde Events waren doch eher unwahrscheinlich? Da sollte also irgendwo eine Status-Abfrage statt des Triggers rein, oder ;) ?

Welche 2 Events meinst du?
Bei meinem DOIF für die Rollos funktioniert etwas ähnlich auch:
([du_Rollo_Master:state] eq "on" and [{sunset(+120)}|8]) (set EG_WohnzimmerRollo geschlossen, set EG_WohnzimmerRolloTuer geschlossen) DOELSEIF ([du_Rollo_Master:state] eq "on" and [{sunset(+600)}|7]) (set EG_WohnzimmerRollo geschlossen, set EG_WohnzimmerRolloTuer geschlossen) DOELSEIF ([du_Rollo_Master:state] eq "on" and [07:00|8]) (set EG_WohnzimmerRollo offen, set EG_WohnzimmerRolloTuer offen) DOELSEIF ([du_Rollo_Master:state] eq "on" and [{sunrise(+120,"08:00","10:00")}|7]) (set EG_WohnzimmerRollo offen, set EG_WohnzimmerRolloTuer offen)

Oder hab ich deinen Beitrag falsch verstanden?
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: Beta-User am 17 November 2017, 12:35:02
Zitat von: oli82 am 17 November 2017, 12:28:42
Oder hab ich deinen Beitrag falsch verstanden?
Wie gesagt, ich bin nicht der DOIF-Experte (diese Syntax ist mir suspekt, ich nutze lieber perl), aber ich hätte im DOELSEIF mal
[?NUKIDevice:lockstate] eq "locked"getestet.
Kann aber sein, dass das mit dem "eq" bereits eine nichttriggernde Abfrage ist, und ich komplett falsch liege. Zeitangaben scheinen nochmal eine spezielle Sache zu sein, da wird das "and" scheinbar anders interpretiert.

Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 17 November 2017, 12:40:03
Bei Perl muss ich leider passen ;)
Deinen Vorschlag teste ich mal und melde mich wieder. Danke!
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: Per am 17 November 2017, 12:56:33
Zitat von: Beta-User am 17 November 2017, 12:35:02Kann aber sein, dass das mit dem "eq" bereits eine nichttriggernde Abfrage ist, und ich komplett falsch liege.
Komplett nicht, weil du ja im ersten Teil dieses Satzes den richtigen Ansatz hast.

Ich überlege, ob
[Home:state] eq "home"
funktioniert. state (https://fhem.de/commandref_DE.html#DOIF_addStateEvent) hat ne Besonderheit.
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: Beta-User am 17 November 2017, 13:09:27
Zitat von: Per am 17 November 2017, 12:56:33
state (https://fhem.de/commandref_DE.html#DOIF_addStateEvent) hat ne Besonderheit.
...immer diese Sonderlocken, ich weiß schon, warum dieses Modul und ich keine Freunde mehr werden...

Aber in dem Fall dürfte das nichttriggernde "?" ok sein, da vermutlich die Tür nicht automatisiert wieder geöffnet werden soll, wenn jemand sie manuell geschlossen hat.

Ich bin jedenfalls hier raus...
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: Per am 17 November 2017, 14:36:08
Zitat von: Beta-User am 17 November 2017, 13:09:27...immer diese Sonderlocken, ich weiß schon, warum dieses Modul und ich keine Freunde mehr werden...
Dann darfst du dich aber auch mit Fhem (Ursache) und notify (weiterer Leidtragender) nicht anfreunden! Zumindest bietet DOIF ein Weg an, damit umzugehen.

Zitat von: Beta-User am 17 November 2017, 13:09:27Aber in dem Fall dürfte das nichttriggernde "?" ok sein, da vermutlich die Tür nicht automatisiert wieder geöffnet werden soll, wenn jemand sie manuell geschlossen hat.
Naheliegend, auch wenn diese Anforderung (bisher noch) nicht gestellt wurde.
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: Beta-User am 17 November 2017, 14:53:28
Zitat von: Per am 17 November 2017, 14:36:08
Dann darfst du dich aber auch mit Fhem (Ursache) und notify (weiterer Leidtragender) nicht anfreunden! Zumindest bietet DOIF ein Weg an, damit umzugehen.
Da ich mir angewöhnt habe, im perl-code auf die entsprechenden readings (ReadingsVal(), ReadingsNum()) zuzugreifen, hatte ich diesen Ursachen-Wirkungs-Zusammenhang bisher gar nicht wahrgenommen :D . Und zugegeben: perl-Code zu erstellen, ist auch harte Arbeit. Die Schritte und Abhängigkeiten sind da für mich mittlerweile plausibler nachzuvollziehen, aber das ist Geschmackssache :) .

Und der von dir verlinkte Abschnitt der commandref sah irgendwie doch sehr DOIF-spezifisch aus. Aber man lernt ja nie aus...
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 17 November 2017, 15:03:37
Zitat von: Per am 17 November 2017, 12:56:33

Ich überlege, ob
[Home:state] eq "home"
funktioniert.
Habe das mal auf [Home:presence] eq "present" geändert
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: Per am 17 November 2017, 15:47:48
Zitat von: Beta-User am 17 November 2017, 14:53:28Da ich mir angewöhnt habe, im perl-code...
Kannst du machen. Ich habe einen Kollegen, der fährt im Jahr mehr km mit dem Fahrrad (~20tkm) als ich mit dem Auto. Kann man auch machen. Muss man aber nicht als Lebensmodell für alle versuchen durchzusetzen. ER macht das auch nicht!

Zitat von: oli82 am 17 November 2017, 15:03:37Habe das mal geändert
Dann werden wir das Ergebnis morgen 06:45 Uhr wissen :D. Warum hast du dafür eine Zeitspanne verwendet? Wenn du @home kommst, schließt du eh auf, wenn du innerhalb der Zeit abschließt, machst du das absichtlich. Oder?
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: Beta-User am 17 November 2017, 18:11:48
Nur zur Klarstellung: Der Vorschlag war nicht, mit dem Fahrrad zu fahren, sondern ein "?" in den bestehenden Code einzufügen...

Ansonsten hinkt der Vergleich etwas, aber das brauchen wir nicht auszudiskutieren.
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 21 November 2017, 10:22:52
Guten Morgen.

Leider klappt das aufschließen immer noch nicht. Hab am Wochenende einige Konstellationen getestet.
Bin da echt etwas ratlos.
Abschließen funktioniert einwandfrei. Nur das öffnen nicht.

Hier mal ein komplettes list:
Internals:
   DEF        ([23:00] and [NUKIDevice1234:lockstate] ne "locked" and [EG_FlurBewegungsmelder:motion:sec] > 1200) (set NUKIDevice1234 lock) DOELSEIF ([NUKIDevice1234:lockstate] eq "locked" and [07:00] and [Home:presence] eq "present") (set NUKIDevice1234 unlock)
   NAME       di.lockout
   NR         547
   NTFY_ORDER 50-di.lockout
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2017-11-21 10:19:26   Device          Home
     2017-11-21 06:37:54   cmd             0
     2017-11-21 10:19:26   e_Home_presence absent
     2017-11-21 09:17:57   e_EG_FlurBewegungsmelder_motion off
     2017-11-21 06:37:54   state           initialized
     2017-11-21 06:37:55   timer_01_c01    21.11.2017 23:00:00
     2017-11-21 07:00:00   timer_02_c02    22.11.2017 07:00:00
   condition:
     0          DOIF_time_once($hash,0,$wday) and ReadingValDoIf($hash,'NUKIDevice1234','lockstate') ne "locked" and ReadingSecDoIf('EG_FlurBewegungsmelder','motion') > 1200
     1          ReadingValDoIf($hash,'NUKIDevice1234','lockstate') eq "locked" and DOIF_time_once($hash,1,$wday) and ReadingValDoIf($hash,'Home','presence') eq "present"
   days:
   devices:
     0           NUKIDevice1234 EG_FlurBewegungsmelder
     1           NUKIDevice11234 Home
     all         NUKIDevice1234 EG_FlurBewegungsmelder Home
   do:
     0:
       0          set NUKIDevice1234 lock
     1:
       0          set NUKIDevice1234 unlock
     2:
   helper:
     event      durTimerAbsence_cr: 156,durTimerAbsence: 02:36:24
     globalinit 1
     last_timer 2
     sleeptimer -1
     triggerDev Home
     triggerEvents:
       durTimerAbsence_cr: 156
       durTimerAbsence: 02:36:24
     triggerEventsState:
       durTimerAbsence_cr: 156
       durTimerAbsence: 02:36:24
   internals:
   interval:
   itimer:
   localtime:
     0          1511301600
     1          1511330400
   readings:
     0           NUKIDevice1234:lockstate EG_FlurBewegungsmelder:motion
     1           NUKIDevice1234:lockstate Home:presence
     all         NUKIDevice1234:lockstate EG_FlurBewegungsmelder:motion Home:presence
   realtime:
     0          23:00:00
     1          07:00:00
   regexp:
     0:
     1:
     all:
   state:
     STATE:
   time:
     0          23:00:00
     1          07:00:00
   timeCond:
     0          0
     1          1
   timer:
     0          0
     1          0
   timers:
     0           0
     1           1
   trigger:
   triggertime:
     1511301600:
       localtime  1511301600
       hash:
     1511330400:
       localtime  1511330400
       hash:
Attributes:
   addStateEvent 1
   do         always
   room       11_Security
   verbose    5
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: Per am 21 November 2017, 11:37:31
Zitat von: oli82 am 21 November 2017, 10:22:522017-11-21 10:19:26   e_Home_presence absent
Hast du auch ein Listing von gg. 7 Uhr?
Titel: Antw:(NUKI Türschloß): DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 21 November 2017, 12:29:08
Leider nein, aber da war der Home "present". Habe extra kurz vorher geschaut
Titel: Antw:(NUKI Türschloß): DOIF führt DOELSEIF nicht aus
Beitrag von: amenomade am 21 November 2017, 12:55:00
Interessant wäre ein list des DOIFs wenn er sich deiner Meinung nach in einem falschem Zustand befindet.
Titel: Antw:(NUKI Türschloß): DOIF führt DOELSEIF nicht aus
Beitrag von: CoolTux am 21 November 2017, 13:25:58

([23:00] and [NUKIDevice1234:lockstate] ne "locked" and [EG_FlurBewegungsmelder:motion:sec] > 1200) (set NUKIDevice1234 lock) DOELSEIF ([NUKIDevice1234:lockstate] eq "locked" and [07:00] and [Home:presence] eq "present") (set NUKIDevice1234 unlock)


Ich würde erstmal schauen das Du nur auf die Zeiten triggerst, denn darauf kommt es ja anscheinend an. Und dann die anderen Bedingungen einfach nur ab fragst.
Dann würde ich mal schauen das immer zu erst die Zeit steht.


([23:00] and [?NUKIDevice1234:lockstate] ne "locked" and [?EG_FlurBewegungsmelder:motion:sec] > 1200) (set NUKIDevice1234 lock) DOELSEIF ([07:00] and [?NUKIDevice1234:lockstate] ne "unlocked" and [?Home:presence] eq "present") (set NUKIDevice1234 unlock)



Grüße
Titel: Antw:(NUKI Türschloß): DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 21 November 2017, 16:01:36
Hey Marko.

Danke für den Vorschlag der Abfrage.
Die Uhrzeit hatte ich anfangs immer an erster Stelle.
Bei den Tests ist sie dann etwas "gewandert".
Wenn ich Zuhause bin teste ich mal den neuen Aufbau.
Titel: Antw:(NUKI Türschloß): DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 22 November 2017, 13:14:10
Leider schließt das Schloss immer noch nicht morgens wieder auf.
Alle Bedingungen sind true, aber um 7Uhr beleibt das Schloss zu... (auch zu jeder anderen Zeit die ich beim Testen eingestellt habe.)
Titel: Antw:(NUKI Türschloss): DOIF führt DOELSEIF nicht aus
Beitrag von: CoolTux am 22 November 2017, 13:17:11
Ja Olli das mag ja sein, aber was sollen wir denn jetzt da machen, ich meine so ganz ohne weitere stichhaltige, sichtbare Infos.
Nimm bitte meine DOIF Variante und erweiter morgens die Zeit auf von 07:00-08:00 und mach in der Zeit wo auch die anderen Bedingungen true sind ein list von allen beteiligten Devices. Anders geht es nicht.


Grüße
Titel: Antw:(NUKI Türschloß): DOIF führt DOELSEIF nicht aus
Beitrag von: Per am 22 November 2017, 14:28:10
Zitat von: oli82 am 22 November 2017, 13:14:10aber um 7Uhr beleibt das Schloss zu...
Zwei Fragen dazu:
1. geht es zu, wenn du den Befehl in der Kommandozeile ausführst?
2. was sagt der Eventlog zu dieser Zeit?

Zur Not kannst du ja mal einen externen Trigger
definde tester DOIF ([07:00]) (set dummy auf)
starten und auf den Dummy triggern.

Oder ein
set di.lockout cmd_2
ausführen.
Titel: Antw:(NUKI Türschloss): DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 22 November 2017, 15:08:34
Das ist ja das kuriose.
Zu geht es. Auf geht es auch, wenn ich cmd_2 über set ausführe.
Externen Trigger teste ich, sobald unser Besuch wieder weg ist ;)
Titel: Antw:(NUKI Türschloss): DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 22 November 2017, 16:20:49
Neue Erkenntnis:

Externer Trigger klappt auch nicht.
Irgendwie reagiert das Nuki in der Kombination nicht auf unlock.
Ein ([16:15]) (set nuki1234 unlock) klappt sofort
Titel: Antw:(NUKI Türschloss): DOIF führt DOELSEIF nicht aus
Beitrag von: CoolTux am 22 November 2017, 16:33:22
Zeig Mal bitte ein list vom DOIF
Titel: Antw:DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 22 November 2017, 16:47:00
Zitat von: oli82 am 21 November 2017, 10:22:52

Hier mal ein komplettes list:
Internals:
   DEF        ([23:00] and [NUKIDevice1234:lockstate] ne "locked" and [EG_FlurBewegungsmelder:motion:sec] > 1200) (set NUKIDevice1234 lock) DOELSEIF ([NUKIDevice1234:lockstate] eq "locked" and [07:00] and [Home:presence] eq "present") (set NUKIDevice1234 unlock)
   NAME       di.lockout
   NR         547
   NTFY_ORDER 50-di.lockout
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2017-11-21 10:19:26   Device          Home
     2017-11-21 06:37:54   cmd             0
     2017-11-21 10:19:26   e_Home_presence absent
     2017-11-21 09:17:57   e_EG_FlurBewegungsmelder_motion off
     2017-11-21 06:37:54   state           initialized
     2017-11-21 06:37:55   timer_01_c01    21.11.2017 23:00:00
     2017-11-21 07:00:00   timer_02_c02    22.11.2017 07:00:00
   condition:
     0          DOIF_time_once($hash,0,$wday) and ReadingValDoIf($hash,'NUKIDevice1234','lockstate') ne "locked" and ReadingSecDoIf('EG_FlurBewegungsmelder','motion') > 1200
     1          ReadingValDoIf($hash,'NUKIDevice1234','lockstate') eq "locked" and DOIF_time_once($hash,1,$wday) and ReadingValDoIf($hash,'Home','presence') eq "present"
   days:
   devices:
     0           NUKIDevice1234 EG_FlurBewegungsmelder
     1           NUKIDevice1234 Home
     all         NUKIDevice1234 EG_FlurBewegungsmelder Home
   do:
     0:
       0          set NUKIDevice1234 lock
     1:
       0          set NUKIDevice1234 unlock
     2:
   helper:
     event      durTimerAbsence_cr: 156,durTimerAbsence: 02:36:24
     globalinit 1
     last_timer 2
     sleeptimer -1
     triggerDev Home
     triggerEvents:
       durTimerAbsence_cr: 156
       durTimerAbsence: 02:36:24
     triggerEventsState:
       durTimerAbsence_cr: 156
       durTimerAbsence: 02:36:24
   internals:
   interval:
   itimer:
   localtime:
     0          1511301600
     1          1511330400
   readings:
     0           NUKIDevice1234:lockstate EG_FlurBewegungsmelder:motion
     1           NUKIDevice1234:lockstate Home:presence
     all         NUKIDevice1234:lockstate EG_FlurBewegungsmelder:motion Home:presence
   realtime:
     0          23:00:00
     1          07:00:00
   regexp:
     0:
     1:
     all:
   state:
     STATE:
   time:
     0          23:00:00
     1          07:00:00
   timeCond:
     0          0
     1          1
   timer:
     0          0
     1          0
   timers:
     0           0
     1           1
   trigger:
   triggertime:
     1511301600:
       localtime  1511301600
       hash:
     1511330400:
       localtime  1511330400
       hash:
Attributes:
   addStateEvent 1
   do         always
   room       11_Security
   verbose    5

Titel: Antw:(NUKI Türschloss): DOIF führt DOELSEIF nicht aus
Beitrag von: Frank_Huber am 22 November 2017, 16:48:14
was mich wundert:
In den Readings taucht das Nuki nicht auf!?!?

Wenn der DOIF das auswerten könnte würde das Reading hier mit gelistet sein.
Titel: Antw:(NUKI Türschloss): DOIF führt DOELSEIF nicht aus
Beitrag von: Damian am 22 November 2017, 17:13:34
Wenn die Bedingung:

([NUKIDevice1234:lockstate] eq "locked" and [07:00] and [Home:presence] eq "present")

um 07:00 Uhr nicht wahr war, dann war Home:presence] eq "present" oder [NUKIDevice1234:lockstate] eq "locked" nicht wahr. Das sollte sich um 07:00 Uhr relativ einfach nachvollziehen lassen.

Titel: Antw:(NUKI Türschloss): DOIF führt DOELSEIF nicht aus
Beitrag von: CoolTux am 22 November 2017, 17:25:30
Oli das ist aber nicht meine Lösung. Wo sind die Fragezeichen?
Titel: Antw:(NUKI Türschloss): DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 22 November 2017, 21:54:23
Die fehlen da noch. War ja vor deinem Post. Sorry.
Habe jetzt mal die Abfrage des lockstate weg gelassen und teste nochmal mit der Uhrzeit direkt im DOIF
Titel: Antw:(NUKI Türschloss): DOIF führt DOELSEIF nicht aus
Beitrag von: CoolTux am 22 November 2017, 22:37:02
Naja und nun änder mal die Zeit von 07:00 auf eine aktuelle zeit. also in 1 minute oder so
Titel: Antw:(NUKI Türschloss): DOIF führt DOELSEIF nicht aus
Beitrag von: oli82 am 23 November 2017, 08:37:44
Guten Morgen.

Ich kam gestern Abend nicht mehr zum schreiben.
Also ohne die Abfrage nach dem lockstate öffnet die Tür wieder.
Wie es mir scheint, macht die doppelte Abfrage von lockstate auf "locked" Probleme.
Titel: Antw:(NUKI Türschloss): DOIF führt DOELSEIF nicht aus
Beitrag von: CoolTux am 23 November 2017, 08:53:23

[?NUKIDevice1234:lockstate] eq "locked"


Probiere mal. Und schaue ob der Status tatsächlich locked ist und nicht etwas anderes.