Hallo zusammen,
ich möchte realisieren, dass wenn ein Bewohner nach Hause kommt und es draußen dunkel ist, bestimme Aktionen, wie z.B. Lampen geschaltet werden.
Dieses habe ich mit folgender DEF im DOIF versucht:
([rgr_Residents:presence] eq "present" and [Twilight:light] < 4) (set Lampe1 on, set Lampe2 on)
Leider triggern beide Bedingungen die Aktionen, also wenn ein Bewohner bereits zu Hause ist, wird bei unterschreiten von dem Wert 4 (Twilight:light) die Aktion ausgeführt. Eigentlich soll in diesem Fall nichts passieren.
Im Forum habe ich gefunden, dass mit dem checkall Attribut eingestellt werden kann welche Bedingung triggert (event, timer, all). In meinem Fall sind es jedoch 2 x event, so dass dieses anscheinend keine Lösung für mich ist.
Habt Ihr einen Tipp für mich?
VG
Michael
Hallo,
Aus der Commandref:
ZitatAngaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage.
([rgr_Residents:presence] eq "present" and [?Twilight:light] < 4) (set Lampe1 on, set Lampe2 on)
LG, erwe
Super, danke! Hab ich wohl überlesen...
Viele Grüße
Michael
Hallo nochmals,
leider hat das Hinzufügen von einem ? keine Verbesserung gebracht. Hier mal mein listing
Internals:
DEF ([rgr_Residents:presence] eq "present" and [?Twilight:light] < 4) (set lampe1 on, set lampe2 on)
NAME di_HomeState_Twilight
NR 200
NTFY_ORDER 50-di_HomeState_Twilight
STATE cmd_2
TYPE DOIF
Readings:
2017-05-22 11:33:05 Device rgr_Residents
2017-05-22 05:35:24 cmd 2
2017-05-22 05:35:24 cmd_event rgr_Residents
2017-05-22 05:35:24 cmd_nr 2
2017-05-22 11:33:05 e_rgr_Residents_presence present
2017-05-22 05:35:24 state cmd_2
Condition:
0 ReadingValDoIf($hash,'rgr_Residents','presence') eq "present" and ReadingValDoIf($hash,'Twilight','light') < 4
Devices:
0 rgr_Residents
all rgr_Residents
Do:
0:
0 set lampe1 on, set lampe2 on
1:
Helper:
event durTimerPresence_cr: 121,durTimerPresence: 02:01:00
globalinit 1
last_timer 0
sleeptimer -1
timerdev rgr_Residents
timerevent durTimerPresence_cr: 121,durTimerPresence: 02:01:00
triggerDev rgr_Residents
timerevents:
durTimerPresence_cr: 121
durTimerPresence: 02:01:00
timereventsState:
durTimerPresence_cr: 121
durTimerPresence: 02:01:00
triggerEvents:
durTimerPresence_cr: 121
durTimerPresence: 02:01:00
triggerEventsState:
durTimerPresence_cr: 121
durTimerPresence: 02:01:00
Internals:
Itimer:
Readings:
0 rgr_Residents:presence
all rgr_Residents:presence
Regexp:
0:
All:
State:
State:
Trigger:
Attributes:
checkall event
group SYS_Homematic
room System
2017.05.21 21:19:23 3: CUL_HM set lampe1 on
2017.05.21 21:19:23 3: CUL_HM set lampe2 on
Hallo Michael,
Du darfst nicht den Status abfragen sondern musst auf ein Ereignis triggern (und dazu einen eventuell einen weiteren Status abfragen) -> https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Also so in etwa: ([rgr_Residents:"present"] and [?Twilight:light] < 4)
hängt aber vom konkreten Event ab, bitte im Eventmonitor anschauen.
Gruß Otto
Meiner Meinung nach würde auch "[rgr_Residents:presence] eq "present"" funktionieren, solange das Reading "presence" tatsächlich ein Event generiert.
Aber wenn ich richtig verstanden habe, triggert sein Ding "zu viel". Das kann man aber leider nicht in den 2 Zeilen Log feststellen. Man sieht nur, dass die beide Lampen um 21:19:23 Uhr eingeschaltet worden sind... da weisst man nicht aber warum.
Im Listing sieht man schon, dass das DOIF nur auf rgr_Residents triggert... also... sollte schon funktionieren, und nicht mehr auf Twilight schalten.
Dann muss eventuell event-on-change-reading in rgr_Residents gesetzt werden?
Ok, im Log steht leider nicht mehr drin, kann ich das irgendwie debuggen?
Um nicht immer wieder auf das Twilight:light Ereignis zu warten, kann ich den Twilight:light Wert manuell schreiben, so als wenn dieser sich systemisch verändert hätte?
Ja, das kannst Du mit setreading Twilight light 3
machen, wenn Du nix anderes hast, das auf Twilight reagiert ;)
Oder Du könntest über ein dummyTwilight z.B. debuggen.
define dummyTwilight dummy
set dummyTwilight 5
DOIF : ([rgr_Residents:presence] eq "present" and [?dummyTwilight] < 4) (set lampe1 on, set lampe2 on)
set dummyTwilight 3
Aber vielleicht hast Du eine Log von deinem rgr_Residents gegen 21:19 uhr?
oder mind. ein List von rgr_Residents (evtl. anonymisiert)?
Ok, teste ich.
Hier das list von rgr_Residents, im Log steht nix in dem Zeitrasum zu rgr_Residents.
Internals:
DURATIONTIMER 1495450551.7746
NAME rgr_Residents
NOTIFYDEV global,RR_Bewohner1,RR_Bewohner2
NR 186
NTFY_ORDER 50-rgr_Residents
READY 1
ROOMMATES RR_Bewohner1,RR_Bewohner2
STATE zuhause
TYPE RESIDENTS
Readings:
2017-05-22 09:32:05 durTimerAbsence 00:00:00
2017-05-22 09:32:05 durTimerAbsence_cr 0
2017-05-22 12:54:51 durTimerPresence 00:31:00
2017-05-22 12:54:51 durTimerPresence_cr 31
2017-05-05 17:28:15 durTimerSleep 00:00:00
2017-05-05 17:28:15 durTimerSleep_cr 0
2017-05-22 12:23:51 lastActivity home
2017-05-22 12:23:51 lastActivityBy Bewohner1
2017-05-22 12:23:51 lastActivityByDev RR_Bewohner1
2017-05-22 12:23:51 lastArrival 2017-05-22 12:23:51
2017-05-22 12:06:23 lastAwake 2017-05-22 12:06:23
2017-05-22 12:23:47 lastDeparture 2017-05-22 12:23:47
2017-05-22 12:23:51 lastDurAbsence 00:00:04
2017-05-22 12:23:51 lastDurAbsence_cr 0
2017-05-22 12:23:47 lastDurPresence 00:00:04
2017-05-22 12:23:47 lastDurPresence_cr 0
2017-05-22 12:06:23 lastDurSleep 00:00:11
2017-05-22 12:06:23 lastDurSleep_cr 0
2017-05-22 12:06:12 lastSleep 2017-05-22 12:06:12
2017-05-22 12:23:51 lastState absent
2017-05-22 12:23:51 presence present
2017-05-22 12:23:51 residentsAbsent 1
2017-05-22 12:23:51 residentsAbsentDevs RR_Bewohner2
2017-05-22 12:23:51 residentsAbsentNames Bewohner2
2017-05-22 12:06:23 residentsAsleep 0
2017-05-22 12:06:23 residentsAsleepDevs -
2017-05-22 12:06:23 residentsAsleepNames -
2017-05-22 12:06:42 residentsAwoken 0
2017-05-22 12:06:42 residentsAwokenDevs -
2017-05-22 12:06:42 residentsAwokenNames -
2017-05-14 16:24:23 residentsGone 0
2017-05-14 16:24:23 residentsGoneDevs -
2017-05-14 16:24:23 residentsGoneNames -
2017-05-05 17:28:22 residentsGotosleep 0
2017-05-05 17:28:22 residentsGotosleepDevs -
2017-05-05 17:28:22 residentsGotosleepNames -
2017-05-22 12:23:51 residentsHome 1
2017-05-22 12:23:51 residentsHomeDevs RR_Bewohner1
2017-05-22 12:23:51 residentsHomeNames Bewohner1
2017-05-05 17:32:13 residentsTotal 2
2017-05-22 12:23:51 residentsTotalAbsent 1
2017-05-22 12:23:51 residentsTotalAbsentDevs RR_Bewohner2
2017-05-22 12:23:51 residentsTotalAbsentNames Bewohner2
2017-05-05 17:28:22 residentsTotalGuests 0
2017-05-05 17:28:22 residentsTotalGuestsAbsent 0
2017-05-05 17:28:22 residentsTotalGuestsAbsentDevs -
2017-05-05 17:28:22 residentsTotalGuestsAbsentNames -
2017-05-05 17:28:22 residentsTotalGuestsPresent 0
2017-05-05 17:28:22 residentsTotalGuestsPresentDevs -
2017-05-05 17:28:22 residentsTotalGuestsPresentNames -
2017-05-22 12:23:51 residentsTotalPresent 1
2017-05-22 12:23:51 residentsTotalPresentDevs RR_Bewohner1
2017-05-22 12:23:51 residentsTotalPresentNames Bewohner1
2017-05-05 17:32:13 residentsTotalRoommates 2
2017-05-22 12:23:51 residentsTotalRoommatesAbsent 1
2017-05-22 12:23:51 residentsTotalRoommatesAbsentDevs RR_Bewohner2
2017-05-22 12:23:51 residentsTotalRoommatesAbsentNames Bewohner2
2017-05-22 12:23:51 residentsTotalRoommatesPresent 1
2017-05-22 12:23:51 residentsTotalRoommatesPresentDevs RR_Bewohner1
2017-05-22 12:23:51 residentsTotalRoommatesPresentNames Bewohner1
2017-05-05 17:28:22 residentsTotalWakeup 0
2017-05-05 17:28:22 residentsTotalWakeupDevs -
2017-05-05 17:28:22 residentsTotalWakeupNames -
2017-05-05 17:28:22 residentsTotalWayhome 0
2017-05-05 17:28:22 residentsTotalWayhomeDelayed 0
2017-05-05 17:28:22 residentsTotalWayhomeDelayedDevs -
2017-05-05 17:28:22 residentsTotalWayhomeDelayedNames -
2017-05-05 17:28:22 residentsTotalWayhomeDevs -
2017-05-05 17:28:22 residentsTotalWayhomeNames -
2017-05-22 12:23:51 state home
Timer:
Rgr_residents_durationtimer:
HASH rgr_Residents
MODIFIER DurationTimer
NAME rgr_Residents_DurationTimer
Attributes:
alias Bewohner
devStateIcon .*zuhause:user_available:absent .*anwesend:user_available:absent .*abwesend:user_away:home .*verreist:user_ext_away:home .*bettfertig:scene_toilet:asleep .*schlaeft:scene_sleeping:awoken .*schläft:scene_sleeping:awoken .*aufgestanden:scene_sleeping_alternat:home .*:user_unknown:home
eventMap home:zuhause absent:abwesend gone:verreist gotosleep:bettfertig asleep:schläft awoken:aufgestanden
group Zuhause Status
icon control_building_filled
rgr_lang DE
room Bewohner
sortby 01
webCmd state
widgetOverride state:zuhause,bettfertig,schläft,aufgestanden,abwesend,verreist
Also... ich kenne das RESIDENTS Modul nicht so gut, aber anscheinend generiert er regelmässig Events, inkl "presence" Events. Es wäre interessant dein EventMonitor auf rgr_Residents.* zu Filtern, und die letzte 10 - 15 Minuten zu zeigen.
Laut deiner List vom DOIF, wurde es von "durTimerPresence_cr" z.B. getriggert.
Wenn das Event "presence:present" regelmässig generiert wird, dann prüft er jedes mal Twilight dazu...
So lange Twilight:light >= 4 passiert nichts.
So bald Twilight:light <4 triggert das nächste "presence:present" deine Lampen.
Wenn Du nur Events willst, wenn presence sich ändert, dann wie Otto gesagt hat: attr event-on-change-reading presence
Als Ergänzung (manch einer nimmt es mit copy&paste zu genau 8)
attr rgr_Residents event-on-change-reading presence
am Besten in der Oberfläche ausführen.
Und: Nur bestimmte und bei weitem nicht alle Events erscheinen im Log ;D
Zitat von: Otto123 am 22 Mai 2017, 13:53:49
Als Ergänzung (manch einer nimmt es mit copy&paste zu genau 8)
attr rgr_Residents event-on-change-reading presence
am Besten in der Oberfläche ausführen.
Und: Nur bestimmte und bei weitem nicht alle Events erscheinen im Log ;D
Danke, ist gesetzt, ich beoachte das heute Abend.
Das hier hat Erfolg gebracht:
attr rgr_Residents event-on-change-reading presence
Danke für Euren Support!