[Gelöst] DOIF triggert elseIf und else gleichzeitig?

Begonnen von rretsiem, 16 März 2015, 22:30:46

Vorheriges Thema - Nächstes Thema

rretsiem

Hallo,

Letzte Woche habe ich das untenstehende DOIF Konstrukt eingebaut welches auch für die Wochentage einwandfrei funktioniert.
Gestern am Sonntag und auch Samstag habe ich aber 2 Mitteilungen jeweils exakt um 19:30 erhalten und zwar die "Wochenendschaltung..." und direkt danach (ohne Verzögerung) die Push-Mitteilung aus dem DOELSE.

habe folgendes DOIF Konstrukt:


define doif_BUE.Heizung_an_aus DOIF ([rr_Rene:location] eq "home" and [08:30-16:30|8]) (
    set HM.Thermostat01.Buero_Clima desired-temp 21
  ) DOELSEIF ([rr_Sabine:location] ne "home" and [rr_Rene:location] eq "home" and [19:00-21:00|8]) (
    set HM.Thermostat01.Buero_Clima desired-temp 21
  ) DOELSEIF ([rr_Rene:location] eq "home" and [19:30-21:00|7]) (
    set HM.Thermostat01.Buero_Clima desired-temp 21,
    set pushover msg "Heizung Büro" "Wochenendschaltung Heizung abends auf 21°C"
  ) DOELSE (
    set HM.Thermostat01.Buero_Clima desired-temp 17,
    set pushover msg "Heizung Büro" "ECO-Mode Heizung auf 17°C"
  )


Kann mir bitte jemand erklären warum er cmd_3 und cmd_4 doppelt ausgeführt hat am Wochenende? Und zwar genau um 19:30.

Der Status von Roommate rr_Rene wird nur über Geofancy definiert und wurde auch nicht ausgelöst, sollte hier ein Fehler passiert sein warum dann merkwürdigerweise an beiden Tagen zur gleichen Zeit. wenn mein Status wenn Wochenende != "home" ist würde ich es ja verstehen, aber so :-\

Für Tipps bin ich dankbar!


Damian

Zitat von: rretsiem am 16 März 2015, 22:30:46
Hallo,

Letzte Woche habe ich das untenstehende DOIF Konstrukt eingebaut welches auch für die Wochentage einwandfrei funktioniert.
Gestern am Sonntag und auch Samstag habe ich aber 2 Mitteilungen jeweils exakt um 19:30 erhalten und zwar die "Wochenendschaltung..." und direkt danach (ohne Verzögerung) die Push-Mitteilung aus dem DOELSE.

habe folgendes DOIF Konstrukt:


define doif_BUE.Heizung_an_aus DOIF ([rr_Rene:location] eq "home" and [08:30-16:30|8]) (
    set HM.Thermostat01.Buero_Clima desired-temp 21
  ) DOELSEIF ([rr_Sabine:location] ne "home" and [rr_Rene:location] eq "home" and [19:00-21:00|8]) (
    set HM.Thermostat01.Buero_Clima desired-temp 21
  ) DOELSEIF ([rr_Rene:location] eq "home" and [19:30-21:00|7]) (
    set HM.Thermostat01.Buero_Clima desired-temp 21,
    set pushover msg "Heizung Büro" "Wochenendschaltung Heizung abends auf 21°C"
  ) DOELSE (
    set HM.Thermostat01.Buero_Clima desired-temp 17,
    set pushover msg "Heizung Büro" "ECO-Mode Heizung auf 17°C"
  )


Kann mir bitte jemand erklären warum er cmd_3 und cmd_4 doppelt ausgeführt hat am Wochenende? Und zwar genau um 19:30.

Der Status von Roommate rr_Rene wird nur über Geofancy definiert und wurde auch nicht ausgelöst, sollte hier ein Fehler passiert sein warum dann merkwürdigerweise an beiden Tagen zur gleichen Zeit. wenn mein Status wenn Wochenende != "home" ist würde ich es ja verstehen, aber so :-\

Für Tipps bin ich dankbar!

Ich vermute, dass um 19:30 Uhr noch etwas anderes dein DOIF-Modul triggert, was in der Bedingung nicht wahr ist und dann zur Ausführung des  DOELSE-Falls führt.

Wenn du diesen Fall noch mal nachstellen kannst, dann poste hier das Ergebnis von "list  doif_BUE.Heizung_an_aus". Dann kann man sich die letzten Events e_...- Readings im DOIF-Modul anschauen und überlegen, was da passiert.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rretsiem

Hallo Damian,

heute war es wieder soweit, ich bin zu Hause (iPhone5Geo ist anwesend in FHEM) und erhalte um Punkt 19:30 die beiden Push-Mitteilungen.

Hier der list auf das DOIF:


Internals:
   DEF        ([geofancy:currLoc_iPhone5Geo] eq "home" and [08:30-16:30|8]) ( set HM.Thermostat01.Buero_Clima desired-temp 21, set pushover msg "Heizung Büro" "Heizung wurde auf 21°C gestellt" ) DOELSEIF ([geofancy:currLoc_iPhone4Geo] ne "home" and [geofancy:currLoc_iPhone5Geo] eq "home" and [19:30-21:45|8]) (set HM.Thermostat01.Buero_Clima desired-temp 21,  set pushover msg "Heizung Büro" "Sabine außer Haus Heizung wurde auf 21°C gestellt") DOELSEIF ([geofancy:currLoc_iPhone5Geo] eq "home" and [19:30-21:30|7]) ( set HM.Thermostat01.Buero_Clima desired-temp 21, set pushover msg "Heizung Büro" "Wochenendschaltung Heizung abends auf 21°C") DOELSE (set HM.Thermostat01.Buero_Clima desired-temp 17,set pushover msg "Heizung Büro" "ECO-Mode Heizung auf 17°C")
   NAME       doif_BUE.Heizung_an_aus
   NR         114
   NTFY_ORDER 50-doif_BUE.Heizung_an_aus
   STATE      cmd_4
   TYPE       DOIF
   Readings:
     2015-03-21 19:30:02   cmd_event       timer_3
     2015-03-21 19:30:02   cmd_nr          4
     2015-03-21 17:57:22   e_geofancy_currLoc_iPhone4Geo underway
     2015-03-21 17:57:22   e_geofancy_currLoc_iPhone5Geo home
     2015-03-21 19:30:02   state           cmd_4
     2015-03-21 08:30:00   timer_1_c1      22.03.2015 08:30:00|8
     2015-03-21 16:30:00   timer_2_c1      22.03.2015 16:30:00|8
     2015-03-21 19:30:02   timer_3_c2      22.03.2015 19:30:00|8
     2015-03-20 21:45:00   timer_4_c2      21.03.2015 21:45:00|8
     2015-03-21 19:30:01   timer_5_c3      22.03.2015 19:30:00|7
     2015-03-20 21:30:00   timer_6_c3      21.03.2015 21:30:00|7
   Condition:
     0          ReadingValDoIf('geofancy','currLoc_iPhone5Geo','') eq "home" and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"8")
     1          ReadingValDoIf('geofancy','currLoc_iPhone4Geo','') ne "home" and ReadingValDoIf('geofancy','currLoc_iPhone5Geo','') eq "home" and DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"8")
     2          ReadingValDoIf('geofancy','currLoc_iPhone5Geo','') eq "home" and DOIF_time($hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"7")
   Days:
     0          8
     1          8
     2          8
     3          8
     4          7
     5          7
   Devices:
     0           geofancy
     1           geofancy
     2           geofancy
     all         geofancy
   Do:
     0           set HM.Thermostat01.Buero_Clima desired-temp 21, set pushover msg "Heizung Büro" "Heizung wurde auf 21°C gestellt"
     1          set HM.Thermostat01.Buero_Clima desired-temp 21,  set pushover msg "Heizung Büro" "Sabine außer Haus Heizung wurde auf 21°C gestellt"
     2           set HM.Thermostat01.Buero_Clima desired-temp 21, set pushover msg "Heizung Büro" "Wochenendschaltung Heizung abends auf 21°C"
     3          set HM.Thermostat01.Buero_Clima desired-temp 17,set pushover msg "Heizung Büro" "ECO-Mode Heizung auf 17°C"
   Helper:
     last_timer 6
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
     0           geofancy:currLoc_iPhone5Geo
     1           geofancy:currLoc_iPhone4Geo geofancy:currLoc_iPhone5Geo
     2           geofancy:currLoc_iPhone5Geo
     all         geofancy:currLoc_iPhone5Geo geofancy:currLoc_iPhone4Geo
   Realtime:
     0          08:30:00
     1          16:30:00
     2          19:30:00
     3          21:45:00
     4          19:30:00
     5          21:30:00
   State:
   Time:
     0          08:30:00
     1          16:30:00
     2          19:30:00
     3          21:45:00
     4          19:30:00
     5          21:30:00
   Timecond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          2
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
     2           4  5
   Trigger:
Attributes:



Ich habe auch noch einmal alles überprüft aber kann einfach keinen anderen Trigger finden der dieses DOIF auslöst oder in einer anderen Art beeinflusst.

Damian

#3
Zitat von: rretsiem am 21 März 2015, 20:14:51
Hallo Damian,

heute war es wieder soweit, ich bin zu Hause (iPhone5Geo ist anwesend in FHEM) und erhalte um Punkt 19:30 die beiden Push-Mitteilungen.

Hier der list auf das DOIF:


Internals:
   DEF        ([geofancy:currLoc_iPhone5Geo] eq "home" and [08:30-16:30|8]) ( set HM.Thermostat01.Buero_Clima desired-temp 21, set pushover msg "Heizung Büro" "Heizung wurde auf 21°C gestellt" ) DOELSEIF ([geofancy:currLoc_iPhone4Geo] ne "home" and [geofancy:currLoc_iPhone5Geo] eq "home" and [19:30-21:45|8]) (set HM.Thermostat01.Buero_Clima desired-temp 21,  set pushover msg "Heizung Büro" "Sabine außer Haus Heizung wurde auf 21°C gestellt") DOELSEIF ([geofancy:currLoc_iPhone5Geo] eq "home" and [19:30-21:30|7]) ( set HM.Thermostat01.Buero_Clima desired-temp 21, set pushover msg "Heizung Büro" "Wochenendschaltung Heizung abends auf 21°C") DOELSE (set HM.Thermostat01.Buero_Clima desired-temp 17,set pushover msg "Heizung Büro" "ECO-Mode Heizung auf 17°C")
   NAME       doif_BUE.Heizung_an_aus
   NR         114
   NTFY_ORDER 50-doif_BUE.Heizung_an_aus
   STATE      cmd_4
   TYPE       DOIF
   Readings:
     2015-03-21 19:30:02   cmd_event       timer_3
     2015-03-21 19:30:02   cmd_nr          4
     2015-03-21 17:57:22   e_geofancy_currLoc_iPhone4Geo underway
     2015-03-21 17:57:22   e_geofancy_currLoc_iPhone5Geo home
     2015-03-21 19:30:02   state           cmd_4
     2015-03-21 08:30:00   timer_1_c1      22.03.2015 08:30:00|8
     2015-03-21 16:30:00   timer_2_c1      22.03.2015 16:30:00|8
     2015-03-21 19:30:02   timer_3_c2      22.03.2015 19:30:00|8
     2015-03-20 21:45:00   timer_4_c2      21.03.2015 21:45:00|8
     2015-03-21 19:30:01   timer_5_c3      22.03.2015 19:30:00|7
     2015-03-20 21:30:00   timer_6_c3      21.03.2015 21:30:00|7
   Condition:
     0          ReadingValDoIf('geofancy','currLoc_iPhone5Geo','') eq "home" and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"8")
     1          ReadingValDoIf('geofancy','currLoc_iPhone4Geo','') ne "home" and ReadingValDoIf('geofancy','currLoc_iPhone5Geo','') eq "home" and DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"8")
     2          ReadingValDoIf('geofancy','currLoc_iPhone5Geo','') eq "home" and DOIF_time($hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"7")
   Days:
     0          8
     1          8
     2          8
     3          8
     4          7
     5          7
   Devices:
     0           geofancy
     1           geofancy
     2           geofancy
     all         geofancy
   Do:
     0           set HM.Thermostat01.Buero_Clima desired-temp 21, set pushover msg "Heizung Büro" "Heizung wurde auf 21°C gestellt"
     1          set HM.Thermostat01.Buero_Clima desired-temp 21,  set pushover msg "Heizung Büro" "Sabine außer Haus Heizung wurde auf 21°C gestellt"
     2           set HM.Thermostat01.Buero_Clima desired-temp 21, set pushover msg "Heizung Büro" "Wochenendschaltung Heizung abends auf 21°C"
     3          set HM.Thermostat01.Buero_Clima desired-temp 17,set pushover msg "Heizung Büro" "ECO-Mode Heizung auf 17°C"
   Helper:
     last_timer 6
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
     0           geofancy:currLoc_iPhone5Geo
     1           geofancy:currLoc_iPhone4Geo geofancy:currLoc_iPhone5Geo
     2           geofancy:currLoc_iPhone5Geo
     all         geofancy:currLoc_iPhone5Geo geofancy:currLoc_iPhone4Geo
   Realtime:
     0          08:30:00
     1          16:30:00
     2          19:30:00
     3          21:45:00
     4          19:30:00
     5          21:30:00
   State:
   Time:
     0          08:30:00
     1          16:30:00
     2          19:30:00
     3          21:45:00
     4          19:30:00
     5          21:30:00
   Timecond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          2
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
     2           4  5
   Trigger:
Attributes:



Ich habe auch noch einmal alles überprüft aber kann einfach keinen anderen Trigger finden der dieses DOIF auslöst oder in einer anderen Art beeinflusst.

Ich sehe gerade, dass du auch eine Puchmeldung im DOELSE-Fall hast. Die Erklärung ist ganz einfach. 19:30 kommt in zwei Bedingungen vor, die eine mit 7 wird heute um 19:30 Uhr getriggert und ausgeführt, die andere mit 8 wird auch um 19:30 getriggert ist heute aber nicht wahr, deswegen wird der DOELSE-Fall ausgeführt. Zukünftig wird es nur einen Trigger für die gleiche Zeit geben, dann kann sowas nicht passieren. z. Zt. musst du dir etwas überlegen, wie du in diesem Fall evtl. den DOELSE-Fall gegen einen DOELSEIF ersetzen kannst.

Gruß

Damian


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rretsiem

Danke, das erklärt das ganze dann natürlich. Ich wusste nicht das der Trigger dann mehrfach ausgelöst wird.

Ich überlege mal :)

Damian

Zitat von: rretsiem am 21 März 2015, 21:22:19
Danke, das erklärt das ganze dann natürlich. Ich wusste nicht das der Trigger dann mehrfach ausgelöst wird.

Ich überlege mal :)

Ja, das ist eine Unschönheit, die bei mir auf der Todo-Liste steht.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Bartimaus

Darauf bin ich auch "reingefallen". Habe es durch eine "or"-Bedingung gelöst
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly