mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-28 02:44:53 +00:00
add ignore attribute for RFXCOM and TRX. Add longids to RFXCOM. Changes on RFXCOM to be compatible with TRX. Changes to commandref to reflect the changes
git-svn-id: https://svn.fhem.de/fhem/trunk@1534 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
050a38f86c
commit
77e0c86a3b
@ -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";
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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";
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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];
|
||||
|
||||
|
@ -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;
|
||||
|
@ -6043,7 +6043,13 @@ The one byte hex string is generated by the Oregon sensor when is it powered on.
|
||||
|
||||
<a name="OREGONget"></a>
|
||||
<b>Get</b> <ul>N/A</ul><br>
|
||||
<br>
|
||||
|
||||
<a name="OREGONattr"></a>
|
||||
<b>Attributes</b>
|
||||
<ul>
|
||||
<li><a href="#ignore">ignore</a></li><br>
|
||||
<li><a href="#do_not_notify">do_not_notify</a></li><br>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<a name="OWFS"></a>
|
||||
@ -6354,6 +6360,25 @@ These receivers supports many protocols like Oregon Scientific weather sensors,
|
||||
</ul>
|
||||
<br>
|
||||
</table>
|
||||
<ul>
|
||||
<li><a href="#attrdummy">dummy</a></li><br>
|
||||
<li>longids<br>
|
||||
Comma separated list of device-types for RFXCOM that should be handled using long IDs. This additional ID is a one byte hex string and is generated by the Oregon sensor when is it powered on. The value seems to be randomly generated. This has the advantage that you may use more than one Oregon sensor of the same type even if it has no switch to set a sensor id. For example the author uses two BTHR918N sensors at the same time. All have different deviceids. The drawback is that the deviceid changes after changing batteries. All devices listed as longids will get an additional one byte hex string appended to the device name.<br>
|
||||
Default is to use long IDs for all devices.
|
||||
<br><br>
|
||||
Examples:<PRE>
|
||||
# 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</PRE>
|
||||
</li><br>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<a name="RFXMETER"></a>
|
||||
@ -6390,6 +6415,13 @@ These receivers supports many protocols like Oregon Scientific weather sensors,
|
||||
|
||||
<a name="RFXMETERget"></a>
|
||||
<b>Get</b> <ul>N/A</ul><br>
|
||||
|
||||
<a name="RFXMETERattr"></a>
|
||||
<b>Attributes</b>
|
||||
<ul>
|
||||
<li><a href="#ignore">ignore</a></li><br>
|
||||
<li><a href="#do_not_notify">do_not_notify</a></li><br>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<a name="RFXX10REC"></a>
|
||||
@ -6460,6 +6492,13 @@ These receivers supports many protocols like Oregon Scientific weather sensors,
|
||||
|
||||
<a name="RFXX10RECget"></a>
|
||||
<b>Get</b> <ul>N/A</ul><br>
|
||||
|
||||
<a name="RFXX10RECattr"></a>
|
||||
<b>Attributes</b>
|
||||
<ul>
|
||||
<li><a href="#ignore">ignore</a></li><br>
|
||||
<li><a href="#do_not_notify">do_not_notify</a></li><br>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<a name="WS2000"></a>
|
||||
@ -7352,9 +7391,14 @@ KlikAanKlikUit, NEXA, CHACON, HomeEasy UK.</li>
|
||||
<ul>
|
||||
<li><a href="#attrdummy">dummy</a></li><br>
|
||||
<li>longids<br>
|
||||
Comma separated list of device-types for TRX_WEATHER that should be handled using long IDs. This additional ID is a one byte hex string and is generated by the Oregon sensor when is it powered on. The value seems to be randomly generated. This has the advantage that you may use more than one Oregon sensor of the same type even if it has no switch to set a sensor id. For example the author uses two BTHR918N sensors at the same time. All have different deviceids. The drawback is that the deviceid changes after changing batteries. All devices listed as longids will get an additional one byte hex string appended to the device name.
|
||||
Comma separated list of device-types for TRX_WEATHER that should be handled using long IDs. This additional ID is a one byte hex string and is generated by the Oregon sensor when is it powered on. The value seems to be randomly generated. This has the advantage that you may use more than one Oregon sensor of the same type even if it has no switch to set a sensor id. For example the author uses two BTHR918N sensors at the same time. All have different deviceids. The drawback is that the deviceid changes after changing batteries. All devices listed as longids will get an additional one byte hex string appended to the device name.<br>
|
||||
Default is to use no long IDs.
|
||||
<br><br>
|
||||
Examples:<PRE>
|
||||
# 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_H</PRE>
|
||||
|
||||
<a name="TRX_SECURITYget"></a>
|
||||
<b>Get</b> <ul>N/A</ul><br>
|
||||
|
||||
<a name="TRX_SECURITYattr"></a>
|
||||
<b>Attributes</b>
|
||||
<ul>
|
||||
<li><a href="#ignore">ignore</a></li><br>
|
||||
<li><a href="#do_not_notify">do_not_notify</a></li><br>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<a name="TRX_LIGHT"></a>
|
||||
@ -7513,6 +7564,14 @@ KlikAanKlikUit, NEXA, CHACON, HomeEasy UK. <br> You need to define an RFXtrx433
|
||||
|
||||
<a name="TRX_LIGHTget"></a>
|
||||
<b>Get</b> <ul>N/A</ul><br>
|
||||
|
||||
<a name="TRX_LIGHTattr"></a>
|
||||
<b>Attributes</b>
|
||||
<ul>
|
||||
<li><a href="#ignore">ignore</a></li><br>
|
||||
<li><a href="#do_not_notify">do_not_notify</a></li><br>
|
||||
</ul>
|
||||
|
||||
</ul>
|
||||
|
||||
<a name="TRX_WEATHER"></a>
|
||||
@ -7548,8 +7607,8 @@ KlikAanKlikUit, NEXA, CHACON, HomeEasy UK. <br> You need to define an RFXtrx433
|
||||
"PCR800",<br>
|
||||
"TFA_RAIN" (for TFA rain sensor),<br>
|
||||
"WTGR800_A" (for wind sensor of WTGR800),<br>
|
||||
"WGR800_A" (for wind sensor of WGR800),<br>
|
||||
"WGR918_A" (for wind sensor of STR918 and WGR918),<br>
|
||||
"WGR800" (for wind sensor of WGR800),<br>
|
||||
"WGR918" (for wind sensor of STR918 and WGR918),<br>
|
||||
"TFA_WIND" (for TFA wind sensor)
|
||||
<br>
|
||||
<br><br>
|
||||
@ -7561,11 +7620,18 @@ KlikAanKlikUit, NEXA, CHACON, HomeEasy UK. <br> You need to define an RFXtrx433
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
<a name="OREGONset"></a>
|
||||
<a name="TRX_WEATHERset"></a>
|
||||
<b>Set</b> <ul>N/A</ul><br>
|
||||
|
||||
<a name="OREGONget"></a>
|
||||
<a name="TRX_WEATHERget"></a>
|
||||
<b>Get</b> <ul>N/A</ul><br>
|
||||
|
||||
<a name="TRX_WEATHERattr"></a>
|
||||
<b>Attributes</b>
|
||||
<ul>
|
||||
<li><a href="#ignore">ignore</a></li><br>
|
||||
<li><a href="#do_not_notify">do_not_notify</a></li><br>
|
||||
</ul>
|
||||
<br>
|
||||
</ul>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user