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.
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