diff --git a/fhem/FHEM/10_KNX.pm b/fhem/FHEM/10_KNX.pm index d84223b44..62649ae46 100644 --- a/fhem/FHEM/10_KNX.pm +++ b/fhem/FHEM/10_KNX.pm @@ -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");