4#ifndef SRC_SUPLA_CONTROL_RELAY_ROLLER_SHUTTER_PAIR_H_
5#define SRC_SUPLA_CONTROL_RELAY_ROLLER_SHUTTER_PAIR_H_
7#include <supla/channels/channel.h>
8#include <supla/control/relay.h>
9#include <supla/control/roller_shutter.h>
21 _supla_int_t functions =
22 (0xFF ^ SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
24 void setRuntimeActive(
bool active);
25 void setStorageMode(
bool active);
26 void setLogicalState(
bool state);
30 void loadEngineConfigOnly();
31 void purgeEngineConfigOnly();
32 void setupButtonActions(
Button *button);
34 void turnOn(_supla_int_t duration = 0)
override;
35 void turnOff(_supla_int_t duration = 0)
override;
37 void toggle(_supla_int_t duration = 0)
override;
38 void handleAction(
int event,
int action)
override;
46 bool runtimeActive =
true;
47 bool storageMode =
false;
48 bool logicalState =
false;
55 bool tiltFunctionsEnabled,
58 void setRuntimeActive(
bool active);
59 void forceStopAndSwitchOff();
60 void forcePublishValue();
61 bool markCalibrationLostAfterRelayMode();
64 void loadEngineConfigOnly();
65 void purgeEngineConfigOnly();
66 void setupButtonActions(
Button *button,
bool upButton,
bool asInternal);
70 void handleAction(
int event,
int action)
override;
74 void close()
override;
77 void moveUp()
override;
78 void moveDown()
override;
79 void setTargetPosition(
int newPosition,
80 int newTilt = UNKNOWN_POSITION)
override;
83 bool runtimeActive =
true;
90 bool tiltFunctionsEnabled =
true,
91 _supla_int_t relayFunctions =
93 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
98 bool tiltFunctionsEnabled =
true,
99 _supla_int_t relayFunctions =
101 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
104 bool highIsOn =
true,
105 bool tiltFunctionsEnabled =
true,
106 _supla_int_t relayFunctions =
108 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
111 void attach(
Button *primaryButton,
Button *secondaryButton,
112 bool asInternal =
true);
113 void attach(
Button *primaryButton,
117 bool asInternal =
true);
118 void attach(
Button *button,
bool primaryOrUp,
bool asInternal =
true);
119 void attach(
Button *button,
122 bool asInternal =
true);
124 Channel *getChannel()
override;
125 const Channel *getChannel()
const override;
126 Channel *getSecondaryChannel()
override;
127 const Channel *getSecondaryChannel()
const override;
129 bool isInRelayMode()
const;
130 bool isInRollerShutterMode()
const;
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;
150 bool local =
false)
override;
168 uint32_t newFunction)
override;
171 bool local =
false)
override;
172 void fillChannelConfig(
void *channelConfig,
174 uint8_t configType)
override;
178 bool setAndSaveFunction(uint32_t channelFunction)
override;
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);
189 struct ButtonListElement {
192 bool primaryOrUp =
true;
193 bool asInternal =
true;
194 ButtonListElement *next =
nullptr;
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();
206 void rebuildButtonActions();
207 void rebuildButtonActionsThreadSafe();
208 void appendButton(
Button *button,
212 void setupButtonAction(ButtonListElement *buttonListElement);
213 void updateActionTriggerRelatedChannel(ButtonListElement *buttonListElement);
222 bool rollerModeActive =
false;
223 bool buttonActionsInitialized =
false;
224 bool loadingConfig =
false;
225 ButtonListElement *buttonList =
nullptr;
Definition SuplaDevice.h:167
Definition action_trigger.h:30
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 roller_shutter.h:23
Definition element_with_channel_actions.h:66