defmod di_Thermostat DOIF (1)
attr di_Thermostat room Heizung
attr di_Thermostat uiTable {\
package $SELF;;;;\
\
sub FUNC_thermostat {\
my ($ist, $soll, $device, $name) = @_;;\
\
$ist = 0\
if !defined($ist) || $ist !~ /^-?\d+(?:\.\d+)?$/;;\
\
$soll = 20\
if !defined($soll) || $soll !~ /^-?\d+(?:\.\d+)?$/;;\
\
$soll = 5 if $soll < 5;;\
$soll = 30 if $soll > 30;;\
\
my $minus = $soll - 0.5;;\
my $plus = $soll + 0.5;;\
\
$minus = 5 if $minus < 5;;\
$plus = 30 if $plus > 30;;\
\
my $istText = sprintf("%.1f", $ist);;\
my $sollText = sprintf("%.1f", $soll);;\
\
my $cmdMinus =\
"set $device desired-temp " . sprintf("%.1f", $minus);;\
\
my $cmdPlus =\
"set $device desired-temp " . sprintf("%.1f", $plus);;\
\
my $urlMinus = main::urlEncode($cmdMinus);;\
my $urlPlus = main::urlEncode($cmdPlus);;\
\
my $csrf = defined($main::FW_CSRF) ? $main::FW_CSRF : "";;\
$csrf =~ s/&/&;/g;;\
\
my $html =\
"<div style=\"text-align:center;;;;min-width:150px;;;;padding:6px;;;;border:1px solid #888;;;;border-radius:8px\">";;\
\
$html .=\
"<div style=\"font-size:18px;;;;color:#888\">$name</div>";;\
\
$html .=\
"<div style=\"font-size:24px;;;;font-weight:bold;;;;padding:1px 0\">$istText°;C</div>";;\
\
$html .=\
"<div style=\"font-size:11px;;;;color:#888;;;;margin-top:2px\">SOLLTEMPERATUR</div>";;\
\
$html .=\
"<div style=\"display:flex;;;;align-items:center;;;;justify-content:center;;;;gap:10px;;;;margin-top:4px\">";;\
\
if ($soll > 5) {\
$html .=\
"<span onmousedown=\"this.style.backgroundColor=";#aaa";;;this.style.transform=";scale(0.92)";\" onmouseup=\"this.style.backgroundColor=";";;;this.style.transform=";";\" onmouseleave=\"this.style.backgroundColor=";";;;this.style.transform=";";\" onclick=\"FW_cmd(FW_root+";?cmd=$urlMinus&;XHR=1$csrf";);;return false;;\" style=\"display:inline-block;;;;font-size:18px;;;;width:32px;;;;padding:2px 0;;;;border:1px solid #888;;;;border-radius:5px;;;;cursor:pointer;;;;transition:background-color 0.05s,transform 0.05s\">-</span>";;\
} else {\
$html .=\
"<span style=\"font-size:18px;;;;width:32px\">-</span>";;\
}\
\
$html .=\
"<span style=\"font-size:21px;;;;font-weight:bold;;;;min-width:50px\">$sollText°;C</span>";;\
\
if ($soll < 30) {\
$html .=\
"<span onmousedown=\"this.style.backgroundColor=";#aaa";;;this.style.transform=";scale(0.92)";\" onmouseup=\"this.style.backgroundColor=";";;;this.style.transform=";";\" onmouseleave=\"this.style.backgroundColor=";";;;this.style.transform=";";\" onclick=\"FW_cmd(FW_root+";?cmd=$urlPlus&;XHR=1$csrf";);;return false;;\" style=\"display:inline-block;;;;font-size:18px;;;;width:32px;;;;padding:2px 0;;;;border:1px solid #888;;;;border-radius:5px;;;;cursor:pointer;;;;transition:background-color 0.05s,transform 0.05s\">+</span>";;\
} else {\
$html .=\
"<span style=\"font-size:18px;;;;width:32px\">+</span>";;\
}\
\
$html .= "</div></div>";;\
\
return $html;;\
}\
}\
\
FUNC_thermostat([TH_WZ_HM:measured-temp],[TH_WZ_HM:desired-temp],"TH_WZ_HM","Wohnzimmer")
Man kann am Ende durch Hinzufügen weiterer Zeilen beliebig viele Thermostate nebeneinander oder untereinander als Tabelle darstellen.
Die Solltemperatur kann mit Plus und Minus geändert werden. Der Befehl zum Setzen (set $device desired-temp) der Temperatur kann für das eigene Thermostat im Code angepasst werden.