supla-device
Loading...
Searching...
No Matches
multi_ds_handler.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_MULTI_DS_HANDLER_H_
5#define SRC_SUPLA_SENSOR_MULTI_DS_HANDLER_H_
6
7#include "multi_ds_handler_base.h"
8
9#include <DallasTemperature.h>
10#include <OneWire.h>
11
12namespace Supla {
13namespace Sensor {
14
16 public:
17 explicit MultiDsHandler(SuplaDeviceClass *sdc, uint8_t pin) :
18 MultiDsHandlerBase(sdc, pin), oneWire(pin) {}
19
21
22 void onInit() override {
23 dallasTemperature.setOneWire(&oneWire);
24 dallasTemperature.begin();
25 dallasTemperature.setWaitForConversion(false);
26
28 }
29
30 double getTemperature(const uint8_t *address) override {
31 return dallasTemperature.getTempC(address);
32 }
33
34 double getTemperature(uint8_t idx) {
35 if (idx >= MULTI_DS_MAX_DEVICES_COUNT) {
36 return TEMPERATURE_NOT_AVAILABLE;
37 }
38
39 auto sensor = sensors[idx];
40 if (sensor == nullptr) {
41 return TEMPERATURE_NOT_AVAILABLE;
42 }
43
44 return sensor->getValue();
45 }
46
47 Supla::Sensor::MultiDsSensor * getThermometer(uint8_t idx) {
48 if (idx < MULTI_DS_MAX_DEVICES_COUNT) {
49 return sensors[idx];
50 }
51
52 return nullptr;
53 }
54
69 void setUseSynchronousCommunication(bool synchronous) {
70 dallasTemperature.setWaitForConversion(synchronous);
71 }
72
73 protected:
74 OneWire oneWire;
75 DallasTemperature dallasTemperature;
76
77 int refreshSensorsCount() override {
78 oneWire.reset_search();
79 dallasTemperature.begin();
80
81 return dallasTemperature.getDeviceCount();
82 }
83
84 void requestTemperatures() override {
85 dallasTemperature.requestTemperatures();
86 }
87
88 bool getSensorAddress(uint8_t *address, int index) override {
89 return dallasTemperature.getAddress(address, index);
90 }
91};
92
93}; // namespace Sensor
94}; // namespace Supla
95
96
97#endif // SRC_SUPLA_SENSOR_MULTI_DS_HANDLER_H_
Definition SuplaDevice.h:167
Definition multi_ds_handler_base.h:31
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition multi_ds_handler_base.cpp:77
Definition multi_ds_handler.h:15
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition multi_ds_handler.h:22
void setUseSynchronousCommunication(bool synchronous)
Enables or disables synchronous (blocking) temperature conversion.
Definition multi_ds_handler.h:69
Definition multi_ds_sensor.h:27