mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-21 07:56:03 +00:00
10_KNX.pm: corrected doku for time, finetuned dpt9-regex, added dpt 7.001 7.012 9.007 9.008, , added mod for extended adressing (thx to its2bit)
git-svn-id: https://svn.fhem.de/fhem/trunk@13013 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
9d41561d46
commit
3932b8bdc6
@ -22,6 +22,7 @@
|
|||||||
# ABU 20161126 fixed doku
|
# ABU 20161126 fixed doku
|
||||||
# ABU 20161127 adjusted dpt-16-sending, added dpt16.001
|
# ABU 20161127 adjusted dpt-16-sending, added dpt16.001
|
||||||
# ABU 20161129 fixed get-mechanism
|
# ABU 20161129 fixed get-mechanism
|
||||||
|
# ABU 20170106 corrected doku for time, finetuned dpt9-regex, added dpt 7.001 7.012 9.007 9.008, , added mod for extended adressing (thx to its2bit)
|
||||||
|
|
||||||
package main;
|
package main;
|
||||||
|
|
||||||
@ -63,7 +64,10 @@ my $id = 'C';
|
|||||||
|
|
||||||
#regex patterns
|
#regex patterns
|
||||||
my $PAT_GAD = qr/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{1,3}$/;
|
my $PAT_GAD = qr/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{1,3}$/;
|
||||||
my $PAT_GAD_HEX = qr/^[0-9a-f]{4}$/;
|
#old syntax
|
||||||
|
#my $PAT_GAD_HEX = qr/^[0-9a-f]{4}$/;
|
||||||
|
#new syntax for extended adressing
|
||||||
|
my $PAT_GAD_HEX = qr/^[0-9a-f]{5}$/;
|
||||||
my $PAT_GNO = qr/[gG][1-9][0-9]?/;
|
my $PAT_GNO = qr/[gG][1-9][0-9]?/;
|
||||||
|
|
||||||
#CODE is the identifier for the en- and decode algos. See encode and decode functions
|
#CODE is the identifier for the en- and decode algos. See encode and decode functions
|
||||||
@ -96,8 +100,10 @@ my %dpttypes = (
|
|||||||
|
|
||||||
# 2-Octet unsigned Value
|
# 2-Octet unsigned Value
|
||||||
"dpt7" => {CODE=>"dpt7", UNIT=>"", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,5}/, MIN=>0, MAX=>65535},
|
"dpt7" => {CODE=>"dpt7", UNIT=>"", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,5}/, MIN=>0, MAX=>65535},
|
||||||
|
"dpt7.001" => {CODE=>"dpt7", UNIT=>"", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,5}/, MIN=>0, MAX=>65535},
|
||||||
"dpt7.005" => {CODE=>"dpt7", UNIT=>"s", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,5}/, MIN=>0, MAX=>65535},
|
"dpt7.005" => {CODE=>"dpt7", UNIT=>"s", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,5}/, MIN=>0, MAX=>65535},
|
||||||
"dpt7.006" => {CODE=>"dpt7", UNIT=>"m", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,5}/, MIN=>0, MAX=>65535},
|
"dpt7.006" => {CODE=>"dpt7", UNIT=>"m", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,5}/, MIN=>0, MAX=>65535},
|
||||||
|
"dpt7.012" => {CODE=>"dpt7", UNIT=>"mA", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,5}/, MIN=>0, MAX=>65535},
|
||||||
"dpt7.013" => {CODE=>"dpt7", UNIT=>"lux", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,5}/, MIN=>0, MAX=>65535},
|
"dpt7.013" => {CODE=>"dpt7", UNIT=>"lux", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,5}/, MIN=>0, MAX=>65535},
|
||||||
|
|
||||||
# 2-Octet signed Value
|
# 2-Octet signed Value
|
||||||
@ -107,18 +113,20 @@ my %dpttypes = (
|
|||||||
"dpt8.011" => {CODE=>"dpt8", UNIT=>"°", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,5}/, MIN=>-32768, MAX=>32768},
|
"dpt8.011" => {CODE=>"dpt8", UNIT=>"°", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,5}/, MIN=>-32768, MAX=>32768},
|
||||||
|
|
||||||
# 2-Octet Float value
|
# 2-Octet Float value
|
||||||
"dpt9" => {CODE=>"dpt9", UNIT=>"", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{1,2}/, MIN=>-670760, MAX=>670760},
|
"dpt9" => {CODE=>"dpt9", UNIT=>"", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
"dpt9.001" => {CODE=>"dpt9", UNIT=>"°C", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{1,2}/, MIN=>-670760, MAX=>670760},
|
"dpt9.001" => {CODE=>"dpt9", UNIT=>"°C", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
"dpt9.004" => {CODE=>"dpt9", UNIT=>"lux", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{1,2}/, MIN=>-670760, MAX=>670760},
|
"dpt9.004" => {CODE=>"dpt9", UNIT=>"lux", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
"dpt9.006" => {CODE=>"dpt9", UNIT=>"Pa", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{1,2}/, MIN=>-670760, MAX=>670760},
|
"dpt9.006" => {CODE=>"dpt9", UNIT=>"Pa", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
"dpt9.005" => {CODE=>"dpt9", UNIT=>"m/s", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{1,2}/, MIN=>-670760, MAX=>670760},
|
"dpt9.005" => {CODE=>"dpt9", UNIT=>"m/s", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
"dpt9.009" => {CODE=>"dpt9", UNIT=>"m³/h", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{1,2}/, MIN=>-670760, MAX=>670760},
|
"dpt9.007" => {CODE=>"dpt9", UNIT=>"%", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
"dpt9.010" => {CODE=>"dpt9", UNIT=>"s", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{1,2}/, MIN=>-670760, MAX=>670760},
|
"dpt9.008" => {CODE=>"dpt9", UNIT=>"ppm", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
"dpt9.021" => {CODE=>"dpt9", UNIT=>"mA", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{1,2}/, MIN=>-670760, MAX=>670760},
|
"dpt9.009" => {CODE=>"dpt9", UNIT=>"m³/h", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
"dpt9.024" => {CODE=>"dpt9", UNIT=>"kW", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{1,2}/, MIN=>-670760, MAX=>670760},
|
"dpt9.010" => {CODE=>"dpt9", UNIT=>"s", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
"dpt9.025" => {CODE=>"dpt9", UNIT=>"l/h", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{1,2}/, MIN=>-670760, MAX=>670760},
|
"dpt9.021" => {CODE=>"dpt9", UNIT=>"mA", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
"dpt9.026" => {CODE=>"dpt9", UNIT=>"l/h", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{1,2}/, MIN=>-670760, MAX=>670760},
|
"dpt9.024" => {CODE=>"dpt9", UNIT=>"kW", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
"dpt9.028" => {CODE=>"dpt9", UNIT=>"km/h", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{1,2}/, MIN=>-670760, MAX=>670760},
|
"dpt9.025" => {CODE=>"dpt9", UNIT=>"l/h", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
|
"dpt9.026" => {CODE=>"dpt9", UNIT=>"l/h", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
|
"dpt9.028" => {CODE=>"dpt9", UNIT=>"km/h", FACTOR=>1, OFFSET=>0, PATTERN=>qr/[+-]?\d{1,6}[.,]?\d{0,}/, MIN=>-670760, MAX=>670760},
|
||||||
|
|
||||||
# Time of Day
|
# Time of Day
|
||||||
"dpt10" => {CODE=>"dpt10", UNIT=>"", FACTOR=>undef, OFFSET=>undef, PATTERN=>qr/((2[0-4]|[0?1][0-9]):(60|[0?1-5]?[0-9]):(60|[0?1-5]?[0-9]))|([nN][oO][wW])/, MIN=>undef, MAX=>undef},
|
"dpt10" => {CODE=>"dpt10", UNIT=>"", FACTOR=>undef, OFFSET=>undef, PATTERN=>qr/((2[0-4]|[0?1][0-9]):(60|[0?1-5]?[0-9]):(60|[0?1-5]?[0-9]))|([nN][oO][wW])/, MIN=>undef, MAX=>undef},
|
||||||
@ -244,7 +252,11 @@ KNX_Define($$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#convert to string, if supplied in Hex
|
#convert to string, if supplied in Hex
|
||||||
|
#old syntax
|
||||||
$group = KNX_hexToName ($group) if ($group =~ m/^[0-9a-f]{4}$/i);
|
$group = KNX_hexToName ($group) if ($group =~ m/^[0-9a-f]{4}$/i);
|
||||||
|
#new syntax for extended adressing
|
||||||
|
$group = KNX_hexToName ($group) if ($group =~ m/^[0-9a-f]{5}$/i);
|
||||||
|
|
||||||
$groupc = KNX_nameToHex ($group);
|
$groupc = KNX_nameToHex ($group);
|
||||||
|
|
||||||
Log3 ($name, 5, "define $name: found GAD: $group, NO: $gno, HEX: $groupc, DPT: $model");
|
Log3 ($name, 5, "define $name: found GAD: $group, NO: $gno, HEX: $groupc, DPT: $model");
|
||||||
@ -731,7 +743,11 @@ KNX_Parse($$) {
|
|||||||
#we will also take reply telegrams into account,
|
#we will also take reply telegrams into account,
|
||||||
#as they will be sent if the status is asked from bus
|
#as they will be sent if the status is asked from bus
|
||||||
#split message into parts
|
#split message into parts
|
||||||
$msg =~ m/^$id(.{4})(.{1})(.{4})(.*)$/;
|
|
||||||
|
#old syntax
|
||||||
|
#$msg =~ m/^$id(.{4})(.{1})(.{4})(.*)$/;
|
||||||
|
#new syntax for extended adressing
|
||||||
|
$msg =~ m/^$id(.{5})(.{1})(.{5})(.*)$/;
|
||||||
my $src = $1;
|
my $src = $1;
|
||||||
my $cmd = $2;
|
my $cmd = $2;
|
||||||
my $dest = $3;
|
my $dest = $3;
|
||||||
@ -884,9 +900,15 @@ KNX_hexToName ($)
|
|||||||
{
|
{
|
||||||
my $v = shift;
|
my $v = shift;
|
||||||
|
|
||||||
my $p1 = hex(substr($v,0,1));
|
#old syntax
|
||||||
my $p2 = hex(substr($v,1,1));
|
#my $p1 = hex(substr($v,0,1));
|
||||||
my $p3 = hex(substr($v,2,2));
|
#my $p2 = hex(substr($v,1,1));
|
||||||
|
#my $p3 = hex(substr($v,2,2));
|
||||||
|
|
||||||
|
#new syntax for extended adressing
|
||||||
|
my $p1 = hex(substr($v,0,2));
|
||||||
|
my $p2 = hex(substr($v,2,1));
|
||||||
|
my $p3 = hex(substr($v,3,2));
|
||||||
|
|
||||||
my $r = sprintf("%d/%d/%d", $p1,$p2,$p3);
|
my $r = sprintf("%d/%d/%d", $p1,$p2,$p3);
|
||||||
|
|
||||||
@ -903,7 +925,10 @@ KNX_nameToHex ($)
|
|||||||
|
|
||||||
if($v =~ /^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{1,3})$/)
|
if($v =~ /^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{1,3})$/)
|
||||||
{
|
{
|
||||||
|
#old syntax
|
||||||
$r = sprintf("%01x%01x%02x",$1,$2,$3);
|
$r = sprintf("%01x%01x%02x",$1,$2,$3);
|
||||||
|
#new syntax for extended adressing
|
||||||
|
my $r = sprintf("%02x%01x%02x",$1,$2,$3);
|
||||||
}
|
}
|
||||||
#elsif($v =~ /^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{1,3})$/)
|
#elsif($v =~ /^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{1,3})$/)
|
||||||
#{
|
#{
|
||||||
@ -1622,18 +1647,16 @@ sub KNX_getCmdList ($$$)
|
|||||||
<p>The current date and time can be sent to the bus by the following settings:</p>
|
<p>The current date and time can be sent to the bus by the following settings:</p>
|
||||||
<pre>
|
<pre>
|
||||||
define timedev KNX 0/0/7:dpt10
|
define timedev KNX 0/0/7:dpt10
|
||||||
attr timedev eventMap /value now:now/
|
|
||||||
attr timedev webCmd now
|
attr timedev webCmd now
|
||||||
|
|
||||||
define datedev KNX 0/0/8:dpt11
|
define datedev KNX 0/0/8:dpt11
|
||||||
attr datedev eventMap /value now:now/
|
|
||||||
attr datedev webCmd now
|
attr datedev webCmd now
|
||||||
|
|
||||||
# send every midnight the new date
|
# send every midnight the new date
|
||||||
define dateset at *00:00:00 set datedev value now
|
define dateset at *00:00:00 set datedev now
|
||||||
|
|
||||||
# send every hour the current time
|
# send every hour the current time
|
||||||
define timeset at +*01:00:00 set timedev value now
|
define timeset at +*01:00:00 set timedev now
|
||||||
</pre>
|
</pre>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -1755,8 +1778,10 @@ sub KNX_getCmdList ($$$)
|
|||||||
dpt6 -127..+127<br>
|
dpt6 -127..+127<br>
|
||||||
dpt6.001 0..100 %<br>
|
dpt6.001 0..100 %<br>
|
||||||
dpt7 0..65535<br>
|
dpt7 0..65535<br>
|
||||||
|
dpt7.001 0..65535 s<br>
|
||||||
dpt7.005 0..65535 s<br>
|
dpt7.005 0..65535 s<br>
|
||||||
dpt7.005 0..65535 m<br>
|
dpt7.005 0..65535 m<br>
|
||||||
|
dpt7.012 0..65535 mA<br>
|
||||||
dpt7.013 0..65535 lux<br>
|
dpt7.013 0..65535 lux<br>
|
||||||
dpt8 -32768..32768<br>
|
dpt8 -32768..32768<br>
|
||||||
dpt8.005 -32768..32768 s<br>
|
dpt8.005 -32768..32768 s<br>
|
||||||
@ -1765,8 +1790,10 @@ sub KNX_getCmdList ($$$)
|
|||||||
dpt9 -670760.0..+670760.0<br>
|
dpt9 -670760.0..+670760.0<br>
|
||||||
dpt9.001 -670760.0..+670760.0 °<br>
|
dpt9.001 -670760.0..+670760.0 °<br>
|
||||||
dpt9.004 -670760.0..+670760.0 lux<br>
|
dpt9.004 -670760.0..+670760.0 lux<br>
|
||||||
dpt9.006 -670760.0..+670760.0 Pa<br>
|
|
||||||
dpt9.005 -670760.0..+670760.0 m/s<br>
|
dpt9.005 -670760.0..+670760.0 m/s<br>
|
||||||
|
dpt9.006 -670760.0..+670760.0 Pa<br>
|
||||||
|
dpt9.007 -670760.0..+670760.0 %<br>
|
||||||
|
dpt9.008 -670760.0..+670760.0 ppm<br>
|
||||||
dpt9.009 -670760.0..+670760.0 m³/h<br>
|
dpt9.009 -670760.0..+670760.0 m³/h<br>
|
||||||
dpt9.010 -670760.0..+670760.0 s<br>
|
dpt9.010 -670760.0..+670760.0 s<br>
|
||||||
dpt9.021 -670760.0..+670760.0 mA<br>
|
dpt9.021 -670760.0..+670760.0 mA<br>
|
||||||
@ -1884,18 +1911,16 @@ sub KNX_getCmdList ($$$)
|
|||||||
<p>Aktuelle Uhrzeit / Datum können wie folgt auf den Bus gelegt werden:</p>
|
<p>Aktuelle Uhrzeit / Datum können wie folgt auf den Bus gelegt werden:</p>
|
||||||
<pre>
|
<pre>
|
||||||
define timedev KNX 0/0/7:dpt10
|
define timedev KNX 0/0/7:dpt10
|
||||||
attr timedev eventMap /value now:now/
|
|
||||||
attr timedev webCmd now
|
attr timedev webCmd now
|
||||||
|
|
||||||
define datedev KNX 0/0/8:dpt11
|
define datedev KNX 0/0/8:dpt11
|
||||||
attr datedev eventMap /value now:now/
|
|
||||||
attr datedev webCmd now
|
attr datedev webCmd now
|
||||||
|
|
||||||
# send every midnight the new date
|
# send every midnight the new date
|
||||||
define dateset at *00:00:00 set datedev value now
|
define dateset at *00:00:00 set datedev now
|
||||||
|
|
||||||
# send every hour the current time
|
# send every hour the current time
|
||||||
define timeset at +*01:00:00 set timedev value now
|
define timeset at +*01:00:00 set timedev now
|
||||||
</pre>
|
</pre>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -2017,8 +2042,10 @@ sub KNX_getCmdList ($$$)
|
|||||||
dpt6 -127..+127<br>
|
dpt6 -127..+127<br>
|
||||||
dpt6.001 0..100 %<br>
|
dpt6.001 0..100 %<br>
|
||||||
dpt7 0..65535<br>
|
dpt7 0..65535<br>
|
||||||
|
dpt7.001 0..65535 <br>
|
||||||
dpt7.005 0..65535 s<br>
|
dpt7.005 0..65535 s<br>
|
||||||
dpt7.006 0..65535 m<br>
|
dpt7.006 0..65535 m<br>
|
||||||
|
dpt7.012 0..65535 mA<br>
|
||||||
dpt7.013 0..65535 lux<br>
|
dpt7.013 0..65535 lux<br>
|
||||||
dpt8 -32768..32768<br>
|
dpt8 -32768..32768<br>
|
||||||
dpt8.005 -32768..32768 s<br>
|
dpt8.005 -32768..32768 s<br>
|
||||||
@ -2027,8 +2054,10 @@ sub KNX_getCmdList ($$$)
|
|||||||
dpt9 -670760.0..+670760.0<br>
|
dpt9 -670760.0..+670760.0<br>
|
||||||
dpt9.001 -670760.0..+670760.0 °<br>
|
dpt9.001 -670760.0..+670760.0 °<br>
|
||||||
dpt9.004 -670760.0..+670760.0 lux<br>
|
dpt9.004 -670760.0..+670760.0 lux<br>
|
||||||
dpt9.006 -670760.0..+670760.0 Pa<br>
|
|
||||||
dpt9.005 -670760.0..+670760.0 m/s<br>
|
dpt9.005 -670760.0..+670760.0 m/s<br>
|
||||||
|
dpt9.006 -670760.0..+670760.0 Pa<br>
|
||||||
|
dpt9.007 -670760.0..+670760.0 %<br>
|
||||||
|
dpt9.008 -670760.0..+670760.0 ppm<br>
|
||||||
dpt9.009 -670760.0..+670760.0 m³/h<br>
|
dpt9.009 -670760.0..+670760.0 m³/h<br>
|
||||||
dpt9.010 -670760.0..+670760.0 s<br>
|
dpt9.010 -670760.0..+670760.0 s<br>
|
||||||
dpt9.021 -670760.0..+670760.0 mA<br>
|
dpt9.021 -670760.0..+670760.0 mA<br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user