mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 09:16:53 +00:00
10_KNX.pm: fixed scaling algo
git-svn-id: https://svn.fhem.de/fhem/trunk@16858 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
025b1bf35c
commit
1212b9a6b4
@ -23,6 +23,8 @@
|
||||
# ABU 20180605 Added example for autogenerated devices
|
||||
# ABU 20180605 Added workaround for STATE
|
||||
# ABU 20180606 Fixed dpt18, fixed offset-addition in decode (was "-" instead of "+"), fixed issue with slider
|
||||
# ABU 20180607 seperated limit and scale from encode/decode in order to avoid warnings and clean up
|
||||
# ABU 20180613 fixed scaling algo
|
||||
|
||||
package main;
|
||||
|
||||
@ -940,10 +942,8 @@ KNX_Set($@) {
|
||||
my $transval = KNX_checkAndClean($hash, $value, $targetGadName);
|
||||
|
||||
#if cast not successful
|
||||
if (!defined($transval))
|
||||
{
|
||||
return "invalid value: $value" if (!defined($transval));
|
||||
}
|
||||
|
||||
#
|
||||
#
|
||||
#/process set command
|
||||
@ -1485,8 +1485,8 @@ KNX_limit ($$$$) {
|
||||
my $factor = $dpttypes{$model}{FACTOR};
|
||||
my $offset = $dpttypes{$model}{OFFSET};
|
||||
#get limits
|
||||
my $min = $dpttypes{"$model"}{MIN};
|
||||
my $max = $dpttypes{"$model"}{MAX};
|
||||
my $min = $dpttypes{$model}{MIN};
|
||||
my $max = $dpttypes{$model}{MAX};
|
||||
|
||||
#only execute, if nummeric value
|
||||
if (looks_like_number ($value))
|
||||
@ -1496,28 +1496,31 @@ KNX_limit ($$$$) {
|
||||
{
|
||||
if ($direction =~ m/^encode/i)
|
||||
{
|
||||
$retVal = $value / $factor if (defined ($factor));
|
||||
$retVal = $value - $offset if (defined ($offset));
|
||||
#correct value
|
||||
$retVal /= $factor if (defined ($factor));
|
||||
$retVal -= $offset if (defined ($offset));
|
||||
}
|
||||
elsif ($direction =~ m/^decode/i)
|
||||
{
|
||||
#correct value
|
||||
$retVal = $value + $offset if (defined ($offset));
|
||||
$retVal = $value * $factor if (defined ($factor));
|
||||
$retVal += $offset if (defined ($offset));
|
||||
$retVal *= $factor if (defined ($factor));
|
||||
}
|
||||
|
||||
Log3 ($name, 5, "limit: FACTOR: $min" ) if (defined ($factor));
|
||||
Log3 ($name, 5, "limit: OFFSET: $min" ) if (defined ($offset));
|
||||
Log3 ($name, 5, "limit: scaled... Output: $retVal, Input: $value") if ($retVal != $value);
|
||||
Log3 ($name, 5, "limit: FACTOR: $factor" ) if (defined ($factor));
|
||||
Log3 ($name, 5, "limit: OFFSET: $offset" ) if (defined ($offset));
|
||||
Log3 ($name, 5, "limit: scaled... Output: $retVal, Input: $value, Model: $model") if ($retVal != $value);
|
||||
}
|
||||
|
||||
#backup for later check
|
||||
my $checkVal = $retVal;
|
||||
#limitValue
|
||||
$retVal = $min if (defined ($min) and ($value < $min));
|
||||
$retVal = $max if (defined ($max) and ($value > $max));
|
||||
$retVal = $min if (defined ($min) and ($retVal < $min));
|
||||
$retVal = $max if (defined ($max) and ($retVal > $max));
|
||||
|
||||
Log3 ($name, 5, "limit: MIN: $min" ) if (defined ($min));
|
||||
Log3 ($name, 5, "limit: MAX: $min" ) if (defined ($max));
|
||||
Log3 ($name, 5, "limit: casted... Output: $retVal, Input: $value" ) if ($retVal != $value);
|
||||
Log3 ($name, 5, "limit: MAX: $max" ) if (defined ($max));
|
||||
Log3 ($name, 5, "limit: casted... Output: $retVal, Input: $value, Model: $model" ) if ($checkVal != $value);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user