17#ifndef SRC_SUPLA_SENSOR_MULTI_DS_HANDLER_BASE_H_
18#define SRC_SUPLA_SENSOR_MULTI_DS_HANDLER_BASE_H_
20#include <SuplaDevice.h>
21#include <supla/element.h>
22#include <supla/log_wrapper.h>
23#include <supla/local_action.h>
24#include <supla/device/subdevice_pairing_handler.h>
25#include <supla/device/channel_conflict_resolver.h>
27#include "multi_ds_sensor.h"
29#define MUTLI_DS_DEFAULT_PAIRING_DURATION_SEC 5
30#define MULTI_DS_MAX_DEVICES_COUNT 10
31#define MULTI_DS_MAX_ACTIONS 10
37enum class MultiDsState {
42class MultiDsHandlerBase :
public Element,
47 virtual ~MultiDsHandlerBase();
58 bool onChannelConflictReport(
59 uint8_t *channelReport,
60 uint8_t channelReportSize,
61 bool hasConflictInvalidType,
62 bool hasConflictChannelMissingOnServer,
63 bool hasConflictChannelMissingOnDevice)
override;
65 virtual double getTemperature(
const uint8_t *address) = 0;
144 int channelNumber = -1,
145 int subDeviceId = -1);
146 virtual int refreshSensorsCount() = 0;
147 virtual void requestTemperatures() = 0;
148 virtual bool getSensorAddress(uint8_t *address,
int index) = 0;
151 void notifySrpcAboutParingEnd(
int pairingResult,
const char *name =
nullptr);
152 void addressToString(
char *buffor, uint8_t bufforLength, uint8_t *address);
153 void initialSensorSearch();
157 MultiDsState state = MultiDsState::READY;
159 uint32_t pairingStartTimeMs = 0;
160 uint32_t helperTimeMs = 0;
161 uint32_t lastBusReadTime = 0;
163 uint8_t maxDeviceCount = MULTI_DS_MAX_DEVICES_COUNT;
164 uint8_t pairingTimeout = MUTLI_DS_DEFAULT_PAIRING_DURATION_SEC;
165 int channelNumberOffset = -1;
166 bool useSubDevices =
true;
167 bool channelStateDisabled =
false;
168 bool anySensorLoaded =
false;
169 bool searchFirstDevice =
false;
Definition multi_ds_sensor.h:41
Definition SuplaDevice.h:162
Definition channel_conflict_resolver.h:27
Definition subdevice_pairing_handler.h:32
Definition supla_srpc.h:55
void setChannelNumberOffset(uint8_t offset)
Sets the offset for channel number.
Definition multi_ds_handler_base.cpp:353
void setUseSubDevices(bool useSubDevices)
Sets the channel number offset for paired thermometers.
Definition multi_ds_handler_base.cpp:357
void onLoadConfig(SuplaDeviceClass *sdc) override
First method called on element in SuplaDevice.begin().
Definition multi_ds_handler_base.cpp:52
void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc) override
Method called each time when device successfully registers to Supla server.
Definition multi_ds_handler_base.cpp:99
bool iterateConnected() override
Method called on each SuplaDevice iteration when device is connected and registered to Supla server o...
Definition multi_ds_handler_base.cpp:187
void setPairingTimeout(uint8_t timeout)
Sets the timeout for the pairing process.
Definition multi_ds_handler_base.cpp:361
void onInit() override
Third method called on element in SuplaDevice.begin().
Definition multi_ds_handler_base.cpp:89
void setMaxDeviceCount(uint8_t count)
Sets the maximum number of DS18B20 devices handled by this instance.
Definition multi_ds_handler_base.cpp:345
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition multi_ds_handler_base.cpp:112
void disableSensorsChannelState()
Disables channel state in all thermometers managed by this handler.
Definition multi_ds_handler_base.cpp:365
void searchForFirstSensorDuringInitialization()
Sets automatic single-sensor initialization mode.
Definition multi_ds_handler_base.cpp:369
Definition multi_ds_sensor.h:41