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 &setPreloadStateOnSoftReset(
bool enabled =
true);
71 virtual Relay &keepTurnOnDuration(
bool keep =
true);
73 [[deprecated(
"Use IoPin::writeActive/writeInactive instead")]]
74 virtual uint8_t pinOnValue();
75 [[deprecated(
"Use IoPin::writeActive/writeInactive instead")]]
76 virtual uint8_t pinOffValue();
77 virtual void turnOn(_supla_int_t duration = 0);
78 virtual void turnOff(_supla_int_t duration = 0);
80 virtual void toggle(_supla_int_t duration = 0);
84 void handleAction(
int event,
int action)
override;
96 bool local =
false)
override;
97 void fillChannelConfig(
void *channelConfig,
99 uint8_t configType)
override;
114 unsigned _supla_int_t getStoredTurnOnDurationMs();
115 void setStoredTurnOnDurationMs(uint32_t durationMs);
117 bool isStaircaseFunction(uint32_t functionToCheck = 0)
const;
118 bool isImpulseFunction(uint32_t functionToCheck = 0)
const;
119 void disableCountdownTimerFunction();
120 void enableCountdownTimerFunction();
121 bool isCountdownTimerFunctionEnabled()
const;
122 void setMinimumAllowedDurationMs(uint32_t durationMs);
124 static void setRelayStorageSaveDelay(
int delayMs);
126 bool isDefaultRelatedMeterChannelSet()
const;
127 uint32_t getCurrentValueFromMeter()
const;
128 void setDefaultRelatedMeterChannelNo(
int channelNo);
129 void setTurnOffWhenEmptyAggregator(
bool turnOff);
165 defaultStaircaseDurationMs = durationMs;
174 defaultImpulseDurationMs = durationMs;
177 bool setAndSaveFunction(uint32_t channelFunction)
override;
193 bool isFullyInitialized()
const;
195 void enableCyclicMode(uint32_t turnOnTimeMs, uint32_t turnOffTimeMs);
196 void disableCyclicMode();
197 bool isCyclicMode()
const;
201 _supla_int_t functions,
210 void applyDuration(
int durationMs,
bool turnOn);
212 virtual void setNewChannelValue(
bool value);
214 void saveConfig()
const;
215 void loadRelayConfigOnly();
216 void purgeRelayConfigOnly();
217 void updateTimerValue();
218 void emitCountdownTimerActionIfNeeded();
219 void updateRelayHvacAggregator();
220 uint32_t durationMs = 0;
221 uint32_t storedTurnOnDurationMs = 0;
222 uint32_t durationTimestamp = 0;
223 uint32_t turnOffDurationForCycle = 0;
224 uint16_t defaultStaircaseDurationMs = 10000;
225 uint16_t defaultImpulseDurationMs = 500;
227 uint32_t overcurrentThreshold = 0;
228 uint32_t overcurrentMaxAllowed = 0;
229 uint32_t overcurrentActiveTimestamp = 0;
230 uint32_t overcurrentCheckTimestamp = 0;
232 uint32_t timerUpdateTimestamp = 0;
233 uint32_t lastCountdownTimerRemainingSec = UINT32_MAX;
234 uint32_t postponeCommTimestamp = 0;
238 uint16_t minimumAllowedDurationMs = 0;
239 int16_t defaultRelatedMeterChannelNo = -1;
241 bool keepTurnOnDurationMs =
false;
242 bool turnOffWhenEmptyAggregator =
true;
243 bool initDone =
false;
244 bool restartTimerOnToggle =
false;
245 bool skipInitialStateSetting =
false;
246 bool preloadStateOnSoftReset =
false;
248 int8_t stateOnInit = STATE_ON_INIT_OFF;
251 static int16_t relayStorageSaveDelay;