diff --git a/FHEM/40_RFXCOM.pm b/FHEM/40_RFXCOM.pm index f4e75f3fd..667507615 100755 --- a/FHEM/40_RFXCOM.pm +++ b/FHEM/40_RFXCOM.pm @@ -93,7 +93,7 @@ RFXCOM_Initialize($) $hash->{GetFn} = "RFXCOM_Get"; $hash->{SetFn} = "RFXCOM_Set"; $hash->{StateFn} = "RFXCOM_SetState"; - $hash->{AttrList}= "do_not_notify:1,0 dummy:1,0 do_not_init:1:0 loglevel:0,1,2,3,4,5,6"; + $hash->{AttrList}= "dummy:1,0 do_not_init:1:0 longids loglevel:0,1,2,3,4,5,6"; $hash->{ShutdownFn} = "RFXCOM_Shutdown"; } diff --git a/FHEM/41_OREGON.pm b/FHEM/41_OREGON.pm index 1da65bd1f..c65dcd822 100755 --- a/FHEM/41_OREGON.pm +++ b/FHEM/41_OREGON.pm @@ -55,7 +55,7 @@ OREGON_Initialize($) $hash->{DefFn} = "OREGON_Define"; $hash->{UndefFn} = "OREGON_Undef"; $hash->{ParseFn} = "OREGON_Parse"; - $hash->{AttrList} = "IODev do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; + $hash->{AttrList} = "IODev ignore:1,0 do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; } @@ -94,20 +94,20 @@ OREGON_Undef($$) ######################################### # From xpl-perl/lib/xPL/Util.pm: -sub hi_nibble { +sub OREGON_hi_nibble { ($_[0]&0xf0)>>4; } -sub lo_nibble { +sub OREGON_lo_nibble { $_[0]&0xf; } -sub nibble_sum { +sub OREGON_nibble_sum { my $c = $_[0]; my $s = 0; foreach (0..$_[0]-1) { - $s += hi_nibble($_[1]->[$_]); - $s += lo_nibble($_[1]->[$_]); + $s += OREGON_hi_nibble($_[1]->[$_]); + $s += OREGON_lo_nibble($_[1]->[$_]); } - $s += hi_nibble($_[1]->[$_[0]]) if (int($_[0]) != $_[0]); + $s += OREGON_hi_nibble($_[1]->[$_[0]]) if (int($_[0]) != $_[0]); return $s; } @@ -115,7 +115,7 @@ sub nibble_sum { # From xpl-perl/lib/xPL/RF/Oregon.pm: # This function creates a simple key from a device type and message # length (in bits). It is used to as the index for the parts table. -sub type_length_key { +sub OREGON_type_length_key { ($_[0] << 8) + $_[1] } @@ -126,115 +126,115 @@ sub type_length_key { my %types = ( # THGR810 - type_length_key(0xfa28, 80) => + OREGON_type_length_key(0xfa28, 80) => { - part => 'THGR810', checksum => \&checksum2, method => \&common_temphydro, + part => 'THGR810', checksum => \&OREGON_checksum2, method => \&OREGON_common_temphydro, }, # WTGR800 Temp hydro - type_length_key(0xfab8, 80) => + OREGON_type_length_key(0xfab8, 80) => { - part => 'WTGR800_T', checksum => \&checksum2, method => \&alt_temphydro, + part => 'WTGR800_T', checksum => \&OREGON_checksum2, method => \&OREGON_alt_temphydro, }, # WTGR800 Anenometer - type_length_key(0x1a99, 88) => + OREGON_type_length_key(0x1a99, 88) => { - part => 'WTGR800_A', checksum => \&checksum4, method => \&wtgr800_anemometer, + part => 'WTGR800_A', checksum => \&OREGON_checksum4, method => \&OREGON_wtgr800_anemometer, }, # - type_length_key(0x1a89, 88) => + OREGON_type_length_key(0x1a89, 88) => { - part => 'WGR800', checksum => \&checksum4, method => \&wtgr800_anemometer, + part => 'WGR800', checksum => \&OREGON_checksum4, method => \&OREGON_wtgr800_anemometer, }, - type_length_key(0xda78, 72) => + OREGON_type_length_key(0xda78, 72) => { - part => 'UVN800', checksun => \&checksum7, method => \&uvn800, + part => 'UVN800', checksun => \&OREGON_checksum7, method => \&OREGON_uvn800, }, - type_length_key(0xea7c, 120) => + OREGON_type_length_key(0xea7c, 120) => { - part => 'UV138', checksum => \&checksum1, method => \&uv138, + part => 'UV138', checksum => \&OREGON_checksum1, method => \&OREGON_uv138, }, - type_length_key(0xea4c, 80) => + OREGON_type_length_key(0xea4c, 80) => { - part => 'THWR288A', checksum => \&checksum1, method => \&common_temp, + part => 'THWR288A', checksum => \&OREGON_checksum1, method => \&OREGON_common_temp, }, # - type_length_key(0xea4c, 68) => + OREGON_type_length_key(0xea4c, 68) => { - part => 'THN132N', checksum => \&checksum1, method => \&common_temp, + part => 'THN132N', checksum => \&OREGON_checksum1, method => \&OREGON_common_temp, }, # - type_length_key(0x9aec, 104) => + OREGON_type_length_key(0x9aec, 104) => { - part => 'RTGR328N', checksum => \&checksum3, method => \&rtgr328n_datetime, + part => 'RTGR328N', checksum => \&OREGON_checksum3, method => \&OREGON_rtgr328n_datetime, }, # - type_length_key(0x9aea, 104) => + OREGON_type_length_key(0x9aea, 104) => { - part => 'RTGR328N', checksum => \&checksum3, method => \&rtgr328n_datetime, + part => 'RTGR328N', checksum => \&OREGON_checksum3, method => \&OREGON_rtgr328n_datetime, }, # THGN122N,THGR122NX,THGR228N,THGR268 - type_length_key(0x1a2d, 80) => + OREGON_type_length_key(0x1a2d, 80) => { - part => 'THGR228N', checksum => \&checksum2, method => \&common_temphydro, + part => 'THGR228N', checksum => \&OREGON_checksum2, method => \&OREGON_common_temphydro, }, # THGR918 - type_length_key(0x1a3d, 80) => + OREGON_type_length_key(0x1a3d, 80) => { - part => 'THGR918', checksum => \&checksum2, method => \&common_temphydro, + part => 'THGR918', checksum => \&OREGON_checksum2, method => \&OREGON_common_temphydro, }, # BTHR918 - type_length_key(0x5a5d, 88) => + OREGON_type_length_key(0x5a5d, 88) => { - part => 'BTHR918', checksum => \&checksum5, method => \&common_temphydrobaro, + part => 'BTHR918', checksum => \&OREGON_checksum5, method => \&OREGON_common_temphydrobaro, }, # BTHR918N, BTHR968 - type_length_key(0x5a6d, 96) => + OREGON_type_length_key(0x5a6d, 96) => { - part => 'BTHR918N', checksum => \&checksum5, method => \&alt_temphydrobaro, + part => 'BTHR918N', checksum => \&OREGON_checksum5, method => \&OREGON_alt_temphydrobaro, }, # - type_length_key(0x3a0d, 80) => + OREGON_type_length_key(0x3a0d, 80) => { - part => 'WGR918', checksum => \&checksum4, method => \&wgr918_anemometer, + part => 'WGR918', checksum => \&OREGON_checksum4, method => \&OREGON_wgr918_anemometer, }, # - type_length_key(0x3a0d, 88) => + OREGON_type_length_key(0x3a0d, 88) => { - part => 'WGR918', checksum => \&checksum4, method => \&wgr918_anemometer, + part => 'WGR918', checksum => \&OREGON_checksum4, method => \&OREGON_wgr918_anemometer, }, # RGR126, RGR682, RGR918: - type_length_key(0x2a1d, 80) => + OREGON_type_length_key(0x2a1d, 80) => { - part => 'RGR918', checksum => \&checksum6plus, method => \&common_rain, + part => 'RGR918', checksum => \&OREGON_checksum6plus, method => \&OREGON_common_rain, }, - type_length_key(0x2a1d, 84) => + OREGON_type_length_key(0x2a1d, 84) => { - part => 'RGR918', checksum => \&checksum6plus, method => \&common_rain, + part => 'RGR918', checksum => \&OREGON_checksum6plus, method => \&OREGON_common_rain, }, # - type_length_key(0x0a4d, 80) => + OREGON_type_length_key(0x0a4d, 80) => { - part => 'THR128', checksum => \&checksum2, method => \&common_temp, + part => 'THR128', checksum => \&OREGON_checksum2, method => \&OREGON_common_temp, }, # THGR328N - type_length_key(0xca2c, 80) => + OREGON_type_length_key(0xca2c, 80) => { - part => 'THGR328N', checksum => \&checksum2, method => \&common_temphydro, + part => 'THGR328N', checksum => \&OREGON_checksum2, method => \&OREGON_common_temphydro, }, # - type_length_key(0xca2c, 120) => + OREGON_type_length_key(0xca2c, 120) => { - part => 'THGR328N', checksum => \&checksum2, method => \&common_temphydro, + part => 'THGR328N', checksum => \&OREGON_checksum2, method => \&OREGON_common_temphydro, }, # masked - type_length_key(0x0acc, 80) => + OREGON_type_length_key(0x0acc, 80) => { - part => 'RTGR328N', checksum => \&checksum2, method => \&common_temphydro, + part => 'RTGR328N', checksum => \&OREGON_checksum2, method => \&OREGON_common_temphydro, }, # PCR800. Commented out until fully tested. - type_length_key(0x2a19, 92) => + OREGON_type_length_key(0x2a19, 92) => { - part => 'PCR800', checksum => \&checksum8, method => \&rain_PCR800, + part => 'PCR800', checksum => \&OREGON_checksum8, method => \&OREGON_rain_PCR800, }, ); @@ -251,13 +251,13 @@ my @OREGON_winddir_name=("N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW # - some parameter like "parent" and others are removed # - @res array return the values directly (no usage of xPL::Message) -sub temperature { +sub OREGON_temperature { my ($bytes, $dev, $res) = @_; my $temp = (($bytes->[6]&0x8) ? -1 : 1) * - (hi_nibble($bytes->[5])*10 + lo_nibble($bytes->[5]) + - hi_nibble($bytes->[4])/10); + (OREGON_hi_nibble($bytes->[5])*10 + OREGON_lo_nibble($bytes->[5]) + + OREGON_hi_nibble($bytes->[4])/10); push @$res, { device => $dev, @@ -268,9 +268,9 @@ sub temperature { } -sub humidity { +sub OREGON_humidity { my ($bytes, $dev, $res) = @_; - my $hum = lo_nibble($bytes->[7])*10 + hi_nibble($bytes->[6]); + my $hum = OREGON_lo_nibble($bytes->[7])*10 + OREGON_hi_nibble($bytes->[6]); my $hum_str = ['normal', 'comfortable', 'dry', 'wet']->[$bytes->[7]>>6]; push @$res, { device => $dev, @@ -281,7 +281,7 @@ sub humidity { } } -sub pressure { +sub OREGON_pressure { my ($bytes, $dev, $res, $forecast_nibble, $offset) = @_; $offset = 795 unless ($offset); my $hpa = $bytes->[8]+$offset; @@ -299,25 +299,34 @@ sub pressure { } } -sub simple_battery { +sub OREGON_simple_battery { my ($bytes, $dev, $res) = @_; my $battery_low = $bytes->[4]&0x4; - my $bat = $battery_low ? 10 : 90; + #my $bat = $battery_low ? 10 : 90; + my $battery = $battery_low ? "low" : "ok"; push @$res, { device => $dev, type => 'battery', - current => $bat, + current => $battery, units => '%', } } -sub percentage_battery { +sub OREGON_percentage_battery { my ($bytes, $dev, $res) = @_; - my $bat = 100-10*lo_nibble($bytes->[4]); + + my $battery; + my $battery_level = 100-10*OREGON_lo_nibble($bytes->[4]); + if ($battery_level > 50) { + $battery = sprintf("ok %d%%",$battery_level); + } else { + $battery = sprintf("low %d%%",$battery_level); + } + push @$res, { device => $dev, type => 'battery', - current => $bat, + current => $battery, units => '%', } } @@ -330,14 +339,14 @@ my @uv_str = 'very high', 'very high', 'very high', # 8 - 10 ); -sub uv_string { +sub OREGON_uv_string { $uv_str[$_[0]] || 'dangerous'; } -sub uv { +sub OREGON_uv { my ($bytes, $dev, $res) = @_; - my $uv = lo_nibble($bytes->[5])*10 + hi_nibble($bytes->[4]); - my $risk = uv_string($uv); + my $uv = OREGON_lo_nibble($bytes->[5])*10 + OREGON_hi_nibble($bytes->[4]); + my $risk = OREGON_uv_string($uv); push @$res, { device => $dev, @@ -347,10 +356,10 @@ sub uv { } } -sub uv2 { +sub OREGON_uv2 { my ($bytes, $dev, $res) = @_; - my $uv = hi_nibble($bytes->[4]); - my $risk = uv_string($uv); + my $uv = OREGON_hi_nibble($bytes->[4]); + my $risk = OREGON_uv_string($uv); push @$res, { device => $dev, @@ -360,52 +369,92 @@ sub uv2 { } } +# Test if to use longid for device type +sub OREGON_use_longid { + my ($longids,$dev_type) = @_; + + return 0 if ($longids eq ""); + return 0 if ($longids eq "NONE"); + return 0 if ($longids eq "0"); + + return 1 if ($longids eq "1"); + return 1 if ($longids eq "ALL"); + + return 1 if(",$longids," =~ m/,$dev_type,/); + + return 0; +} + # -------------------------------------------------------- -sub uv138 { +sub OREGON_uv138 { my $type = shift; + my $longids = shift; my $bytes = shift; my $device = sprintf "%02x", $bytes->[3]; - my $dev_str = $type.$DOT.$device; + #my $dev_str = $type.$DOT.$device; + my $dev_str = $type; + if (OREGON_use_longid($longids,$type)) { + $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); + } + if (OREGON_hi_nibble($bytes->[2]) > 0) { + $dev_str .= $DOT.sprintf("%d", OREGON_hi_nibble($bytes->[2])); + } my @res = (); - uv($bytes, $dev_str, \@res); - simple_battery($bytes, $dev_str, \@res); + OREGON_uv($bytes, $dev_str, \@res); + OREGON_simple_battery($bytes, $dev_str, \@res); return @res; } -sub uvn800 { +sub OREGON_uvn800 { my $type = shift; + my $longids = shift; my $bytes = shift; my $device = sprintf "%02x", $bytes->[3]; - my $dev_str = $type.$DOT.$device; + #my $dev_str = $type.$DOT.$device; + my $dev_str = $type; + if (OREGON_use_longid($longids,$type)) { + $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); + } + if (OREGON_hi_nibble($bytes->[2]) > 0) { + $dev_str .= $DOT.sprintf("%d", OREGON_hi_nibble($bytes->[2])); + } my @res = (); - uv2($bytes, $dev_str, \@res); - percentage_battery($bytes, $dev_str, \@res); + OREGON_uv2($bytes, $dev_str, \@res); + OREGON_percentage_battery($bytes, $dev_str, \@res); return @res; } -sub wgr918_anemometer { +sub OREGON_wgr918_anemometer { my $type = shift; + my $longids = shift; my $bytes = shift; my $device = sprintf "%02x", $bytes->[3]; - my $dev_str = $type.$DOT.$device; + #my $dev_str = $type.$DOT.$device; + my $dev_str = $type; + if (OREGON_use_longid($longids,$type)) { + $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); + } + if (OREGON_hi_nibble($bytes->[2]) > 0) { + $dev_str .= $DOT.sprintf("%d", OREGON_hi_nibble($bytes->[2])); + } my @res = (); - my $dir = sprintf("%02x",$bytes->[5])*10 + hi_nibble($bytes->[4]); + my $dir = sprintf("%02x",$bytes->[5])*10 + OREGON_hi_nibble($bytes->[4]); my $dirname = $OREGON_winddir_name[$dir/22.5]; - my $speed = lo_nibble($bytes->[7]) * 10 + sprintf("%02x",$bytes->[6])/10; - my $avspeed = sprintf("%02x",$bytes->[8]) + hi_nibble($bytes->[7]) / 10; + my $speed = OREGON_lo_nibble($bytes->[7]) * 10 + sprintf("%02x",$bytes->[6])/10; + my $avspeed = sprintf("%02x",$bytes->[8]) + OREGON_hi_nibble($bytes->[7]) / 10; push @res, { device => $dev_str, @@ -421,29 +470,37 @@ sub wgr918_anemometer { units => 'degrees', } ; - percentage_battery($bytes, $dev_str, \@res); + OREGON_percentage_battery($bytes, $dev_str, \@res); return @res; } # ----------------------------- -sub wtgr800_anemometer { - my $type = shift; - my $bytes = shift; +sub OREGON_wtgr800_anemometer { + my $type = shift; + my $longids = shift; + my $bytes = shift; - my $device = sprintf "%02x", $bytes->[3]; - my $dev_str = $type.$DOT.$device; + my $device = sprintf "%02x", $bytes->[3]; + #my $dev_str = $type.$DOT.$device; + my $dev_str = $type; + if (OREGON_use_longid($longids,$type)) { + $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); + } + if (OREGON_hi_nibble($bytes->[2]) > 0) { + $dev_str .= $DOT.sprintf("%d", OREGON_hi_nibble($bytes->[2])); + } - my @res = (); + my @res = (); - my $dir = hi_nibble($bytes->[4]) % 16; - my $dirname = $OREGON_winddir_name[$dir]; - $dir = $dir * 22.5; - my $speed = lo_nibble($bytes->[7]) * 10 + sprintf("%02x",$bytes->[6])/10; - my $avspeed = sprintf("%02x",$bytes->[8]) + hi_nibble($bytes->[7]) / 10; + my $dir = OREGON_hi_nibble($bytes->[4]) % 16; + my $dirname = $OREGON_winddir_name[$dir]; + $dir = $dir * 22.5; + my $speed = OREGON_lo_nibble($bytes->[7]) * 10 + sprintf("%02x",$bytes->[6])/10; + my $avspeed = sprintf("%02x",$bytes->[8]) + OREGON_hi_nibble($bytes->[7]) / 10; - push @res, { + push @res, { device => $dev_str, type => 'speed', current => $speed, @@ -456,15 +513,16 @@ sub wtgr800_anemometer { string => $dirname, units => 'degrees', } - ; - percentage_battery($bytes, $dev_str, \@res); + ; + OREGON_percentage_battery($bytes, $dev_str, \@res); - return @res; + return @res; } # ----------------------------- -sub alt_temphydro { +sub OREGON_alt_temphydro { my $type = shift; + my $longids = shift; my $bytes = shift; # @@ -473,64 +531,80 @@ sub alt_temphydro { $hex_line .= sprintf("%02x",$bytes->[$i]); } - my $device = sprintf "%02x", $bytes->[3]; - my $dev_str = $type.$DOT.$device; - my @res = (); + my $device = sprintf "%02x", $bytes->[3]; + #my $dev_str = $type.$DOT.$device; + my $dev_str = $type; + if (OREGON_use_longid($longids,$type)) { + $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); + } + if (OREGON_hi_nibble($bytes->[2]) > 0) { + $dev_str .= $DOT.sprintf("%d", OREGON_hi_nibble($bytes->[2])); + } + my @res = (); - temperature($bytes, $dev_str, \@res); - humidity($bytes, $dev_str, \@res); - percentage_battery($bytes, $dev_str, \@res); + OREGON_temperature($bytes, $dev_str, \@res); + OREGON_humidity($bytes, $dev_str, \@res); + OREGON_percentage_battery($bytes, $dev_str, \@res); -# hexline debugging - #push @res, { - # device => $dev_str, - # type => 'hexline', - # current => $hex_line, - # units => 'hex', - # }; - - return @res; + return @res; } # ----------------------------- -sub alt_temphydrobaro { - my $type = shift; - my $bytes = shift; - - my @res = (); - - my $device = sprintf "%02x", $bytes->[3]; - my $dev_str = $type.$DOT.$device; - - temperature($bytes, $dev_str, \@res); - humidity($bytes, $dev_str, \@res); - pressure($bytes, $dev_str, \@res, hi_nibble($bytes->[9]), 856); - percentage_battery($bytes, $dev_str, \@res); - - return @res; -} - -# ----------------------------- -sub rtgr328n_datetime { +sub OREGON_alt_temphydrobaro { my $type = shift; + my $longids = shift; + my $bytes = shift; + + my @res = (); + + my $device = sprintf "%02x", $bytes->[3]; + #my $dev_str = $type.$DOT.$device; + my $dev_str = $type; + if (OREGON_use_longid($longids,$type)) { + $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); + } + if (OREGON_hi_nibble($bytes->[2]) > 0) { + $dev_str .= $DOT.sprintf("%d", OREGON_hi_nibble($bytes->[2])); + } + + OREGON_temperature($bytes, $dev_str, \@res); + OREGON_humidity($bytes, $dev_str, \@res); + OREGON_pressure($bytes, $dev_str, \@res, OREGON_hi_nibble($bytes->[9]), 856); + OREGON_percentage_battery($bytes, $dev_str, \@res); + + return @res; +} + +# ----------------------------- +sub OREGON_rtgr328n_datetime { + my $type = shift; + my $longids = shift; my $bytes = shift; my $device = sprintf "%02x", $bytes->[3]; - my $dev_str = $type.$DOT.$device; + #my $dev_str = $type.$DOT.$device; + my $dev_str = $type; + if (OREGON_use_longid($longids,$type)) { + $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); + } + if (OREGON_hi_nibble($bytes->[2]) > 0) { + $dev_str .= $DOT.sprintf("%d", OREGON_hi_nibble($bytes->[2])); + } + my $time = ( - lo_nibble($bytes->[7]).hi_nibble($bytes->[6]). - lo_nibble($bytes->[6]).hi_nibble($bytes->[5]). - lo_nibble($bytes->[5]).hi_nibble($bytes->[4]) + OREGON_lo_nibble($bytes->[7]).OREGON_hi_nibble($bytes->[6]). + OREGON_lo_nibble($bytes->[6]).OREGON_hi_nibble($bytes->[5]). + OREGON_lo_nibble($bytes->[5]).OREGON_hi_nibble($bytes->[4]) ); my $day = [ 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun' ]->[($bytes->[9]&0x7)-1]; my $date = - 2000+(lo_nibble($bytes->[10]).hi_nibble($bytes->[9])). - sprintf("%02d",hi_nibble($bytes->[8])). - lo_nibble($bytes->[8]).hi_nibble($bytes->[7]); + 2000+(OREGON_lo_nibble($bytes->[10]).OREGON_hi_nibble($bytes->[9])). + sprintf("%02d",OREGON_hi_nibble($bytes->[8])). + OREGON_lo_nibble($bytes->[8]).OREGON_hi_nibble($bytes->[7]); #print STDERR "datetime: $date $time $day\n"; my @res = (); @@ -547,59 +621,95 @@ sub rtgr328n_datetime { # ----------------------------- -sub common_temp { +sub OREGON_common_temp { my $type = shift; + my $longids = shift; my $bytes = shift; my $device = sprintf "%02x", $bytes->[3]; - my $dev_str = $type.$DOT.$device; + #my $dev_str = $type.$DOT.$device; + my $dev_str = $type; + if (OREGON_use_longid($longids,$type)) { + $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); + } + if (OREGON_hi_nibble($bytes->[2]) > 0) { + $dev_str .= $DOT.sprintf("%d", OREGON_hi_nibble($bytes->[2])); + } + my @res = (); - temperature($bytes, $dev_str, \@res); - simple_battery($bytes, $dev_str, \@res); + OREGON_temperature($bytes, $dev_str, \@res); + OREGON_simple_battery($bytes, $dev_str, \@res); return @res; } # ----------------------------- -sub common_temphydro { +sub OREGON_common_temphydro { my $type = shift; + my $longids = shift; my $bytes = shift; my $device = sprintf "%02x", $bytes->[3]; - my $dev_str = $type.$DOT.$device; + #my $dev_str = $type.$DOT.$device; + my $dev_str = $type; + if (OREGON_use_longid($longids,$type)) { + $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); + } + if (OREGON_hi_nibble($bytes->[2]) > 0) { + $dev_str .= $DOT.sprintf("%d", OREGON_hi_nibble($bytes->[2])); + } + my @res = (); - temperature($bytes, $dev_str, \@res); - humidity($bytes, $dev_str, \@res); - simple_battery($bytes, $dev_str, \@res); + OREGON_temperature($bytes, $dev_str, \@res); + OREGON_humidity($bytes, $dev_str, \@res); + OREGON_simple_battery($bytes, $dev_str, \@res); return @res; } # ----------------------------- -sub common_temphydrobaro { +sub OREGON_common_temphydrobaro { my $type = shift; + my $longids = shift; my $bytes = shift; my $device = sprintf "%02x", $bytes->[3]; - my $dev_str = $type.$DOT.$device; + #my $dev_str = $type.$DOT.$device; + my $dev_str = $type; + if (OREGON_use_longid($longids,$type)) { + $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); + } + if (OREGON_hi_nibble($bytes->[2]) > 0) { + $dev_str .= $DOT.sprintf("%d", OREGON_hi_nibble($bytes->[2])); + } + my @res = (); - temperature($bytes, $dev_str, \@res); - humidity($bytes, $dev_str, \@res); - pressure($bytes, $dev_str, \@res, lo_nibble($bytes->[9])); - simple_battery($bytes, $dev_str, \@res); + OREGON_temperature($bytes, $dev_str, \@res); + OREGON_humidity($bytes, $dev_str, \@res); + OREGON_pressure($bytes, $dev_str, \@res, OREGON_lo_nibble($bytes->[9])); + OREGON_simple_battery($bytes, $dev_str, \@res); return @res; } # ----------------------------- -sub common_rain { +sub OREGON_common_rain { my $type = shift; + my $longids = shift; my $bytes = shift; my $device = sprintf "%02x", $bytes->[3]; - my $dev_str = $type.$DOT.$device; + #my $dev_str = $type.$DOT.$device; + my $dev_str = $type; + if (OREGON_use_longid($longids,$type)) { + $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); + } + if (OREGON_hi_nibble($bytes->[2]) > 0) { + $dev_str .= $DOT.sprintf("%d", OREGON_hi_nibble($bytes->[2])); + } + my @res = (); - my $rain = sprintf("%02x",$bytes->[5])*10 + hi_nibble($bytes->[4]); - my $train = lo_nibble($bytes->[8])*1000 + - sprintf("%02x", $bytes->[7])*10 + hi_nibble($bytes->[6]); - my $flip = lo_nibble($bytes->[6]); + my $rain = sprintf("%02x",$bytes->[5])*10 + OREGON_hi_nibble($bytes->[4]); + my $train = OREGON_lo_nibble($bytes->[8])*1000 + + sprintf("%02x", $bytes->[7])*10 + OREGON_hi_nibble($bytes->[6]); + my $flip = OREGON_lo_nibble($bytes->[6]); #print STDERR "$dev_str rain = $rain, total = $train, flip = $flip\n"; push @res, { device => $dev_str, @@ -619,14 +729,15 @@ sub common_rain { current => $flip, units => 'flips', }; - simple_battery($bytes, $dev_str, \@res); + OREGON_simple_battery($bytes, $dev_str, \@res); return @res; } # ----------------------------- # under development............ -sub rain_PCR800 { +sub OREGON_rain_PCR800 { my $type = shift; + my $longids = shift; my $bytes = shift; # @@ -636,14 +747,22 @@ sub rain_PCR800 { } my $device = sprintf "%02x", $bytes->[3]; - my $dev_str = $type.$DOT.$device; + #my $dev_str = $type.$DOT.$device; + my $dev_str = $type; + if (OREGON_use_longid($longids,$type)) { + $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); + } + if (OREGON_hi_nibble($bytes->[2]) > 0) { + $dev_str .= $DOT.sprintf("%d", OREGON_hi_nibble($bytes->[2])); + } + my @res = (); - my $rain = lo_nibble($bytes->[6])*10 + sprintf("%02x",$bytes->[5])/10 + hi_nibble($bytes->[4])/100; + my $rain = OREGON_lo_nibble($bytes->[6])*10 + sprintf("%02x",$bytes->[5])/10 + OREGON_hi_nibble($bytes->[4])/100; $rain *= 25.4; # convert from inch to mm - my $train = lo_nibble($bytes->[9])*100 + sprintf("%02x",$bytes->[8]) + - sprintf("%02x",$bytes->[7])/100 + hi_nibble($bytes->[6])/1000; + my $train = OREGON_lo_nibble($bytes->[9])*100 + sprintf("%02x",$bytes->[8]) + + sprintf("%02x",$bytes->[7])/100 + OREGON_hi_nibble($bytes->[6])/1000; $train *= 25.4; # convert from inch to mm push @res, { @@ -665,57 +784,57 @@ sub rain_PCR800 { # current => $hexline, # units => 'hex', # }; - simple_battery($bytes, $dev_str, \@res); + OREGON_simple_battery($bytes, $dev_str, \@res); return @res; } # ----------------------------- # CHECKSUM METHODS -sub checksum1 { - my $c = hi_nibble($_[0]->[6]) + (lo_nibble($_[0]->[7]) << 4); - my $s = ( ( nibble_sum(6, $_[0]) + lo_nibble($_[0]->[6]) - 0xa) & 0xff); +sub OREGON_checksum1 { + my $c = OREGON_hi_nibble($_[0]->[6]) + (OREGON_lo_nibble($_[0]->[7]) << 4); + my $s = ( ( OREGON_nibble_sum(6, $_[0]) + OREGON_lo_nibble($_[0]->[6]) - 0xa) & 0xff); $s == $c; } -sub checksum2 { - $_[0]->[8] == ((nibble_sum(8,$_[0]) - 0xa) & 0xff); +sub OREGON_checksum2 { + $_[0]->[8] == ((OREGON_nibble_sum(8,$_[0]) - 0xa) & 0xff); } -sub checksum3 { - $_[0]->[11] == ((nibble_sum(11,$_[0]) - 0xa) & 0xff); +sub OREGON_checksum3 { + $_[0]->[11] == ((OREGON_nibble_sum(11,$_[0]) - 0xa) & 0xff); } -sub checksum4 { - $_[0]->[9] == ((nibble_sum(9,$_[0]) - 0xa) & 0xff); +sub OREGON_checksum4 { + $_[0]->[9] == ((OREGON_nibble_sum(9,$_[0]) - 0xa) & 0xff); } -sub checksum5 { - $_[0]->[10] == ((nibble_sum(10,$_[0]) - 0xa) & 0xff); +sub OREGON_checksum5 { + $_[0]->[10] == ((OREGON_nibble_sum(10,$_[0]) - 0xa) & 0xff); } -sub checksum6 { - hi_nibble($_[0]->[8]) + (lo_nibble($_[0]->[9]) << 4) == - ((nibble_sum(8,$_[0]) - 0xa) & 0xff); +sub OREGON_checksum6 { + OREGON_hi_nibble($_[0]->[8]) + (OREGON_lo_nibble($_[0]->[9]) << 4) == + ((OREGON_nibble_sum(8,$_[0]) - 0xa) & 0xff); } -sub checksum6plus { - my $c = hi_nibble($_[0]->[8]) + (lo_nibble($_[0]->[9]) << 4); - my $s = (((nibble_sum(8,$_[0]) + (($_[0]->[8] & 0x0f) - 0x00)) - 0xa) & 0xff); +sub OREGON_checksum6plus { + my $c = OREGON_hi_nibble($_[0]->[8]) + (OREGON_lo_nibble($_[0]->[9]) << 4); + my $s = (((OREGON_nibble_sum(8,$_[0]) + (($_[0]->[8] & 0x0f) - 0x00)) - 0xa) & 0xff); $s == $c; } -sub checksum7 { - $_[0]->[7] == ((nibble_sum(7,$_[0]) - 0xa) & 0xff); +sub OREGON_checksum7 { + $_[0]->[7] == ((OREGON_nibble_sum(7,$_[0]) - 0xa) & 0xff); } -sub checksum8 { - my $c = hi_nibble($_[0]->[9]) + (lo_nibble($_[0]->[10]) << 4); - my $s = ( ( nibble_sum(9, $_[0]) - 0xa) & 0xff); +sub OREGON_checksum8 { + my $c = OREGON_hi_nibble($_[0]->[9]) + (OREGON_lo_nibble($_[0]->[10]) << 4); + my $s = ( ( OREGON_nibble_sum(9, $_[0]) - 0xa) & 0xff); $s == $c; } -sub raw { +sub OREGON_raw { $_[0]->{raw} or $_[0]->{raw} = pack 'H*', $_[0]->{hex}; } @@ -724,7 +843,13 @@ sub raw { sub OREGON_Parse($$) { - my ($hash, $msg) = @_; + my ($iohash, $msg) = @_; + + my $longids = 1; + if (defined($attr{$iohash->{NAME}}{longids})) { + $longids = $attr{$iohash->{NAME}}{longids}; + #Log 1,"0: attr longids = $longids"; + } my $time = time(); if ($time_old ==0) { @@ -755,7 +880,7 @@ OREGON_Parse($$) my $sensor_id = unpack('H*', chr $type1) . unpack('H*', chr $type2); #Log 1, "OREGON: sensor_id=$sensor_id"; - my $key = type_length_key($type, $bits); + my $key = OREGON_type_length_key($type, $bits); my $rec = $types{$key} || $types{$key&0xfffff}; unless ($rec) { @@ -785,7 +910,7 @@ OREGON_Parse($$) Log 4, "OREGON: sensor_id=$sensor_id (bits=$bits)\n"; return "OREGON: Error: Unknown function=$method. Please define it in file $0"; } else { - @res = $method->($rec->{part}, \@rfxcom_data_array); + @res = $method->($rec->{part}, $longids, \@rfxcom_data_array); } # get device name from first entry @@ -800,6 +925,7 @@ OREGON_Parse($$) # Use $def->{NAME}, because the device may be renamed: my $name = $def->{NAME}; #Log 1, "name=$new_name"; + return "" if(IsIgnored($name)); my $n = 0; my $tm = TimeNow(); @@ -812,7 +938,7 @@ OREGON_Parse($$) #printf "%s\t",$i->{device}; if ($i->{type} eq "temp") { #printf "Temperatur %2.1f %s ; ",$i->{current},$i->{units}; - $val .= "T: ".$i->{current}." "; + $val .= "T: ".$i->{current}." "; $sensor = "temperature"; $def->{READINGS}{$sensor}{TIME} = $tm; @@ -821,7 +947,7 @@ OREGON_Parse($$) } elsif ($i->{type} eq "humidity") { #printf "Luftfeuchtigkeit %d%s, %s ;",$i->{current},$i->{units},$i->{string}; - $val .= "H: ".$i->{current}." "; + $val .= "H: ".$i->{current}." "; $sensor = "humidity"; $def->{READINGS}{$sensor}{TIME} = $tm; @@ -830,8 +956,8 @@ OREGON_Parse($$) } elsif ($i->{type} eq "battery") { #printf "Batterie %d%s; ",$i->{current},$i->{units}; - # do not add it due to problems with hms.gplot - #$val .= "Bat: ".$i->{current}." "; + my @words = split(/\s+/,$i->{current}); + $val .= "BAT: ".$words[0]." "; #use only first word $sensor = "battery"; $def->{READINGS}{$sensor}{TIME} = $tm; diff --git a/FHEM/42_RFXMETER.pm b/FHEM/42_RFXMETER.pm index 878a205da..18611910c 100755 --- a/FHEM/42_RFXMETER.pm +++ b/FHEM/42_RFXMETER.pm @@ -38,7 +38,7 @@ RFXMETER_Initialize($) $hash->{DefFn} = "RFXMETER_Define"; $hash->{UndefFn} = "RFXMETER_Undef"; $hash->{ParseFn} = "RFXMETER_Parse"; - $hash->{AttrList} = "IODev do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; + $hash->{AttrList} = "IODev ignore:1,0 do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; } @@ -157,6 +157,7 @@ sub parse_RFXmeter { # Use $def->{NAME}, because the device may be renamed: my $name = $def->{NAME}; #Log 1, "name=$new_name"; + return "" if(IsIgnored($name)); my $n = 0; my $tm = TimeNow(); diff --git a/FHEM/43_RFXX10REC.pm b/FHEM/43_RFXX10REC.pm index 6e0cd0ba2..09c814656 100755 --- a/FHEM/43_RFXX10REC.pm +++ b/FHEM/43_RFXX10REC.pm @@ -67,7 +67,7 @@ RFXX10REC_Initialize($) $hash->{DefFn} = "RFXX10REC_Define"; $hash->{UndefFn} = "RFXX10REC_Undef"; $hash->{ParseFn} = "RFXX10REC_Parse"; - $hash->{AttrList} = "IODev do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; + $hash->{AttrList} = "IODev ignore:1,0 do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; #Log 1, "RFXX10REC: Initialize"; } @@ -232,6 +232,7 @@ sub RFXX10REC_parse_X10 { # Use $def->{NAME}, because the device may be renamed: my $name = $def->{NAME}; + return "" if(IsIgnored($name)); Log 1, "RFXX10REC: $name devn=$device_name first=$firstdevice type=$command, cmd=$hexdata" if ($RFXX10REC_debug == 1); @@ -370,6 +371,7 @@ sub RFXX10REC_parse_X10Sec { # Use $def->{NAME}, because the device may be renamed: my $name = $def->{NAME}; #Log 1, "name=$new_name"; + return "" if(IsIgnored($name)); Log 1, "RFXX10REC: $name devn=$device_name first=$firstdevice type=$command, delay=$delay, batt=$battery cmd=$hexdata" if ($RFXX10REC_debug == 1); diff --git a/FHEM/45_TRX.pm b/FHEM/45_TRX.pm index 82f3cbc76..b4bdbfb96 100755 --- a/FHEM/45_TRX.pm +++ b/FHEM/45_TRX.pm @@ -68,7 +68,7 @@ TRX_Initialize($) $hash->{GetFn} = "TRX_Get"; $hash->{SetFn} = "TRX_Set"; $hash->{StateFn} = "TRX_SetState"; - $hash->{AttrList}= "do_not_notify:1,0 dummy:1,0 do_not_init:1:0 addvaltrigger:1:0 longids loglevel:0,1,2,3,4,5,6"; + $hash->{AttrList}= "do_not_notify:1,0 dummy:1,0 addvaltrigger:1:0 longids loglevel:0,1,2,3,4,5,6"; $hash->{ShutdownFn} = "TRX_Shutdown"; } diff --git a/FHEM/46_TRX_LIGHT.pm b/FHEM/46_TRX_LIGHT.pm index 3a4fb6029..08c3aafca 100755 --- a/FHEM/46_TRX_LIGHT.pm +++ b/FHEM/46_TRX_LIGHT.pm @@ -95,7 +95,7 @@ TRX_LIGHT_Initialize($) $hash->{DefFn} = "TRX_LIGHT_Define"; $hash->{UndefFn} = "TRX_LIGHT_Undef"; $hash->{ParseFn} = "TRX_LIGHT_Parse"; - $hash->{AttrList} = "IODev do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; + $hash->{AttrList} = "IODev ignore:1,0 do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; } @@ -394,6 +394,7 @@ sub TRX_LIGHT_parse_X10 { # Use $def->{NAME}, because the device may be renamed: my $name = $def->{NAME}; + return "" if(IsIgnored($name)); Log 1, "TRX_LIGHT: $name devn=$device_name first=$firstdevice command=$command, cmd=$hexdata" if ($TRX_LIGHT_debug == 1); diff --git a/FHEM/46_TRX_SECURITY.pm b/FHEM/46_TRX_SECURITY.pm index c2c44ae08..0da54ca7c 100755 --- a/FHEM/46_TRX_SECURITY.pm +++ b/FHEM/46_TRX_SECURITY.pm @@ -51,7 +51,7 @@ TRX_SECURITY_Initialize($) $hash->{DefFn} = "TRX_SECURITY_Define"; $hash->{UndefFn} = "TRX_SECURITY_Undef"; $hash->{ParseFn} = "TRX_SECURITY_Parse"; - $hash->{AttrList} = "IODev do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; + $hash->{AttrList} = "IODev ignore:1,0 do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; } @@ -188,6 +188,7 @@ sub TRX_SECURITY_parse_X10Sec { # Use $def->{NAME}, because the device may be renamed: my $name = $def->{NAME}; + return "" if(IsIgnored($name)); my $data = $bytes->[6]; diff --git a/FHEM/46_TRX_WEATHER.pm b/FHEM/46_TRX_WEATHER.pm index 49f012bea..ed41fed2b 100755 --- a/FHEM/46_TRX_WEATHER.pm +++ b/FHEM/46_TRX_WEATHER.pm @@ -35,7 +35,7 @@ # wind sensors (WIND): # * "WTGR800_A" is WTGR800 # * "WGR800_A" is WGR800 -# * "WGR918_A" is STR918, WGR918 +# * "WGR918" is STR918, WGR918 # * "TFA_WIND" is TFA # * "WDS500" is UPM WDS500 # @@ -90,7 +90,7 @@ TRX_WEATHER_Initialize($) $hash->{DefFn} = "TRX_WEATHER_Define"; $hash->{UndefFn} = "TRX_WEATHER_Undef"; $hash->{ParseFn} = "TRX_WEATHER_Parse"; - $hash->{AttrList} = "IODev do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; + $hash->{AttrList} = "IODev ignore:1,0 do_not_notify:1,0 loglevel:0,1,2,3,4,5,6"; } @@ -130,19 +130,19 @@ TRX_WEATHER_Undef($$) my %types = ( # TEMP - 0x5008 => { part => 'TEMP', method => \&common_temp, }, + 0x5008 => { part => 'TEMP', method => \&TRX_WEATHER_common_temp, }, # HYDRO - 0x5108 => { part => 'HYDRO', method => \&common_hydro, }, + 0x5108 => { part => 'HYDRO', method => \&TRX_WEATHER_common_hydro, }, # TEMP HYDRO - 0x520a => { part => 'TEMPHYDRO', method => \&common_temphydro, }, + 0x520a => { part => 'TEMPHYDRO', method => \&TRX_WEATHER_common_temphydro, }, # TEMP HYDRO BARO - 0x540d => { part => 'TEMPHYDROBARO', method => \&common_temphydrobaro, }, + 0x540d => { part => 'TEMPHYDROBARO', method => \&TRX_WEATHER_common_temphydrobaro, }, # RAIN - 0x550b => { part => 'RAIN', method => \&common_rain, }, + 0x550b => { part => 'RAIN', method => \&TRX_WEATHER_common_rain, }, # WIND - 0x5610 => { part => 'WIND', method => \&common_anemometer, }, + 0x5610 => { part => 'WIND', method => \&TRX_WEATHER_common_anemometer, }, # WEIGHT - 0x5D08 => { part => 'WEIGHT', method => \&common_weight, }, + 0x5D08 => { part => 'WEIGHT', method => \&TRX_WEATHER_common_weight, }, ); # -------------------------------------------- @@ -158,7 +158,7 @@ my @TRX_WEATHER_winddir_name=("N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW # - some parameter like "parent" and others are removed # - @res array return the values directly (no usage of xPL::Message) -sub temperature { +sub TRX_WEATHER_temperature { my ($bytes, $dev, $res, $off) = @_; my $temp = @@ -176,7 +176,7 @@ sub temperature { } -sub humidity { +sub TRX_WEATHER_humidity { my ($bytes, $dev, $res, $off) = @_; my $hum = $bytes->[$off]; my $hum_str = ['dry', 'comfortable', 'normal', 'wet']->[$bytes->[$off+1]]; @@ -189,7 +189,7 @@ sub humidity { } } -sub pressure { +sub TRX_WEATHER_pressure { my ($bytes, $dev, $res, $off) = @_; #my $offset = 795 unless ($offset); @@ -209,7 +209,7 @@ sub pressure { }; } -sub simple_battery { +sub TRX_WEATHER_simple_battery { my ($bytes, $dev, $res, $off) = @_; my $battery; @@ -228,7 +228,7 @@ sub simple_battery { }; } -sub battery { +sub TRX_WEATHER_battery { my ($bytes, $dev, $res, $off) = @_; my $battery; @@ -250,7 +250,7 @@ sub battery { # Test if to use longid for device type -sub use_longid { +sub TRX_WEATHER_use_longid { my ($longids,$dev_type) = @_; return 0 if ($longids eq ""); @@ -266,7 +266,7 @@ sub use_longid { # ------------------------------------------------------------ # -sub common_anemometer { +sub TRX_WEATHER_common_anemometer { my $type = shift; my $longids = shift; my $bytes = shift; @@ -278,8 +278,8 @@ sub common_anemometer { my %devname = ( # HEXSTRING => "NAME" 0x01 => "WTGR800_A", - 0x02 => "WGR800_A", - 0x03 => "WGR918_A", + 0x02 => "WGR800", + 0x03 => "WGR918", 0x04 => "TFA_WIND", 0x05 => "WDS500", # UPM WDS500 ); @@ -296,7 +296,7 @@ sub common_anemometer { #Log 1,"seqnbr=$seqnbr"; my $dev_str = $dev_type; - if (use_longid($longids,$dev_type)) { + if (TRX_WEATHER_use_longid($longids,$dev_type)) { $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); } if ($bytes->[4] > 0) { @@ -331,14 +331,14 @@ sub common_anemometer { units => 'degrees', }; - simple_battery($bytes, $dev_str, \@res, 15); + TRX_WEATHER_simple_battery($bytes, $dev_str, \@res, 15); return @res; } # ----------------------------- -sub common_temp { +sub TRX_WEATHER_common_temp { my $type = shift; my $longids = shift; my $bytes = shift; @@ -369,7 +369,7 @@ sub common_temp { #Log 1,"seqnbr=$seqnbr"; my $dev_str = $dev_type; - if (use_longid($longids,$dev_type)) { + if (TRX_WEATHER_use_longid($longids,$dev_type)) { $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); } if ($bytes->[4] > 0) { @@ -385,13 +385,13 @@ sub common_temp { push @res, { device => $dev_str, type => 'hexline', current => $hexline, units => 'hex', }; } - temperature($bytes, $dev_str, \@res, 5); - simple_battery($bytes, $dev_str, \@res, 7); + TRX_WEATHER_temperature($bytes, $dev_str, \@res, 5); + TRX_WEATHER_simple_battery($bytes, $dev_str, \@res, 7); return @res; } # ----------------------------- -sub common_hydro { +sub TRX_WEATHER_common_hydro { my $type = shift; my $longids = shift; my $bytes = shift; @@ -414,7 +414,7 @@ sub common_hydro { } my $dev_str = $dev_type; - if (use_longid($longids,$dev_type)) { + if (TRX_WEATHER_use_longid($longids,$dev_type)) { $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); } if ($bytes->[4] > 0) { @@ -430,13 +430,13 @@ sub common_hydro { push @res, { device => $dev_str, type => 'hexline', current => $hexline, units => 'hex', }; } - humidity($bytes, $dev_str, \@res, 5); - simple_battery($bytes, $dev_str, \@res, 7); + TRX_WEATHER_humidity($bytes, $dev_str, \@res, 5); + TRX_WEATHER_simple_battery($bytes, $dev_str, \@res, 7); return @res; } # ----------------------------- -sub common_temphydro { +sub TRX_WEATHER_common_temphydro { my $type = shift; my $longids = shift; my $bytes = shift; @@ -466,7 +466,7 @@ sub common_temphydro { } my $dev_str = $dev_type; - if (use_longid($longids,$dev_type)) { + if (TRX_WEATHER_use_longid($longids,$dev_type)) { $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); } if ($bytes->[4] > 0) { @@ -481,14 +481,14 @@ sub common_temphydro { push @res, { device => $dev_str, type => 'hexline', current => $hexline, units => 'hex', }; } - temperature($bytes, $dev_str, \@res, 5); - humidity($bytes, $dev_str, \@res, 7); - simple_battery($bytes, $dev_str, \@res, 9); + TRX_WEATHER_temperature($bytes, $dev_str, \@res, 5); + TRX_WEATHER_humidity($bytes, $dev_str, \@res, 7); + TRX_WEATHER_simple_battery($bytes, $dev_str, \@res, 9); return @res; } # ----------------------------- -sub common_temphydrobaro { +sub TRX_WEATHER_common_temphydrobaro { my $type = shift; my $longids = shift; my $bytes = shift; @@ -512,7 +512,7 @@ sub common_temphydrobaro { } my $dev_str = $dev_type; - if (use_longid($longids,$dev_type)) { + if (TRX_WEATHER_use_longid($longids,$dev_type)) { $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); } if ($bytes->[4] > 0) { @@ -528,15 +528,15 @@ sub common_temphydrobaro { push @res, { device => $dev_str, type => 'hexline', current => $hexline, units => 'hex', }; } - temperature($bytes, $dev_str, \@res, 5); - humidity($bytes, $dev_str, \@res, 7); - pressure($bytes, $dev_str, \@res, 9); - simple_battery($bytes, $dev_str, \@res, 12); + TRX_WEATHER_temperature($bytes, $dev_str, \@res, 5); + TRX_WEATHER_humidity($bytes, $dev_str, \@res, 7); + TRX_WEATHER_pressure($bytes, $dev_str, \@res, 9); + TRX_WEATHER_simple_battery($bytes, $dev_str, \@res, 12); return @res; } # ----------------------------- -sub common_rain { +sub TRX_WEATHER_common_rain { my $type = shift; my $longids = shift; my $bytes = shift; @@ -563,7 +563,7 @@ sub common_rain { } my $dev_str = $dev_type; - if (use_longid($longids,$dev_type)) { + if (TRX_WEATHER_use_longid($longids,$dev_type)) { $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); } if ($bytes->[4] > 0) { @@ -604,13 +604,13 @@ sub common_rain { units => 'mm', }; - battery($bytes, $dev_str, \@res, 10); + TRX_WEATHER_battery($bytes, $dev_str, \@res, 10); return @res; } # ------------------------------------------------------------ # -sub common_weight { +sub TRX_WEATHER_common_weight { my $type = shift; my $longids = shift; my $bytes = shift; @@ -637,7 +637,7 @@ sub common_weight { #Log 1,"seqnbr=$seqnbr"; my $dev_str = $dev_type; - if (use_longid($longids,$dev_type)) { + if (TRX_WEATHER_use_longid($longids,$dev_type)) { $dev_str .= $DOT.sprintf("%02x", $bytes->[3]); } if ($bytes->[4] > 0) { @@ -661,7 +661,7 @@ sub common_weight { units => 'kg', }; - #simple_battery($bytes, $dev_str, \@res, 7); + #TRX_WEATHER_simple_battery($bytes, $dev_str, \@res, 7); return @res; } @@ -754,7 +754,7 @@ TRX_WEATHER_Parse($$) } # Use $def->{NAME}, because the device may be renamed: my $name = $def->{NAME}; - #Log 1, "name=$new_name"; + return "" if(IsIgnored($name)); my $n = 0; my $tm = TimeNow(); @@ -787,7 +787,7 @@ TRX_WEATHER_Parse($$) #printf "Batterie %d%s; ",$i->{current},$i->{units}; my $tmp_battery = $i->{current}; my @words = split(/\s+/,$i->{current}); - $val .= "BAT: ".$words[0]." "; #user only first word + $val .= "BAT: ".$words[0]." "; #use only first word $sensor = "battery"; $def->{READINGS}{$sensor}{TIME} = $tm; diff --git a/docs/commandref.html b/docs/commandref.html index f0e0bfb80..1dac32b01 100644 --- a/docs/commandref.html +++ b/docs/commandref.html @@ -6043,7 +6043,13 @@ The one byte hex string is generated by the Oregon sensor when is it powered on. Get
+# Do not use any long IDs for any devices: +attr RFXCOMUSB longids 0 +# Use any long IDs for all devices (this is default): +attr RFXCOMUSB longids 1 +# Use longids for BTHR918N devices. +# Will generate devices names like BTHR918N_f3. +attr RFXCOMUSB longids BTHR918N +# Use longids for TX3_T and TX3_H devices. +# Will generate devices names like TX3_T_07, TX3_T_01 ,TX3_H_07. +attr RFXCOMUSB longids TX3_T,TX3_H+
+# Do not use any long IDs for any devices (this is default): +attr RFXCOMUSB longids 0 +# Use long IDs for all devices: +attr RFXCOMUSB longids 1 # Use longids for BTHR918N devices. # Will generate devices names like BTHR918N_f3. attr RFXTRXUSB longids BTHR918N @@ -7427,6 +7471,13 @@ attr RFXTRXUSB longids TX3_T,TX3_HGet