51class Relay :
public ChannelElement,
public ActionHandler {
54 _supla_int_t functions =
55 (0xFF ^ SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
58 _supla_int_t functions = (0xFF ^
59 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
60 explicit Relay(
int pin,
62 _supla_int_t functions = (0xFF ^
63 SUPLA_BIT_FUNC_CONTROLLINGTHEROLLERSHUTTER));
67 virtual Relay &setDefaultStateOn();
68 virtual Relay &setDefaultStateOff();
69 virtual Relay &setDefaultStateRestore();
70 virtual Relay &keepTurnOnDuration(
bool keep =
true);
72 [[deprecated(
"Use IoPin::writeActive/writeInactive instead")]]
73 virtual uint8_t pinOnValue();
74 [[deprecated(
"Use IoPin::writeActive/writeInactive instead")]]
75 virtual uint8_t pinOffValue();
76 virtual void turnOn(_supla_int_t duration = 0);
77 virtual void turnOff(_supla_int_t duration = 0);
79 virtual void toggle(_supla_int_t duration = 0);
83 void handleAction(
int event,
int action)
override;
95 bool local =
false)
override;
96 void fillChannelConfig(
void *channelConfig,
98 uint8_t configType)
override;
105 unsigned _supla_int_t getStoredTurnOnDurationMs();
106 void setStoredTurnOnDurationMs(uint32_t durationMs);
108 bool isStaircaseFunction(uint32_t functionToCheck = 0)
const;
109 bool isImpulseFunction(uint32_t functionToCheck = 0)
const;
110 void disableCountdownTimerFunction();
111 void enableCountdownTimerFunction();
112 bool isCountdownTimerFunctionEnabled()
const;
113 void setMinimumAllowedDurationMs(uint32_t durationMs);
115 static void setRelayStorageSaveDelay(
int delayMs);
117 bool isDefaultRelatedMeterChannelSet()
const;
118 uint32_t getCurrentValueFromMeter()
const;
119 void setDefaultRelatedMeterChannelNo(
int channelNo);
120 void setTurnOffWhenEmptyAggregator(
bool turnOff);
156 defaultStaircaseDurationMs = durationMs;
165 defaultImpulseDurationMs = durationMs;
168 bool setAndSaveFunction(uint32_t channelFunction)
override;
184 bool isFullyInitialized()
const;
186 void enableCyclicMode(uint32_t turnOnTimeMs, uint32_t turnOffTimeMs);
187 void disableCyclicMode();
188 bool isCyclicMode()
const;
196 void applyDuration(
int durationMs,
bool turnOn);
198 virtual void setNewChannelValue(
bool value);
200 void saveConfig()
const;
201 void updateTimerValue();
202 void updateRelayHvacAggregator();
203 uint32_t durationMs = 0;
204 uint32_t storedTurnOnDurationMs = 0;
205 uint32_t durationTimestamp = 0;
206 uint32_t turnOffDurationForCycle = 0;
207 uint16_t defaultStaircaseDurationMs = 10000;
208 uint16_t defaultImpulseDurationMs = 500;
210 uint32_t overcurrentThreshold = 0;
211 uint32_t overcurrentMaxAllowed = 0;
212 uint32_t overcurrentActiveTimestamp = 0;
213 uint32_t overcurrentCheckTimestamp = 0;
215 uint32_t timerUpdateTimestamp = 0;
216 uint32_t postponeCommTimestamp = 0;
220 uint16_t minimumAllowedDurationMs = 0;
221 int16_t defaultRelatedMeterChannelNo = -1;
223 bool keepTurnOnDurationMs =
false;
224 bool turnOffWhenEmptyAggregator =
true;
225 bool initDone =
false;
226 bool restartTimerOnToggle =
false;
227 bool skipInitialStateSetting =
false;
229 int8_t stateOnInit = STATE_ON_INIT_OFF;
232 static int16_t relayStorageSaveDelay;