2
0
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:
andi291 2018-06-13 07:32:29 +00:00
parent 025b1bf35c
commit 1212b9a6b4

View File

@ -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
{