Hauptmenü

DOIF trigger

Begonnen von MoneyBox76, 19 Mai 2017, 16:14:12

Vorheriges Thema - Nächstes Thema

MoneyBox76

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

erwe

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

MoneyBox76

Super, danke! Hab ich wohl überlesen...

Viele Grüße
Michael

MoneyBox76

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

Otto123

#4
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

amenomade

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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

Dann muss eventuell event-on-change-reading in rgr_Residents gesetzt werden?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MoneyBox76

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?

amenomade

#8
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)?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

MoneyBox76

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


amenomade

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
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MoneyBox76

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.

MoneyBox76

Das hier hat Erfolg gebracht:

attr rgr_Residents event-on-change-reading presence

Danke für Euren Support!