2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-16 04:36:02 +00:00

41_OREGON.pm : Included patches and fixes ^

git-svn-id: https://svn.fhem.de/fhem/trunk@12928 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
sidey79 2017-01-02 00:23:46 +00:00
parent e432f24f26
commit 67809f9330
3 changed files with 189 additions and 113 deletions

View File

@ -1,5 +1,10 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
- feature: 41_OREGON: support event-min-interval, event-on-change-reading,
etc. Changed module to new log function
added support for THWR800 and RTHN318 sensors
- bugfix: 41_OREGON: fixed return type to prevent massive logmessages
fixed THN132N message length
- feature: 71_YAMAHA_AVR: support for dsp/straight command/reading for
DSP-Z based models (thanks to dev0) and RX-Vx67 series
- feature: 10_SOMFY: new RTS commands 0x9 und 0xA (set wind_sun_9/wind_only_a)

View File

@ -1,5 +1,6 @@
#################################################################################
# 41_OREGON.pm
# $Id$
#
# Module for FHEM to decode Oregon sensor messages
#
# derived from 18_CUL-HOERMANN.pm
@ -12,7 +13,8 @@
# and highly recommend it.
#
# (c) 2010-2014 Copyright: Willi Herzig (Willi.Herzig@gmail.com)
#
# modified & fixes Ralf9 2015-2016
# fixes Sidey79 2016
# This script is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@ -38,7 +40,7 @@
# 4: log unknown protocols
# 5: log decoding hexlines for debugging
#
# $Id$
package main;
use strict;
@ -55,8 +57,8 @@ OREGON_Initialize($)
$hash->{DefFn} = "OREGON_Define";
$hash->{UndefFn} = "OREGON_Undef";
$hash->{ParseFn} = "OREGON_Parse";
$hash->{AttrList} = "IODev ignore:1,0 do_not_notify:1,0 loglevel:0,1,2,3,4,5,6";
$hash->{AttrList} = "IODev ignore:0,1 do_not_notify:1,0 showtime:1,0"
." $readingFnAttributes";
}
#####################################
@ -125,29 +127,30 @@ sub OREGON_type_length_key {
my %types =
(
# THGR810
# THGR810 v3
OREGON_type_length_key(0xfa28, 80) =>
{
part => 'THGR810', checksum => \&OREGON_checksum2, method => \&OREGON_common_temphydro,
},
# WTGR800 Temp hydro
# WTGR800 Temp hydro v3
OREGON_type_length_key(0xfab8, 80) =>
{
part => 'WTGR800_T', checksum => \&OREGON_checksum2, method => \&OREGON_alt_temphydro,
},
# WTGR800 Anenometer
# WTGR800 Anenometer v3
OREGON_type_length_key(0x1a99, 88) =>
{
part => 'WTGR800_A', checksum => \&OREGON_checksum4, method => \&OREGON_wtgr800_anemometer,
},
#
# WGR800 v3
OREGON_type_length_key(0x1a89, 88) =>
{
part => 'WGR800', checksum => \&OREGON_checksum4, method => \&OREGON_wtgr800_anemometer,
},
# UVN800 v3
OREGON_type_length_key(0xda78, 72) =>
{
part => 'UVN800', checksun => \&OREGON_checksum7, method => \&OREGON_uvn800,
part => 'UVN800', checksum => \&OREGON_checksum7, method => \&OREGON_uvn800,
},
OREGON_type_length_key(0xea7c, 120) =>
{
@ -157,8 +160,8 @@ my %types =
{
part => 'THWR288A', checksum => \&OREGON_checksum1, method => \&OREGON_common_temp,
},
#
OREGON_type_length_key(0xea4c, 68) =>
# THN132N
OREGON_type_length_key(0xea4c, 64) =>
{
part => 'THN132N', checksum => \&OREGON_checksum1, method => \&OREGON_common_temp,
},
@ -185,10 +188,10 @@ my %types =
# BTHR918
OREGON_type_length_key(0x5a5d, 88) =>
{
part => 'BTHR918', checksum => \&OREGON_checksum5, method => \&OREGON_common_temphydrobaro,
part => 'BTHR918', checksum => \&OREGON_checksum5plus, method => \&OREGON_common_temphydrobaro,
},
# BTHR918N, BTHR968
OREGON_type_length_key(0x5a6d, 96) =>
OREGON_type_length_key(0x5a6d, 88) =>
{
part => 'BTHR918N', checksum => \&OREGON_checksum5, method => \&OREGON_alt_temphydrobaro,
},
@ -197,20 +200,11 @@ my %types =
{
part => 'WGR918', checksum => \&OREGON_checksum4, method => \&OREGON_wgr918_anemometer,
},
#
OREGON_type_length_key(0x3a0d, 88) =>
{
part => 'WGR918', checksum => \&OREGON_checksum4, method => \&OREGON_wgr918_anemometer,
},
# RGR126, RGR682, RGR918:
OREGON_type_length_key(0x2a1d, 80) =>
{
part => 'RGR918', checksum => \&OREGON_checksum6plus, method => \&OREGON_common_rain,
},
OREGON_type_length_key(0x2a1d, 84) =>
{
part => 'RGR918', checksum => \&OREGON_checksum6plus, method => \&OREGON_common_rain,
},
#
OREGON_type_length_key(0x0a4d, 80) =>
{
@ -231,11 +225,20 @@ my %types =
{
part => 'RTGR328N', checksum => \&OREGON_checksum2, method => \&OREGON_common_temphydro,
},
# PCR800. Commented out until fully tested.
# PCR800. v3
OREGON_type_length_key(0x2a19, 92) =>
{
part => 'PCR800', checksum => \&OREGON_checksum8, method => \&OREGON_rain_PCR800,
},
# THWR800 v3
OREGON_type_length_key(0xca48, 68) =>
{
part => 'THWR800', checksum => \&OREGON_checksum9, method => \&OREGON_common_temp,
},
OREGON_type_length_key(0x0adc, 64) => # masked to ?adc due to rolling code
{
part => 'RTHN318', checksum => \&OREGON_checksum1, method => \&OREGON_common_temp,
},
);
# --------------------------------------------
@ -792,13 +795,19 @@ sub OREGON_rain_PCR800 {
# CHECKSUM METHODS
sub OREGON_checksum1 {
my $hash = $_[1];
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);
Log3 $hash, 5, "OREGON: checksum1 = $c berechnet: $s";
$s == $c;
}
sub OREGON_checksum2 {
$_[0]->[8] == ((OREGON_nibble_sum(8,$_[0]) - 0xa) & 0xff);
my $hash = $_[1];
my $c = $_[0]->[8];
my $s = ((OREGON_nibble_sum(8,$_[0]) - 0xa) & 0xff);
Log3 $hash, 5, "OREGON: checksum2 = $c berechnet: $s";
$s == $c;
}
sub OREGON_checksum3 {
@ -813,14 +822,25 @@ sub OREGON_checksum5 {
$_[0]->[10] == ((OREGON_nibble_sum(10,$_[0]) - 0xa) & 0xff);
}
sub OREGON_checksum5plus {
my $hash = $_[1];
my $c = ($_[0]->[10]);
my $s = ((OREGON_nibble_sum(10,$_[0]) - 0xa) & 0xff);
Log3 $hash, 5, "OREGON: checksum5plus = $c berechnet: $s";
$s == $c;
}
sub OREGON_checksum6 {
OREGON_hi_nibble($_[0]->[8]) + (OREGON_lo_nibble($_[0]->[9]) << 4) ==
((OREGON_nibble_sum(8,$_[0]) - 0xa) & 0xff);
}
sub OREGON_checksum6plus {
my $hash = $_[1];
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);
Log3 $hash, 5, "OREGON: checksum6plus = $c berechnet: $s";
$s == $c;
}
@ -829,11 +849,22 @@ sub OREGON_checksum7 {
}
sub OREGON_checksum8 {
my $hash = $_[1];
my $c = OREGON_hi_nibble($_[0]->[9]) + (OREGON_lo_nibble($_[0]->[10]) << 4);
my $s = ( ( OREGON_nibble_sum(9, $_[0]) - 0xa) & 0xff);
my $s = ( ( OREGON_nibble_sum(9, $_[0]) + OREGON_lo_nibble($_[0]->[9]) - 0xa) & 0xff);
Log3 $hash, 5, "OREGON: checksum8 = $c berechnet: $s";
$s == $c;
}
sub OREGON_checksum9 {
my $hash = $_[1];
my $c = OREGON_hi_nibble($_[0]->[6]) + (OREGON_lo_nibble($_[0]->[7]) << 4);
my $s = ((OREGON_nibble_sum(6,$_[0]) - 0xa) & 0xff);
Log3 $hash, 5, "OREGON: checksum9 = $c berechnet: $s";
$s == $c;
}
sub OREGON_raw {
$_[0]->{raw} or $_[0]->{raw} = pack 'H*', $_[0]->{hex};
}
@ -853,10 +884,10 @@ OREGON_Parse($$)
my $time = time();
if ($time_old ==0) {
Log 5, "OREGON: decoding delay=0 hex=$msg";
Log3 $iohash, 5, "OREGON: decoding delay=0 hex=$msg";
} else {
my $time_diff = $time - $time_old ;
Log 5, "OREGON: decoding delay=$time_diff hex=$msg";
Log3 $iohash, 5, "OREGON: decoding delay=$time_diff hex=$msg";
}
$time_old = $time;
@ -870,6 +901,7 @@ OREGON_Parse($$)
}
my $bits = ord($bin_msg);
my $bitsMsg = $bits;
my $num_bytes = $bits >> 3; if (($bits & 0x7) != 0) { $num_bytes++; }
my $type1 = $rfxcom_data_array[0];
@ -878,37 +910,45 @@ OREGON_Parse($$)
my $type = ($type1 << 8) + $type2;
my $sensor_id = unpack('H*', chr $type1) . unpack('H*', chr $type2);
#Log 1, "OREGON: sensor_id=$sensor_id";
my $key = OREGON_type_length_key($type, $bits);
my $rec = $types{$key} || $types{$key&0xfffff};
unless ($rec) {
#Log 1, "OREGON: ERROR: Unknown sensor_id=$sensor_id bits=$bits message='$msg'.";
Log 4, "OREGON: ERROR: Unknown sensor_id=$sensor_id bits=$bits message='$msg'.";
return "OREGON: ERROR: Unknown sensor_id=$sensor_id bits=$bits.\n";
if (!$rec) {
$bits -= 4;
$key = OREGON_type_length_key($type, $bits);
$rec = $types{$key} || $types{$key&0xfffff};
if (!$rec) {
$bits -= 4;
$key = OREGON_type_length_key($type, $bits);
$rec = $types{$key} || $types{$key&0xfffff};
if (!$rec) {
Log3 $iohash, 4, "OREGON: ERROR: Unknown sensor_id=$sensor_id bits=$bitsMsg message='$msg'.";
return "";
}
}
}
Log3 $iohash, 5, "OREGON: sensor_id=$sensor_id BitsMsg=$bitsMsg Bits=$bits";
# test checksum as defines in %types:
my $checksum = $rec->{checksum};
if ($checksum && !$checksum->(\@rfxcom_data_array) ) {
Log 3, "OREGON: ERROR: checksum error sensor_id=$sensor_id (bits=$bits)";
return "OREGON: ERROR: checksum error sensor_id=$sensor_id (bits=$bits)";
if ($checksum && !$checksum->(\@rfxcom_data_array, $iohash) ) {
Log3 $iohash, 4, "OREGON: ERROR: checksum error sensor_id=$sensor_id (bits=$bits)";
return "";
}
my $method = $rec->{method};
unless ($method) {
Log 4, "OREGON: Possible message from Oregon part '$rec->{part}'";
Log 4, "OREGON: sensor_id=$sensor_id (bits=$bits)";
return;
Log3 $iohash, 4, "OREGON: Possible message from Oregon part '$rec->{part}'";
Log3 $iohash, 4, "OREGON: sensor_id=$sensor_id (bits=$bits)";
return "";
}
my @res;
if (! defined(&$method)) {
Log 4, "OREGON: Error: Unknown function=$method. Please define it in file $0";
Log 4, "OREGON: sensor_id=$sensor_id (bits=$bits)\n";
return "OREGON: Error: Unknown function=$method. Please define it in file $0";
Log3 $iohash, 4, "OREGON: Error: Unknown function=$method. Please define it in file $0";
Log3 $iohash, 4, "OREGON: sensor_id=$sensor_id (bits=$bits)\n";
return "";
} else {
@res = $method->($rec->{part}, $longids, \@rfxcom_data_array);
}
@ -919,7 +959,7 @@ OREGON_Parse($$)
my $def = $modules{OREGON}{defptr}{"$device_name"};
if(!$def) {
Log 3, "OREGON: Unknown device $device_name, please define it";
Log3 $iohash, 3, "OREGON: Unknown device $device_name, please define it";
return "UNDEFINED $device_name OREGON $device_name";
}
# Use $def->{NAME}, because the device may be renamed:
@ -933,118 +973,139 @@ OREGON_Parse($$)
my $i;
my $val = "";
my $sensor = "";
readingsBeginUpdate($def);
foreach $i (@res){
#print "!> i=".$i."\n";
#printf "%s\t",$i->{device};
if ($i->{type} eq "temp") {
#printf "Temperatur %2.1f %s ; ",$i->{current},$i->{units};
$val .= "T: ".$i->{current}." ";
$sensor = "temperature";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{current};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};
readingsBulkUpdate($def,"temperature",$i->{current});
##$sensor = "temperature";
##$def->{READINGS}{$sensor}{TIME} = $tm;
##$def->{READINGS}{$sensor}{VAL} = $i->{current};
##$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};*/
}
elsif ($i->{type} eq "humidity") {
#printf "Luftfeuchtigkeit %d%s, %s ;",$i->{current},$i->{units},$i->{string};
$val .= "H: ".$i->{current}." ";
readingsBulkUpdate($def,"humidity",$i->{current});
$sensor = "humidity";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{current};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};
##$sensor = "humidity";
##$def->{READINGS}{$sensor}{TIME} = $tm;
##$def->{READINGS}{$sensor}{VAL} = $i->{current};
##$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};
}
elsif ($i->{type} eq "battery") {
#printf "Batterie %d%s; ",$i->{current},$i->{units};
my @words = split(/\s+/,$i->{current});
$val .= "BAT: ".$words[0]." "; #use only first word
readingsBulkUpdate($def,"battery",$i->{current});
$sensor = "battery";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{current};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
##$sensor = "battery";
##$def->{READINGS}{$sensor}{TIME} = $tm;
##$def->{READINGS}{$sensor}{VAL} = $i->{current};
##$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
}
elsif ($i->{type} eq "pressure") {
#printf "Luftdruck %d %s, Vorhersage=%s ; ",$i->{current},$i->{units},$i->{forecast};
# do not add it due to problems with hms.gplot
#$val .= "P: ".$i->{current}." ";
$val .= "P: ".$i->{current}." ";
readingsBulkUpdate($def,"pressure",$i->{current});
readingsBulkUpdate($def,"forecast",$i->{forecast});
#$sensor = "pressure";
#$def->{READINGS}{$sensor}{TIME} = $tm;
#$def->{READINGS}{$sensor}{VAL} = $i->{current};
#$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
$sensor = "pressure";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{current};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
$sensor = "forecast";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{forecast};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{forecast};;
#$sensor = "forecast";
#$def->{READINGS}{$sensor}{TIME} = $tm;
#$def->{READINGS}{$sensor}{VAL} = $i->{forecast};
#$def->{CHANGED}[$n++] = $sensor . ": " . $i->{forecast};;
}
elsif ($i->{type} eq "speed") {
$val .= "W: ".$i->{current}." ";
$val .= "WA: ".$i->{average}." ";
readingsBulkUpdate($def,"wind_speed",$i->{current});
readingsBulkUpdate($def,"wind_avspeed",$i->{average});
$sensor = "wind_speed";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{current};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
#$sensor = "wind_speed";
#$def->{READINGS}{$sensor}{TIME} = $tm;
#$def->{READINGS}{$sensor}{VAL} = $i->{current};
#$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
$sensor = "wind_avspeed";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{average};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{average};;
#$sensor = "wind_avspeed";
#$def->{READINGS}{$sensor}{TIME} = $tm;
#$def->{READINGS}{$sensor}{VAL} = $i->{average};
#$def->{CHANGED}[$n++] = $sensor . ": " . $i->{average};;
}
elsif ($i->{type} eq "direction") {
$val .= "WD: ".$i->{current}." ";
$val .= "WDN: ".$i->{string}." ";
readingsBulkUpdate($def,"wind_dir",$i->{current} . " " . $i->{string});
$sensor = "wind_dir";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{current} . " " . $i->{string};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current} . " " . $i->{string};;
#$sensor = "wind_dir";
#$def->{READINGS}{$sensor}{TIME} = $tm;
#$def->{READINGS}{$sensor}{VAL} = $i->{current} . " " . $i->{string};
#$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current} . " " . $i->{string};;
}
elsif ($i->{type} eq "rain") {
$val .= "RR: ".$i->{current}." ";
readingsBulkUpdate($def,"rain_rate",$i->{current});
$sensor = "rain_rate";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{current};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
#$sensor = "rain_rate";
#$def->{READINGS}{$sensor}{TIME} = $tm;
#$def->{READINGS}{$sensor}{VAL} = $i->{current};
#$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
}
elsif ($i->{type} eq "train") {
$val .= "TR: ".$i->{current}." ";
readingsBulkUpdate($def,"rain_total",$i->{current});
$sensor = "rain_total";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{current};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
#$sensor = "rain_total";
#$def->{READINGS}{$sensor}{TIME} = $tm;
#$def->{READINGS}{$sensor}{VAL} = $i->{current};
#$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
}
elsif ($i->{type} eq "flip") {
#$val .= "F: ".$i->{current}." ";
readingsBulkUpdate($def,"rain_flip",$i->{current});
$sensor = "rain_flip";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{current};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
#$sensor = "rain_flip";
#$def->{READINGS}{$sensor}{TIME} = $tm;
#$def->{READINGS}{$sensor}{VAL} = $i->{current};
#$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
}
elsif ($i->{type} eq "uv") {
$val .= "UV: ".$i->{current}." ";
$val .= "UVR: ".$i->{risk}." ";
readingsBulkUpdate($def,"uv_val",$i->{current});
readingsBulkUpdate($def,"uv_risk",$i->{risk});
$sensor = "uv_val";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{current};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
#$sensor = "uv_val";
#$def->{READINGS}{$sensor}{TIME} = $tm;
#$def->{READINGS}{$sensor}{VAL} = $i->{current};
#$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
$sensor = "uv_risk";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{risk};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{risk};;
#$sensor = "uv_risk";
#$def->{READINGS}{$sensor}{TIME} = $tm;
#$def->{READINGS}{$sensor}{VAL} = $i->{risk};
#$def->{CHANGED}[$n++] = $sensor . ": " . $i->{risk};;
}
elsif ($i->{type} eq "hexline") {
$sensor = "hexline";
$def->{READINGS}{$sensor}{TIME} = $tm;
$def->{READINGS}{$sensor}{VAL} = $i->{current};
$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
readingsBulkUpdate($def,"hexline",$i->{current});
#$sensor = "hexline";
#$def->{READINGS}{$sensor}{TIME} = $tm;
#$def->{READINGS}{$sensor}{VAL} = $i->{current};
#$def->{CHANGED}[$n++] = $sensor . ": " . $i->{current};;
}
else {
print "\nOREGON: Unknown: ";
@ -1057,32 +1118,39 @@ OREGON_Parse($$)
# remove heading and trailing space chars from $val
$val =~ s/^\s+|\s+$//g;
Log3 $iohash, 4, "$name decoded Oregon: $val";
readingsBulkUpdate($def, "state", $val);
$def->{STATE} = $val;
$def->{TIME} = $tm;
$def->{CHANGED}[$n++] = $val;
#$def->{TIME} = $tm;
#$def->{CHANGED}[$n++] = $val;
}
#
#$def->{READINGS}{state}{TIME} = $tm;
#$def->{READINGS}{state}{VAL} = $val;
#$def->{CHANGED}[$n++] = "state: ".$val;
readingsEndUpdate($def, 1);
DoTrigger($name, undef);
#DoTrigger($name, undef);
return $val;
return $name;
}
1;
=pod
=item summary interprets Oregon sensors received by a rf receiver
=item summary_DE interpretiert Oregon Sensoren von einem Funkempf&aumlngern
=begin html
<a name="OREGON"></a>
<h3>OREGON</h3>
<ul>
The OREGON module interprets Oregon sensor messages received by a RFXCOM receiver. You need to define a RFXCOM receiver first.
The OREGON module interprets Oregon sensor messages received by a RFXCOM or SIGNALduino or CUx receiver. You need to define a receiver (RFXCOM, SIGNALduino or CUx) first.
See <a href="#RFXCOM">RFXCOM</a>.
See <a href="#SIGNALduino">SIGNALduino</a>.
<br><br>
<a name="OREGONdefine"></a>
@ -1110,8 +1178,11 @@ The one byte hex string is generated by the Oregon sensor when is it powered on.
<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>
<li><a href="#IODev">IODev</a></li>
<li><a href="#do_not_notify">do_not_notify</a></li>
<li><a href="#ignore">ignore</a></li>
<li><a href="#showtime">showtime</a></li>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
</ul>

View File

@ -182,7 +182,7 @@ FHEM/38_JawboneUp.pm domschl http://forum.fhem.de Sonstiges
FHEM/39_alexa.pm justme1968 http://forum.fhem.de Sonstige Systeme
FHEM/39_siri.pm justme1968 http://forum.fhem.de Sonstige Systeme
FHEM/40_RFXCOM.pm wherzig http://forum.fhem.de RFXTRX
FHEM/41_OREGON.pm wherzig http://forum.fhem.de Sonstiges
FHEM/41_OREGON.pm Sidey/Ralf9 http://forum.fhem.de Sonstiges
FHEM/42_RFXMETER.pm wherzig http://forum.fhem.de RFXTRX
FHEM/42_SMARTMON.pm hexenmeister http://forum.fhem.de Unterstuetzende Dienste
FHEM/42_SYSMON.pm hexenmeister http://forum.fhem.de Unterstuetzende Dienste