supla-device
Loading...
Searching...
No Matches
DHT.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_SENSOR_DHT_H_
5#define SRC_SUPLA_SENSOR_DHT_H_
6
7#include <DHT.h>
8
9#include "therm_hygro_meter.h"
10
11namespace Supla {
12namespace Sensor {
13class DHT : public ThermHygroMeter {
14 public:
15 DHT(int pin, int dhtType) : dht(pin, dhtType) {
16 dht.begin();
17 delay(100);
18 retryCountTemp = 0;
19 retryCountHumi = 0;
20 lastValidTemp = TEMPERATURE_NOT_AVAILABLE;
21 lastValidHumi = HUMIDITY_NOT_AVAILABLE;
22 }
23
24 double getTemp() {
25 double value = TEMPERATURE_NOT_AVAILABLE;
26 value = dht.readTemperature();
27 if (isnan(value)) {
28 value = TEMPERATURE_NOT_AVAILABLE;
29 }
30
31 if (value == TEMPERATURE_NOT_AVAILABLE) {
32 retryCountTemp++;
33 if (retryCountTemp > 3) {
34 retryCountTemp = 0;
35 } else {
36 value = lastValidTemp;
37 }
38 } else {
39 retryCountTemp = 0;
40 }
41 lastValidTemp = value;
42
43 return value;
44 }
45
46 double getHumi() {
47 double value = HUMIDITY_NOT_AVAILABLE;
48 value = dht.readHumidity();
49 if (isnan(value)) {
50 value = HUMIDITY_NOT_AVAILABLE;
51 }
52
53 if (value == HUMIDITY_NOT_AVAILABLE) {
54 retryCountHumi++;
55 if (retryCountHumi > 3) {
56 retryCountHumi = 0;
57 } else {
58 value = lastValidHumi;
59 }
60 } else {
61 retryCountHumi = 0;
62 }
63 lastValidHumi = value;
64
65 return value;
66 }
67
68 protected:
69 ::DHT dht;
70 double lastValidTemp;
71 double lastValidHumi;
72 int8_t retryCountTemp;
73 int8_t retryCountHumi;
74};
75
76}; // namespace Sensor
77}; // namespace Supla
78
79#endif // SRC_SUPLA_SENSOR_DHT_H_
static Element * begin()
Returns first Element (based on creation order)
Definition element.cpp:51
Definition DHT.h:13
Definition therm_hygro_meter.h:14