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
mach mal ein List vom Nuki wenn offen und zu.
vermute der Status passt nicht.
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
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?
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.
Bei Perl muss ich leider passen ;)
Deinen Vorschlag teste ich mal und melde mich wieder. Danke!
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.
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...
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.
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...
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
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?
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.
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
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?
Leider nein, aber da war der Home "present". Habe extra kurz vorher geschaut
Interessant wäre ein list des DOIFs wenn er sich deiner Meinung nach in einem falschem Zustand befindet.
([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
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.
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.)
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
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.
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 ;)
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
Zeig Mal bitte ein list vom DOIF
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
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.
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.
Oli das ist aber nicht meine Lösung. Wo sind die Fragezeichen?
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
Naja und nun änder mal die Zeit von 07:00 auf eine aktuelle zeit. also in 1 minute oder so
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.
[?NUKIDevice1234:lockstate] eq "locked"
Probiere mal. Und schaue ob der Status tatsächlich locked ist und nicht etwas anderes.