4#ifndef SRC_SUPLA_SENSOR_MULTI_DS_HANDLER_BASE_H_
5#define SRC_SUPLA_SENSOR_MULTI_DS_HANDLER_BASE_H_
7#include <SuplaDevice.h>
8#include <supla/element.h>
9#include <supla/log_wrapper.h>
10#include <supla/local_action.h>
11#include <supla/device/subdevice_pairing_handler.h>
12#include <supla/device/channel_conflict_resolver.h>
14#include "multi_ds_sensor.h"
16#define MUTLI_DS_DEFAULT_PAIRING_DURATION_SEC 5
17#define MULTI_DS_MAX_DEVICES_COUNT 10
18#define MULTI_DS_MAX_ACTIONS 10
24enum class MultiDsState {
45 bool onChannelConflictReport(
46 uint8_t *channelReport,
47 uint8_t channelReportSize,
48 bool hasConflictInvalidType,
49 bool hasConflictChannelMissingOnServer,
50 bool hasConflictChannelMissingOnDevice)
override;
52 virtual double getTemperature(
const uint8_t *address) = 0;
137 int channelNumber = -1,
138 int subDeviceId = -1);
139 virtual int refreshSensorsCount() = 0;
140 virtual void requestTemperatures() = 0;
141 virtual bool getSensorAddress(uint8_t *address,
int index) = 0;
143 int findFreeSensorSlot()
const;
144 int findNextFreeSubDeviceId()
const;
145 int findChannelNumber(
int sensorSlot)
const;
148 void notifySrpcAboutParingEnd(
int pairingResult,
const char *name =
nullptr);
149 void addressToString(
char *buffor, uint8_t bufforLength, uint8_t *address);
150 void initialSensorSearch();
154 MultiDsState state = MultiDsState::READY;
156 uint32_t pairingStartTimeMs = 0;
157 uint32_t helperTimeMs = 0;
158 uint32_t lastBusReadTime = 0;
159 uint32_t refreshIntervalMs = 10000;
161 uint8_t maxDeviceCount = MULTI_DS_MAX_DEVICES_COUNT;
162 uint8_t pairingTimeout = MUTLI_DS_DEFAULT_PAIRING_DURATION_SEC;
163 int channelNumberOffset = -1;
164 bool useSubDevices =
true;
165 bool channelStateDisabled =
false;
166 bool anySensorLoaded =
false;
167 bool searchFirstDevice =
false;
Definition SuplaDevice.h:167
Definition channel_conflict_resolver.h:18
Definition subdevice_pairing_handler.h:26
Base class for all elements of SuplaDevice.
Definition element.h:30
Definition supla_srpc.h:47
Definition multi_ds_handler_base.h:31
void setChannelNumberOffset(uint8_t offset)
Sets the offset for channel number.
Definition multi_ds_handler_base.cpp:428
void setUseSubDevices(bool useSubDevices)
Sets the channel number offset for paired thermometers.
Definition multi_ds_handler_base.cpp:432
void onLoadConfig(SuplaDeviceClass *sdc) override
First method called on element in SuplaDevice.begin().
Definition multi_ds_handler_base.cpp:45
void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc) override
Method called each time when device successfully registers to Supla server.
Definition multi_ds_handler_base.cpp:98
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:193
void setRefreshIntervalMs(uint32_t intervalMs)
Sets the interval between temperature conversion requests.
Definition multi_ds_handler_base.cpp:185
void setPairingTimeout(uint8_t timeout)
Sets the timeout for the pairing process.
Definition multi_ds_handler_base.cpp:436
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition multi_ds_handler_base.cpp:83
void setMaxDeviceCount(uint8_t count)
Sets the maximum number of DS18B20 devices handled by this instance.
Definition multi_ds_handler_base.cpp:419
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition multi_ds_handler_base.cpp:111
void disableSensorsChannelState()
Disables channel state in all thermometers managed by this handler.
Definition multi_ds_handler_base.cpp:440
void searchForFirstSensorDuringInitialization()
Sets automatic single-sensor initialization mode.
Definition multi_ds_handler_base.cpp:444
Definition multi_ds_sensor.h:27