2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

new Attributes: number_format target_func

git-svn-id: https://svn.fhem.de/fhem/trunk@5739 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
damian-s 2014-05-03 18:20:32 +00:00
parent 331edb796b
commit ed10330537

View File

@ -35,7 +35,7 @@ THRESHOLD_Initialize($)
$hash->{SetFn} = "THRESHOLD_Set";
$hash->{AttrFn} = "THRESHOLD_Attr";
$hash->{NotifyFn} = "THRESHOLD_Notify";
$hash->{AttrList} = "disable:0,1 loglevel:0,1,2,3,4,5,6 state_format state_cmd1_gt state_cmd2_lt";
$hash->{AttrList} = "disable:0,1 loglevel:0,1,2,3,4,5,6 state_format state_cmd1_gt state_cmd2_lt target_func number_format";
}
@ -184,6 +184,7 @@ THRESHOLD_Define($$$)
$attr{$pn}{state_cmd2_lt} = "on";
$cmd_default = 2;
$attr{$pn}{state_format} = "_m _dv _sc";
$attr{$pn}{number_format} = "%.1f";
}
} else { # actor parameters
$cmd1_gt = $b[1] if (defined($b[1]));
@ -207,6 +208,7 @@ THRESHOLD_Define($$$)
$attr{$pn}{state_format} = "_sc";
} else {
$attr{$pn}{state_format} = "_m _dv";
$attr{$pn}{number_format} = "%.1f";
}
}
@ -442,6 +444,18 @@ THRESHOLD_Check($)
my $instr = $defs{$target_sensor}{READINGS}{$target_reading}{VAL};
$instr =~ /[^\d^\-^.]*([-\d.]*)/;
$t_value = $1;
my $target_func = AttrVal($pn, "target_func", "");
if ($target_func)
{
$target_func =~ s/\_tv/$t_value/g;
my $ret = eval $target_func;
if ($@) {
my $msg = "$pn: error in target_func: $target_func, ".$@;
Log3 $pn,2, $msg;
return"";
}
$t_value=$ret;
}
$sensor_max = $t_value+$hash->{offset};
$sensor_min = $t_value-$hash->{hysteresis}+$hash->{offset};
}
@ -549,6 +563,11 @@ THRESHOLD_set_state($)
# my %h_state_cmd = (cmd1_gt=>state_cmd1_gt, cmd2_lt=>state_cmd2_lt);
my $state_cmd = AttrVal ($pn, "state_".$cmd,"");
my $state_format = AttrVal($pn, "state_format", "_m _dv");
my $number_format = AttrVal($pn, "number_format", "");
if ($number_format ne "") {
$desired_value =sprintf($number_format,$desired_value) if ($desired_value ne "");
$sensor_value =sprintf($number_format,$sensor_value) if ($sensor_value ne "");
}
$state_format =~ s/\_m/$mode/g;
$state_format =~ s/\_dv/$desired_value/g;
$state_format =~ s/\_s1v/$sensor_value/g;
@ -871,6 +890,15 @@ THRESHOLD_setValue($$)
<li>state_cmd1_gt</li>
<li>state_cmd2_lt</li>
<li>state_format</li>
<li>number_format</li>
The specified format is used in the state for formatting desired_value (_dv) and Sensor_value (_s1v) using the sprintf function.<br>
The default value is "% .1f" to one decimal place. Other formatting, see Formatting in the sprintf function in the Perldokumentation.<br>
If the attribute is deleted, numbers are not formatted in the state.<br>
<li>target_func</li>
Here, a Perl expression used to calculate a target value from a value of the external sensor.<br>
The sensor value is given as "_tv" in the expression.<br>
Example:<br>
<code>attr TH_heating target_func -0.578*_tv+33.56</code><br>
</ul>
<br>
@ -952,6 +980,18 @@ THRESHOLD_setValue($$)
<code>define TH_room THRESHOLD indoor OR TH_outdoor:state:off heating</code><br>
<code>set TH_room desired 21</code><br>
<br>
<b>Steuerung einer Heizung nach einer Heizkennlinie:</b><br>
<br>
Berechnung der Solltemperatur für die Vorlauftemperatur für Fußbodenheizung mit Hilfe der 0,8-Heizkennlinie anhand der Außentemperatur :<br>
<br>
<code>define TH_heating THRESHOLD flow:temperature:2:outdoor:temperature heating</code><br>
<code>attr TH_heating target_func -0.578*_tv+33.56</code><br>
<br>
Nachtabsenkung lässt sich zeitgesteuert durch das Setzen von "offset" realisieren.<br>
Von 22:00 bis 5:00 Uhr soll die Vorlauftemperatur um 10 Grad herabgesetzt werden:<br>
<br>
<code>define W_heating weekdaytimer TH_heating 05:00|0 22:00|-10 set @ offset %</code><br>
<br>
<br>
<b><u>Beispiele für Belüftungssteuerung:</u></b><br>
<br>
@ -1224,6 +1264,13 @@ THRESHOLD_setValue($$)
<li>state_cmd1_gt</li>
<li>state_cmd2_lt</li>
<li>state_format</li>
<li>number_format</li>
Das angegebene Format wird im Status für die Formatierung von desired_value (_dv) und sensor_value (_s1v) über die sprintf-Funktion benutzt.<br>
Voreingestellt ist "%.1f" für eine Nachkommastelle. Für weiter Formatierungen - siehe Formatierung in der sprintf-Funktion in der Perldokumentation.<br>
Wenn das Attribut gelöscht wird, werden Zahlen im Status nicht formatiert.<br>
<li>target_func</li>
Hier kann ein Perlausdruck angegeben werden, um aus dem Vorgabewert eines externen Sensors (target_value) einen Sollwert zu berechnen.<br>
Der Sensorwert wird mit "_tv" im Ausdruck angegeben. Siehe dazu Beispiele oben zur Steuerung der Heizung nach einer Heizkennlinie.<br>
</ul>
<br>