gelöst : DOIF / DOELSEIF / DOELSE

Begonnen von wurzelxquadrat, 29 März 2018, 22:28:02

Vorheriges Thema - Nächstes Thema

wurzelxquadrat

Hello zusammen

nach meinem Verständnis wäre es möglich mit DOIF / DOELSEIF zwei verschiedene Bedingungen abzufragen und wenn keine der beiden wahr ist würde der DOELSE Befehl ausgeführt werden.
Bei meiner Einstellung wird aber regelmäßig auch der der DOELSE Befehl ausgeführt obwohl mindestens einer der vorhergehenden Bedingungen noch wahr ist ?

Hier mal das List zum DOIF

Internals:
   CFGFN     
   DEF        ([14:00 - 00:50] and [Anwesenheit] eq "anwesend" and [Daemmerung:twilight]<65) (set Lichter_b_Anwesenheit on )DOELSEIF ([SamsungTV_Status] eq "present" and [Daemmerung:twilight]<65) (set Lichter_b_Anwesenheit on )
DOELSE (set Lichter_b_Anwesenheit off)
   MODEL      FHEM
   NAME       Light_at_pressence
   NR         5474
   NTFY_ORDER 50-Light_at_pressence
   STATE      disabled
   TYPE       DOIF
   READINGS:
     2018-03-29 22:23:03   Device          SamsungTV_Status
     2018-03-29 22:23:03   cmd             3
     2018-03-29 22:23:03   cmd_event       SamsungTV_Status
     2018-03-29 22:23:03   cmd_nr          3
     2018-03-29 22:23:03   e_SamsungTV_Status_STATE absent
     2018-03-29 22:23:42   last_cmd        cmd_3
     2018-03-29 22:23:42   mode            disabled
     2018-03-29 22:23:42   state           disabled
     2018-03-29 22:21:53   timer_01_c01    30.03.2018 14:00:00
     2018-03-29 22:21:53   timer_02_c01    30.03.2018 00:50:00
   Regex:
   condition:
     0          DOIF_time($hash,0,1,$wday,$hms) and InternalDoIf($hash,'Anwesenheit','STATE') eq "anwesend" and ReadingValDoIf($hash,'Daemmerung','twilight')<65
     1          InternalDoIf($hash,'SamsungTV_Status','STATE') eq "present" and ReadingValDoIf($hash,'Daemmerung','twilight')<65
   days:
   devices:
     0           Anwesenheit Daemmerung
     1           SamsungTV_Status Daemmerung
     all         Anwesenheit Daemmerung SamsungTV_Status
   do:
     0:
       0          set Lichter_b_Anwesenheit on
     1:
       0          set Lichter_b_Anwesenheit on
     2:
       0          set Lichter_b_Anwesenheit off
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      absent,presence: absent
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   SamsungTV_Status
     timerevent absent,presence: absent
     triggerDev SamsungTV_Status
     timerevents:
       absent
       presence: absent
     timereventsState:
       state: absent
       presence: absent
     triggerEvents:
       absent
       presence: absent
     triggerEventsState:
       state: absent
       presence: absent
   internals:
     0           Anwesenheit:STATE
     1           SamsungTV_Status:STATE
     all         Anwesenheit:STATE SamsungTV_Status:STATE
   interval:
     0          -1
     1          0
   itimer:
   localtime:
     0          1522411200
     1          1522363800
   readings:
     0           Daemmerung:twilight
     1           Daemmerung:twilight
     all         Daemmerung:twilight
   realtime:
     0          14:00:00
     1          00:50:00
   time:
     0          14:00:00
     1          00:50:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   trigger:
   triggertime:
     1522363800:
       localtime  1522363800
       hash:
     1522411200:
       localtime  1522411200
       hash:
   uiState:
   uiTable:
Attributes:
   room       Übersicht



Kann mir jemand sagen warum ich in den DOELSE rutsche obwohl ich DOIF oder DOELSEIF noch erfüllt habe ?

Danke schon mal vorab

Gruß
Wurzelx²


Otto123

Hi,

dein Grundgedanke ist richtig, aber Deine Bedingungen sind mehrdeutig.
Jedes der Geräte triggert das Modul
     0           Anwesenheit Daemmerung
     1           SamsungTV_Status Daemmerung
Was ist wenn die erste und zweite Bedingung erfüllt ist?

Warum er DOELSE macht ist mir jetzt nicht klar, aber eventuell gibt es Übergangszustände.
Schau Dir alles im Eventmonitor an.

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

Frank_Huber

das "do always" fehlt.
Dadurch werden die CMDs nacheinander abgearbeitet, 1->2->3->1->2->3....

Dastriggernde Event war der Samsung TV. der ging "absent" und das DOIF dadurch in DOELSE

     2018-03-29 22:23:03   Device          SamsungTV_Status
     2018-03-29 22:23:03   cmd             3
     2018-03-29 22:23:03   cmd_event       SamsungTV_Status
     2018-03-29 22:23:03   cmd_nr          3
     2018-03-29 22:23:03   e_SamsungTV_Status_STATE absent

wurzelxquadrat

Hi

also der Grund für das  DOELSEIF ist folgender.
1) ich möchte Licht im Haus haben wenn ich zuhause bin , und zwar zu bestimmten Zeiten und wenn es dämmert
2) manchmal wird es später weil ich vor dem TV hängen geblieben bin und dann will ich das Licht im Haus anlassen

3) sobald ich dann aber den TV ausschalte soll es überall finster werden im Haus.

Wie sollte ich das denn machen ???
Bin ich da mit den DOELSEIF auf dem falschen Dampfer ??

Wurzelx²

wurzelxquadrat

Servus


also ich habe das jetzt so gelöst .....

DOIF :

([SamsungTV_Status] eq "present" and [Daemmerung:twilight]<65) (set Lichter_b_Anwesenheit on) DOELSEIF ([14:00 - 23:55] and [Anwesenheit] eq "anwesend" and [Daemmerung:twilight]<65 and [SamsungTV_Status] eq "absent" ) (set Lichter_b_Anwesenheit on )
DOELSE (set Lichter_b_Anwesenheit off)


Jetzt bleibt das Licht auch länger an falls ich am TV sitze. Wenn nicht dann geht es 23:55 aus.

Ja Ja ......ein kleiner Schritt für die Menschheit aber ein großer Schritt für Wurzelx²


KernSani

So ähnlich wollte ich das auch gerade schreiben... jetzt hast du - wie Otto schon angemerkt hat - die Mehrdeutigkeit ausgeschlossen.

Schreibst du noch [Gelöst] vor das Subject des ersten Posts?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...