Hallo und guten Abend aus Niederösterreich,
mein Ziel ist es in der Zeit von SS bis SR beim Öffnen der Einfahrt das Gartenlicht einzuschalten (mit einem Filter ob das Licht auch aus ist)
und andererseits im gleichen Zeitraum beim Öffnen das Licht auszuschalten (Filter Licht on)
Ich habe mir dafür 2 einzelne DOIFs gebastelt - jedoch ohne SS und SR - da funktioniert es
([Einfahrt] eq "Offen") (set GartenLicht:FILTER=STATE=off on-for-timer 60) DOELSE
und
([Einfahrt] eq "Offen") (set GartenLicht:FILTER=STATE=on off) DOELSE
Wenn ich daraus (mit SS und SR) ein DOELSEIF mache
(([Einfahrt] eq "Offen") and [[Daemmerung:ss]-[Daemmerung:sr]]) (set GartenLicht:FILTER=STATE=off on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and [[Daemmerung:ss]-[Daemmerung:sr]]) (set GartenLicht:FILTER=STATE=on off)
wird zwar das Licht für 1 Minute ausgeschaltet, aber wenn das Tor zu ist und das Licht händisch eingeschaltet wurde und danach
das Tor geöffnet wird, schaltet sich das Licht nicht aus.
Hintergedanke - man kommt heim - soll sich das GartenLicht für eine definierte Zeit einschalten.
Verlässt man das haus und hat die Gartenbeleuchtung vom Haus aktiviert, soll durch das Öffnen der Einfahrt das Licht ausgeschaltet werden.
Wo mache ich hier den Denkfehler
Many thanks for Help
Liebe Grüße Helmut
Du hast 2mal die selbe Bedingung...
Servus
Ich hab doch den Filter? Wie sollte das bitte richtig sein?
Danke für deine Hilfe
Der Filter greift erst wenn du schon im DOIF-Zweig bist. Pack doch einfach noch ein and [Gartenlicht]="on" bzw. "off"
mit in die Bedingung.
Grüße
Oli
Servus
ok. Ich dachte das wird durch den Filter geregelt - ABER so
(([Einfahrt] eq "Offen") and ([GartenLicht] eq "off") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=off on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and ([GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=on off)
funktioniert es leider auch nicht?
(Habe jetzt nur SS und SR vertauscht damit ich es am Tag testen kann)
Der erste Teil funktioniert. Beim zweiten geht das Licht kurz aus aber sofort wieder an???
Attr ist do allways
Hab zur Sicherheit noch ein List vom DOIF angehängt
Internals:
DEF (([Einfahrt] eq "Offen") and ([GartenLicht] eq "off") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=off on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and ([GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=on off)
NAME di_Test_3
NR 378
NTFY_ORDER 50-di_Test_3
STATE cmd_1
TYPE DOIF
Readings:
2016-09-08 10:01:40 Device GartenLicht
2016-09-08 10:01:12 cmd 1
2016-09-08 10:01:12 cmd_event Einfahrt
2016-09-08 10:01:12 cmd_nr 1
2016-09-08 10:01:33 e_Einfahrt_STATE Zu
2016-09-08 10:01:40 e_GartenLicht_STATE off
2016-09-08 10:01:12 state cmd_1
2016-09-08 10:02:40 timer_1_c1 09.09.2016 06:29:55
2016-09-08 10:02:40 timer_2_c1 08.09.2016 19:15:51
2016-09-08 10:02:40 timer_3_c2 09.09.2016 06:29:55
2016-09-08 10:02:40 timer_4_c2 08.09.2016 19:15:51
Condition:
0 (InternalDoIf($hash,'Einfahrt','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "Offen") and (InternalDoIf($hash,'GartenLicht','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "off") and DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
1 (InternalDoIf($hash,'Einfahrt','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "Offen") and (InternalDoIf($hash,'GartenLicht','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on") and DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"")
Days:
Devices:
0 Einfahrt GartenLicht
1 Einfahrt GartenLicht
all Einfahrt GartenLicht
Do:
0:
0 set GartenLicht:FILTER=STATE=off on-for-timer 60
1:
0 set GartenLicht:FILTER=STATE=on off
2:
Helper:
event power-hourly: 1.223325
globalinit 1
last_timer 4
sleeptimer -1
timerdev Einfahrt
timerevent power-hourly: 0
triggerDev GartenLicht
timerevents:
power-hourly: 0
timereventsState:
power-hourly: 0
triggerEvents:
power-hourly: 1.223325
triggerEventsState:
power-hourly: 1.223325
Internals:
0 Einfahrt:STATE GartenLicht:STATE
1 Einfahrt:STATE GartenLicht:STATE
all Einfahrt:STATE GartenLicht:STATE
Interval:
0 -1
1 0
2 -1
3 2
Itimer:
all Daemmerung
Localtime:
0 1473395395
1 1473354951
2 1473395395
3 1473354951
Readings:
Realtime:
0 06:29:55
1 19:15:51
2 06:29:55
3 19:15:51
Regexp:
0:
1:
All:
State:
Time:
0 [Daemmerung:sr]
1 [Daemmerung:ss]
2 [Daemmerung:sr]
3 [Daemmerung:ss]
Timecond:
0 0
1 0
2 1
3 1
Timer:
0 0
1 0
2 0
3 0
Timers:
0 0 1
1 2 3
Trigger:
Triggertime:
1473354951:
localtime 1473354951
Hash:
1473395395:
localtime 1473395395
Hash:
Attributes:
do always
Danke für Deine/Eure Unterstützung
Gruß
Helmut
Du könntest die Ursache selbst ermitteln indem Du Dir ein DOIF erstellst, mit dem Du alle Events des zu untersuchenden DOIF aufzeichnest. Damit kannst Du feststellen, was zum zurückschalten führt.
Muster zum erstellen des LogDOIF
define LogDOIF DOIF ([<Name des zu analysierenden DOIF>:""] or [<Gerät 1>:"<Reading>:"] or [<Gerät 2>:"<Reading>:"] ...)
({Log 1, "$SELF --> Device: $DEVICE, Events: $EVENTS"})
attr LogDOIF do always
konkrete Bedingung
([di_Test_3:""] or [GartenLicht:""] or [Daemmerung:"(ss|sr): "] or [Einfahrt:""])
ungetestet
Servus und Danke
mMn führt der erste Teil des DOIFs wieder zum einschalten!
Habe es zerlegt in ein DOIF für einschalten und eines für aus.
Wenn ich nur das für aus verwende dann funktioniert es
(([Einfahrt] eq "Offen") and ([GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=on off) DOELSE
Was muss ich an dem DOELSEIF verändern damit im Fall2 nicht wieder 1 aktiv wird?
Sehe da im Moment nicht wirklich durch?
Hier das LogDoif
Device
Einfahrt
2016-09-08 12:24:10
cmd
1
2016-09-08 12:24:10
cmd_event
Einfahrt
2016-09-08 12:24:10
cmd_nr
1
2016-09-08 12:24:10
e_Daemmerung_events
azimuth: 168.68,elevation: 45.67,twilight: 100,twilight_weather: 100,compasspoint: south-southeast
2016-09-08 12:20:22
e_Einfahrt_events
battery: ok,contact: Zu (to HMUSB),Zu,trigDst_220355: noConfig,trigger_cnt: 223
2016-09-08 12:24:10
e_di_Test_3_events
cmd_nr: 1,cmd: 1,cmd_event: Einfahrt,cmd_1
2016-09-08 12:23:53
state
cmd_1
LG
Helmut
Du müsstest schon mal ein komplettes Bewegungsmuster loggen, dann siehst Du welcher trigger zum zurückschalten geführt hat. Den müsstest Du dann unterdrücken.
Irgendwie ist Dein Logfile schlecht lesbar, Zeilenumbrüche nach dem Zeitstempel und den Einträgen und umgekehrter Reihenfolge. Wie hat Du das hinbekommen?
Ohne das jetzt getestet zu haben... Was passiert im zweiten Fall? Das Licht ist an, Du machst das Gartentor auf, das Licht wird ausgeschaltet. Dies führt zu einem Statuswechsel von [Gartenlicht] --> Die erste Bedingung wird getriggert und schaltet das Licht wieder an. Was wir erreichen wollen: Wenn das Gartenlicht an ist (nicht - wenn es angeschaltet wird) soll es beim Öffnen des Gartentors ausgeschaltet werden. Der Trigger darf also nur [Einfahrt] sein. Bei DOIF führen Angaben in eckigen Klammern, die mit einem Fragezeichen beginnen, zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage. Folgender Code sollte also funktionieren:
(..) DOELSEIF (([Einfahrt] eq "Offen") and ([?GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=on off)
es würde auch reichen:
(..) DOELSEIF (([Einfahrt] eq "Offen") and ([?GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht off)
(wir wissen ja schon, dass [Gartenlicht] "on" ist...
Grüße,
Oli
Hollo Oli,
herzlichen Dank für deine ausführliche Erklärung. Habe es jetzt so probiert:
(([Einfahrt] eq "Offen") and ([GartenLicht] eq "off") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=off on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and ([?GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=on off)
Leider ohne Erfolg. Es greift wieder der erste Teil da sich das Licht nach 60 Sekunden abdreht.
Beim Öffnen der Tür geht das Licht aus und nach wenigen Sekunden wieder an und brennt für 60 Sekunden.
Gruß
Helmut
Hallo Ellert,
das LogDoif habe ich so angelegt
([di_Test_3:""] or [Daemmerung:"sr|ss"] or [Einfahrt:""]) ({Log 1, "$SELF --> Device: $DEVICE, Events: $EVENTS"})
Zitat von: Helmi55 am 09 September 2016, 15:25:53
Leider ohne Erfolg. Es greift wieder der erste Teil da sich das Licht nach 60 Sekunden abdreht.
Beim Öffnen der Tür geht das Licht aus und nach wenigen Sekunden wieder an und brennt für 60 Sekunden.
Mein Fehler :-[ Das Problem ist ja, dass das Licht die erste Bedingung triggert, da muss also das Fragezeichen rein... (bei der zweiten Bedingung schadet's aber auch nicht)
Übrigen kannst do im DEF Editor auch Zeilenumbrüche verwenden, das macht das Ganze lesbarer ;-)
Grüße,
Oli
Zitat von: Helmi55 am 09 September 2016, 15:39:18
Hallo Ellert,
das LogDoif habe ich so angelegt
([di_Test_3:""] or [Daemmerung:"sr|ss"] or [Einfahrt:""]) ({Log 1, "$SELF --> Device: $DEVICE, Events: $EVENTS"})
Wie geschrieben, Du müsstest ein komplettes Bewegungsmuster loggen und den Fehler kommentieren, dann müsste leicht zu sehen sein, was zurück schaltet.
Hallo Oli
so siehts jetzt aus und funkt leider auch nicht richtig
(([Einfahrt] eq "Offen") and ([?GartenLicht] eq "off") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=off on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and ([?GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht:FILTER=STATE=on off)
So siehts im Def Editor aus - nur durch das Copy Past am mac scheint sich das so zu verziehen -sorry
@ Ellert
bitte nicht Teen und Federn - aber durch dein Log Doof sollte doch ein Log1 generiert werden oder?
Oder wo kann ich die Aufzeichnung sonst finden?
Danke nochmals
LG
Helmut
Hmm... Dann kann nur noch das Gartentor triggern... Sendet das alle paar Sekunden den Status? Hast du event-on-change-reading beim Gartentor gesetzt?
Servus
das ist ein HomeMatic Tür/Fenstersensor. Nein event-on-change reading ist nicht gesetzt (hab es mit probiert - dann geht dar nichts)
Hier ein List vom Sensor
Internals:
CHANGED
DEF 4ECD11
HMUSB_MSGCNT 4
HMUSB_RAWMSG E4ECD11,0000,10B97EA9,FF,FFB7,19A6414ECD11220355010D00
HMUSB_RSSI -73
HMUSB_TIME 2016-09-09 18:42:57
IODev HMUSB
LASTInputDev HMUSB
MSGCNT 4
NAME Einfahrt
NOTIFYDEV global
NR 372
STATE Zu
TYPE CUL_HM
lastMsg No:19 - t:41 s:4ECD11 d:220355 010D00
protLastRcv 2016-09-09 18:42:56
protSnd 4 last_at:2016-09-09 18:42:57
protState CMDs_done
rssi_at_HMUSB avg:-72 min:-73 max:-71 lst:-73 cnt:4
Readings:
2016-09-09 18:41:05 Activity alive
2016-09-03 12:43:07 CommandAccepted yes
2016-09-03 12:44:58 D-firmware 2.4
2016-09-03 12:44:58 D-serialNr NEQ0757436
2016-09-04 12:37:22 PairedTo 0x220355
2016-09-04 12:37:22 R-cyclicInfoMsg off
2016-09-04 12:37:23 R-eventDlyTime 0 s
2016-09-04 12:37:22 R-pairCentral 0x220355
2016-09-04 12:37:22 R-sabotageMsg on
2016-09-04 12:37:23 R-sign off
2016-09-04 12:37:22 RegL_00. 02:01 09:00 0A:22 0B:03 0C:55 10:01 14:06 00:00
2016-09-04 12:37:23 RegL_01. 08:00 20:60 21:00 22:64 30:06 00:00
2016-09-09 06:59:01 alive yes
2016-09-09 18:42:57 battery ok
2016-09-09 18:42:57 contact closed (to HMUSB)
2016-09-08 23:59:48 power-daily 0
2016-09-08 23:59:48 power-daily-last 0
2016-09-09 18:01:09 power-hourly 0
2016-09-09 17:59:52 power-hourly-last 0.0
2016-09-04 23:59:50 power-weekly 0
2016-09-04 23:59:50 power-weekly-last 0
2016-09-09 06:59:01 recentStateType info
2016-09-09 06:59:01 sabotageError on
2016-09-09 18:42:57 state closed
2016-09-09 18:42:57 trigDst_220355 noConfig
2016-09-09 18:42:57 trigger_cnt 13
Helper:
HM_CMDNR 25
mId 00B1
rxType 28
Expert:
def 1
det 0
raw 1
tpl 0
Io:
newChn +4ECD11,00,00,00
nextSend 1473439377.05833
prefIO
rxt 2
vccu
p:
4ECD11
00
00
00
Mrssi:
mNo 19
Io:
HMUSB -71
Prt:
bErr 0
sProc 0
sleeping 0
Rspwait:
Q:
qReqConf
qReqStat
Role:
chn 1
dev 1
Rpt:
IO HMUSB
flg A
ts 1473439376.96281
ack:
HASH(0x270a878)
1980022203554ECD110101C800
Rssi:
At_hmusb:
avg -72
cnt 4
lst -73
max -71
min -73
Attributes:
IODev HMUSB
actCycle 028:00
actStatus alive
autoReadReg 4_reqStatus
devStateIcon Offen:fts_window_2w_open_lr@red Zu:fts_window_2w@green
eventMap open:Offen closed:Zu
expert 2_raw
firmware 2.4
model HM-SEC-SC-2
peerIDs 00000000,
room Einfahrt,Favoriten
serialNr NEQ0757436
subType threeStateSensor
Danke
Mit welchen Events hast du es denn probiert? Mit den originalen oder den gemappten? Bin mir nicht ganz sicher, welche bei event-on-change-reading ziehen...
Servus
so habe jetzt einiges probiert - ohne Erfolg.
Wenn ich auf die Einfahrt (HM Sensor) ein event-on-change setzte (egal ob Offen oder open) funktioniert das DOIF überhaupt nicht???
Habe auch das ? bei Einfahrt rausgenommen - alles ohne Erfolg.
Ist meine Anforderung so hochgesteckt???
Hier noch ein List vom LogDOIF von Ellert
Internals:
DEF ([di_Test_3:""] or [Daemmerung:"sr|ss"] or [Einfahrt:""]) ({Log 1, "$SELF --> Device: $DEVICE, Events: $EVENTS"})
NAME LogDOIF
NR 379
NTFY_ORDER 50-LogDOIF
STATE disabled
TYPE DOIF
Readings:
2016-09-10 11:26:19 Device di_Test_3
2016-09-10 11:26:19 cmd 1
2016-09-10 11:26:19 cmd_event di_Test_3
2016-09-10 11:26:19 cmd_nr 1
2016-09-10 11:08:50 e_Daemmerung_events azimuth: 145.53,elevation: 40.35,twilight: 100,twilight_weather: 100,compasspoint: southeast
2016-09-10 11:06:34 e_Einfahrt_events battery: ok,contact: Zu (to HMUSB),Zu,trigDst_220355: noConfig,trigger_cnt: 41
2016-09-10 11:26:19 e_di_Test_3_events cmd: 0,initialized
2016-09-10 11:31:00 mode disabled
2016-09-10 11:31:00 state disabled
Condition:
0 EventDoIf('di_Test_3',$hash,'',1) or EventDoIf('Daemmerung',$hash,'sr|ss',1) or EventDoIf('Einfahrt',$hash,'',1)
Devices:
0 di_Test_3 Daemmerung Einfahrt
all di_Test_3 Daemmerung Einfahrt
Do:
0:
0 {Log 1, "LogDOIF --> Device: $DEVICE, Events: $EVENTS"}
Helper:
globalinit 1
last_timer 0
sleeptimer -1
Itimer:
Trigger:
all di_Test_3 Daemmerung Einfahrt
Attributes:
do always
Schön langsam glaube ich, dass es funktioniert wenn wir abends nach Hause kommen wird sich das Licht einschalten. Aber wenn meine Frau
in der Früh wegfährt, wird sie das Licht händisch abdrehen müssen.... :P ;D :(
Danke
Helmut
Habe jetzt auch, nachdem ich die CommandRef zum gefühlten 100x gelesen habe, das do always weggenommen und am Schluss noch ein DOELSE gesetzt - auch ohne Erfolg
Jetzt habe ich noch Versuche mit den 2 einzelDOIFs gestartet.
Beim ON habe ich ein Wait 10 eingebaut und beim OFF habe ich do always rausgenommen.
Dachte dass dadurch nicht wieder auf das ON schlagend bzw schaltend wird - Nö
Auch die attr addStateEvent und checkReadingsEvent halfen nicht weiter (zumindest bei mir :'()
Gruß
Helmut
LÖSUNG:
ich glaube ich habe geschafft - nur kurz getestet. Langzeittest folgt:
(([Einfahrt] eq "Offen") and ([?GartenLicht] eq "off") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and ([?GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht off) DOELSE
attr = wait 0:10
DAs wait dürfte die Lösung sein
Schönes Wochenende noch hoffe das wars
LG
Helmut
Zitat von: Helmi55 am 10 September 2016, 16:21:36
LÖSUNG:
ich glaube ich habe geschafft - nur kurz getestet. Langzeittest folgt:
(([Einfahrt] eq "Offen") and ([?GartenLicht] eq "off") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and ([?GartenLicht] eq "on") and [[Daemmerung:sr]-[Daemmerung:ss]]) (set GartenLicht off) DOELSE
attr = wait 0:10
DAs wait dürfte die Lösung sein
Schönes Wochenende noch hoffe das wars
LG
Helmut
Wenn Dämmerung ein Twilight-Modul ist, dann solltest das Attribut checkReadingEvent im DOIF-Modul setzen, sonst werden die Timer bei jedem Trigger des Twilight-Moduls alle fünf Minuten aktualisiert, siehe http://fhem.de/commandref_DE.html#DOIF_checkReadingEvent
Gruß
Damian
Hallo an ALLE Helfer - es funktioniert so:
(([Einfahrt] eq "Offen") and ([?GartenLicht] eq "off") and [[Daemmerung:ss]-[Daemmerung:sr]]) (set GartenLicht on-for-timer 60, set GaragenLicht on-for-timer 60) DOELSEIF (([Einfahrt] eq "Offen") and ([?GartenLicht] eq "on") and [[Daemmerung:ss]-[Daemmerung:sr]]) (set GartenLicht off) DOELSE
mit attr check-reading-event und wait 0:10
Danke an alle - schönen Abend
LG
Helmut