MAX: add 'set desiredTemperature manual <value>' to override keepAuto

git-svn-id: https://svn.fhem.de/fhem/trunk@8473 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
mgehre 2015-04-23 21:54:14 +00:00
parent 082a684fa0
commit 89c225d752

View File

@ -261,12 +261,6 @@ MAX_Set($@)
my $until = undef; my $until = undef;
my $ctrlmode = 1; #0=auto, 1=manual; 2=temporary my $ctrlmode = 1; #0=auto, 1=manual; 2=temporary
if(AttrVal($hash->{NAME},"keepAuto","0") ne "0"
&& MAX_ReadingsVal($hash,"mode") eq "auto") {
Log3 $hash, 5, "MAX_Set: staying in auto mode";
$ctrlmode = 0; #auto
}
if($args[0] eq "auto") { if($args[0] eq "auto") {
#This enables the automatic/schedule mode where the thermostat follows the weekly program #This enables the automatic/schedule mode where the thermostat follows the weekly program
@ -282,19 +276,31 @@ MAX_Set($@)
} elsif(@args == 1) { } elsif(@args == 1) {
$temperature = 0; #use temperature from weekly program $temperature = 0; #use temperature from weekly program
} else { } else {
return "To many parameters: desiredTemperature auto [<temperature>]"; return "Too many parameters: desiredTemperature auto [<temperature>]";
} }
$ctrlmode = 0; #auto $ctrlmode = 0; #auto
} elsif($args[0] eq "boost") {
return "Too many parameters: desiredTemperature boost" if(@args > 1);
$temperature = 0;
$ctrlmode = 3;
#TODO: auto mode with temperature is also possible
} else { } else {
if($args[0] eq "manual") {
#User explicitly asked for manual mode
$ctrlmode = 1; #manual, possibly overwriting keepAuto
shift @args;
return "Not enough parameters after 'desiredTemperature manual'" if(@args == 0);
if($args[0] eq "boost") { } elsif(AttrVal($hash->{NAME},"keepAuto","0") ne "0"
return "To many parameters: desiredTemperature boost" if(@args > 1); && MAX_ReadingsVal($hash,"mode") eq "auto") {
$temperature = 0; #User did not ask for any mode explicitly, but has keepAuto
$ctrlmode = 3; Log3 $hash, 5, "MAX_Set: staying in auto mode";
#TODO: auto mode with temperature is also possible $ctrlmode = 0; #auto
}
} elsif($args[0] eq "eco") { if($args[0] eq "eco") {
$temperature = MAX_ReadingsVal($hash,"ecoTemperature"); $temperature = MAX_ReadingsVal($hash,"ecoTemperature");
} elsif($args[0] eq "comfort") { } elsif($args[0] eq "comfort") {
$temperature = MAX_ReadingsVal($hash,"comfortTemperature"); $temperature = MAX_ReadingsVal($hash,"comfortTemperature");
@ -305,8 +311,8 @@ MAX_Set($@)
if(@args > 1) { if(@args > 1) {
#@args == 3 and $args[1] == "until" #@args == 3 and $args[1] == "until"
return "Second parameter must be 'until'" if($args[1] ne "until"); return "Second parameter must be 'until'" if($args[1] ne "until");
return "Not enough parameters: desiredTemperature <temp> [until <date> <time>]" if(@args == 3); return "Not enough parameters: desiredTemperature [manual] <temp> [until <date> <time>]" if(@args == 3);
return "To many parameters: desiredTemperature <temp> [until <date> <time>]" if(@args > 4); return "Too many parameters: desiredTemperature [manual] <temp> [until <date> <time>]" if(@args > 4);
$ctrlmode = 2; #switch manual to temporary $ctrlmode = 2; #switch manual to temporary
$until = sprintf("%06x",MAX_DateTime2Internal($args[2]." ".$args[3])); $until = sprintf("%06x",MAX_DateTime2Internal($args[2]." ".$args[3]));
} }
@ -932,17 +938,30 @@ MAX_DbLog_splitFn($)
<a name="MAXset"></a> <a name="MAXset"></a>
<b>Set</b> <b>Set</b>
<ul> <ul>
<li>desiredTemperature &lt;value&gt; [until &lt;date&gt;]<br> <li>desiredTemperature auto [&lt;temperature&gt;]<br>
For devices of type HeatingThermostat only. &lt;value&gt; maybe one of For devices of type HeatingThermostat only. If &lt;temperature&gt; is omitted,
the current temperature according to the week profile is used. If &lt;temperature&gt; is provided,
it is used until the next switch point of the week porfile. It maybe one of
<ul> <ul>
<li>degree celcius between 3.5 and 30.5 in 0.5 degree steps</li> <li>degree celcius between 4.5 and 30.5 in 0.5 degree steps</li>
<li>"on" or "off" set the thermostat to full or no heating, respectively</li>
<li>"eco" or "comfort" using the eco/comfort temperature set on the device (just as the right-most physical button on the device itself does)</li>
</ul></li>
<li>desiredTemperature [manual] &lt;value&gt; [until &lt;date&gt;]<br>
For devices of type HeatingThermostat only. &lt;value&gt; maybe one of
<ul>
<li>degree celcius between 4.5 and 30.5 in 0.5 degree steps</li>
<li>"on" or "off" set the thermostat to full or no heating, respectively</li> <li>"on" or "off" set the thermostat to full or no heating, respectively</li>
<li>"eco" or "comfort" using the eco/comfort temperature set on the device (just as the right-most physical button on the device itself does)</li> <li>"eco" or "comfort" using the eco/comfort temperature set on the device (just as the right-most physical button on the device itself does)</li>
<li>"auto &lt;temperature&gt;". The weekly program saved on the thermostat is processed. If the optional &lt;temperature&gt; is given, it is set as desiredTemperature until the next switch point of the weekly program.</li>
<li>"boost", activates the boost mode, where for boostDuration minutes the valve is opened up boostValveposition percent.</li>
</ul> </ul>
All values but "auto" maybe accompanied by the "until" clause, with &lt;data&gt; in format "dd.mm.yyyy HH:MM" (minutes may only be "30" or "00"!) The optional "until" clause, with &lt;data&gt; in format "dd.mm.yyyy HH:MM" (minutes may only be "30" or "00"!),
to set a temporary temperature until that date/time. Make sure that the cube/device has a correct system time.</li> sets the temperature until that date/time. Make sure that the cube/device has a correct system time.
If the keepAuto attribute is 1 and the device is currently in auto mode, 'desiredTemperature &lt;value&gt;'
behaves as 'desiredTemperature auto &lt;value&gt;'. If the 'manual' keyword is used, the keepAuto attribute is ignored
and the device goes into manual mode.</li>
<li>desiredTemperature boost<br>
For devices of type HeatingThermostat only.
Activates the boost mode, where for boostDuration minutes the valve is opened up boostValveposition percent.</li>
<li>groupid &lt;id&gt;<br> <li>groupid &lt;id&gt;<br>
For devices of type HeatingThermostat only. For devices of type HeatingThermostat only.
Writes the given group id the device's memory. To sync all devices in one room, set them to the same groupid greater than zero.</li> Writes the given group id the device's memory. To sync all devices in one room, set them to the same groupid greater than zero.</li>