DOIF - Irgendwie will es nicht wie es soll...

Begonnen von Toto1973, 05 März 2015, 11:37:22

Vorheriges Thema - Nächstes Thema

Toto1973

Hallo!
Ich habe da mal wieder ein Problem mit einer DOIF-Anweisung, die unter verschiedenen Abhänigkeiten meine Heizung im Schlafzimmer schalten soll. Leider finde ich da keinen Fehler.

Internals:
   DEF        ([sz_Waesche_trocknen:state] eq "on" and [11:00:01-20:00:00] and [?geofancy:currLoc_Toto] eq "Home" or [?geofancy:currLoc_Toto] eq "underway") (set sz_Heizung desiredTemperature 22) DOELSEIF ([geofancy:currLoc_Toto] eq "Home" and [sz_Waesche_trocknen:state] eq "off" and [?Schicht_dummy:state] eq "Frueh" and [03:30-05:00|8]) (set sz_Heizung desiredTemperature 22) DOELSEIF ([geofancy:currLoc_Toto] eq "Home" and [sz_Waesche_trocknen:state] eq "off" and [?Schicht_dummy:state] eq "Mittel" and [07:45-11:00|8]) (set sz_Heizung desiredTemperature 22) DOELSEIF ([geofancy:currLoc_Toto] eq "Home" and [sz_Waesche_trocknen:state] eq "off" and [09:00-11:00|7]) (set sz_Heizung desiredTemperature 22) DOELSEIF  ([Technoclub:state] eq "ja" and [sz_Waesche_trocknen:state] eq "off" and [geofancy:currLoc_Toto] eq "Home" and [14:00-18:00]) (set sz_Heizung desiredTemperature 20) DOELSEIF ([geofancy:currLoc_Toto] eq "Home" and [sz_Waesche_trocknen:state] eq "off" and [11:00:01-18:00:00]) (set sz_Heizung desiredTemperature 20) DOELSE (set sz_Heizung desiredTemperature 17)
   NAME       sz_Heizung_an_aus
   NR         141
   NTFY_ORDER 50-sz_Heizung_an_aus
   STATE      cmd_7
   TYPE       DOIF
   Readings:
     2015-03-05 11:00:01   cmd_event       timer_1
     2015-03-05 11:00:01   cmd_nr          7
     2015-03-05 11:00:01   state           cmd_7
     2015-03-04 18:00:00   timer_10_c5     05.03.2015 18:00:00
     2015-03-05 11:00:01   timer_11_c6     06.03.2015 11:00:01
     2015-03-04 18:00:00   timer_12_c6     05.03.2015 18:00:00
     2015-03-05 11:00:01   timer_1_c1      06.03.2015 11:00:01
     2015-03-04 20:00:00   timer_2_c1      05.03.2015 20:00:00
     2015-03-05 03:30:00   timer_3_c2      06.03.2015 03:30:00|8
     2015-03-05 05:00:00   timer_4_c2      06.03.2015 05:00:00|8
     2015-03-05 07:45:00   timer_5_c3      06.03.2015 07:45:00|8
     2015-03-05 11:00:00   timer_6_c3      06.03.2015 11:00:00|8
     2015-03-05 09:00:00   timer_7_c4      06.03.2015 09:00:00|7
     2015-03-05 11:00:00   timer_8_c4      06.03.2015 11:00:00|7
     2015-03-04 14:00:01   timer_9_c5      05.03.2015 14:00:00
   Condition:
     0          ReadingValDoIf('sz_Waesche_trocknen','state','') eq "on" and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and ReadingValDoIf('geofancy','currLoc_Toto','') eq "Home" or ReadingValDoIf('geofancy','currLoc_Toto','') eq "underway"
     1          ReadingValDoIf('geofancy','currLoc_Toto','') eq "Home" and ReadingValDoIf('sz_Waesche_trocknen','state','') eq "off" and ReadingValDoIf('Schicht_dummy','state','') eq "Frueh" and DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"8")
     2          ReadingValDoIf('geofancy','currLoc_Toto','') eq "Home" and ReadingValDoIf('sz_Waesche_trocknen','state','') eq "off" and ReadingValDoIf('Schicht_dummy','state','') eq "Mittel" and DOIF_time($hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"8")
     3          ReadingValDoIf('geofancy','currLoc_Toto','') eq "Home" and ReadingValDoIf('sz_Waesche_trocknen','state','') eq "off" and DOIF_time($hash->{realtime}{6},$hash->{realtime}{7},$wday,$hms,"7")
     4          ReadingValDoIf('Technoclub','state','') eq "ja" and ReadingValDoIf('sz_Waesche_trocknen','state','') eq "off" and ReadingValDoIf('geofancy','currLoc_Toto','') eq "Home" and DOIF_time($hash->{realtime}{8},$hash->{realtime}{9},$wday,$hms,"")
     5          ReadingValDoIf('geofancy','currLoc_Toto','') eq "Home" and ReadingValDoIf('sz_Waesche_trocknen','state','') eq "off" and DOIF_time($hash->{realtime}{10},$hash->{realtime}{11},$wday,$hms,"")
   Days:
     2          8
     3          8
     4          8
     5          8
     6          7
     7          7
   Devices:
     0           sz_Waesche_trocknen
     1           geofancy sz_Waesche_trocknen
     2           geofancy sz_Waesche_trocknen
     3           geofancy sz_Waesche_trocknen
     4           Technoclub sz_Waesche_trocknen geofancy
     5           geofancy sz_Waesche_trocknen
     all         sz_Waesche_trocknen geofancy Technoclub
   Do:
     0          set sz_Heizung desiredTemperature 22
     1          set sz_Heizung desiredTemperature 22
     2          set sz_Heizung desiredTemperature 22
     3          set sz_Heizung desiredTemperature 22
     4          set sz_Heizung desiredTemperature 20
     5          set sz_Heizung desiredTemperature 20
     6          set sz_Heizung desiredTemperature 17
   Helper:
     last_timer 12
     sleeptimer -1
   Internals:
   Readings:
     0           sz_Waesche_trocknen:state
     1           geofancy:currLoc_Toto sz_Waesche_trocknen:state
     2           geofancy:currLoc_Toto sz_Waesche_trocknen:state
     3           geofancy:currLoc_Toto sz_Waesche_trocknen:state
     4           Technoclub:state sz_Waesche_trocknen:state geofancy:currLoc_Toto
     5           geofancy:currLoc_Toto sz_Waesche_trocknen:state
     all         sz_Waesche_trocknen:state geofancy:currLoc_Toto Technoclub:state
   Realtime:
     0          11:00:01
     1          20:00:00
     10         11:00:01
     11         18:00:00
     2          03:30:00
     3          05:00:00
     4          07:45:00
     5          11:00:00
     6          09:00:00
     7          11:00:00
     8          14:00:00
     9          18:00:00
   State:
   Time:
     0          11:00:01
     1          20:00:00
     10         11:00:01
     11         18:00:00
     2          03:30:00
     3          05:00:00
     4          07:45:00
     5          11:00:00
     6          09:00:00
     7          11:00:00
     8          14:00:00
     9          18:00:00
   Timecond:
     0          0
     1          0
     10         5
     11         5
     2          1
     3          1
     4          2
     5          2
     6          3
     7          3
     8          4
     9          4
   Timer:
     0          0
     1          0
     10         0
     11         0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
     2           4  5
     3           6  7
     4           8  9
     5           10  11


Um 11:00:01 hätte ja eigentlich die CMD Nr. 6 anziehen müssen. DOIF zieht aber hier immer Nr.7 an :-(
cmd_event timer_1 2015-03-05 11:00:01
cmd_nr 7 2015-03-05 11:00:01
state cmd_7 2015-03-05 11:00:01

Oder habe ich da einen Fehler drin, der mir nur nicht auffällt?
Ich steuere eigentlich alles mit DOIF und bin damit sehr zufrieden. Nur an der einen oder anderen Stelle hackt es mitunter noch.
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Damian

Zitat von: Toto1973 am 05 März 2015, 11:37:22

Oder habe ich da einen Fehler drin, der mir nur nicht auffällt?
Ich steuere eigentlich alles mit DOIF und bin damit sehr zufrieden. Nur an der einen oder anderen Stelle hackt es mitunter noch.

Erstmal würde ich dir empfehlen deine Definitionen, wie es in Programmiersprachen üblich ist, einzurücken. So ist diese eine Definitionszeile nicht lesbar. Die Einrückungen kannst du im Web-Editor (DEF anklicken) mit Enter vornehmen. z. B.

([sz_Waesche_trocknen:state] eq "on" and [11:00:01-20:00:00] and [?geofancy:currLoc_Toto] eq "Home" or [?geofancy:currLoc_Toto] eq "underway")
  (set sz_Heizung desiredTemperature 22)
DOELSEIF ([geofancy:currLoc_Toto] eq "Home" and [sz_Waesche_trocknen:state] eq "off" and [?Schicht_dummy:state] eq "Frueh" and [03:30-05:00|8])
  (set sz_Heizung desiredTemperature 22)
DOELSEIF ([geofancy:currLoc_Toto] eq "Home" and [sz_Waesche_trocknen:state] eq "off" and [?Schicht_dummy:state] eq "Mittel" and [07:45-11:00|8])
  (set sz_Heizung desiredTemperature 22)
DOELSEIF ([geofancy:currLoc_Toto] eq "Home" and [sz_Waesche_trocknen:state] eq "off" and [09:00-11:00|7])
  (set sz_Heizung desiredTemperature 22)
DOELSEIF  ([Technoclub:state] eq "ja" and [sz_Waesche_trocknen:state] eq "off" and [geofancy:currLoc_Toto] eq "Home" and [14:00-18:00])
  (set sz_Heizung desiredTemperature 20)
DOELSEIF ([geofancy:currLoc_Toto] eq "Home" and [sz_Waesche_trocknen:state] eq "off" and [11:00:01-18:00:00])
  (set sz_Heizung desiredTemperature 20) DOELSE (set sz_Heizung desiredTemperature 17)


Um 11:00:01 wird u. a. das Modul getriggert und dann ist offenbar die Bedingung: ([geofancy:currLoc_Toto] eq "Home" and [sz_Waesche_trocknen:state] eq "off" and [11:00:01-18:00:00]) als erste wahr.

Die Bedingung: ([geofancy:currLoc_Toto] eq "Home" and [sz_Waesche_trocknen:state] eq "off" and [09:00-11:00|7]) kann um 11:00:01 nicht wahr sein.

Gruß

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