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;
131 int channelNumber = -1,
132 int subDeviceId = -1);
133 virtual int refreshSensorsCount() = 0;
134 virtual void requestTemperatures() = 0;
135 virtual bool getSensorAddress(uint8_t *address,
int index) = 0;
137 int findFreeSensorSlot()
const;
138 int findNextFreeSubDeviceId()
const;
139 int findChannelNumber(
int sensorSlot)
const;
142 void notifySrpcAboutParingEnd(
int pairingResult,
const char *name =
nullptr);
143 void addressToString(
char *buffor, uint8_t bufforLength, uint8_t *address);
144 void initialSensorSearch();
148 MultiDsState state = MultiDsState::READY;
150 uint32_t pairingStartTimeMs = 0;
151 uint32_t helperTimeMs = 0;
152 uint32_t lastBusReadTime = 0;
154 uint8_t maxDeviceCount = MULTI_DS_MAX_DEVICES_COUNT;
155 uint8_t pairingTimeout = MUTLI_DS_DEFAULT_PAIRING_DURATION_SEC;
156 int channelNumberOffset = -1;
157 bool useSubDevices =
true;
158 bool channelStateDisabled =
false;
159 bool anySensorLoaded =
false;
160 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:27
Definition supla_srpc.h:46
Definition multi_ds_handler_base.h:31
void setChannelNumberOffset(uint8_t offset)
Sets the offset for channel number.
Definition multi_ds_handler_base.cpp:415
void setUseSubDevices(bool useSubDevices)
Sets the channel number offset for paired thermometers.
Definition multi_ds_handler_base.cpp:419
void onLoadConfig(SuplaDeviceClass *sdc) override
First method called on element in SuplaDevice.begin().
Definition multi_ds_handler_base.cpp:39
void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc) override
Method called each time when device successfully registers to Supla server.
Definition multi_ds_handler_base.cpp:92
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:180
void setPairingTimeout(uint8_t timeout)
Sets the timeout for the pairing process.
Definition multi_ds_handler_base.cpp:423
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition multi_ds_handler_base.cpp:77
void setMaxDeviceCount(uint8_t count)
Sets the maximum number of DS18B20 devices handled by this instance.
Definition multi_ds_handler_base.cpp:406
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition multi_ds_handler_base.cpp:105
void disableSensorsChannelState()
Disables channel state in all thermometers managed by this handler.
Definition multi_ds_handler_base.cpp:427
void searchForFirstSensorDuringInitialization()
Sets automatic single-sensor initialization mode.
Definition multi_ds_handler_base.cpp:431
Definition multi_ds_sensor.h:27