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:
parent
331edb796b
commit
ed10330537
@ -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>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user