diff --git a/CHANGED b/CHANGED
index d20be6987..c67640f46 100644
--- a/CHANGED
+++ b/CHANGED
@@ -1,46 +1,37 @@
-2021-08-18 - Update protocol 64 for sensor WH2A (#1009)
+2021-08-18 - Update protocol 64 for sensor WH2A (#1009)
SD_ProtocolData.pm - correction length_max
14_SD_WS.pm - fix sub SD_WS_Parse, changes due to perlcritic
README.md - change of entry WH2
2021-08-14 - SIGNALduino_calcRSSI check input parameter (#1007)
-
* 02_SIGNALduino_calcRSSI.t:
-
- Test extended
- Bug reproduced
-
* 00_SIGNALduino.pm
-
- SIGNALduino_calcRSSI Check input parameters
+
2021-08-13 - Fixes perlcritic return undef in 14_SD_WS (#1006)
-2021-08-11 - Fixes perlcritic return undef; (#979)
+2021-08-11 - Fixes perlcritic return undef; (#979)
14_BresserTemeo.pm:
Fixes perlcritic return undef;
-
14_SD_RSL.pm:
Fixes perlcritic return undef;
-
14_SD_WS.pm:
Fixes perlcritic return undef;
-
14_SD_WS09.pm:
Fixes perlcritic return undef;
-
41_OREGON.pm:
Fixes perlcritic return undef;
-2021-08-08 - new protocol 114 for TR401 (#1002)
-
-2021-08-06 - new protocol 114 for TR401 ( #1002 )
+2021-08-08 - new protocol 114 for TR401 (#1002)
* 00_SIGNALduino.pm: added protocol 114 to SD_UT match
* SD_ProtocolData.pm: added protocol 114
* 14_SD_UT.pm: added model TR401
* README.md: Updated
-2021-08-08 - new protocol 113 for GFGT 433 B1 Wireless Grill Thermometer (#1003)
+2021-08-08 - new protocol 113 for GFGT 433 B1 Wireless Grill Thermometer (#1003)
* SD_ProtocolData.pm - Definition for protocol 113 added
* 14_SD_WS.pm - Demodulation for protocol 113 added
* README.md - Entry for GFGT 433 B1 added
diff --git a/FHEM/00_SIGNALduino.pm b/FHEM/00_SIGNALduino.pm
index 60c4562c9..1800ac05f 100644
--- a/FHEM/00_SIGNALduino.pm
+++ b/FHEM/00_SIGNALduino.pm
@@ -1,4 +1,4 @@
-# $Id: 00_SIGNALduino.pm v3.5.2 2021-08-13 20:19:26Z sidey79 $
+# $Id: 00_SIGNALduino.pm v3.5.2 2021-08-29 21:54:48Z elektron-bbs $
#
# v3.5.2 - https://github.com/RFD-FHEM/RFFHEM/tree/master
# The module is inspired by the FHEMduino project and modified in serval ways for processing the incoming messages
@@ -39,7 +39,7 @@ use List::Util qw(first);
use constant {
- SDUINO_VERSION => '3.5.2+20210813', # Datum wird automatisch bei jedem pull request aktualisiert
+ SDUINO_VERSION => '3.5.2+20210829', # Datum wird automatisch bei jedem pull request aktualisiert
SDUINO_INIT_WAIT_XQ => 1.5, # wait disable device
SDUINO_INIT_WAIT => 2,
SDUINO_INIT_MAXRETRY => 3,
@@ -272,7 +272,7 @@ my %matchListSIGNALduino = (
my %symbol_map = (one => 1 , zero =>0 ,sync => '', float=> 'F', 'start' => '');
## rfmode for attrib & supported rfmodes
-my @rfmode = ('Avantek','Bresser_5in1','KOPP_FC','Lacrosse_mode1','Lacrosse_mode2','Lacrosse_mode4','PCA301','SlowRF');
+my @rfmode = ('Avantek','Bresser_5in1','Bresser_6in1','KOPP_FC','Lacrosse_mode1','Lacrosse_mode2','Lacrosse_mode4','PCA301','SlowRF');
############################# package main
sub SIGNALduino_Initialize {
@@ -4756,6 +4756,12 @@ USB-connected devices (SIGNALduino):
rfmode
Configures the RF transceiver of the SIGNALduino (CC1101). The available arguments:
+ - Bresser_5in1
+ modulation 2-FSK, Datarate=8.23 kbps, Sync Word=2DD4, FIFO-THR=28 Byte, frequency 868.35 MHz
+
+ - Bresser_6in1
+ modulation 2-FSK, Datarate=8.23 kbps, Sync Word=2DD4, FIFO-THR=20 Byte, frequency 868.35 MHz
+
- KOPP_FC
modulation GFSK, Datarate=4.7855 kbps, Sync Word=AA54, frequency 868.3MHz
@@ -5297,6 +5303,12 @@ USB-connected devices (SIGNALduino):
- rfmode
Konfiguriert den RF Transceiver des SIGNALduino (CC1101). Verfügbare Argumente sind:
+ - Bresser_5in1
+ Modulation 2-FSK, Datenrate=8.23 kbps, Sync Word=2DD4, FIFO-THR=28 Byte, Frequenz 868.35 MHz
+
+ - Bresser_6in1
+ Modulation 2-FSK, Datenrate=8.23 kbps, Sync Word=2DD4, FIFO-THR=20 Byte, Frequenz 868.35 MHz
+
- KOPP_FC
Modulation GFSK, Datenrate=4.7855 kbps, Sync Word=AA54, Frequenz 868.3MHz
diff --git a/FHEM/14_SD_WS.pm b/FHEM/14_SD_WS.pm
index d287b250f..225d4f6d3 100644
--- a/FHEM/14_SD_WS.pm
+++ b/FHEM/14_SD_WS.pm
@@ -1,4 +1,4 @@
-# $Id: 14_SD_WS.pm 21666 2021-08-17 19:14:52Z elektron-bbs $
+# $Id: 14_SD_WS.pm 21666 2021-08-29 21:54:48Z elektron-bbs $
#
# The purpose of this module is to support serval
# weather sensors which use various protocol
@@ -34,6 +34,7 @@
# 03.06.2021 PerlCritic - HardTabs durch Leerzeichen ersetzt & Einrueckungen sortiert (keine Code/Syntaxaenderung vorgenommen)
# 06.06.2021 neues Protokoll 111: TS-FT002 Water tank level monitor with temperature
# 16.07.2021 neues Protokoll 113: Wireless Grill Thermometer, Model name: GFGT 433 B1
+# 31.07.2021 neues Protokoll 115: Bresser 6-in-1 Comfort Wetter Center
package main;
@@ -87,6 +88,7 @@ sub SD_WS_Initialize($)
'SD_WS_110_TR.*' => { ATTR => 'event-min-interval:.*:300 event-on-change-reading:.*', FILTER => '%NAME', GPLOT => 'temp4:Temp,', autocreateThreshold => '3:180'},
'SD_WS_111_TL.*' => { ATTR => 'event-min-interval:.*:300 event-on-change-reading:.*', FILTER => '%NAME', GPLOT => 'temp4:Temp,', autocreateThreshold => '3:600'},
'SD_WS_113_T.*' => { ATTR => 'event-min-interval:.*:60 event-on-change-reading:.*', FILTER => '%NAME', GPLOT => 'temp4:Temp,', autocreateThreshold => '10:180'},
+ 'SD_WS_115.*' => { ATTR => 'event-min-interval:.*:300 event-on-change-reading:.*', FILTER => '%NAME', GPLOT => 'temp4hum4:Temp/Hum,', autocreateThreshold => '5:120'},
};
return;
}
@@ -156,6 +158,7 @@ sub SD_WS_Parse($$)
my $sendCounter;
my $beep;
my $distance;
+ my $uv;
my %decodingSubs = (
50 => # Protocol 50
@@ -887,6 +890,83 @@ sub SD_WS_Parse($$)
},
crcok => sub {return 1;}, # Check could not be determined yet.
} ,
+ 115 => {
+ # https://github.com/merbanan/rtl_433/blob/master/src/devices/bresser_6in1.c
+ # The compact 6-in-1 multifunction outdoor sensor transmits the data on 868.3 MHz.
+ # The device uses FSK-PCM encoding, the device sends a transmission every 12 seconds.
+ # There are at least two different message types:
+ # temperatur, hum, uv and rain (alternating messages)
+ # wind data (every message)
+ # A transmission starts with a preamble of 0xAA.
+ # Preamble: aa aa aa aa aa 2d d4
+ #
+ # 1 2 3
+ # 0123456789012345678901234567890123456789
+ # ----------------------------------------
+ # 3DA820B00C1618FFFFFF1808152294FFF01E0000 Msg 1, 40 Nibble from SIGNALduino, T: 15.2 H: 94 G:0 W: 0 D:180
+ # CCCCIIIIIIIIFFGGGWWWDDD?TTT?HH????SS Msg 1, 36 Nibble
+ # CCCCIIIIIIIIFFGGGWWWDDD?ffRRRRVVV?SS Msg 2, 36 Nibble
+ # C = CRC16
+ # I = station ID
+ # F = flags, 4 bit (1: weather station, 2: indoor?, 4: soil probe), 1 bit battery (1=ok, 0=low), 3 bit channel
+ # G = wind gust in 1/10 m/s, inverted, BCD coded, GGG = FE6 =~ 019 => 1.9 m/s.
+ # W = wind speed in 1/10 m/s, inverted, BCD coded, LSB first nibble, MSB last two nibble, WWW = EFE =~ 101 => 1.1 m/s.
+ # D = wind direction in grad, BCD coded, DDD = 158 => 158 °
+ # ? = unknown, always 0x8
+ # T = temperature in 1/10 °C, only if byte 12 ne 0xFF, BCD coded, TTT = 312 => 31.2 °C
+ # ? = unknown
+ # H = humidity in percent, only if byte 12 ne 0xFF, BCD coded, HH = 23 => 23 %
+ # R = rain counter, only if byte 12 eq 0xFF, inverted, BCD coded
+ # V = uv, only if byte 12 eq 0xFF and byte 15/16 not 0xFF01, inverted, BCD coded
+ # ? = unknown
+ # S = checksum (sum over byte 2 - 17 must be 255)
+ sensortype => 'Bresser_6in1, new Bresser_5in1',
+ model => 'SD_WS_115',
+ prematch => sub { return 1; }, # no precheck known
+ id => sub {my ($rawData,undef) = @_; return substr($rawData,4,8); },
+ bat => sub {my (undef,$bitData) = @_; return substr($bitData,52,1) eq '1' ? 'ok' : 'low';},
+ channel => sub {my (undef,$bitData) = @_; return (SD_WS_binaryToNumber($bitData,53,55));},
+ windgust => sub {my ($rawData,undef) = @_;
+ $windgust = substr($rawData,14,3);
+ $windgust =~ tr/0123456789ABCDEF/FEDCBA9876543210/;
+ return if ($windgust !~ m/^\d+$/xms);
+ return $windgust * 0.1;
+ },
+ windspeed => sub {my ($rawData,undef) = @_;
+ $windspeed = substr($rawData,18,2) . substr($rawData,17,1);
+ $windspeed =~ tr/0123456789ABCDEF/FEDCBA9876543210/;
+ return if ($windspeed !~ m/^\d+$/xms);
+ return $windspeed * 0.1;
+ },
+ winddir => sub {my ($rawData,undef) = @_;
+ $winddir = substr($rawData,20,3);
+ return if ($winddir !~ m/^\d+$/xms);
+ return ($winddir * 1, $winddirtxtar[round(($winddir / 22.5),0)]);
+ },
+ temp => sub {my ($rawData,undef) = @_;
+ return if (substr($rawData,24,2) eq 'FF');
+ $rawTemp = (substr($rawData,24,1) . substr($rawData,25,1) . substr($rawData,26,1)) * 0.1;
+ if ($rawTemp > 60) {$rawTemp -= 100};
+ return $rawTemp;
+ },
+ hum => sub {my ($rawData,undef) = @_;
+ return if (substr($rawData,24,2) eq 'FF');
+ return substr($rawData,28,2) + 0;
+ },
+ rain => sub {my ($rawData,undef) = @_;
+ return if (substr($rawData,24,2) ne 'FF');
+ $rain = substr($rawData,26,4);
+ $rain =~ tr/0123456789ABCDEF/FEDCBA9876543210/;
+ return $rain * 0.1;
+ },
+ uv => sub {my ($rawData,undef) = @_;
+ return if (substr($rawData,24,2) ne 'FF' || substr($rawData,30,3) !~ m/^\d+$/xms);
+ $uv = substr($rawData,30,3);
+ return if ($uv !~ m/^\d+$/xms);
+ return $uv * 0.1;
+ },
+ crcok => sub {return 1;}, # checks are in SD_Protocols.pm sub ConvBresser_6in1
+ },
);
Log3 $name, 4, "$name: SD_WS_Parse protocol $protocol, rawData $rawData";
@@ -1220,6 +1300,7 @@ sub SD_WS_Parse($$)
$sendmode = $decodingSubs{$protocol}{sendmode}->( $rawData,$bitData ) if (exists($decodingSubs{$protocol}{sendmode}));
$trend = $decodingSubs{$protocol}{trend}->( $rawData,$bitData ) if (exists($decodingSubs{$protocol}{trend}));
$distance = $decodingSubs{$protocol}{distance}->( $rawData,$bitData ) if (exists($decodingSubs{$protocol}{distance}));
+ $uv = $decodingSubs{$protocol}{uv}->( $rawData,$bitData ) if (exists($decodingSubs{$protocol}{uv}));
Log3 $iohash, 4, "$name: SD_WS_Parse decoded protocol-id $protocol ($SensorTyp), sensor-id $id";
}
else {
@@ -1394,6 +1475,7 @@ sub SD_WS_Parse($$)
readingsBulkUpdate($hash, "rain_total", $rain_total) if (defined($rain_total));
readingsBulkUpdate($hash, "sendCounter", $sendCounter) if (defined($sendCounter));
readingsBulkUpdate($hash, "distance", $distance) if (defined($distance));
+ readingsBulkUpdate($hash, "uv", $uv) if (defined($uv));
readingsEndUpdate($hash, 1); # Notify is done by Dispatch
return $name;
@@ -1488,7 +1570,7 @@ sub SD_WS_WH2SHIFT($){
- ADE WS1907 Weather station with rain gauge
- Atech wireless weather station
- BBQ temperature sensor GT-TMBBQ-01s (transmitter), GT-TMBBQ-01e (receiver)
- - Bresser 5-in-1 Comfort Weather Center, 7009994, Professional rain gauge, Temeo
+ - Bresser 5-in-1 and 6-in-1 Comfort Weather Center, 7009994, Professional rain gauge, Temeo
- Conrad S522
- EuroChron EFTH-800, EFS-3110A (temperature and humidity sensor)
- NC-3911, NC-3912 refrigerator thermometer
@@ -1543,7 +1625,7 @@ sub SD_WS_WH2SHIFT($){
- temperature (°C)
- temperatureTrend (consistent, rising, falling)
- type (type of sensor)
- - windDirectionDegree (Wind direction, 0-337,5°, in steps of 22,5°)
+ - windDirectionDegree (Wind direction, grad)
- windDirectionText (Wind direction, N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW)
- windGust (Gust of wind, m/s)
- windSpeed (Wind speed, m/s)
@@ -1607,7 +1689,7 @@ sub SD_WS_WH2SHIFT($){
- ADE WS1907 Wetterstation mit Regenmesser
- Atech Wetterstation
- BBQ Temperatur Sensor GT-TMBBQ-01s (Sender), GT-TMBBQ-01e (Empfaenger)
- - Bresser 5-in-1 Comfort Wetter Center, 7009994, Profi Regenmesser, Temeo
+ - Bresser 5-in-1 und 6-in-1 Comfort Wetter Center, 7009994, Profi Regenmesser, Temeo
- Conrad S522
- EuroChron EFTH-800, EFS-3110A (Temperatur- und Feuchtigkeitssensor)
- Kabelloses Grillthermometer, Modellname: GFGT 433 B1
@@ -1663,7 +1745,7 @@ sub SD_WS_WH2SHIFT($){
- temperature (Temperatur °C)
- temperatureTrend (Trend Temperatur gleichbleibend, steigend, fallend)
- type (Sensortypen)
- - windDirectionDegree (Windrichtung, 0-337,5°, in Schritten von 22,5°)
+ - windDirectionDegree (Windrichtung, Grad)
- windDirectionText (Windrichtung, N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW)
- windGust (Windboe, m/s)
- windSpeed (Windgeschwindigkeit, m/s)
diff --git a/FHEM/lib/SD_ProtocolData.pm b/FHEM/lib/SD_ProtocolData.pm
index bf1c30b34..bf3e6fa79 100644
--- a/FHEM/lib/SD_ProtocolData.pm
+++ b/FHEM/lib/SD_ProtocolData.pm
@@ -1,5 +1,5 @@
###########################################################################################################################################
-# $Id: SD_ProtocolData.pm 3.4.4 2021-08-17 19:14:52Z elektron-bbs $
+# $Id: SD_ProtocolData.pm 3.4.4 2021-08-29 21:54:48Z elektron-bbs $
# The file is part of the SIGNALduino project.
# All protocol definitions are contained in this file.
#
@@ -86,7 +86,7 @@ package lib::SD_ProtocolData;
use strict;
use warnings;
- our $VERSION = '1.34';
+ our $VERSION = '1.35';
our %protocols = (
"0" => ## various weather sensors (500 | 9100)
@@ -2983,9 +2983,26 @@ package lib::SD_ProtocolData;
length_min => '12',
length_max => '12',
},
-
- # "115" => reserved @elektron-bbs
-
+ "115" => ## BRESSER 6-in-1 Weather Center, Bresser new 5-in-1 sensors 7002550
+ # https://github.com/RFD-FHEM/RFFHEM/issues/607#issuecomment-888542022 @ Alex-S1981 2021-07-28
+ # The sensor alternately sends two different messages every 12 seconds.
+ # T: 15.2 H: 93 W: 0.8 MN;D=3BF120B00C1618FF77FF0458152293FFF06B0000;R=242;
+ # W: 0.6 R: 5.6 MN;D=1E6C20B00C1618FF99FF0458FFFFA9FF015B0000;R=241;
+ {
+ name => 'Bresser 6in1',
+ comment => 'BRESSER 6-in-1 weather center',
+ id => '115',
+ knownFreqs => '868.35',
+ datarate => '8.207',
+ sync => '2DD4',
+ modulation => '2-FSK',
+ rfmode => 'Bresser_6in1',
+ register => ['0001','0246','0344','042D','05D4','06FF','07C0','0802','0D21','0E65','0FE8','1088','114C','1202','1322','14F8','1551','1916','1B43','1C68'],
+ preamble => 'W115#',
+ clientmodule => 'SD_WS',
+ length_min => '36',
+ method => \&lib::SD_Protocols::ConvBresser_6in1,
+ },
########################################################################
#### ### register informations from other hardware protocols #### ####
diff --git a/FHEM/lib/SD_Protocols.pm b/FHEM/lib/SD_Protocols.pm
index b924fce72..2b1ea7bb2 100644
--- a/FHEM/lib/SD_Protocols.pm
+++ b/FHEM/lib/SD_Protocols.pm
@@ -1793,6 +1793,41 @@ sub ConvBresser_5in1 {
return substr($hexData, 28, 24);
}
+=item ConvBresser_6in1()
+
+This function checks CRC16 over bytes 2 - 17 and sum over bytes 2 - 17 (must be 255).
+
+Input: $hexData
+Output: $hexData
+ scalar converted message on success
+ or array (1,"Error message")
+
+=cut
+
+sub ConvBresser_6in1 {
+ my $self = shift // carp 'Not called within an object';
+ my $hexData = shift // croak 'Error: called without $hexdata as input';
+ my $hexLength = length ($hexData);
+
+ return ( 1, 'ConvBresser_6in1, hexData is to short' ) if ( $hexLength < 36 ); # check double, in def length_min set
+
+ my $crc = substr( $hexData, 0, 4 );
+ my $ctx = Digest::CRC->new(width => 16, poly => 0x1021);
+ my $calcCrc = sprintf( "%04X", $ctx->add( pack 'H*', substr( $hexData, 4, 30 ) )->digest );
+ $self->_logging(qq[ConvBresser_6in1, calcCRC16 = 0x$calcCrc, CRC16 = 0x$crc],5);
+ return ( 1, qq[ConvBresser_6in1, checksumCalc:0x$calcCrc != checksum:0x$crc] ) if ($calcCrc ne $crc);
+
+ my $sum = 0;
+ for (my $i = 2; $i < 18; $i++) {
+ $sum += hex(substr($hexData,($i) * 2, 2));
+ }
+ $sum &= 0xFF;
+ $self->_logging(qq[ConvBresser_6in1, sum = $sum],5);
+ return ( 1, qq[ConvBresser_6in1, sum $sum != 255] ) if ($sum != 255);
+
+ return $hexData;
+}
+
############################# package lib::SD_Protocols, test exists
=item ConvPCA301()
diff --git a/README.md b/README.md
index 2e895afe9..73c4d5cce 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,7 @@ Supported Devices / Protocols
|BF-301 | Remote control|
|benon (Semexo OHG) | Remote control (BH-P)|
|BOSCH / Neff / Refsta Topdraft | Remote control (SF01 01319004, SF01 01319004 v2)|
-|BRESSER 5-in-1, Professional Rain Gauge, TemeoTrend | Weather Station, Rain Gauge, Thermo-/Hygro Sensor |
+|BRESSER 5-in-1, 6-in-1, Professional Rain Gauge, TemeoTrend | Weather Station, Rain Gauge, Thermo-/Hygro Sensor |
|CAME TOP 432EV | Remote control |
|CTW600, WH1080, WH2315 | Weather station |
|Clarus | remote power socket|
diff --git a/controls_signalduino.txt b/controls_signalduino.txt
index a6dd5f4b1..f42f1a27c 100644
--- a/controls_signalduino.txt
+++ b/controls_signalduino.txt
@@ -1,4 +1,4 @@
-UPD 2021-08-14_10:14:35 228769 FHEM/00_SIGNALduino.pm
+UPD 2021-08-29_20:30:08 229349 FHEM/00_SIGNALduino.pm
UPD 2020-06-15_17:41:39 17876 FHEM/10_FS10.pm
UPD 2020-05-26_11:51:12 20465 FHEM/10_SD_GT.pm
UPD 2021-08-11_21:38:30 10096 FHEM/14_BresserTemeo.pm
@@ -8,11 +8,11 @@ UPD 2020-10-03_11:48:15 11170 FHEM/14_SD_AS.pm
UPD 2021-07-13_20:29:34 29223 FHEM/14_SD_BELL.pm
UPD 2021-08-11_21:38:30 12573 FHEM/14_SD_RSL.pm
UPD 2021-08-08_19:14:43 167137 FHEM/14_SD_UT.pm
-UPD 2021-08-18_20:38:01 95125 FHEM/14_SD_WS.pm
+UPD 2021-08-29_20:30:08 100249 FHEM/14_SD_WS.pm
UPD 2020-04-13_23:15:56 18426 FHEM/14_SD_WS07.pm
UPD 2021-08-11_21:38:30 35313 FHEM/14_SD_WS09.pm
UPD 2020-04-13_23:15:56 14325 FHEM/14_SD_WS_Maverick.pm
UPD 2021-08-11_21:38:30 37904 FHEM/41_OREGON.pm
UPD 2020-12-17_23:16:30 15582 FHEM/90_SIGNALduino_un.pm
-UPD 2021-08-18_20:38:01 217734 FHEM/lib/SD_ProtocolData.pm
-UPD 2021-06-02_05:49:05 71700 FHEM/lib/SD_Protocols.pm
+UPD 2021-08-29_20:30:08 218835 FHEM/lib/SD_ProtocolData.pm
+UPD 2021-08-29_23:52:52 72899 FHEM/lib/SD_Protocols.pm
diff --git a/t/SD_Protocols/02_ConvBresser_6in1.t b/t/SD_Protocols/02_ConvBresser_6in1.t
new file mode 100644
index 000000000..58a8cff21
--- /dev/null
+++ b/t/SD_Protocols/02_ConvBresser_6in1.t
@@ -0,0 +1,48 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use Test2::V0;
+use lib::SD_Protocols qw(:ALL);
+use Test2::Tools::Compare qw{is like};
+use Test2::Todo;
+
+plan(4);
+
+my $Protocols =
+ new lib::SD_Protocols( filetype => 'json', filename => './t/SD_Protocols/test_protocolData.json' );
+
+subtest 'test ConvBresser_6in1, checksum ok ' => sub {
+ my $hexMsg='3BF120B00C1618FF77FF0458152293FFF06B0000';
+ plan(2);
+ my @ret=$Protocols->ConvBresser_6in1($hexMsg) ;
+ is($#ret,0, 'ConvBresser_6in1 reported no error');
+ is($ret[0],'3BF120B00C1618FF77FF0458152293FFF06B0000','check retured message');
+
+};
+
+subtest 'test ConvBresser_6in1, wrong checksum ' => sub {
+ plan(2);
+ my $hexMsg='3AF120B00C1618FF77FF0458152293FFF06B0000';
+ my @ret=$Protocols->ConvBresser_6in1($hexMsg) ;
+ is($#ret,1, "ConvBresser_6in1 reported some error");
+ like($ret[1],qr/ != checksum/,'check error message');
+};
+
+subtest 'test ConvBresser_6in1, wrong sum ' => sub {
+ plan(2);
+ my $hexMsg='FD0620A00C1618FF77FF0458152293FFF06B0000';
+ my @ret=$Protocols->ConvBresser_6in1($hexMsg) ;
+ is($#ret,1, "ConvBresser_6in1 reported some error");
+ like($ret[1],qr/ != 255/,'check error message');
+};
+
+
+subtest 'test ConvBresser_6in1, length to short ' => sub {
+ plan(2);
+ my $hexMsg='E7527FF78FF7EFF8FDD7';
+ my @ret=$Protocols->ConvBresser_6in1($hexMsg) ;
+ is($#ret,1, "ConvBresser_6in1 reported some error");
+ like($ret[1],qr/to short/,'check error message');
+};