(NUKI Türschloss): DOIF führt DOELSEIF nicht aus

Begonnen von oli82, 17 November 2017, 10:04:13

Vorheriges Thema - Nächstes Thema

oli82

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

Frank_Huber

mach mal ein List vom Nuki wenn offen und zu.
vermute der Status passt nicht.

Beta-User

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
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

oli82

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?

Beta-User

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.

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

oli82

Bei Perl muss ich leider passen ;)
Deinen Vorschlag teste ich mal und melde mich wieder. Danke!

Per

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 hat ne Besonderheit.

Beta-User

Zitat von: Per am 17 November 2017, 12:56:33
state 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...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Per

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.

Beta-User

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...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

oli82

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

Per

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?

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

oli82

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

Per

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?

oli82

Leider nein, aber da war der Home "present". Habe extra kurz vorher geschaut

amenomade

Interessant wäre ein list des DOIFs wenn er sich deiner Meinung nach in einem falschem Zustand befindet.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

CoolTux


([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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

oli82

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.

oli82

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.)

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Per

#21
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.

oli82

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 ;)

oli82

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

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

oli82

#25
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


Frank_Huber

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.

Damian

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.

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

CoolTux

Oli das ist aber nicht meine Lösung. Wo sind die Fragezeichen?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

oli82

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

CoolTux

Naja und nun änder mal die Zeit von 07:00 auf eine aktuelle zeit. also in 1 minute oder so
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

oli82

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.

CoolTux


[?NUKIDevice1234:lockstate] eq "locked"


Probiere mal. Und schaue ob der Status tatsächlich locked ist und nicht etwas anderes.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net