FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Damian am 09 Dezember 2021, 16:17:36

Titel: Prima Klima
Beitrag von: Damian am 09 Dezember 2021, 16:17:36
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
Titel: Antw:Prima Klima
Beitrag von: Damian am 10 Dezember 2021, 22:18:08
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

Titel: Antw:Prima Klima
Beitrag von: Damian am 11 Dezember 2021, 15:38:10
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",""))