supla-device
Loading...
Searching...
No Matches
valve_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_CONTROL_VALVE_BASE_H_
5#define SRC_SUPLA_CONTROL_VALVE_BASE_H_
6
7#include <supla/channel_element.h>
8#include <supla-common/proto.h>
9#include <supla/action_handler.h>
10
11namespace Supla {
12namespace Control {
13
14#define SUPLA_VALVE_SENSOR_MAX 20
15
16#pragma pack(push, 1)
19 uint8_t sensorData[SUPLA_VALVE_SENSOR_MAX];
20 uint8_t closeValveOnFloodType = 0; // SUPLA_VALVE_CLOSE_ON_FLOOD_TYPE_*
21 uint8_t reserved[31] = {};
22};
23#pragma pack(pop)
24
29class ValveBase : public ChannelElement, public ActionHandler {
30 public:
37 explicit ValveBase(bool openClose = true);
38
39 void onInit() override;
40 void iterateAlways() override;
41 void onLoadConfig(SuplaDeviceClass *) override;
42 void onLoadState() override;
43 void onSaveState() override;
44 Supla::ApplyConfigResult applyChannelConfig(TSD_ChannelConfig *result,
45 bool local = false) override;
46 void fillChannelConfig(void *channelConfig,
47 int *size,
48 uint8_t configType) override;
49 int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override;
50 void purgeConfig() override;
51
62 void handleAction(int event, int action) override;
63
67 void openValve();
68
72 void closeValve();
73
80 void setValve(uint8_t openLevel);
81
82
88 bool isFloodDetected();
89
93 void printConfig() const;
94
100 void saveConfig(bool local = true);
101
109 virtual void setValueOnDevice(uint8_t openLevel);
110
118 virtual uint8_t getValueOpenStateFromDevice();
119
129 bool addSensor(uint8_t channelNumber);
130
139 bool removeSensor(uint8_t channelNumber);
140
151 void setIgnoreManuallyOpenedTimeMs(uint32_t timeMs);
152
159 void setDefaultCloseValveOnFloodType(uint8_t type);
160
161 protected:
162 ValveConfig config = {};
163 uint32_t lastSensorsCheckTimestamp = 0;
164 uint32_t lastUpdateTimestamp = 0;
165 uint32_t lastCmdTimestamp = 0;
166 uint32_t ignoreManuallyOpenedTimeMs = 30000;
167 uint8_t lastOpenLevelState = 0;
168 uint8_t defaultCloseValveOnFloodType = SUPLA_VALVE_CLOSE_ON_FLOOD_TYPE_NONE;
169 bool previousSensorState[SUPLA_VALVE_SENSOR_MAX] = {};
170};
171
172}; // namespace Control
173}; // namespace Supla
174
175#endif // SRC_SUPLA_CONTROL_VALVE_BASE_H_
Definition SuplaDevice.h:167
Definition action_handler.h:8
Definition channel_element.h:15
ValveBase class is used to handle SUPLA_CHANNEL_TYPE_VALVE_OPENCLOSE and SUPLA_CHANNEL_TYPE_VALVE_PER...
Definition valve_base.h:29
void closeValve()
Close valve.
Definition valve_base.cpp:336
bool removeSensor(uint8_t channelNumber)
Remove sensor from the channel's configuration.
Definition valve_base.cpp:434
void printConfig() const
Print current configuration in logs (for debug purpose)
Definition valve_base.cpp:172
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition valve_base.cpp:39
void onLoadConfig(SuplaDeviceClass *) override
First method called on element in SuplaDevice.begin().
Definition valve_base.cpp:141
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition valve_base.cpp:185
virtual uint8_t getValueOpenStateFromDevice()
Get value from device or any other interface.
Definition valve_base.cpp:456
bool addSensor(uint8_t channelNumber)
Add sensor to the channel's configuration.
Definition valve_base.cpp:391
void setIgnoreManuallyOpenedTimeMs(uint32_t timeMs)
Set ignore manually opened time in milliseconds.
Definition valve_base.cpp:469
void setDefaultCloseValveOnFloodType(uint8_t type)
Set default close valve on flood type.
Definition valve_base.cpp:495
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition valve_base.cpp:212
void setValve(uint8_t openLevel)
Set valve.
Definition valve_base.cpp:344
void handleAction(int event, int action) override
Implementation of ActionHandler::handleAction.
Definition valve_base.cpp:473
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition valve_base.cpp:162
void saveConfig(bool local=true)
Save current configuration to Config.
Definition valve_base.cpp:363
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition valve_base.cpp:118
bool isFloodDetected()
Check all sensors and return true if flood is detected.
Definition valve_base.cpp:73
void openValve()
Open valve.
Definition valve_base.cpp:340
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition valve_base.cpp:35
ValveBase(bool openClose=true)
Constructor.
Definition valve_base.cpp:22
virtual void setValueOnDevice(uint8_t openLevel)
Set value on device or any other interface.
Definition valve_base.cpp:463
Definition valve_base.h:17
Definition proto.h:3430
Definition proto.h:1222