2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-15 22:26:04 +00:00

10_KNX.pm: Fixed dpt18, fixed offset-addition in decode (was "-" instead of "+"), fixed issue with slider

git-svn-id: https://svn.fhem.de/fhem/trunk@16825 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
andi291 2018-06-06 13:47:02 +00:00
parent c392f21c9b
commit 478ffa0a60

View File

@ -22,6 +22,7 @@
# ABU 20180605 Corrected dpt18
# 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
package main;
@ -31,7 +32,7 @@ use Encode;
use SetExtensions;
#set to 1 for debug
my $debug = 0;
my $debug = 1;
#string constant for autocreate
my $modelErr = "MODEL_NOT_DEFINED";
@ -199,7 +200,7 @@ my %dpttypes = (
"dpt17.001" => {CODE=>"dpt5", UNIT=>"", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,3}/i, MIN=>0, MAX=>63},
# Scene, 1-64
"dpt18.001" => {CODE=>"dpt5", UNIT=>"", FACTOR=>1, OFFSET=>-1, PATTERN=>qr/[+-]?\d{1,3}/i, MIN=>1, MAX=>64},
"dpt18.001" => {CODE=>"dpt5", UNIT=>"", FACTOR=>1, OFFSET=>1, PATTERN=>qr/[+-]?\d{1,3}/i, MIN=>1, MAX=>64},
#date and time
"dpt19" => {CODE=>"dpt19", UNIT=>"", FACTOR=>undef, OFFSET=>undef, PATTERN=>qr/(((3[01]|[0-2]?[0-9]).(1[0-2]|0?[0-9]).(19[0-9][0-9]|2[01][0-9][0-9]))_((2[0-4]|[0?1][0-9]):(60|[0?1-5]?[0-9]):(60|[0?1-5]?[0-9])))|(now)/i, MIN=>undef, MAX=>undef},
@ -508,7 +509,9 @@ KNX_Define($$) {
{
my $min = $dptDetails->{MIN};
my $max = $dptDetails->{MAX};
$setlist = ":slider," . $min . "," . int(($max-$min)/100) . "," . $max;
my $interval = int(($max-$min)/100);
$interval = 1 if ($interval == 0);
$setlist = ":slider," . $min . "," . $interval . "," . $max;
}
#on/off/...
elsif (defined ($dptDetails->{MIN}))
@ -1822,7 +1825,7 @@ KNX_decodeByDpt ($$$) {
$state = 0 - $state if (not ($numval & 8));
#correct value
$state -= $offset if (defined ($offset));
$state += $offset if (defined ($offset));
$state *= $factor if (defined ($factor));
$state = sprintf ("%.0f", $state);
@ -1834,7 +1837,7 @@ KNX_decodeByDpt ($$$) {
$state = $numval;
#correct value
$state -= $offset if (defined ($offset));
$state += $offset if (defined ($offset));
$state *= $factor if (defined ($factor));
$state = sprintf ("%.0f", $state);
@ -1847,7 +1850,7 @@ KNX_decodeByDpt ($$$) {
$state = $numval;
#correct value
$state -= $offset if (defined ($offset));
$state += $offset if (defined ($offset));
$state *= $factor if (defined ($factor));
$state = sprintf ("%.0f", $state);
@ -1859,7 +1862,7 @@ KNX_decodeByDpt ($$$) {
$state = $numval;
#correct value
$state -= $offset if (defined ($offset));
$state += $offset if (defined ($offset));
$state *= $factor if (defined ($factor));
$state = sprintf ("%.0f", $state);
@ -1872,7 +1875,7 @@ KNX_decodeByDpt ($$$) {
$state = $numval;
#correct value
$state -= $offset if (defined ($offset));
$state += $offset if (defined ($offset));
$state *= $factor if (defined ($factor));
$state = sprintf ("%.0f", $state);
@ -1889,7 +1892,7 @@ KNX_decodeByDpt ($$$) {
$numval = (1 << $exp) * 0.01 * $mant;
#correct value
$state -= $offset if (defined ($offset));
$state += $offset if (defined ($offset));
$state *= $factor if (defined ($factor));
$state = sprintf ("%.2f","$numval");
@ -1924,7 +1927,7 @@ KNX_decodeByDpt ($$$) {
$state = $numval;
#correct value
$state -= $offset if (defined ($offset));
$state += $offset if (defined ($offset));
$state *= $factor if (defined ($factor));
$state = sprintf ("%.0f", $state);
@ -1937,7 +1940,7 @@ KNX_decodeByDpt ($$$) {
$state = $numval;
#correct value
$state -= $offset if (defined ($offset));
$state += $offset if (defined ($offset));
$state *= $factor if (defined ($factor));
$state = sprintf ("%.0f", $state);
@ -1948,7 +1951,7 @@ KNX_decodeByDpt ($$$) {
$numval = unpack "f", pack "L", hex ($value);
#correct value
$state -= $offset if (defined ($offset));
$state += $offset if (defined ($offset));
$state *= $factor if (defined ($factor));
$state = sprintf ("%.3f","$numval");