supla-device
Loading...
Searching...
No Matches
binary_base.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_BINARY_BASE_H_
5#define SRC_SUPLA_SENSOR_BINARY_BASE_H_
6
7#include <supla/channels/binary_sensor_channel.h>
8#include <supla/element_with_channel_actions.h>
9
11
12namespace Supla {
13
14namespace Sensor {
15
16#pragma pack(push, 1)
18 union {
19 uint8_t reserved[32];
20 struct {
21 uint16_t timeoutDs; // 1 ds -> 0.1 s; 0 - not used; range 1..36000
22 uint16_t filteringTimeMs; // 0 - not used; > 0 - filtering time
23 uint8_t sensitivity; // 0 - not used; 1..101 -> 0..100 %;
24 // value 1 is 0% -> off
25 uint8_t localAlarmIndication; // 0 - not used,
26 // 1 - local alarm indication disabled,
27 // 2 - local alarm indication enabled
28 };
29 };
30
31 BinarySensorConfig() : reserved{} {}
32};
33#pragma pack(pop)
34
36 public:
37 BinaryBase();
38 virtual ~BinaryBase();
39 virtual bool getValue() = 0;
40 void iterateAlways() override;
41 Channel *getChannel() override;
42 const Channel *getChannel() const override;
43 void onLoadConfig(SuplaDeviceClass *) override;
44 Supla::ApplyConfigResult applyChannelConfig(TSD_ChannelConfig *config,
45 bool local = false) override;
46
52 bool isServerInvertLogic() const;
53
63 bool setServerInvertLogic(bool invertLogic, bool local = true);
64
70 void setTurnActionSyncOnStartup(bool enabled = true);
71
79 uint16_t getTimeoutDs() const;
80
92 bool setTimeoutDs(uint16_t timeoutDs, bool local = true);
93
100 uint16_t getFilteringTimeMs() const;
101
113 bool setFilteringTimeMs(uint16_t filteringTimeMs, bool local = true);
114
122 uint8_t getSensitivity() const;
123
135 bool setSensitivity(uint8_t sensitivity, bool local = true);
136
143 uint8_t getLocalAlarmIndication() const;
144
156 bool setLocalAlarmIndication(uint8_t localAlarmIndication,
157 bool local = true);
158
165 void setReadIntervalMs(uint32_t intervalMs);
166
170 void purgeConfig() override;
171
179 void fillChannelConfig(void *channelConfig,
180 int *size,
181 uint8_t configType) override;
182
183 protected:
184 void beginInitialChannelValueRead();
185 void setInitialChannelValue(bool value);
186 void notifyInputStateChangeCandidate();
187 void setChannelValueQuietly(bool value);
188 void saveConfig();
189 void printConfig();
190 void printConfig(const TChannelConfig_BinarySensor *serverConfig);
191
192 enum class LocalActionState : uint8_t {
193 LoadingConfig,
194 Initializing,
195 StartupSync,
196 Runtime,
197 };
198
199 uint32_t lastReadTime = 0;
200 uint32_t readIntervalMs = 100;
201 uint32_t startupSyncStartTimeMs = 0;
202 LocalActionState localActionState = LocalActionState::LoadingConfig;
203 bool turnActionSyncOnStartup = false;
204 bool initialStateCandidatePending = false;
205 BinarySensorChannel channel;
206 BinarySensorConfig config;
207};
208
209} // namespace Sensor
210} // namespace Supla
211
212
213#endif // SRC_SUPLA_SENSOR_BINARY_BASE_H_
Definition SuplaDevice.h:167
Definition binary_sensor_channel.h:10
Definition channel.h:26
Definition element_with_channel_actions.h:66
Definition binary_base.h:35
bool setSensitivity(uint8_t sensitivity, bool local=true)
Set the sensitivity.
Definition binary_base.cpp:297
bool setLocalAlarmIndication(uint8_t localAlarmIndication, bool local=true)
Set the local alarm indication state.
Definition binary_base.cpp:314
uint16_t getFilteringTimeMs() const
Get the filtering time in ms.
Definition binary_base.cpp:346
void purgeConfig() override
Purge the configuration.
Definition binary_base.cpp:122
bool isServerInvertLogic() const
Get the invert logic setting.
Definition binary_base.cpp:367
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition binary_base.cpp:208
void setReadIntervalMs(uint32_t intervalMs)
Set the read interval in ms.
Definition binary_base.cpp:371
uint8_t getSensitivity() const
Get the sensitivity.
Definition binary_base.cpp:310
bool setServerInvertLogic(bool invertLogic, bool local=true)
Set the invert logic.
Definition binary_base.cpp:256
uint16_t getTimeoutDs() const
Get the timeout in deciseconds (1 == 0.1 s).
Definition binary_base.cpp:363
bool setFilteringTimeMs(uint16_t filteringTimeMs, bool local=true)
Set the filtering time in ms.
Definition binary_base.cpp:333
void onLoadConfig(SuplaDeviceClass *) override
First method called on element in SuplaDevice.begin().
Definition binary_base.cpp:58
bool setTimeoutDs(uint16_t timeoutDs, bool local=true)
Set the timeout in deciseconds (1 == 0.1 s).
Definition binary_base.cpp:350
void setTurnActionSyncOnStartup(bool enabled=true)
Enable a one-time local turn action after the initial sensor value has become stable.
Definition binary_base.cpp:281
uint8_t getLocalAlarmIndication() const
Get the local alarm indication state.
Definition binary_base.cpp:329
void fillChannelConfig(void *channelConfig, int *size, uint8_t configType) override
Fill the channel config.
Definition binary_base.cpp:378
Definition binary_base.h:17
Definition proto.h:3310
Definition proto.h:3159