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 refreshWeeklyScheduleCapabilities();
33 bool isWeeklyScheduleConfigUsed() const;
34 void setupButtonActions(Button *button);
35
36 void turnOn(_supla_int_t duration = 0) override;
37 void turnOff(_supla_int_t duration = 0) override;
38 bool isOn() override;
39 void toggle(_supla_int_t duration = 0) override;
40 void handleAction(int event, int action) override;
42 override;
43 void iterateAlways() override;
44 bool iterateConnected() override;
45 bool setRuntimeFunction(uint32_t channelFunction) override;
46
47 private:
48 bool runtimeActive = true;
49 bool storageMode = false;
50 bool logicalState = false;
51};
52
54 public:
56 Supla::Io::IoPin pinDown,
57 bool tiltFunctionsEnabled,
58 Channel &externalChannel);
59
60 void setRuntimeActive(bool active);
61 void forceStopAndSwitchOff();
62 void forcePublishValue();
63 bool markCalibrationLostAfterRelayMode();
64 // Loads roller-specific config only. The shared channel function must already
65 // be loaded by the owner before this method is called.
66 void loadEngineConfigOnly();
67 void purgeEngineConfigOnly();
68 void setupButtonActions(Button *button, bool upButton, bool asInternal);
69
71 override;
72 void handleAction(int event, int action) override;
73 void iterateAlways() override;
74 void onTimer() override;
75
76 void close() override;
77 void open() override;
78 void stop() override;
79 void moveUp() override;
80 void moveDown() override;
81 void setTargetPosition(int newPosition,
82 int newTilt = UNKNOWN_POSITION) override;
83
84 private:
85 bool runtimeActive = true;
86};
87
89 public:
91 Supla::Io::IoPin output1,
92 bool tiltFunctionsEnabled = true,
93 _supla_int_t relayFunctions =
94 (0xFF ^
95 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
97 int output0,
98 int output1,
99 bool highIsOn = true,
100 bool tiltFunctionsEnabled = true,
101 _supla_int_t relayFunctions =
102 (0xFF ^
103 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
104 RelayRollerShutterPair(int output0,
105 int output1,
106 bool highIsOn = true,
107 bool tiltFunctionsEnabled = true,
108 _supla_int_t relayFunctions =
109 (0xFF ^
110 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
111 ~RelayRollerShutterPair() override;
112
113 void attach(Button *primaryButton, Button *secondaryButton,
114 bool asInternal = true);
115 void attach(Button *primaryButton,
116 Button *secondaryButton,
117 ActionTrigger *primaryActionTrigger,
118 ActionTrigger *secondaryActionTrigger,
119 bool asInternal = true);
120 void attach(Button *button, bool primaryOrUp, bool asInternal = true);
121 void attach(Button *button,
122 ActionTrigger *actionTrigger,
123 bool primaryOrUp,
124 bool asInternal = true);
125
126 Channel *getChannel() override;
127 const Channel *getChannel() const override;
128 Channel *getSecondaryChannel() override;
129 const Channel *getSecondaryChannel() const override;
130
131 bool isInRelayMode() const;
132 bool isInRollerShutterMode() const;
133 RelayRollerShutterPair &setDefaultStateOn();
134 RelayRollerShutterPair &setDefaultStateOff();
135 RelayRollerShutterPair &setDefaultStateRestore();
136 RelayRollerShutterPair &setPreloadStateOnSoftReset(bool enabled = true);
137 RelayRollerShutterPair &setWeeklyScheduleAvailable(bool available = true);
138 bool setDefaultFunctions(uint32_t primaryFunction,
139 uint32_t secondaryFunction);
140 bool setRuntimeFunctions(uint32_t primaryFunction,
141 uint32_t secondaryFunction);
142 Relay *getPrimaryRelay();
143 const Relay *getPrimaryRelay() const;
144 Relay *getSecondaryRelay();
145 const Relay *getSecondaryRelay() const;
146 RollerShutter *getRollerShutter();
147 const RollerShutter *getRollerShutter() const;
148
149 int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *value) override;
151 bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const override;
153 bool local = false) override;
155 bool altSchedule,
156 bool local) override;
158 TSDS_SetChannelConfigResult *result) override;
159 void handleChannelConfigFinished() override;
160 void handleChannelConfigFinished(int channelNumber) override;
161 int handleCalcfgFromServer(TSD_DeviceCalCfgRequest *request) override;
163 TSD_DeviceCalCfgRequest *request) const override;
164
165 void onLoadConfig(SuplaDeviceClass *sdc) override;
166 void purgeConfig() override;
167 void onLoadState() override;
168 void onSaveState() override;
169 void onInit() override;
170 void iterateAlways() override;
171 bool iterateConnected() override;
172 void onTimer() override;
173 void onFunctionChange(uint32_t currentFunction,
174 uint32_t newFunction) override;
175
176 ApplyConfigResult applyChannelConfig(TSD_ChannelConfig *config,
177 bool local = false) override;
178 void fillChannelConfig(void *channelConfig,
179 int *size,
180 uint8_t configType) override;
181
182 protected:
183 bool setRuntimeFunction(uint32_t channelFunction) override;
184 bool setAndSaveFunction(uint32_t channelFunction) override;
185
186 private:
187 static Supla::Io::IoPin makeOutputPin(Supla::Io::Base *io,
188 int pin,
189 bool highIsOn);
190 static _supla_int_t rollerFunctions(bool tiltFunctionsEnabled);
191 static _supla_int_t relayOnlyFunctions(_supla_int_t relayFunctions);
192 static _supla_int_t primaryFunctions(_supla_int_t relayFunctions,
193 bool tiltFunctionsEnabled);
194
195 struct ButtonListElement {
196 Button *button = nullptr;
197 ActionTrigger *actionTrigger = nullptr;
198 bool primaryOrUp = true;
199 bool asInternal = true;
200 ButtonListElement *next = nullptr;
201 };
202
203 bool isPrimaryRollerFunction() const;
204 bool isRollerFunction(uint32_t function) const;
205 bool isPrimaryChannel(int channelNumber) const;
206 bool isSecondaryChannel(int channelNumber) const;
207 void switchToRelayMode();
208 void switchToRollerMode();
209 void applyRuntimeMode();
210 void syncPrimaryWeeklyScheduleConfigType();
211 ElementWithChannelActions *primaryActiveEngine();
212 const ElementWithChannelActions *primaryActiveEngine() const;
213 void rebuildButtonActions();
214 void rebuildButtonActionsThreadSafe();
215 void appendButton(Button *button,
216 ActionTrigger *actionTrigger,
217 bool primaryOrUp,
218 bool asInternal);
219 void setupButtonAction(ButtonListElement *buttonListElement);
220 void updateActionTriggerRelatedChannel(ButtonListElement *buttonListElement);
221
222 Channel primaryChannel;
223 Channel secondaryChannel;
224
225 ManagedRelay relay0;
226 ManagedRelay relay1;
227 ManagedRollerShutter rollerShutter;
228
229 bool rollerModeActive = false;
230 bool buttonActionsInitialized = false;
231 bool loadingConfig = false;
232 ButtonListElement *buttonList = nullptr;
233};
234
235} // namespace Control
236} // namespace Supla
237
238#endif // SRC_SUPLA_CONTROL_RELAY_ROLLER_SHUTTER_PAIR_H_
Definition SuplaDevice.h:167
Definition channel.h:26
Definition action_trigger.h:32
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:149
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:142
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition relay_roller_shutter_pair.cpp:127
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition relay_roller_shutter_pair.cpp:135
Definition relay_roller_shutter_pair.h:53
void onTimer() override
Method called on timer interupt.
Definition relay_roller_shutter_pair.cpp:246
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition relay_roller_shutter_pair.cpp:224
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition relay_roller_shutter_pair.cpp:239
Definition relay_roller_shutter_pair.h:88
void handleChannelConfigFinished() override
Handles "channel config finished" message from server.
Definition relay_roller_shutter_pair.cpp:851
uint32_t getCalcfgPendingTimeoutMs(TSD_DeviceCalCfgRequest *request) const override
Returns timeout in milliseconds for CALCFG requests that become pending.
Definition relay_roller_shutter_pair.cpp:881
void onLoadConfig(SuplaDeviceClass *sdc) override
First method called on element in SuplaDevice.begin().
Definition relay_roller_shutter_pair.cpp:897
void fillSuplaChannelNewValue(TSD_SuplaChannelNewValue *value) override
Fills TSD_SuplaChannelNewValue based on current state.
Definition relay_roller_shutter_pair.cpp:771
uint8_t handleChannelConfig(TSD_ChannelConfig *config, bool local=false) override
Handles "set channel config" request from server.
Definition relay_roller_shutter_pair.cpp:799
uint8_t handleWeeklySchedule(TSD_ChannelConfig *config, bool altSchedule, bool local) override
Handles "set channel config" with "weekly schedule" type request from server.
Definition relay_roller_shutter_pair.cpp:816
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition relay_roller_shutter_pair.cpp:930
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *value) override
Handles "new value" request from server.
Definition relay_roller_shutter_pair.cpp:750
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition relay_roller_shutter_pair.cpp:915
void handleSetChannelConfigResult(TSDS_SetChannelConfigResult *result) override
Handles "set channel config" reply from server.
Definition relay_roller_shutter_pair.cpp:835
void onFunctionChange(uint32_t currentFunction, uint32_t newFunction) override
Called when channel function changes.
Definition relay_roller_shutter_pair.cpp:978
bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const override
Returns active countdown timer remaining time in seconds.
Definition relay_roller_shutter_pair.cpp:788
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:962
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition relay_roller_shutter_pair.cpp:940
void onTimer() override
Method called on timer interupt.
Definition relay_roller_shutter_pair.cpp:972
int handleCalcfgFromServer(TSD_DeviceCalCfgRequest *request) override
Handles CALCFG requests from server.
Definition relay_roller_shutter_pair.cpp:863
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition relay_roller_shutter_pair.cpp:908
bool setRuntimeFunction(uint32_t channelFunction) override
Sets channel's function at runtime.
Definition relay_roller_shutter_pair.cpp:1031
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition relay_roller_shutter_pair.cpp:952
Definition relay.h:45
Definition roller_shutter.h:23
Definition element_with_channel_actions.h:56
Definition io.h:23
Definition io_pin.h:14
Definition proto.h:3192
Definition proto.h:3176
Definition proto.h:2330
Definition proto.h:1243