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 refreshWeeklyScheduleCapabilities();
33 bool isWeeklyScheduleConfigUsed()
const;
34 void setupButtonActions(
Button *button);
36 void turnOn(_supla_int_t duration = 0)
override;
37 void turnOff(_supla_int_t duration = 0)
override;
39 void toggle(_supla_int_t duration = 0)
override;
40 void handleAction(
int event,
int action)
override;
48 bool runtimeActive =
true;
49 bool storageMode =
false;
50 bool logicalState =
false;
57 bool tiltFunctionsEnabled,
60 void setRuntimeActive(
bool active);
61 void forceStopAndSwitchOff();
62 void forcePublishValue();
63 bool markCalibrationLostAfterRelayMode();
66 void loadEngineConfigOnly();
67 void purgeEngineConfigOnly();
68 void setupButtonActions(
Button *button,
bool upButton,
bool asInternal);
72 void handleAction(
int event,
int action)
override;
76 void close()
override;
79 void moveUp()
override;
80 void moveDown()
override;
81 void setTargetPosition(
int newPosition,
82 int newTilt = UNKNOWN_POSITION)
override;
85 bool runtimeActive =
true;
92 bool tiltFunctionsEnabled =
true,
93 _supla_int_t relayFunctions =
95 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
100 bool tiltFunctionsEnabled =
true,
101 _supla_int_t relayFunctions =
103 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
106 bool highIsOn =
true,
107 bool tiltFunctionsEnabled =
true,
108 _supla_int_t relayFunctions =
110 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
113 void attach(
Button *primaryButton,
Button *secondaryButton,
114 bool asInternal =
true);
115 void attach(
Button *primaryButton,
119 bool asInternal =
true);
120 void attach(
Button *button,
bool primaryOrUp,
bool asInternal =
true);
121 void attach(
Button *button,
124 bool asInternal =
true);
126 Channel *getChannel()
override;
127 const Channel *getChannel()
const override;
128 Channel *getSecondaryChannel()
override;
129 const Channel *getSecondaryChannel()
const override;
131 bool isInRelayMode()
const;
132 bool isInRollerShutterMode()
const;
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;
153 bool local =
false)
override;
156 bool local)
override;
174 uint32_t newFunction)
override;
177 bool local =
false)
override;
178 void fillChannelConfig(
void *channelConfig,
180 uint8_t configType)
override;
184 bool setAndSaveFunction(uint32_t channelFunction)
override;
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);
195 struct ButtonListElement {
198 bool primaryOrUp =
true;
199 bool asInternal =
true;
200 ButtonListElement *next =
nullptr;
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();
213 void rebuildButtonActions();
214 void rebuildButtonActionsThreadSafe();
215 void appendButton(
Button *button,
219 void setupButtonAction(ButtonListElement *buttonListElement);
220 void updateActionTriggerRelatedChannel(ButtonListElement *buttonListElement);
229 bool rollerModeActive =
false;
230 bool buttonActionsInitialized =
false;
231 bool loadingConfig =
false;
232 ButtonListElement *buttonList =
nullptr;
Definition SuplaDevice.h:167
Definition action_trigger.h:32
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 roller_shutter.h:23
Definition element_with_channel_actions.h:56