Add support for the Bresser Professional Rain Gauge (#1676)
* Add support for the Bresser Professional Rain Gauge Co-authored-by: Benjamin Larsson <benjamin.larsson@iopsys.eu>
This commit is contained in:
parent
6b9da1064c
commit
be15f27e95
1 changed files with 34 additions and 15 deletions
|
@ -30,6 +30,8 @@ Packet payload without preamble (203 bits):
|
|||
|
||||
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
||||
-----------------------------------------------------------------------------
|
||||
ed ee 46 ff ff ff ef 9f ff 8b 7d eb ff 12 11 b9 00 00 00 10 60 00 74 82 14 00 00 00 (Rain Gauge)
|
||||
e9 ee 46 ff ff ff ef 99 ff 8b 8b eb ff 16 11 b9 00 00 00 10 66 00 74 74 14 00 00 00 (Rain Gauge)
|
||||
ee 93 7f f7 bf fb ef 9e fe ae bf ff ff 11 6c 80 08 40 04 10 61 01 51 40 00 00
|
||||
ed 93 7f ff 0f ff ef b8 fe 7d bf ff ff 12 6c 80 00 f0 00 10 47 01 82 40 00 00
|
||||
eb 93 7f eb 9f ee ef fc fc d6 bf ff ff 14 6c 80 14 60 11 10 03 03 29 40 00 00
|
||||
|
@ -40,7 +42,7 @@ Packet payload without preamble (203 bits):
|
|||
ef a1 ff ff 1f ff ef dc ff de df ff 7f 10 5e 00 00 e0 00 10 23 00 21 20 00 80 00 00 (low batt +ve temp)
|
||||
ed a1 ff ff 1f ff ef 8f ff d6 df ff 77 12 5e 00 00 e0 00 10 70 00 29 20 00 88 00 00 (low batt -ve temp -7.0C)
|
||||
ec 91 ff ff 1f fb ef e7 fe ad ed ff f7 13 6e 00 00 e0 04 10 18 01 52 12 00 08 00 00 (good batt -ve temp)
|
||||
CC CC CC CC CC CC CC CC CC CC CC CC CC uu II GG DG WW W TT T HH RR R Bt
|
||||
CC CC CC CC CC CC CC CC CC CC CC CC CC uu II SS GG DG WW W TT T HH RR R Bt
|
||||
G-MSB ^ ^ W-MSB (strange but consistent order)
|
||||
|
||||
- C = Check, inverted data of 13 byte further
|
||||
|
@ -54,6 +56,7 @@ Packet payload without preamble (203 bits):
|
|||
- H = humidity in percent, BCD coded, HH = 23 => 23 %
|
||||
- R = rain in mm, BCD coded, RRxR = 1203 => 31.2 mm
|
||||
- B = Battery. 0=Ok, 8=Low.
|
||||
- S = sensor type, only low nibble used, 0x9 for Bresser Professional Rain Gauge
|
||||
*/
|
||||
|
||||
static int bresser_5in1_decode(r_device *decoder, bitbuffer_t *bitbuffer)
|
||||
|
@ -128,21 +131,37 @@ static int bresser_5in1_decode(r_device *decoder, bitbuffer_t *bitbuffer)
|
|||
|
||||
int battery_ok = ((msg[25] & 0x80) == 0);
|
||||
|
||||
/* clang-format off */
|
||||
data = data_make(
|
||||
"model", "", DATA_STRING, "Bresser-5in1",
|
||||
"id", "", DATA_INT, sensor_id,
|
||||
"battery", "Battery", DATA_STRING, battery_ok ? "OK": "LOW",
|
||||
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temperature,
|
||||
"humidity", "Humidity", DATA_INT, humidity,
|
||||
_X("wind_max_m_s","wind_gust"), "Wind Gust", DATA_FORMAT, "%.1f m/s",DATA_DOUBLE, wind_gust,
|
||||
_X("wind_avg_m_s","wind_speed"), "Wind Speed", DATA_FORMAT, "%.1f m/s",DATA_DOUBLE, wind_avg,
|
||||
"wind_dir_deg", "Direction", DATA_FORMAT, "%.1f",DATA_DOUBLE, wind_direction_deg,
|
||||
"rain_mm", "Rain", DATA_FORMAT, "%.1f mm",DATA_DOUBLE, rain,
|
||||
"mic", "Integrity", DATA_STRING, "CHECKSUM",
|
||||
NULL);
|
||||
/* clang-format on */
|
||||
/* check if the message is from a Bresser Professional Rain Gauge */
|
||||
if ((msg[15] & 0xF) == 0x9) {
|
||||
// rescale the rain sensor readings
|
||||
rain = rain * 2.5;
|
||||
/* clang-format off */
|
||||
data = data_make(
|
||||
"model", "", DATA_STRING, "Bresser-ProRainGauge",
|
||||
"id", "", DATA_INT, sensor_id,
|
||||
"battery", "Battery", DATA_STRING, battery_ok ? "OK": "LOW",
|
||||
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temperature,
|
||||
"rain_mm", "Rain", DATA_FORMAT, "%.1f mm",DATA_DOUBLE, rain,
|
||||
"mic", "Integrity", DATA_STRING, "CHECKSUM",
|
||||
NULL);
|
||||
/* clang-format on */
|
||||
} else {
|
||||
|
||||
/* clang-format off */
|
||||
data = data_make(
|
||||
"model", "", DATA_STRING, "Bresser-5in1",
|
||||
"id", "", DATA_INT, sensor_id,
|
||||
"battery", "Battery", DATA_STRING, battery_ok ? "OK": "LOW",
|
||||
"temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temperature,
|
||||
"humidity", "Humidity", DATA_INT, humidity,
|
||||
_X("wind_max_m_s","wind_gust"), "Wind Gust", DATA_FORMAT, "%.1f m/s",DATA_DOUBLE, wind_gust,
|
||||
_X("wind_avg_m_s","wind_speed"), "Wind Speed", DATA_FORMAT, "%.1f m/s",DATA_DOUBLE, wind_avg,
|
||||
"wind_dir_deg", "Direction", DATA_FORMAT, "%.1f",DATA_DOUBLE, wind_direction_deg,
|
||||
"rain_mm", "Rain", DATA_FORMAT, "%.1f mm",DATA_DOUBLE, rain,
|
||||
"mic", "Integrity", DATA_STRING, "CHECKSUM",
|
||||
NULL);
|
||||
/* clang-format on */
|
||||
}
|
||||
decoder_output_data(decoder, data);
|
||||
return 1;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue