supla-device
Loading...
Searching...
No Matches
relay_roller_shutter_pair.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_RELAY_ROLLER_SHUTTER_PAIR_H_
5#define SRC_SUPLA_CONTROL_RELAY_ROLLER_SHUTTER_PAIR_H_
6
7#include <supla/channels/channel.h>
8#include <supla/control/relay.h>
9#include <supla/control/roller_shutter.h>
10#include <supla/io.h>
11
12namespace Supla {
13namespace Control {
14class ActionTrigger;
15class Button;
16
17class ManagedRelay : public Relay {
18 public:
20 Channel &externalChannel,
21 _supla_int_t functions =
22 (0xFF ^ SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
23
24 void setRuntimeActive(bool active);
25 void setStorageMode(bool active);
26 void setLogicalState(bool state);
27 void forceOff();
28 // Loads relay-specific config only. The shared channel function must already
29 // be loaded by the owner before this method is called.
30 void loadEngineConfigOnly();
31 void purgeEngineConfigOnly();
32 void setupButtonActions(Button *button);
33
34 void turnOn(_supla_int_t duration = 0) override;
35 void turnOff(_supla_int_t duration = 0) override;
36 bool isOn() override;
37 void toggle(_supla_int_t duration = 0) override;
38 void handleAction(int event, int action) override;
40 override;
41 void iterateAlways() override;
42 bool iterateConnected() override;
43 bool setRuntimeFunction(uint32_t channelFunction) override;
44
45 private:
46 bool runtimeActive = true;
47 bool storageMode = false;
48 bool logicalState = false;
49};
50
52 public:
54 Supla::Io::IoPin pinDown,
55 bool tiltFunctionsEnabled,
56 Channel &externalChannel);
57
58 void setRuntimeActive(bool active);
59 void forceStopAndSwitchOff();
60 void forcePublishValue();
61 bool markCalibrationLostAfterRelayMode();
62 // Loads roller-specific config only. The shared channel function must already
63 // be loaded by the owner before this method is called.
64 void loadEngineConfigOnly();
65 void purgeEngineConfigOnly();
66 void setupButtonActions(Button *button, bool upButton, bool asInternal);
67
69 override;
70 void handleAction(int event, int action) override;
71 void iterateAlways() override;
72 void onTimer() override;
73
74 void close() override;
75 void open() override;
76 void stop() override;
77 void moveUp() override;
78 void moveDown() override;
79 void setTargetPosition(int newPosition,
80 int newTilt = UNKNOWN_POSITION) override;
81
82 private:
83 bool runtimeActive = true;
84};
85
87 public:
89 Supla::Io::IoPin output1,
90 bool tiltFunctionsEnabled = true,
91 _supla_int_t relayFunctions =
92 (0xFF ^
93 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
95 int output0,
96 int output1,
97 bool highIsOn = true,
98 bool tiltFunctionsEnabled = true,
99 _supla_int_t relayFunctions =
100 (0xFF ^
101 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
102 RelayRollerShutterPair(int output0,
103 int output1,
104 bool highIsOn = true,
105 bool tiltFunctionsEnabled = true,
106 _supla_int_t relayFunctions =
107 (0xFF ^
108 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
109 ~RelayRollerShutterPair() override;
110
111 void attach(Button *primaryButton, Button *secondaryButton,
112 bool asInternal = true);
113 void attach(Button *primaryButton,
114 Button *secondaryButton,
115 ActionTrigger *primaryActionTrigger,
116 ActionTrigger *secondaryActionTrigger,
117 bool asInternal = true);
118 void attach(Button *button, bool primaryOrUp, bool asInternal = true);
119 void attach(Button *button,
120 ActionTrigger *actionTrigger,
121 bool primaryOrUp,
122 bool asInternal = true);
123
124 Channel *getChannel() override;
125 const Channel *getChannel() const override;
126 Channel *getSecondaryChannel() override;
127 const Channel *getSecondaryChannel() const override;
128
129 bool isInRelayMode() const;
130 bool isInRollerShutterMode() const;
131 RelayRollerShutterPair &setDefaultStateOn();
132 RelayRollerShutterPair &setDefaultStateOff();
133 RelayRollerShutterPair &setDefaultStateRestore();
134 RelayRollerShutterPair &setPreloadStateOnSoftReset(bool enabled = true);
135 bool setDefaultFunctions(uint32_t primaryFunction,
136 uint32_t secondaryFunction);
137 bool setRuntimeFunctions(uint32_t primaryFunction,
138 uint32_t secondaryFunction);
139 Relay *getPrimaryRelay();
140 const Relay *getPrimaryRelay() const;
141 Relay *getSecondaryRelay();
142 const Relay *getSecondaryRelay() const;
143 RollerShutter *getRollerShutter();
144 const RollerShutter *getRollerShutter() const;
145
146 int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *value) override;
148 bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const override;
150 bool local = false) override;
152 TSDS_SetChannelConfigResult *result) override;
153 void handleChannelConfigFinished() override;
154 void handleChannelConfigFinished(int channelNumber) override;
155 int handleCalcfgFromServer(TSD_DeviceCalCfgRequest *request) override;
157 TSD_DeviceCalCfgRequest *request) const override;
158
159 void onLoadConfig(SuplaDeviceClass *sdc) override;
160 void purgeConfig() override;
161 void onLoadState() override;
162 void onSaveState() override;
163 void onInit() override;
164 void iterateAlways() override;
165 bool iterateConnected() override;
166 void onTimer() override;
167 void onFunctionChange(uint32_t currentFunction,
168 uint32_t newFunction) override;
169
170 ApplyConfigResult applyChannelConfig(TSD_ChannelConfig *config,
171 bool local = false) override;
172 void fillChannelConfig(void *channelConfig,
173 int *size,
174 uint8_t configType) override;
175
176 protected:
177 bool setRuntimeFunction(uint32_t channelFunction) override;
178 bool setAndSaveFunction(uint32_t channelFunction) override;
179
180 private:
181 static Supla::Io::IoPin makeOutputPin(Supla::Io::Base *io,
182 int pin,
183 bool highIsOn);
184 static _supla_int_t rollerFunctions(bool tiltFunctionsEnabled);
185 static _supla_int_t relayOnlyFunctions(_supla_int_t relayFunctions);
186 static _supla_int_t primaryFunctions(_supla_int_t relayFunctions,
187 bool tiltFunctionsEnabled);
188
189 struct ButtonListElement {
190 Button *button = nullptr;
191 ActionTrigger *actionTrigger = nullptr;
192 bool primaryOrUp = true;
193 bool asInternal = true;
194 ButtonListElement *next = nullptr;
195 };
196
197 bool isPrimaryRollerFunction() const;
198 bool isRollerFunction(uint32_t function) const;
199 bool isPrimaryChannel(int channelNumber) const;
200 bool isSecondaryChannel(int channelNumber) const;
201 void switchToRelayMode();
202 void switchToRollerMode();
203 void applyRuntimeMode();
204 ElementWithChannelActions *primaryActiveEngine();
205 const ElementWithChannelActions *primaryActiveEngine() const;
206 void rebuildButtonActions();
207 void rebuildButtonActionsThreadSafe();
208 void appendButton(Button *button,
209 ActionTrigger *actionTrigger,
210 bool primaryOrUp,
211 bool asInternal);
212 void setupButtonAction(ButtonListElement *buttonListElement);
213 void updateActionTriggerRelatedChannel(ButtonListElement *buttonListElement);
214
215 Channel primaryChannel;
216 Channel secondaryChannel;
217
218 ManagedRelay relay0;
219 ManagedRelay relay1;
220 ManagedRollerShutter rollerShutter;
221
222 bool rollerModeActive = false;
223 bool buttonActionsInitialized = false;
224 bool loadingConfig = false;
225 ButtonListElement *buttonList = nullptr;
226};
227
228} // namespace Control
229} // namespace Supla
230
231#endif // SRC_SUPLA_CONTROL_RELAY_ROLLER_SHUTTER_PAIR_H_
Definition SuplaDevice.h:167
Definition channel.h:20
Definition action_trigger.h:30
Definition button.h:21
Definition relay_roller_shutter_pair.h:17
bool setRuntimeFunction(uint32_t channelFunction) override
Sets channel's function at runtime.
Definition relay_roller_shutter_pair.cpp:134
bool iterateConnected() override
Method called on each SuplaDevice iteration when device is connected and registered to Supla server o...
Definition relay_roller_shutter_pair.cpp:127
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition relay_roller_shutter_pair.cpp:112
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition relay_roller_shutter_pair.cpp:120
Definition relay_roller_shutter_pair.h:51
void onTimer() override
Method called on timer interupt.
Definition relay_roller_shutter_pair.cpp:231
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition relay_roller_shutter_pair.cpp:209
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition relay_roller_shutter_pair.cpp:224
Definition relay_roller_shutter_pair.h:86
void handleChannelConfigFinished() override
Handles "channel config finished" message from server.
Definition relay_roller_shutter_pair.cpp:797
uint32_t getCalcfgPendingTimeoutMs(TSD_DeviceCalCfgRequest *request) const override
Returns timeout in milliseconds for CALCFG requests that become pending.
Definition relay_roller_shutter_pair.cpp:827
void onLoadConfig(SuplaDeviceClass *sdc) override
First method called on element in SuplaDevice.begin().
Definition relay_roller_shutter_pair.cpp:843
void fillSuplaChannelNewValue(TSD_SuplaChannelNewValue *value) override
Fills TSD_SuplaChannelNewValue based on current state.
Definition relay_roller_shutter_pair.cpp:736
uint8_t handleChannelConfig(TSD_ChannelConfig *config, bool local=false) override
Handles "set channel config" request from server.
Definition relay_roller_shutter_pair.cpp:764
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition relay_roller_shutter_pair.cpp:876
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *value) override
Handles "new value" request from server.
Definition relay_roller_shutter_pair.cpp:715
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition relay_roller_shutter_pair.cpp:861
void handleSetChannelConfigResult(TSDS_SetChannelConfigResult *result) override
Handles "set channel config" reply from server.
Definition relay_roller_shutter_pair.cpp:781
void onFunctionChange(uint32_t currentFunction, uint32_t newFunction) override
Called when channel function changes.
Definition relay_roller_shutter_pair.cpp:924
bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const override
Returns active countdown timer remaining time in seconds.
Definition relay_roller_shutter_pair.cpp:753
bool iterateConnected() override
Method called on each SuplaDevice iteration when device is connected and registered to Supla server o...
Definition relay_roller_shutter_pair.cpp:908
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition relay_roller_shutter_pair.cpp:886
void onTimer() override
Method called on timer interupt.
Definition relay_roller_shutter_pair.cpp:918
int handleCalcfgFromServer(TSD_DeviceCalCfgRequest *request) override
Handles CALCFG requests from server.
Definition relay_roller_shutter_pair.cpp:809
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition relay_roller_shutter_pair.cpp:854
bool setRuntimeFunction(uint32_t channelFunction) override
Sets channel's function at runtime.
Definition relay_roller_shutter_pair.cpp:968
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition relay_roller_shutter_pair.cpp:898
Definition relay.h:38
Definition roller_shutter.h:23
Definition element_with_channel_actions.h:66
Definition io.h:23
Definition io_pin.h:14
Definition proto.h:3446
Definition proto.h:3430
Definition proto.h:2588
Definition proto.h:1222