BresserWeatherSensorReceiver
Bresser 5-in-1/6-in-1/7-in-1 868 MHz Weather Sensor Radio Receiver for Arduino based on CC1101 or SX1276/RFM95W
Loading...
Searching...
No Matches
WeatherSensor.h
1
2// WeatherSensor.h
3//
4// Bresser 5-in-1/6-in-1/7-in-1 868 MHz Weather Sensor Radio Receiver
5// based on CC1101 or SX1276/RFM95W and ESP32/ESP8266
6//
7// https://github.com/matthias-bs/BresserWeatherSensorReceiver
8//
9// NOTE: Application/hardware specific configurations should be made in WeatherSensorCfg.h!
10//
11// Based on:
12// ---------
13// Bresser5in1-CC1101 by Sean Siford (https://github.com/seaniefs/Bresser5in1-CC1101)
14// RadioLib by Jan Gromeš (https://github.com/jgromes/RadioLib)
15// rtl433 by Benjamin Larsson (https://github.com/merbanan/rtl_433)
16// - https://github.com/merbanan/rtl_433/blob/master/src/devices/bresser_5in1.c
17// - https://github.com/merbanan/rtl_433/blob/master/src/devices/bresser_6in1.c
18// - https://github.com/merbanan/rtl_433/blob/master/src/devices/bresser_7in1.c
19//
20// created: 05/2022
21//
22//
23// MIT License
24//
25// Copyright (c) 2026 Matthias Prinke
26//
27// Permission is hereby granted, free of charge, to any person obtaining a copy
28// of this software and associated documentation files (the "Software"), to deal
29// in the Software without restriction, including without limitation the rights
30// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
31// copies of the Software, and to permit persons to whom the Software is
32// furnished to do so, subject to the following conditions:
33//
34// The above copyright notice and this permission notice shall be included in all
35// copies or substantial portions of the Software.
36//
37// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
38// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
39// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
40// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
41// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
42// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
43// SOFTWARE.
44//
45// History:
46//
47// 20220523 Created from https://github.com/matthias-bs/Bresser5in1-CC1101
48// 20220524 Moved code to class WeatherSensor
49// 20220526 Implemented getData(), changed debug output to macros
50// 20220815 Added support of multiple sensors
51// Moved windspeed_ms_to_bft() to WeatherUtils.h/.cpp
52// 20221207 Added SENSOR_TYPE_THERMO_HYGRO
53// 20220110 Added WEATHER0_RAIN_OV/WEATHER1_RAIN_OV
54// 20230228 Added Bresser 7 in 1 decoder by Jorge Navarro-Ortiz (jorgenavarro@ugr.es)
55// 20230328 Added MSG_BUF_SIZE
56// 20230330 Added changes for Adafruit Feather 32u4 LoRa Radio
57// 20230412 Added workaround for Professional Wind Gauge / Anemometer, P/N 7002531
58// 20230624 Added Bresser Lightning Sensor decoder
59// 20230708 Added SENSOR_TYPE_WEATHER_7IN1 and startup flag
60// 20230716 Added decodeMessage() to separate decoding function from receiving function
61// 20230723 Added SENSOR_TYPE_WATER
62// 20230804 Added Bresser Water Leakage Sensor decoder
63// 20231006 Added crc16() from https://github.com/merbanan/rtl_433/blob/master/src/util.c
64// 20231024 Added SENSOR_TYPE_POOL_THERMO
65// 20231025 Added Bresser Air Quality (Particulate Matter) Sensor, P/N 7009970
66// Modified device type definitions
67// 20231030 Refactored sensor data using a union to save memory
68// 20231130 Bresser 3-in-1 Professional Wind Gauge / Anemometer, PN 7002531: Replaced workaround
69// for negative temperatures by fix (6-in-1 decoder)
70// 20231227 Added sleep()
71// 20240116 Fixed width of Lightning.strike_count
72// 20240207 Added sensors for CO2, P/N 7009977 and HCHO/VOC, P/N 7009978
73// see https://github.com/merbanan/rtl_433/pull/2815
74// & https://github.com/merbanan/rtl_433/pull/2817
75// 20240213 Added PM1.0 to air quality (PM) sensor decoder
76// 20240222 Added clearing of flags in clearSlots() to prevent mixing of old and new data
77// 20240322 Added pin definitions for M5Stack Core2 with M5Stack Module LoRa868
78// 20240409 Added radioReset()
79// 20240417 Added sensor configuration at run time
80// 20240506 Changed sensor from array to std::vector, added getSensorCfg() / setSensorCfg()
81// 20240507 Added configuration of enabled decoders at run time
82// 20240608 Modified implementation of maximum number of sensors
83// 20240609 Fixed implementation of maximum number of sensors
84// 20240714 Added decoder to struct Sensor
85// 20240716 Added option to skip initialization of filters in begin()
86// 20241113 Added getting/setting of sensor include/exclude list from JSON strings
87// 20250127 Added SENSOR_TYPE_WEATHER8 (8-in-1 Weather Sensor)
88// 20251222 Added SENSOR_TYPE_WEATHER3 (3-in-1 Professional Rain Gauge)
89// 20260202 Added forward declaration of WeatherSensorReceiver namespace
90// 20260221 Improved memory safety
91// 20260430 Added setSensorsCfg() variant with rx_flags and enabled decoders
92//
93// ToDo:
94// -
95//
97
98#ifndef WeatherSensor_h
99#define WeatherSensor_h
100
101#include <Arduino.h>
102#include <vector>
103#include <string>
104#include <Preferences.h>
105#include <RadioLib.h>
106#include "WeatherSensorCfg.h"
107
108
109// Forward declaration of radio module in WeatherSensorReceiver namespace
110namespace WeatherSensorReceiver {
111 extern RADIO_CHIP radio;
112}
113
114
115// Sensor Types / Decoders / Part Numbers
116// 0 - Weather Station 5-in-1; PN 7002510..12/7902510..12
117// 1 - Weather Station 6-in-1; PN 7002585
118// - Professional Wind Gauge 6-in-1; PN 7002531
119// - Weather Station 7-in-1; PN 7003300
120// 2 - Thermo-/Hygro-Sensor 6-in-1; PN 7009999/7009971
121// 3 - Pool / Spa Thermometer 6-in-1; PN 7000073
122// 4 - Soil Moisture Sensor 6-in-1; PN 7009972
123// 5 - Water Leakage Sensor 6-in-1; PN 7009975
124// 8 - Air Quality Sensor PM2.5/PM10 7-in-1; P/N 7009970
125// 9 - Professional Rain Gauge (5-in-1 decoder)
126// 9 - Lightning Sensor PN 7009976
127// 10 - CO2 Sensor 7-in-1; PN 7009977
128// 11 - HCHO/VCO Sensor 7-in-1; PN 7009978
129// 12 - Weather Station (3-in-1) 7-in-1; PN 7002530
130// 13 - Weather Station (8-in-1) 7-in-1; PN 7003150
131#define SENSOR_TYPE_WEATHER0 0 // Weather Station
132#define SENSOR_TYPE_WEATHER1 1 // Weather Station
133#define SENSOR_TYPE_THERMO_HYGRO 2 // Thermo-/Hygro-Sensor
134#define SENSOR_TYPE_POOL_THERMO 3 // Pool / Spa Thermometer
135#define SENSOR_TYPE_SOIL 4 // Soil Temperature and Moisture (from 6-in-1 decoder)
136#define SENSOR_TYPE_LEAKAGE 5 // Water Leakage
137#define SENSOR_TYPE_AIR_PM 8 // Air Quality Sensor (Particle Matter)
138#define SENSOR_TYPE_RAIN 9 // Professional Rain Gauge (from 5-in-1 decoder)
139#define SENSOR_TYPE_LIGHTNING 9 // Lightning Sensor
140#define SENSOR_TYPE_CO2 10 // CO2 Sensor
141#define SENSOR_TYPE_HCHO_VOC 11 // Air Quality Sensor (HCHO and VOC)
142#define SENSOR_TYPE_WEATHER3 12 // Weather Station (3-in-1)
143#define SENSOR_TYPE_WEATHER8 13 // Weather Station (8-in-1)
144
145
146// Sensor specific rain gauge overflow threshold (mm)
147#define WEATHER0_RAIN_OV 1000
148#define WEATHER1_RAIN_OV 100000
149
150
151// Flags for controlling completion of reception in getData()
152#define DATA_COMPLETE 0x1 // only completed slots (as opposed to partially filled)
153#define DATA_TYPE 0x2 // at least one slot with specific sensor type
154#define DATA_ALL_SLOTS 0x8 // all slots completed
155
156// Flags for checking enabled decoders
157#define DECODER_5IN1 0x01
158#define DECODER_6IN1 0x02
159#define DECODER_7IN1 0x04
160#define DECODER_LIGHTNING 0x08
161#define DECODER_LEAKAGE 0x10
162
163// Message buffer size
164#define MSG_BUF_SIZE 27
165
166// Radio message decoding status
167typedef enum DecodeStatus {
168 DECODE_INVALID, DECODE_OK, DECODE_PAR_ERR, DECODE_CHK_ERR, DECODE_DIG_ERR, DECODE_SKIP, DECODE_FULL
169} DecodeStatus;
170
171
177typedef struct SensorMap {
178 uint32_t id;
179 String name;
180} SensorMap;
181
182
190 private:
191 Preferences cfgPrefs;
192 std::vector<uint32_t> sensor_ids_inc;
193 std::vector<uint32_t> sensor_ids_exc;
194
195 public:
201 int16_t begin(uint8_t max_sensors_default = MAX_SENSORS_DEFAULT, bool init_filters = true, double frequency_offset = 0.0);
202
206 void radioReset(void);
207
211 void sleep(void);
212
229 bool getData(uint32_t timeout, uint8_t flags = 0, uint8_t type = 0, void (*func)() = NULL);
230
231
238 DecodeStatus getMessage(void);
239
246 DecodeStatus decodeMessage(const uint8_t *msg, uint8_t msgSize);
247
248 struct Weather {
249 bool temp_ok = false;
250 bool tglobe_ok = false;
251 bool humidity_ok = false;
252 bool light_ok = false;
253 bool uv_ok = false;
254 bool wind_ok = false;
255 bool rain_ok = false;
256 float temp_c = 0.0;
257 float tglobe_c = 0.0;
258 float light_klx = 0.0;
259 float light_lux = 0.0;
260 float uv = 0.0;
261 float rain_mm = 0.0;
262 #ifdef WIND_DATA_FLOATINGPOINT
263 float wind_direction_deg = 0.0;
265 float wind_avg_meter_sec = 0.0;
266 #endif
267 #ifdef WIND_DATA_FIXEDPOINT
268 // For LoRa_Serialization:
269 // fixed point integer with 1 decimal -
270 // saves two bytes compared to "RawFloat"
274 #endif
275 uint8_t humidity = 0;
276 };
277
278 struct Soil {
279 float temp_c;
280 uint8_t moisture;
281 };
282
283 struct Lightning {
284 uint8_t distance_km;
285 uint16_t strike_count;
286 uint16_t unknown1;
287 uint16_t unknown2;
288
289 };
290
291 struct Leakage {
292 bool alarm;
293 };
294
295 struct AirPM {
296 uint16_t pm_1_0;
297 uint16_t pm_2_5;
298 uint16_t pm_10;
302 };
303
304 struct AirCO2 {
305 uint16_t co2_ppm;
306 bool co2_init;
307 };
308
309 struct AirVOC {
310 uint16_t hcho_ppb;
311 uint8_t voc_level;
313 bool voc_init;
314 };
315
321 struct Sensor {
322 uint32_t sensor_id;
323 float rssi;
324 uint8_t s_type;
325 uint8_t chan;
326 uint8_t decoder;
327 bool startup = false;
329 bool valid;
330 bool complete;
331 union {
332 struct Weather w;
333 struct Soil soil;
334 struct Lightning lgt;
335 struct Leakage leak;
336 struct AirPM pm;
337 struct AirCO2 co2;
338 struct AirVOC voc;
339 };
340
341 Sensor ()
342 {
343 #pragma GCC diagnostic push
344 #pragma GCC diagnostic ignored "-Wclass-memaccess"
345 memset(this, 0, sizeof(*this));
346 #pragma GCC diagnostic pop
347 };
348 };
349
350 typedef struct Sensor sensor_t;
351 std::vector<sensor_t> sensor;
352 float rssi = 0.0;
353 uint8_t rxFlags;
354 uint8_t enDecoders = 0xFF;
355
361 bool genMessage(int i, uint32_t id = 0xff, uint8_t s_type = 1, uint8_t channel = 0, uint8_t startup = 0);
362
363
372 void clearSlots(uint8_t type = 0xFF)
373 {
374 for (size_t i=0; i<sensor.size(); i++) {
375 if ((type == 0xFF) || (sensor[i].s_type == type)) {
376 sensor[i].valid = false;
377 sensor[i].complete = false;
378 }
379 if (sensor[i].s_type == SENSOR_TYPE_WEATHER1) {
380 sensor[i].w.temp_ok = false;
381 sensor[i].w.humidity_ok = false;
382 sensor[i].w.light_ok = false;
383 sensor[i].w.uv_ok = false;
384 sensor[i].w.wind_ok = false;
385 sensor[i].w.rain_ok = false;
386 }
387 }
388 };
389
397 int findId(uint32_t id);
398
399
408 int findType(uint8_t type, uint8_t channel = 0xFF);
409
416 void setSensorsInc(uint8_t *bytes, uint8_t size);
417
424 void setSensorsExc(uint8_t *bytes, uint8_t size);
425
433 void setSensorsCfg(uint8_t max_sensors, uint8_t rx_flags, uint8_t en_decoders = 0xFF);
434
441 void setRxCfg(uint8_t rx_flags, uint8_t en_decoders = 0xFF);
442
450 uint8_t getSensorsInc(uint8_t *payload);
451
459 uint8_t getSensorsExc(uint8_t *payload);
460
470 uint8_t convSensorsJson(std::vector<uint32_t> &ids, String json, uint8_t *buf);
471
477 void setSensorsIncJson(String json);
478
484 void setSensorsExcJson(String json);
485
493 String getSensorsJson(std::vector<uint32_t> &ids);
494
500 String getSensorsIncJson(void);
501
507 String getSensorsExcJson(void);
508
516 void getSensorsCfg(uint8_t &max_sensors, uint8_t &rx_flags, uint8_t &en_decoders);
517
518 private:
519 struct Sensor *pData;
520
530 void initList(std::vector<uint32_t> &list, const std::vector<uint32_t> list_def, const char *key);
531
549 int findSlot(uint32_t id, DecodeStatus * status);
550
551
552 #ifdef BRESSER_5_IN_1
562 DecodeStatus decodeBresser5In1Payload(const uint8_t *msg, uint8_t msgSize);
563 #endif
564 #ifdef BRESSER_6_IN_1
576 DecodeStatus decodeBresser6In1Payload(const uint8_t *msg, uint8_t msgSize);
577 #endif
578 #ifdef BRESSER_7_IN_1
588 DecodeStatus decodeBresser7In1Payload(const uint8_t *msg, uint8_t msgSize);
589 #endif
590 #ifdef BRESSER_LIGHTNING
600 DecodeStatus decodeBresserLightningPayload(const uint8_t *msg, uint8_t msgSize);
601 #endif
602 #ifdef BRESSER_LEAKAGE
612 DecodeStatus decodeBresserLeakagePayload(const uint8_t *msg, uint8_t msgSize);
613 #endif
614
615 protected:
619 uint16_t lfsr_digest16(uint8_t const message[], unsigned bytes, uint16_t gen, uint16_t key);
620
629 int add_bytes(uint8_t const message[], unsigned num_bytes);
630
641 uint16_t crc16(uint8_t const message[], unsigned nBytes, uint16_t polynomial, uint16_t init);
642
643 #if CORE_DEBUG_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG
655 void log_message(const char *descr, const uint8_t *msg, uint8_t msgSize) {
656 char buf[128];
657 const char txt[] = "Byte #: ";
658 int offs;
659 int len1 = strlen(txt);
660 int len2 = strlen(descr) + 2; // add colon and space
661 int prefix_len = max(len1, len2);
662
663 memset(buf, ' ', prefix_len);
664 buf[prefix_len] = '\0';
665 offs = (len1 < len2) ? (len2 - len1) : 0;
666 snprintf(&buf[offs], sizeof(buf) - offs - 1, "%s", txt);
667
668 // Print byte index
669 for (size_t i = 0 ; (i < msgSize) && (strlen(buf) < sizeof(buf) - 4); i++) {
670 sprintf(&buf[strlen(buf)], "%02d ", i);
671 }
672 log_d("%s", buf);
673
674 memset(buf, ' ', prefix_len);
675 buf[prefix_len] ='\0';
676 offs = (len1 > len2) ? (len1 - len2) : 0;
677 sprintf(&buf[offs], "%s: ", descr);
678
679 for (size_t i = 0 ; (i < msgSize) && (strlen(buf) < sizeof(buf) - 4); i++) {
680 sprintf(&buf[strlen(buf)], "%02X ", msg[i]);
681 }
682 log_d("%s", buf);
683 }
684 #endif
685
686};
687
688#endif
Receive, decode and store Bresser Weather Sensor Data Uses CC1101 or SX1276 radio module for receivin...
Definition WeatherSensor.h:189
DecodeStatus getMessage(void)
Tries to receive radio message (non-blocking) and to decode it. Timeout occurs after a multitude of e...
Definition WeatherSensor.cpp:454
int findId(uint32_t id)
Definition WeatherSensor.cpp:561
uint8_t convSensorsJson(std::vector< uint32_t > &ids, String json, uint8_t *buf)
Definition WeatherSensorConfig.cpp:212
void radioReset(void)
Reset radio transceiver.
Definition WeatherSensor.cpp:364
uint8_t rxFlags
receive flags (see getData())
Definition WeatherSensor.h:353
float rssi
received signal strength indicator in dBm
Definition WeatherSensor.h:352
void getSensorsCfg(uint8_t &max_sensors, uint8_t &rx_flags, uint8_t &en_decoders)
Definition WeatherSensorConfig.cpp:277
bool getData(uint32_t timeout, uint8_t flags=0, uint8_t type=0, void(*func)()=NULL)
Wait for reception of data or occurrence of timeout. With BRESSER_6_IN_1, data is distributed across ...
Definition WeatherSensor.cpp:377
void setSensorsCfg(uint8_t max_sensors, uint8_t rx_flags, uint8_t en_decoders=0xFF)
Definition WeatherSensorConfig.cpp:248
uint8_t enDecoders
enabled Decoders
Definition WeatherSensor.h:354
String getSensorsIncJson(void)
Definition WeatherSensorConfig.cpp:200
void sleep(void)
Set transceiver into sleep mode.
Definition WeatherSensor.cpp:369
String getSensorsJson(std::vector< uint32_t > &ids)
Definition WeatherSensorConfig.cpp:173
void setRxCfg(uint8_t rx_flags, uint8_t en_decoders=0xFF)
Definition WeatherSensorConfig.cpp:264
void setSensorsIncJson(String json)
Definition WeatherSensorConfig.cpp:232
void setSensorsExcJson(String json)
Definition WeatherSensorConfig.cpp:240
int findType(uint8_t type, uint8_t channel=0xFF)
Definition WeatherSensor.cpp:574
uint8_t getSensorsInc(uint8_t *payload)
Definition WeatherSensorConfig.cpp:122
bool genMessage(int i, uint32_t id=0xff, uint8_t s_type=1, uint8_t channel=0, uint8_t startup=0)
Generates data otherwise received and decoded from a radio message.
Definition WeatherSensor.cpp:504
String getSensorsExcJson(void)
Definition WeatherSensorConfig.cpp:206
std::vector< sensor_t > sensor
sensor data array
Definition WeatherSensor.h:351
int16_t begin(uint8_t max_sensors_default=MAX_SENSORS_DEFAULT, bool init_filters=true, double frequency_offset=0.0)
Presence check and initialization of radio module.
Definition WeatherSensor.cpp:214
void setSensorsInc(uint8_t *bytes, uint8_t size)
Definition WeatherSensorConfig.cpp:99
uint8_t getSensorsExc(uint8_t *payload)
Definition WeatherSensorConfig.cpp:159
void clearSlots(uint8_t type=0xFF)
Clear sensor data.
Definition WeatherSensor.h:372
DecodeStatus decodeMessage(const uint8_t *msg, uint8_t msgSize)
Decode message Tries the available decoders until a decoding was successful.
Definition WeatherSensorDecoders.cpp:149
void setSensorsExc(uint8_t *bytes, uint8_t size)
Definition WeatherSensorConfig.cpp:136
Mapping of sensor IDs to names.
Definition WeatherSensor.h:177
String name
Name of sensor (e.g. for MQTT topic)
Definition WeatherSensor.h:179
uint32_t id
ID of sensor (as transmitted in radio message)
Definition WeatherSensor.h:178
Definition WeatherSensor.h:304
bool co2_init
measurement value invalid due to initialization
Definition WeatherSensor.h:306
uint16_t co2_ppm
CO2 concentration in ppm.
Definition WeatherSensor.h:305
Definition WeatherSensor.h:295
uint16_t pm_1_0
air quality PM1.0 in µg/m³
Definition WeatherSensor.h:296
bool pm_10_init
measurement value invalid due to initialization
Definition WeatherSensor.h:301
bool pm_2_5_init
measurement value invalid due to initialization
Definition WeatherSensor.h:300
uint16_t pm_2_5
air quality PM2.5 in µg/m³
Definition WeatherSensor.h:297
bool pm_1_0_init
measurement value invalid due to initialization
Definition WeatherSensor.h:299
uint16_t pm_10
air quality PM10 in µg/m³
Definition WeatherSensor.h:298
Definition WeatherSensor.h:309
bool hcho_init
measurement value invalid due to initialization
Definition WeatherSensor.h:312
uint8_t voc_level
volatile organic compounds; 1 - bad air quality .. 5 - very good air quality
Definition WeatherSensor.h:311
bool voc_init
measurement value invalid due to initialization
Definition WeatherSensor.h:313
uint16_t hcho_ppb
formaldehyde concentration in ppb
Definition WeatherSensor.h:310
Definition WeatherSensor.h:291
bool alarm
water leakage alarm (only water leakage)
Definition WeatherSensor.h:292
Definition WeatherSensor.h:283
uint16_t unknown1
unknown part 1
Definition WeatherSensor.h:286
uint8_t distance_km
lightning distance in km (only lightning)
Definition WeatherSensor.h:284
uint16_t unknown2
unknown part 2
Definition WeatherSensor.h:287
uint16_t strike_count
lightning strike counter (only lightning)
Definition WeatherSensor.h:285
sensor data and status flags
Definition WeatherSensor.h:321
bool battery_ok
battery o.k.
Definition WeatherSensor.h:328
float rssi
received signal strength indicator in dBm
Definition WeatherSensor.h:323
uint8_t decoder
decoder used
Definition WeatherSensor.h:326
bool complete
data is split into two separate messages is complete (only 6-in-1 WS)
Definition WeatherSensor.h:330
uint8_t s_type
sensor type
Definition WeatherSensor.h:324
bool startup
startup after reset / battery change
Definition WeatherSensor.h:327
uint32_t sensor_id
sensor ID (5-in-1: 1 byte / 6-in-1: 4 bytes / 7-in-1: 2 bytes)
Definition WeatherSensor.h:322
uint8_t chan
channel
Definition WeatherSensor.h:325
bool valid
data valid (but not necessarily complete)
Definition WeatherSensor.h:329
Definition WeatherSensor.h:278
float temp_c
temperature in degC
Definition WeatherSensor.h:279
uint8_t moisture
moisture in % (only 6-in-1)
Definition WeatherSensor.h:280
Definition WeatherSensor.h:248
float light_klx
Light KLux (only 7-in-1)
Definition WeatherSensor.h:258
bool light_ok
light o.k. (only 7-in-1)
Definition WeatherSensor.h:252
float light_lux
Light lux (only 7-in-1)
Definition WeatherSensor.h:259
float wind_direction_deg
wind direction in deg
Definition WeatherSensor.h:263
bool temp_ok
temperature o.k. (only 6-in-1)
Definition WeatherSensor.h:249
float temp_c
temperature in degC
Definition WeatherSensor.h:256
uint16_t wind_gust_meter_sec_fp1
wind speed (gusts) in m/s (fixed point int w. 1 decimal)
Definition WeatherSensor.h:272
uint16_t wind_avg_meter_sec_fp1
wind speed (avg) in m/s (fixed point int w. 1 decimal)
Definition WeatherSensor.h:273
uint8_t humidity
humidity in %
Definition WeatherSensor.h:275
float uv
uv radiation (only 6-in-1 & 7-in-1)
Definition WeatherSensor.h:260
bool humidity_ok
humidity o.k.
Definition WeatherSensor.h:251
bool wind_ok
wind speed/direction o.k. (only 6-in-1)
Definition WeatherSensor.h:254
uint16_t wind_direction_deg_fp1
wind direction in deg (fixed point int w. 1 decimal)
Definition WeatherSensor.h:271
bool uv_ok
uv radiation o.k. (only 6-in-1)
Definition WeatherSensor.h:253
float rain_mm
rain gauge level in mm
Definition WeatherSensor.h:261
float tglobe_c
globe temperature in degC (only 8-in-1)
Definition WeatherSensor.h:257
float wind_gust_meter_sec
wind speed (gusts) in m/s
Definition WeatherSensor.h:264
float wind_avg_meter_sec
wind speed (avg) in m/s
Definition WeatherSensor.h:265
bool rain_ok
rain gauge level o.k.
Definition WeatherSensor.h:255
bool tglobe_ok
globe temperature o.k. (only 8-in-1)
Definition WeatherSensor.h:250