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;
178 bool setAndSaveFunction(uint32_t channelFunction)
override;
194 bool isFullyInitialized()
const;
196 void enableCyclicMode(uint32_t turnOnTimeMs, uint32_t turnOffTimeMs);
197 void disableCyclicMode();
198 bool isCyclicMode()
const;
202 _supla_int_t functions,
211 void applyDuration(
int durationMs,
bool turnOn);
213 virtual void setNewChannelValue(
bool value);
215 void saveConfig()
const;
216 void loadRelayConfigOnly();
217 void purgeRelayConfigOnly();
218 void updateTimerValue();
219 void emitCountdownTimerActionIfNeeded();
220 void updateRelayHvacAggregator();
221 uint32_t durationMs = 0;
222 uint32_t storedTurnOnDurationMs = 0;
223 uint32_t durationTimestamp = 0;
224 uint32_t turnOffDurationForCycle = 0;
225 uint16_t defaultStaircaseDurationMs = 10000;
226 uint16_t defaultImpulseDurationMs = 500;
228 uint32_t overcurrentThreshold = 0;
229 uint32_t overcurrentMaxAllowed = 0;
230 uint32_t overcurrentActiveTimestamp = 0;
231 uint32_t overcurrentCheckTimestamp = 0;
233 uint32_t timerUpdateTimestamp = 0;
234 uint32_t lastCountdownTimerRemainingSec = UINT32_MAX;
235 uint32_t postponeCommTimestamp = 0;
239 uint16_t minimumAllowedDurationMs = 0;
240 int16_t defaultRelatedMeterChannelNo = -1;
242 bool keepTurnOnDurationMs =
false;
243 bool turnOffWhenEmptyAggregator =
true;
244 bool initDone =
false;
245 bool restartTimerOnToggle =
false;
246 bool skipInitialStateSetting =
false;
247 bool preloadStateOnSoftReset =
false;
249 int8_t stateOnInit = STATE_ON_INIT_OFF;
252 static int16_t relayStorageSaveDelay;