10#ifndef SRC_SUPLA_CONTROL_RELAY_ROLLER_SHUTTER_PAIR_H_
11#define SRC_SUPLA_CONTROL_RELAY_ROLLER_SHUTTER_PAIR_H_
13#include <supla/channels/channel.h>
14#include <supla/control/relay.h>
15#include <supla/control/roller_shutter.h>
23class ManagedRelay :
public Relay {
27 _supla_int_t functions =
28 (0xFF ^ SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
30 void setRuntimeActive(
bool active);
31 void setStorageMode(
bool active);
32 void setLogicalState(
bool state);
36 void loadEngineConfigOnly();
37 void purgeEngineConfigOnly();
38 void setupButtonActions(
Button *button);
40 void turnOn(_supla_int_t duration = 0)
override;
41 void turnOff(_supla_int_t duration = 0)
override;
43 void toggle(_supla_int_t duration = 0)
override;
44 void handleAction(
int event,
int action)
override;
49 bool setAndSaveFunction(uint32_t channelFunction)
override;
52 bool runtimeActive =
true;
53 bool storageMode =
false;
54 bool logicalState =
false;
61 bool tiltFunctionsEnabled,
64 void setRuntimeActive(
bool active);
65 void forceStopAndSwitchOff();
66 void forcePublishValue();
67 bool markCalibrationLostAfterRelayMode();
70 void loadEngineConfigOnly();
71 void purgeEngineConfigOnly();
72 void setupButtonActions(
Button *button,
bool upButton,
bool asInternal);
76 void handleAction(
int event,
int action)
override;
80 void close()
override;
83 void moveUp()
override;
84 void moveDown()
override;
85 void setTargetPosition(
int newPosition,
86 int newTilt = UNKNOWN_POSITION)
override;
89 bool runtimeActive =
true;
92class RelayRollerShutterPair :
public ElementWithChannelActions {
96 bool tiltFunctionsEnabled =
true,
97 _supla_int_t relayFunctions =
99 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
103 bool highIsOn =
true,
104 bool tiltFunctionsEnabled =
true,
105 _supla_int_t relayFunctions =
107 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
108 RelayRollerShutterPair(
int output0,
110 bool highIsOn =
true,
111 bool tiltFunctionsEnabled =
true,
112 _supla_int_t relayFunctions =
114 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
115 ~RelayRollerShutterPair()
override;
117 void attach(
Button *primaryButton,
Button *secondaryButton,
118 bool asInternal =
true);
119 void attach(
Button *primaryButton,
123 bool asInternal =
true);
124 void attach(
Button *button,
bool primaryOrUp,
bool asInternal =
true);
125 void attach(
Button *button,
128 bool asInternal =
true);
135 bool isInRelayMode()
const;
136 bool isInRollerShutterMode()
const;
137 RelayRollerShutterPair &setDefaultStateOn();
138 RelayRollerShutterPair &setDefaultStateOff();
139 RelayRollerShutterPair &setDefaultStateRestore();
140 bool setDefaultFunctions(uint32_t primaryFunction,
141 uint32_t secondaryFunction);
149 bool local =
false)
override;
166 uint32_t newFunction)
override;
169 bool local =
false)
override;
170 void fillChannelConfig(
void *channelConfig,
172 uint8_t configType)
override;
175 bool setAndSaveFunction(uint32_t channelFunction)
override;
181 static _supla_int_t rollerFunctions(
bool tiltFunctionsEnabled);
182 static _supla_int_t relayOnlyFunctions(_supla_int_t relayFunctions);
183 static _supla_int_t primaryFunctions(_supla_int_t relayFunctions,
184 bool tiltFunctionsEnabled);
186 struct ButtonListElement {
189 bool primaryOrUp =
true;
190 bool asInternal =
true;
191 ButtonListElement *
next =
nullptr;
194 bool isPrimaryRollerFunction()
const;
195 bool isRollerFunction(uint32_t function)
const;
196 bool isPrimaryChannel(
int channelNumber)
const;
197 bool isSecondaryChannel(
int channelNumber)
const;
198 void switchToRelayMode();
199 void switchToRollerMode();
200 void applyRuntimeMode();
201 ElementWithChannelActions *primaryActiveEngine();
202 const ElementWithChannelActions *primaryActiveEngine()
const;
203 void rebuildButtonActions();
204 void rebuildButtonActionsThreadSafe();
205 void appendButton(
Button *button,
209 void setupButtonAction(ButtonListElement *buttonListElement);
210 void updateActionTriggerRelatedChannel(ButtonListElement *buttonListElement);
219 bool rollerModeActive =
false;
220 bool buttonActionsInitialized =
false;
221 ButtonListElement *buttonList =
nullptr;
Definition SuplaDevice.h:177
Definition action_trigger.h:45
Definition relay_roller_shutter_pair.h:23
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:133
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition relay_roller_shutter_pair.cpp:118
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition relay_roller_shutter_pair.cpp:126
Definition relay_roller_shutter_pair.h:57
void onTimer() override
Method called on timer interupt.
Definition relay_roller_shutter_pair.cpp:237
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition relay_roller_shutter_pair.cpp:215
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition relay_roller_shutter_pair.cpp:230
void handleChannelConfigFinished() override
Handles "channel config finished" message from server.
Definition relay_roller_shutter_pair.cpp:760
const Channel * getChannel() const override
Returns pointer to main channel.
Definition relay_roller_shutter_pair.cpp:431
uint32_t getCalcfgPendingTimeoutMs(TSD_DeviceCalCfgRequest *request) const override
Returns timeout in milliseconds for CALCFG requests that become pending.
Definition relay_roller_shutter_pair.cpp:785
void onLoadConfig(SuplaDeviceClass *sdc) override
First method called on element in SuplaDevice.begin().
Definition relay_roller_shutter_pair.cpp:801
void fillSuplaChannelNewValue(TSD_SuplaChannelNewValue *value) override
Fills TSD_SuplaChannelNewValue based on current state.
Definition relay_roller_shutter_pair.cpp:699
uint8_t handleChannelConfig(TSD_ChannelConfig *config, bool local=false) override
Handles "set channel config" request from server.
Definition relay_roller_shutter_pair.cpp:727
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition relay_roller_shutter_pair.cpp:832
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *value) override
Handles "new value" request from server.
Definition relay_roller_shutter_pair.cpp:678
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition relay_roller_shutter_pair.cpp:817
void handleSetChannelConfigResult(TSDS_SetChannelConfigResult *result) override
Handles "set channel config" reply from server.
Definition relay_roller_shutter_pair.cpp:744
void onFunctionChange(uint32_t currentFunction, uint32_t newFunction) override
Called when channel function changes.
Definition relay_roller_shutter_pair.cpp:880
bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const override
Returns active countdown timer remaining time in seconds.
Definition relay_roller_shutter_pair.cpp:716
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:864
const Channel * getSecondaryChannel() const override
Returns pointer to secondary channel.
Definition relay_roller_shutter_pair.cpp:439
void onInit() override
Third method called on element in SuplaDevice.begin().
Definition relay_roller_shutter_pair.cpp:842
void onTimer() override
Method called on timer interupt.
Definition relay_roller_shutter_pair.cpp:874
int handleCalcfgFromServer(TSD_DeviceCalCfgRequest *request) override
Handles CALCFG requests from server.
Definition relay_roller_shutter_pair.cpp:767
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition relay_roller_shutter_pair.cpp:810
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition relay_roller_shutter_pair.cpp:854
Definition roller_shutter.h:36
RollerShutter(Supla::Io::Base *io, int pinUp, int pinDown, bool highIsOn=true, bool tiltFunctionsEnabled=false)
Constructor.
Definition roller_shutter.cpp:43
Element * next()
Returns next Element from the list.
Definition element.cpp:114