From 32e39c8649f86d209016e652f21e0fd8c489b23d Mon Sep 17 00:00:00 2001 From: damian-s Date: Thu, 24 Oct 2013 18:08:33 +0000 Subject: [PATCH] fixed bug desired_value=0 git-svn-id: https://svn.fhem.de/fhem/trunk@4105 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_THRESHOLD.pm | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/fhem/FHEM/98_THRESHOLD.pm b/fhem/FHEM/98_THRESHOLD.pm index 86c287eee..b9c61557e 100644 --- a/fhem/FHEM/98_THRESHOLD.pm +++ b/fhem/FHEM/98_THRESHOLD.pm @@ -266,8 +266,10 @@ THRESHOLD_Set($@) if ($arg eq "desired" ) { return "$pn: set desired value:$value, desired value needs a numeric parameter" if(@a != 3 || $value !~ m/^[-\d\.]*$/); - return $ret if ($desired_value == $value); - Log3 $pn,2, "set $pn $arg $value"; + if ($desired_value ne "") { + return $ret if ($desired_value == $value); + } + Log3 $pn,2, "set $pn $arg $value"; $mode = "active"; $state_format =~ s/\_m/$mode/g; $state_format =~ s/\_dv/$value/g; @@ -284,7 +286,7 @@ THRESHOLD_Set($@) readingsBulkUpdate ($hash, "desired_value", $value); readingsEndUpdate ($hash, 1); } elsif ($arg eq "deactivated" ) { - return "$pn: set deactivated, set desired value first" if (!$desired_value); + return "$pn: set deactivated, set desired value first" if ($desired_value eq ""); $ret=CommandAttr(undef, "$pn disable 1"); if (!$ret) { readingsBeginUpdate ($hash); @@ -299,7 +301,7 @@ THRESHOLD_Set($@) readingsEndUpdate ($hash, 1); } } elsif ($arg eq "active" ) { - return "$pn: set active, set desired value first" if (!$desired_value); + return "$pn: set active, set desired value first" if ($desired_value eq ""); $ret=CommandDeleteAttr(undef, "$pn disable"); if (!$ret) { $mode="active"; @@ -333,7 +335,7 @@ THRESHOLD_Set($@) } elsif ($arg eq "hysteresis" ) { return "$pn: set hysteresis value:$value, hysteresis needs a numeric parameter" if (@a != 3 || $value !~ m/^[\d\.]*$/ ); $hash->{hysteresis} = $value; - if ($desired_value) { + if ($desired_value ne "") { readingsBeginUpdate ($hash); readingsBulkUpdate ($hash, "threshold_min",$desired_value-$hash->{hysteresis}+$offset); readingsBulkUpdate ($hash, "threshold_max", $desired_value+$offset); @@ -344,7 +346,7 @@ THRESHOLD_Set($@) return "$pn: set offset value:$value, offset needs a numeric parameter" if (@a != 3 || $value !~ m/^[-\d\.]*$/ ); $offset = $value; $hash->{offset} = $offset; - if ($desired_value) { + if ($desired_value ne "") { readingsBeginUpdate ($hash); readingsBulkUpdate ($hash, "threshold_min",$desired_value-$hash->{hysteresis}+$offset); readingsBulkUpdate ($hash, "threshold_max", $desired_value+$offset); @@ -388,9 +390,9 @@ THRESHOLD_Notify($$) my $name = $dev->{NAME}; SELECT:{ - if (($name eq $sensor) and ReadingsVal($pn,"desired_value","")) {last SELECT;} + if (($name eq $sensor) and (ReadingsVal($pn,"desired_value","") ne "")) {last SELECT;} if ($sensor2) { - if (($name eq $sensor2) and ReadingsVal($pn,"desired_value","")) {last SELECT;} + if (($name eq $sensor2) and (ReadingsVal($pn,"desired_value","") ne "")) {last SELECT;} } if ($target_sensor) { if (ReadingsVal($pn,"mode","") eq "external") { @@ -626,8 +628,9 @@ THRESHOLD_setValue($$)

  • AND|OR (optional)
    - logical operator with an optional second sensor + logical operator with an optional second sensor
  • +
  • sensor2 (optional, nur in Verbindung mit AND oder OR)
    the second sensor
  • @@ -765,7 +768,7 @@ THRESHOLD_setValue($$) It should be heated when the room temperature drops below 21 degrees and the outside temperature is below 15 degrees:

    define TH_outdoor THRESHOLD outdoor:temperature:0:15
    - define TH_room THRESHOLD indoor AND TH_outdoor:state:on heating
    + define TH_room THRESHOLD indoor OR TH_outdoor:state:off heating
    set TH_room desired 21


    @@ -873,7 +876,7 @@ THRESHOLD_setValue($$) Das Modul beginnt mit der Steuerung erst dann, wenn ein Sollwert gesetzt wird!

    Alternativ kann die Vorgabe des Sollwertes von einem weiteren Sensor kommen. Damit kann eine Steuerung durch den Vergleich zweier Sensoren stattfinden. - Typisches Anwendungsbeispiel ist z. B. die Steuerung von Umwelz- oder Zirkulationspumpen.
    + Typisches Anwendungsbeispiel ist z. B. die Steuerung von Umwälz- oder Zirkulationspumpen.

    Ebenso können beliebige Wandthermostate (z. B. HM, MAX, FHT) für die Vorgabe der Solltemperatur genutzt werden.

    @@ -1055,7 +1058,7 @@ THRESHOLD_setValue($$) Es soll geheizt werden, wenn die Zimmertemperatur unter 21 Grad fällt und die Außentemperatur unter 15 Grad ist:

    define TH_outdoor THRESHOLD outdoor:temperature:0:15
    - define TH_room THRESHOLD indoor AND TH_outdoor:state:on heating
    + define TH_room THRESHOLD indoor OR TH_outdoor:state:off heating
    set TH_room desired 21