Verschiedene Heating_Control ob Ferien sind oder nicht

Begonnen von sengelking, 05 Dezember 2013, 21:05:16

Vorheriges Thema - Nächstes Thema

sengelking

Hallo,
ich versuche mehrere heating_control Profile zu verwenden, je nachdem ob Schulferien, Feiertag oder "normaler" Tag ist. Aber es funktioniert nicht so wie ich will.
"Normale" Tage:
define dining_prof Heating_Control fht_dining Mo-Fr|05:30|21.5 Mo-Fr|08:30|15 Mo-Fr|12:00|21.5 Mo-Fr|14:00|15 Mo-Fr|17:40|21.5 Mo-Fr|19:30|15 Sa|07:00|21.5 Sa|10:30|15 Sa|12:00|21.5 Sa|14:00|15 Sa|17:40|21.5 Sa|19:30|15 So|08:30|21.5 So|11:00|15 So|12:30|21.5 So|14:00|15 So|17:40|21.5 So|19:30|15 22:00|13 05:00|15 (ReadingsVal("@", "mode", "auto") eq "auto" || ReadingsVal("@", "mode", "auto" ) eq "manual" && ReadingsVal("bw", "state", "none") eq "none" && ReadingsVal("ferien", "state", "none") eq "none" )
attr dining_prof room Dining


Schulferien:

define dining_prof_hol Heating_Control fht_dining Mo-Fr|05:35|15 Mo-Fr|07:15|21.5 Mo-Fr|09:30|15 Mo-Fr|12:00|21.5 Mo-Fr|14:00|15 Mo-Fr|17:40|21.5 Mo-Fr|19:30|15 Sa|07:00|21.5 Sa|10:30|15 Sa|12:00|21.5 Sa|14:00|15 Sa|17:40|21.5 Sa|19:30|15 So|08:30|21.5 So|11:00|15 So|12:30|21.5 So|14:00|15 So|17:40|21.5 So|19:30|15 22:00|13 05:30|15 (ReadingsVal("@", "mode", "auto") eq "auto" || ReadingsVal("@", "mode", "auto" ) eq "manual" && ReadingsVal("bw", "state", "none") eq "none" && ReadingsVal("ferien", "state", "none") ne "none" )
attr dining_prof_hol room Dining


Feiertage:

define dining_prof_bank Heating_Control fht_dining Mo-Fr|05:35|15 Mo-Fr|08:00|21.5 Mo-Fr|11:00|15 Mo-Fr|12:30|21.5 Mo-Fr|14:00|15 Mo-Fr|17:40|21.5 Mo-Fr|19:30|15 Sa|07:00|21.5 Sa|10:30|15 Sa|12:00|21.5 Sa|14:00|15 Sa|17:40|21.5 Sa|19:30|15 So|08:30|21.5 So|11:00|15 So|12:30|21.5 So|14:00|15 So|17:40|21.5 So|19:30|15 22:00|13 05:30|15 (ReadingsVal("@", "mode", "auto") eq "auto" || ReadingsVal("@", "mode", "auto" ) eq "manual" && ReadingsVal("bw", "state", "none") ne "none" )
attr dining_prof_bank room Dining


Allerdings schalten immer alle.
Was mache ich falsch?

Ich habe es auch mal mit einem at probiert:

define check_dining_hol at *04:00:00 { if(ReadingsVal("bw", "state", "none") ne "none") {\
fhem("attr dining_prof disable 1");;\
fhem("attr dining_prof_bank disable 0");;\
fhem("attr dining_prof_hol disable 1");;\
}\
elseif(ReadingsVal("ferien", "state", "none") ne "none") {\
fhem("attr dining_prof disable 1");;\
fhem("attr dining_prof_bank disable 1");;\
fhem("attr dining_prof_hol disable 0");;\
}\
else {\
fhem("attr dining_prof disable 0");;\
fhem("attr dining_prof_bank disable 1");;\
fhem("attr dining_prof_hol disable 1");;\
}\
}
attr check_dining_hol room Dining


Das hat aber auch nicht funktioniert.
Kann jemand helfen?

Danke
FHEM aud RaspberryPi

Dietmar63

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

#2
Sind die disableSchalter richtig gesetzt?

Schalte mal bei allen HC verbose 5 ein.
Dann kannst du besser erkennen, was bzw. ob etwas passiert.

elseif(   -> *elsif*
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

ollir

Habe leider zur Zeit keinen Code da. Hatte auch das Problem.
Es ging mit einem update-Befehl.
Damit wurden alle disabled 0/1 übernommen.

VG
Olaf

sengelking

Zitat von: Dietmar63 am 06 Dezember 2013, 07:34:44
Sind die disableSchalter richtig gesetzt?
Was meinst du damit?

Zitat
elseif(   -> *elsif*
Da habe ich leider den alten code kopiert, das hatte ich schon geändert, da hatte ich wenigstens noch Fehlermeldungen...
FHEM aud RaspberryPi

Dietmar63

ZitatSind die disableSchalter richtig gesetzt?
vergiß es - wird funktionieren.

Wie sieht der output bei verbose 5 aus?
Welche Version verwendest du?
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

#6
ich habe selbst getestet - disable funktioniert bei mir ohne Probleme.

Um besser prüfen zu können was passiert, habe ich zusätzliches logging eingebaut. Bitte updaten und dann die HC mit verbose 5 debuggen. Der Output sollte dann so aussehen:


2013.12.06 19:18:00 4: [HeizungKueche_wt] Next switch 07.12.2013 05:35:00
2013.12.06 19:18:00 2: FHT set HeizungKueche desired-temp 17.0
2013.12.06 19:18:00 4: [HeizungKueche_wt] command: { fhem("set HeizungKueche desired-temp 17.0") if(heizungAnAus("An", 0))} executed
2013.12.06 19:18:00 4: [HeizungKueche_wt] is not disabled
2013.12.06 19:18:00 4: [HeizungKueche_wt] 06.12.2013 19:18:00 ; aktParam: 16.0 ; newParam: 17.0
2013.12.06 19:18:00 4: [HeizungKueche_wt] Jetzt:06.12.2013 19:18:05 -> Next: 06.12.2013 19:18:00 -> Param: 17 -5
2013.12.06 19:18:00 5: [HeizungKueche_wt] list of windowsenors found: ''
2013.12.06 19:17:02 4: [HeizungKueche_wt] Next switch 06.12.2013 19:18:00
2013.12.06 19:17:02 4: [HeizungKueche_wt] is not disabled
2013.12.06 19:17:02 4: [HeizungKueche_wt] 06.12.2013 19:14:00 ; aktParam: 16.0 ; newParam: 16.0
2013.12.06 19:17:02 5: [HeizungKueche_wt] list of windowsenors found: ''
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 19:18|17 : so,mo,di,mi,do,fr,sa -> 19:18:00 -> 17
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 19:14|16 : so,mo,di,mi,do,fr,sa -> 19:14:00 -> 16
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 19:12|19 : so,mo,di,mi,do,fr,sa -> 19:12:00 -> 19
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 19:10|17 : so,mo,di,mi,do,fr,sa -> 19:10:00 -> 17
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 19:07|18 : so,mo,di,mi,do,fr,sa -> 19:07:00 -> 18
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 19:02|17 : so,mo,di,mi,do,fr,sa -> 19:02:00 -> 17
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 18:32|18 : so,mo,di,mi,do,fr,sa -> 18:32:00 -> 18
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 18:35|17 : so,mo,di,mi,do,fr,sa -> 18:35:00 -> 17
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 18:30|16 : so,mo,di,mi,do,fr,sa -> 18:30:00 -> 16
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 17:45|22 : so,mo,di,mi,do,fr,sa -> 17:45:00 -> 22
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 15:30|20 : so,mo,di,mi,do,fr,sa -> 15:30:00 -> 20
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 14:00|19 : so,mo,di,mi,do,fr,sa -> 14:00:00 -> 19
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 12:30|22 : so,mo,di,mi,do,fr,sa -> 12:30:00 -> 22
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 12:00|25 : so,mo,di,mi,do,fr,sa -> 12:00:00 -> 25
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 06:50|18 : so,mo,di,mi,do,fr,sa -> 06:50:00 -> 18
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 06:15|22 : so,mo,di,mi,do,fr,sa -> 06:15:00 -> 22
2013.12.06 19:17:01 5: [HeizungKueche_wt] Switchingtime: 05:35|25 : so,mo,di,mi,do,fr,sa -> 05:35:00 -> 25


Dann auf diese Zeile achten;
2013.12.06 19:18:00 4: [HeizungKueche_wt] is not disabled

Übrigens, das Ganze wird übersichtlicher wenn du an das Ende von HC eine selbst erstellte Funktion aufrufst, die du in 99_utils einstellen kannst und true/false zurückliefert.
Etwa so:
define dining_prof_hol Heating_Control fht_dining    Mo-Fr|05:35|15   Mo-Fr|18:00|21     (heizungAnAus($we, @, %,  "hol" )) 
und in 99_utils:

sub heizungAnAus($$$$) {
   my ($we, $dev, $para, $hc) = @_;

   my $state1 = ReadingsVal("xx", "state", "Off");
   my $state2 = ReadingsVal("yy", "state", "Off");
   my $state3 = ReadingsVal("zz", "state", "Off");

   my $ret = ....
   
   return $ret;
}
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

sengelking

Ja, das disable funktioniert jetzt auch..
Beim anderen habe ich den Fehler auch entdeckt. Verbose hilft. Ich hab noch mehr klammern setzen müssen. Poste morgen den Code...
FHEM aud RaspberryPi

sengelking

So, hier der richtige Code:

define dining_prof Heating_Control fht_dining Mo-Fr|05:30|21.5 Mo-Fr|08:30|15 Mo-Fr|12:00|21.5 Mo-Fr|14:00|15 Mo-Fr|17:40|21.5 Mo-Fr|19:30|15 Sa|07:00|21.5 Sa|10:30|15 Sa|12:00|21.5 Sa|14:00|15 Sa|17:40|21.5 Sa|19:30|15 So|08:30|21.5 So|11:00|15 So|12:30|21.5 So|14:00|15 So|17:40|21.5 So|19:30|15 22:00|13 05:00|15 ((ReadingsVal("@", "mode", "auto") eq "auto" || ReadingsVal("@", "mode", "auto" ) eq "manual") && (ReadingsVal("bw", "state", "none") eq "none" && ReadingsVal("ferien", "state", "none") eq "none" ))
attr dining_prof room Dining

define dining_prof_hol Heating_Control fht_dining Mo-Fr|05:35|15 Mo-Fr|07:15|21.5 Mo-Fr|09:30|15 Mo-Fr|12:00|21.5 Mo-Fr|14:00|15 Mo-Fr|17:40|21.5 Mo-Fr|19:30|15 Sa|07:00|21.5 Sa|10:30|15 Sa|12:00|21.5 Sa|14:00|15 Sa|17:40|21.5 Sa|19:30|15 So|08:30|21.5 So|11:00|15 So|12:30|21.5 So|14:00|15 So|17:40|21.5 So|19:30|15 22:00|13 05:30|15 ((ReadingsVal("@", "mode", "auto") eq "auto" || ReadingsVal("@", "mode", "auto" ) eq "manual") && (ReadingsVal("bw", "state", "none") eq "none" && ReadingsVal("ferien", "state", "none") ne "none" ))
attr dining_prof_hol room Dining

define dining_prof_bank Heating_Control fht_dining Mo-Fr|05:35|15 Mo-Fr|08:00|21.5 Mo-Fr|11:00|15 Mo-Fr|12:30|21.5 Mo-Fr|14:00|15 Mo-Fr|17:40|21.5 Mo-Fr|19:30|15 Sa|07:00|21.5 Sa|10:30|15 Sa|12:00|21.5 Sa|14:00|15 Sa|17:40|21.5 Sa|19:30|15 So|08:30|21.5 So|11:00|15 So|12:30|21.5 So|14:00|15 So|17:40|21.5 So|19:30|15 22:00|13 05:30|15 ((ReadingsVal("@", "mode", "auto") eq "auto" || ReadingsVal("@", "mode", "auto" ) eq "manual") && (ReadingsVal("bw", "state", "none") ne "none" ))
attr dining_prof_bank room Dining


Man beachte die Klammern im if statement...
FHEM aud RaspberryPi

sengelking

Es scheint immer noch nicht zu funktionieren. Wir haben ja jetzt Weihnachtsferien. "ferien" zeigt auch "Weihnachten_ferien" an, aber "dining_prof_hol" steht auf "inactive".
Weiß jemand weiter?
FHEM aud RaspberryPi

Dietmar63

#10
Dann schalte mal bei dem betroffenen HC verbose 5 ein, und prüfe, ob das If passt!
Wenn es partout nicht will, lagere die Bedingung in eine Fuktion in die 99_utils aus, dann wird der Code übersichtlicher.

So wie ich es hier vorgemacht hatte:

sub heizungAnAus($$$$) {
   my ($we, $dev, $para, $hc) = @_;

   my $state1 = ReadingsVal("xx", "state", "Off");
   my $state2 = ReadingsVal("yy", "state", "Off");
   my $state3 = ReadingsVal("zz", "state", "Off");

   my $ret = ....
   
   return $ret;
}


Übrigens: Auf mode auto brauchst du nicht abzufragen. Die FHT nehmen im Modus auto keine Befehle von außen entgegen.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

sengelking

Habe jetzt geschafft.
Scheint mit ReadingsVal nicht zu funktionieren. Mit Value funktioniert es:
define dining_prof Heating_Control fht_dining Mo-Fr|05:30|21.5 Mo-Fr|08:30|15 Mo-Fr|12:00|21.5 Mo-Fr|14:00|15 Mo-Fr|17:40|21.5 Mo-Fr|19:30|15 Sa|07:00|21.5 Sa|10:30|15 Sa|12:00|21.5 Sa|14:00|15 Sa|17:40|21.5 Sa|19:30|15 So|08:30|21.5 So|11:00|15 So|12:30|21.5 So|14:00|15 So|17:40|21.5 So|19:30|15 22:00|13 05:00|15 ((ReadingsVal("@", "mode", "auto") !~ /holiday/) && (Value("bw") eq "none" && Value("ferien") eq "none" ))
attr dining_prof room Dining

define dining_prof_hol Heating_Control fht_dining Mo-Fr|05:35|15 Mo-Fr|07:15|21.5 Mo-Fr|08:35|21 Mo-Fr|09:30|15 Mo-Sa|12:00|21.5 Sa|07:00|21.5 Sa|10:30|15 So|08:30|21.5 So|11:00|15 So|12:30|21.5 14:00|15 17:40|21.5 19:30|15 22:00|13 05:30|15 ((ReadingsVal("@", "mode", "auto") !~ /holiday/) && (Value("bw") eq "none" && Value("ferien") ne "none" ))
attr dining_prof_hol room Dining

define dining_prof_bank Heating_Control fht_dining Mo-Fr|05:35|15 Mo-Fr|08:35|21 Sa|07:05|15 Sa|10:35|15 Mo-Sa|12:05|15 08:30|21.5 11:00|15 12:30|21.5 14:00|15 17:40|21.5 19:30|15 22:00|13 05:30|15 ((ReadingsVal("@", "mode", "auto") !~ /holiday/) && (Value("bw") ne "none" ))
attr dining_prof_bank room Dining
FHEM aud RaspberryPi

Mark

Hallo zusammen,

ich nutze ebenfalls 98_Heating_Control.pm und stehe vor dem gleichen Problem. Ist es möglich dem 98_Heating_Control.pm eine Prüfung auf holiday hinzuzufügen und wenn "JA", das Sonntagsprofil zu verwenden? So würde man sich die Kopien der Heizprofile sparen.

Danke

Gruß Mark

Dietmar63

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

sengelking

Für mein Szenario würde das nicht ausreichen, da ich das Wochenprogramm in den FHTs selber als Rückfallsicherung verwende. Daher wird auch morgens in den Ferien oder bei Feiertagen die Heizung nochmal kälter gestellt bevor sie später einschaltet.
FHEM aud RaspberryPi