Ob das Klima im Haus noch stimmt, kann ein Blick auf die Temperatur- und Feuchtigkeitsverläufe der einzelnen Räume verraten. Dazu kann man sich mit wenigen Zeilen eine gute Übersicht der klimatischen Gegebenheiten in den Räumen verschaffen.
Hierzu wurde lediglich ein Template mit der card-Funktion erstellt, welches für jedes Zimmer aufgerufen wird. Hierbei wurde eine Drei-Tage-Übersicht gewählt. In den Zimmern befinden sich HM-Wandthermostate, die gleichzeitig die FB-Heizung mit FHEM-Unterstützung steuern.
defmod di_Klima DOIF {}
attr di_Klima room Heizung
attr di_Klima uiTable {\
package ui_Table;;\
$SHOWNOSTATE=1;;\
$TABLE='text-align:center';;\
$ATTRIBUTESFIRST = 1;;\
}\
\
DEF TPL_raum (card([TH_$1_HM:measured-temp:col3d],undef,"temp_outside\@silver",-10,50,undef,undef,"°C",\&temp_hue,"1,,fill:silver","130,,,0,,,",undef,undef,[TH_$1_HM:humidity:col3d],0,100,undef,undef,"%",\&hum_hue,"0,,fill:silver"))\
\
"Bad"|"Kind o."|"Kind w."\
TPL_raum (Bad)|TPL_raum (Kz_o)|TPL_raum (Kz_w)\
"DG_Zi."|"Wohnzi."|"Küche"\
TPL_raum (DG)|TPL_raum (WZ)|TPL_raum (Kueche)\
""|"Schlafzi."|"Werkzi."\
""|TPL_raum (Keller)|TPL_raum (AKeller)
Ergebnis im Anhang
Und hier die aktuelle Visualisierung wichtiger Heizungsparameter:
{
package ui_Table;
$TABLE='text-align:center;';
$TC{0..2} = "style='vertical-align:top'";
}
icon_temp_mring(([vaillant:Flame] eq "off"?"sani_boiler_temp\@silver":"sani_boiler_temp"),[vaillant:Vorlauf],15,70,140)|
icon_uring("0,0,1","weather_barometric_pressure\@silver",[vaillant:Wasserdruck],0,3,undef,undef,"bar",1,140,[(0.8,0,1,60,1.5,120,1.7,60,3,0)],"50,35")|
icon_ring("sani_floor_heating_neutral\@silver",[vaillant:HcHours_hoursum2_value],0,10000,120,0,"h",0,140)|
icon_ring("sani_water_tap\@silver",[vaillant:HwcHours_hoursum2_value],0,2000,120,0,"h",0,140)|
icon_ring("time_graph\@silver",[vaillant:HeizKennlinie],0.4,1,120,0,"HK",1,140)|
icon_temp_mring("scene_day\@silver",[vaillant:TagSolltemp],undef,undef,140)|
icon_temp_mring("scene_night\@silver",[vaillant:NachtSolltemp],undef,undef,140)
""|""|""|""|widget([vaillant:HeizKennlinie],"selectnumbers,0.4,.1,1,1,lin","set")|widget([vaillant:TagSolltemp],"selectnumbers,15,1,25,1,lin","set")|widget([vaillant:NachtSolltemp],"selectnumbers,15,1,25,1,lin","set")<
card([vaillant:Aussentemp:col],"Außentemperatur","temp_outside\@silver",-15,55,undef,undef,"°C",\&temp_hue)|
card([vaillant:WWSpeicher:col],"WW-Speicher",([vaillant:Pumpenstatus] eq "hwc" ? "sani_buffer_temp_down" : "sani_buffer_temp_down\@silver"),15,70,undef,undef,"°C",\&temp_hue)|
card([ESPEasy_ESP_Temp_Zirkulation:Temperature:col],"Zirkulation",([Zirk] eq "off"?"sani_pump\@silver":"sani_pump"),15,70,undef,undef,"°C",\&temp_hue,undef,",,1")
card([vaillant:Umlaufmenge:col],"Umlaufmenge","sani_pump\@silver",0,20,120,0,"l/min")|
card([vaillant:PumpenLeistung:col],"Pumpenleistung","sani_pump\@silver",0,100,120,0,"%")|
card([vaillant:LuefterDrehzahl:col],"Lüfterdrehzahl",([vaillant:LuefterDrehzahl] == 0 ? "vent_ventilation\@silver":"vent_ventilation"),0,6000,120,0,"U/min",undef,0)
card([$SELF:diff_hc:col],"Energie Heizung","sani_floor_heating_neutral\@silver",0,100,120,0,"kWh",undef,1)|
card([$SELF:diff_hwc:col],"Energie Warmwasser","sani_water_tap\@silver",0,15,120,0,"kWh",undef,1)|
card([[ESPEasy_ESP_Temp_Vorlauf:Temperature:col],[ESPEasy_ESP_Temp_Keller_Ruecklauf:Temperature:col]],"Umwälzpumpe",([vaillant:Pumpenstatus] eq "on" ? "sani_floor_heating" : "sani_floor_heating_neutral\@silver"),15,70,undef,undef,["Vor. °C","Rück. °C"],\&temp_hue,undef,",,1,,1")
Edit: Definition angepasst
Zu einem guten Klima gehört natürlich auch eine vernünftige Steuerung der Heizenergie :)
defmod di_Thermostate DOIF subs {\
## Schaltzeitpunkte, Liste kann angepasst werden \
@{$_Timer}= qw(morgens vormittags nachmittags abends);;\
@{$_Timer_default} = qw(04:30 09:00 13:00 22:00);;\
\
## Definition der Räume mit dazugehörigen Thermostaten, Angaben können zweilenweise erweitert werden\
push (@{$_sc},[qw(Bad TH_Bad_HM)]);;\
push (@{$_sc},[qw(Dachgeschoss TH_DG_HM)]);;\
push (@{$_sc},[qw(Kueche TH_Kueche_HM)]);;\
push (@{$_sc},[qw(Kinderzimmer_ost TH_Kz_o_HM)]);;\
push (@{$_sc},[qw(Kinderzimmer_west TH_Kz_w_HM)]);;\
push (@{$_sc},[qw(Wohnzimmer TH_WZ_HM)]);;\
push (@{$_sc},[qw(Keller TH_Keller_HM)]);;\
\
## Bei Initialisierung oder Änderung der Definition werden Timer-Readings und Temperatur-Readings erstellt und vorbelegt\
if ($::init_done) {\
fhem("deletereading $SELF .*");;\
for (my $j=0;;$j<@{$_Timer};;$j++) {\
set_Reading($_Timer[$j],$_Timer_default[$j]);;\
set_Reading("$_Timer[$j]_WE",$_Timer_default[$j]);;\
}\
for (my $i=0;;$i < @{$_sc};;$i++) {\
set_Reading("$_sc[$i][0]_temp","20");;\
}\
}\
\
sub temp_set {##Routine zum Setzen der Vorgabetemperaturen aller Räume für einen Zeitpunkt\
my ($timer)=@_;;\
for (my $i=0;;$i< @{$_sc};;$i++) {\
if ($timer eq "morgens" or $timer eq "nachmittags") {\
fhem_set("$_sc[$i][1] desired-temp ".get_Reading ("$_sc[$i][0]_temp"));;\
} else {\
fhem_set("$_sc[$i][1] desired-temp ".(get_Reading ("$_sc[$i][0]_temp")-0.5));;\
}\
}\
}\
} ## subs\
\
DEF TPL_set_temp ( ## Definition des Templates namens TPL_set_temp zum Setzen der Thermostat-Vorgabetemperatur\
Timer_$1 { ## DOIF Block\
##Parameter $1 $2 $3 \
##Bedeutung Timer Time Time_WE\
if ([$2|AT] or [$3|WE]) {\
temp_set("$1");;\
}\
}\
) ## TPL_set_temp\
\
## Generierung der Steuerung pro Beschattung-Szene mit Hilfe des obigen Templates\
FOR(@{$_Timer},TPL_set_temp($1,[$SELF:$1],[$SELF:$1_WE]))
attr di_Thermostate room Heizung
attr di_Thermostate uiTable {\
package ui_Table;;\
$TC{1..10}="style='padding-left: 2px;; padding-right: 2px;; padding-top: 3px;; padding-bottom: 3px;;' align='center'";;\
}\
\
"Heizphase"|"von"|"bis"|"von"|"bis"\
"Wochentags"|FOR (@{$_Timer},WID([$SELF:$1],"time")|)""\
"Wochenende"|FOR (@{$_Timer},WID([$SELF:$1_WE],"time")|)""<\
"Zeitpunkt"|"aktuell"|"akt. Vorgabe"|"Temperatur"\
FOR (@{$_sc},"$1$1"|temp_hum_ring([$1$2:measured-temp],[$1$2:humidity])|temp_knob([$1$2:desired-temp],"Darkorange","set")|temp_knob([$SELF:$1$1_temp],"Darkorange",""))