37 int channelNumber = -1);
59 bool local =
false)
override;
63 void fillChannelConfig(
void *channelConfig,
65 uint8_t configType)
override;
67 void handleAction(
int event,
int action)
override;
69 void setTargetMode(
int mode,
bool keepSchedule =
false);
70 void clearTemperatureSetpointHeat();
71 void clearTemperatureSetpointCool();
72 void setTemperatureSetpointHeat(
int tHeat);
73 void setTemperatureSetpointCool(
int tCool);
74 int getTemperatureSetpointHeat();
75 int getTemperatureSetpointCool();
77 int getDefaultManualMode();
78 bool isWeeklyScheduleEnabled();
79 bool isCountdownEnabled();
80 bool isThermostatDisabled();
81 bool isManualModeEnabled();
83 void saveConfig(
bool localChange =
false);
84 void saveWeeklySchedule();
85 void syncWeeklyScheduleConfigTypes();
86 bool setWeeklyScheduleController(
92 void setHeatingAndCoolingSupported(
bool supported);
93 void setHeatCoolSupported(
bool supported);
94 void setFanSupported(
bool supported);
95 void setDrySupported(
bool supported);
97 void addAvailableAlgorithm(
unsigned _supla_int16_t algorithm);
98 void removeAvailableAlgorithm(
unsigned _supla_int16_t algorithm);
99 bool isOutputControlledInternally()
const;
101 bool setUsedAlgorithm(
unsigned _supla_int16_t newAlgorithm);
102 unsigned _supla_int16_t getUsedAlgorithm(
bool forAux =
false)
const;
103 void setButtonTemperatureStep(int16_t step);
104 int16_t getCurrentHysteresis(
bool forAux)
const;
111 void addLocalUILockCapability(
enum LocalUILock capability);
112 void removeLocalUILockCapability(
enum LocalUILock capability);
114 enum LocalUILock getLocalUILockCapabilityAsEnum(uint8_t capability)
const;
115 void setLocalUILockCapabilities(uint8_t capabilities);
116 uint8_t getLocalUILockCapabilities()
const;
117 bool isLocalUILockCapabilitySupported(
enum LocalUILock capability)
const;
119 bool setLocalUILock(
enum LocalUILock lock);
120 enum LocalUILock getLocalUILock()
const;
122 void setLocalUILockTemperatureMin(int16_t min);
125 int16_t getLocalUILockTemperatureMin()
const;
127 void setLocalUILockTemperatureMax(int16_t max);
130 int16_t getLocalUILockTemperatureMax()
const;
134 void setSubfunction(uint8_t subfunction);
135 void setDefaultSubfunction(uint8_t subfunction);
138 bool setMainThermometerChannelNo(int16_t channelNo);
139 int16_t getMainThermometerChannelNo()
const;
142 bool setAuxThermometerChannelNo(int16_t channelNo);
143 int16_t getAuxThermometerChannelNo()
const;
145 void setAuxThermometerType(uint8_t type);
146 uint8_t getAuxThermometerType()
const;
148 bool setPumpSwitchChannelNo(int16_t channelNo);
149 void clearPumpSwitchChannelNo();
150 int16_t getPumpSwitchChannelNo()
const;
151 bool isPumpSwitchSet()
const;
152 bool setHeatOrColdSourceSwitchChannelNo(int16_t channelNo);
153 void clearHeatOrColdSourceSwitchChannelNo();
154 int16_t getHeatOrColdSourceSwitchChannelNo()
const;
155 bool isHeatOrColdSourceSwitchSet()
const;
156 bool setMasterThermostatChannelNo(int16_t channelNo);
157 void clearMasterThermostatChannelNo();
158 int16_t getMasterThermostatChannelNo()
const;
159 bool isMasterThermostatSet()
const;
162 void setAntiFreezeAndHeatProtectionEnabled(
bool enebled);
163 bool isAntiFreezeAndHeatProtectionEnabled()
const;
164 void setAuxMinMaxSetpointEnabled(
bool enabled);
165 bool isAuxMinMaxSetpointEnabled()
const;
167 void setTemperatureSetpointChangeSwitchesToManualMode(
bool enabled);
168 bool isTemperatureSetpointChangeSwitchesToManualMode()
const;
171 void setUseSeparateHeatCoolOutputs(
bool enabled);
172 bool isUseSeparateHeatCoolOutputs()
const;
174 void setTemperatureControlType(uint8_t);
176 uint8_t getTemperatureControlType()
const;
177 bool isTemperatureControlTypeMain()
const;
178 bool isTemperatureControlTypeAux()
const;
181 bool setMinOnTimeS(uint16_t seconds);
182 uint16_t getMinOnTimeS()
const;
183 bool isMinOnOffTimeValid(uint16_t seconds)
const;
186 bool setMinOffTimeS(uint16_t seconds);
187 uint16_t getMinOffTimeS()
const;
190 bool setOutputValueOnError(
signed char value);
191 signed char getOutputValueOnError()
const;
193 void setDefaultTemperatureRoomMin(int32_t channelFunction,
194 _supla_int16_t temperature);
195 void setDefaultTemperatureRoomMax(int32_t channelFunction,
196 _supla_int16_t temperature);
197 _supla_int16_t getDefaultTemperatureRoomMin()
const;
198 _supla_int16_t getDefaultTemperatureRoomMax()
const;
200 void initDefaultConfig();
201 void initDefaultWeeklySchedule();
202 void initDefaultAlgorithm();
203 void suspendIterateAlways();
207 void setTemperatureRoomMin(_supla_int16_t temperature);
208 void setTemperatureRoomMax(_supla_int16_t temperature);
209 void setTemperatureAuxMin(_supla_int16_t temperature);
210 void setTemperatureAuxMax(_supla_int16_t temperature);
211 void setTemperatureHisteresisMin(_supla_int16_t temperature);
212 void setTemperatureHisteresisMax(_supla_int16_t temperature);
213 void setTemperatureHeatCoolOffsetMin(_supla_int16_t temperature);
214 void setTemperatureHeatCoolOffsetMax(_supla_int16_t temperature);
215 _supla_int16_t getTemperatureRoomMin(
217 _supla_int16_t getTemperatureRoomMax(
219 _supla_int16_t getTemperatureAuxMin(
221 _supla_int16_t getTemperatureAuxMax(
223 _supla_int16_t getTemperatureHisteresisMin(
225 _supla_int16_t getTemperatureHisteresisMax(
227 _supla_int16_t getTemperatureHeatCoolOffsetMin(
229 _supla_int16_t getTemperatureHeatCoolOffsetMax(
231 _supla_int16_t getTemperatureRoomMin()
const;
232 _supla_int16_t getTemperatureRoomMax()
const;
233 _supla_int16_t getTemperatureMainMin()
const;
234 _supla_int16_t getTemperatureMainMax()
const;
235 _supla_int16_t getTemperatureAuxMin()
const;
236 _supla_int16_t getTemperatureAuxMax()
const;
237 _supla_int16_t getTemperatureHisteresisMin()
const;
238 _supla_int16_t getTemperatureHisteresisMax()
const;
239 _supla_int16_t getTemperatureHeatCoolOffsetMin()
const;
240 _supla_int16_t getTemperatureHeatCoolOffsetMax()
const;
246 bool setTemperatureFreezeProtection(_supla_int16_t temperature);
247 bool setTemperatureHeatProtection(_supla_int16_t temperature);
248 bool setTemperatureEco(_supla_int16_t temperature);
249 bool setTemperatureComfort(_supla_int16_t temperature);
250 bool setTemperatureBoost(_supla_int16_t temperature);
251 bool setTemperatureHisteresis(_supla_int16_t temperature);
252 bool setTemperatureAuxHisteresis(_supla_int16_t temperature);
253 bool setTemperatureBelowAlarm(_supla_int16_t temperature);
254 bool setTemperatureAboveAlarm(_supla_int16_t temperature);
255 bool setTemperatureAuxMinSetpoint(_supla_int16_t temperature);
256 bool setTemperatureAuxMaxSetpoint(_supla_int16_t temperature);
257 _supla_int16_t getTemperatureFreezeProtection(
259 _supla_int16_t getTemperatureHeatProtection(
261 _supla_int16_t getTemperatureEco(
263 _supla_int16_t getTemperatureComfort(
265 _supla_int16_t getTemperatureBoost(
267 _supla_int16_t getTemperatureHisteresis(
269 _supla_int16_t getTemperatureAuxHisteresis(
271 _supla_int16_t getTemperatureBelowAlarm(
273 _supla_int16_t getTemperatureAboveAlarm(
275 _supla_int16_t getTemperatureAuxMinSetpoint(
277 _supla_int16_t getTemperatureAuxMaxSetpoint(
279 _supla_int16_t getTemperatureFreezeProtection()
const;
280 _supla_int16_t getTemperatureHeatProtection()
const;
281 _supla_int16_t getTemperatureEco()
const;
282 _supla_int16_t getTemperatureComfort()
const;
283 _supla_int16_t getTemperatureBoost()
const;
284 _supla_int16_t getTemperatureHisteresis()
const;
285 _supla_int16_t getTemperatureAuxHisteresis()
const;
286 _supla_int16_t getTemperatureBelowAlarm()
const;
287 _supla_int16_t getTemperatureAboveAlarm()
const;
288 _supla_int16_t getTemperatureAuxMinSetpoint()
const;
289 _supla_int16_t getTemperatureAuxMaxSetpoint()
const;
294 bool isHeatingAndCoolingSupported()
const;
295 bool isHeatCoolSupported()
const;
296 bool isFanSupported()
const;
297 bool isDrySupported()
const;
299 bool isHeatingSubfunction()
const;
300 bool isCoolingSubfunction()
const;
302 bool isFunctionSupported(_supla_int_t channelFunction)
const;
305 bool isAltWeeklySchedule =
false)
const;
306 bool isChannelThermometer(int16_t channelNo)
const;
307 bool isChannelBinarySensor(int16_t channelNo)
const;
308 bool isChannelHvac(int16_t channelNo)
const;
309 bool isAlgorithmValid(
unsigned _supla_int16_t algorithm)
const;
311 bool fixTempearturesConfig();
314 bool isModeSupported(
int mode)
const;
317 unsigned _supla_int_t index);
318 static _supla_int16_t getTemperatureFromStruct(
321 unsigned _supla_int_t index,
322 _supla_int16_t temperature);
324 unsigned _supla_int_t index);
326 static int32_t getArrayIndex(int32_t bitIndex);
328 bool isTemperatureInMainConstrain(_supla_int16_t temperature)
const;
329 bool isTemperatureInAuxConstrain(_supla_int16_t temperature)
const;
330 bool isTemperatureFreezeProtectionValid(_supla_int16_t temperature)
const;
331 bool isTemperatureHeatProtectionValid(_supla_int16_t temperature)
const;
332 bool isTemperatureEcoValid(_supla_int16_t temperature)
const;
333 bool isTemperatureComfortValid(_supla_int16_t temperature)
const;
334 bool isTemperatureBoostValid(_supla_int16_t temperature)
const;
335 bool isTemperatureHisteresisValid(_supla_int16_t temperature)
const;
336 bool isTemperatureBelowAlarmValid(_supla_int16_t temperature)
const;
337 bool isTemperatureAboveAlarmValid(_supla_int16_t temperature)
const;
339 bool isTemperatureAuxMinSetpointValid(_supla_int16_t temperature)
const;
341 bool isTemperatureAuxMaxSetpointValid(_supla_int16_t temperature)
const;
342 bool isTemperatureInHeatCoolConstrain(_supla_int16_t tHeat,
343 _supla_int16_t tCool)
const;
345 bool isTemperatureFreezeProtectionValid(
347 bool isTemperatureHeatProtectionValid(
352 bool isTemperatureHisteresisValid(
354 bool isTemperatureAuxHisteresisValid(
356 bool isTemperatureBelowAlarmValid(
358 bool isTemperatureAboveAlarmValid(
361 bool isTemperatureAuxMinSetpointValid(
364 bool isTemperatureAuxMaxSetpointValid(
367 void clearChannelConfigChangedFlag();
368 void clearWeeklyScheduleChangedFlag();
373 bool isAltWeeklySchedule)
const;
375 bool setProgram(
int programId,
377 _supla_int16_t tHeat,
378 _supla_int16_t tCool,
379 bool isAltWeeklySchedule =
false);
381 bool setWeeklySchedule(
int index,
383 bool isAltWeeklySchedule =
false);
385 bool setWeeklySchedule(
enum DayOfWeek dayOfWeek,
389 bool isAltWeeklySchedule =
false);
390 int calculateIndex(
enum DayOfWeek dayOfWeek,
int hour,
int quarter)
const;
391 int getCurrentQuarter()
const;
393 int getCurrentProgramId()
const;
396 bool isAltWeeklySchedule =
false)
const;
398 void copyFixedChannelConfigTo(
HvacBase *hvac)
const;
401 bool turnOnWeeklySchedlue();
402 void changeFunction(uint32_t newFunction,
bool changedLocally);
403 _supla_int_t getChannelFunction();
408 bool isWeeklyScheduleEnabled()
const;
409 void setWeeklyScheduleEnabled(
bool enabled);
410 bool isWeeklyScheduleClockError()
const;
411 void setWeeklyScheduleClockError(
bool enabled);
412 bool isWeeklyScheduleTemporalOverride()
const;
413 void setWeeklyScheduleTemporalOverride(
bool enabled);
414 bool isWeeklyScheduleStartupDelay()
const;
415 void setWeeklyScheduleStartupDelay(
bool enabled);
416 int8_t getWeeklyScheduleLastProgramManualOverride()
const;
417 void setWeeklyScheduleLastProgramManualOverride(int8_t programId);
418 uint8_t getWeeklyScheduleLastManualMode()
const;
419 void setWeeklyScheduleLastManualMode(uint8_t mode);
420 void applyWeeklyScheduleSetpoints(int16_t tHeat, int16_t tCool);
421 bool isInitDone()
const;
422 void setInitDone(
bool enabled);
424 void enableDifferentialFunctionSupport();
425 bool isDifferentialFunctionSupported()
const;
426 void enableDomesticHotWaterFunctionSupport();
427 bool isDomesticHotWaterFunctionSupported()
const;
429 bool applyNewRuntimeSettings(
int mode,
432 int32_t durationSec = 0);
435 bool applyNewRuntimeSettings(
int mode, int32_t durationSec = 0);
437 _supla_int16_t getLastTemperature();
439 bool setBinarySensorChannelNo(int16_t channelNo);
440 int16_t getBinarySensorChannelNo()
const;
446 static const char *temperatureName(int32_t index);
449 _supla_int16_t getPrimaryTemp();
450 _supla_int16_t getSecondaryTemp();
452 bool isWeelkySchedulManualOverrideMode()
const;
453 void clearWaitingFlags();
455 void allowWrapAroundTemperatureSetpoints();
457 void enableInitialConfig();
461 time_t getCountDownTimerEnds()
const;
462 int32_t getRemainingCountDownTimeSec()
const;
463 void stopCountDownTimer();
465 bool ignoreAggregatorForRelay(int32_t relayChannelNumber)
const;
466 void setIgnoreDefaultPumpForAggregator(
bool);
467 void setIgnoreDefaultHeatOrColdSourceForAggregator(
bool);
469 bool isAltWeeklySchedulePossible()
const;
470 void requestWeeklyScheduleResend(
bool isAltWeeklySchedule =
false,
471 bool localChange =
false);
486 bool local)
override;
488 void setOutput(
int value,
bool force =
false);
489 void updateChannelState();
499 bool local,
bool &changed);
503 void setExternalCountdownTimer(time_t ends,
const THVACValue &restore) {
504 countdownTimerEnds = ends;
505 lastWorkingMode = restore;
507 THVACValue getCountdownRestoreValue()
const {
return lastWorkingMode; }
508 void emitCountdownTimerActionIfNeeded();
509 virtual void fillDefaultWeeklySchedule(
511 void clearLastOutputValue();
514 _supla_int16_t getTemperature(
int channelNo);
516 bool getForcedOffSensorState();
517 bool isSensorTempValid(_supla_int16_t temperature)
const;
518 bool isChannelRelay(int16_t channelNo)
const;
519 bool checkOverheatProtection(_supla_int16_t t, _supla_int16_t tAux);
520 bool checkAntifreezeProtection(_supla_int16_t t, _supla_int16_t tAux);
521 bool isAuxMinLimitReached(_supla_int16_t tAux)
const;
522 bool isAuxMaxLimitReached(_supla_int16_t tAux)
const;
525 bool checkAuxProtection(_supla_int16_t t);
526 bool isAuxProtectionEnabled()
const;
527 bool processWeeklySchedule();
529 int currentProgramId);
530 void setSetpointTemperaturesForCurrentMode(int16_t tHeat, int16_t tCool);
531 bool checkThermometersStatusForCurrentMode(_supla_int16_t t1,
532 _supla_int16_t t2)
const;
533 int evaluateHeatOutputValue(_supla_int16_t tMeasured,
534 _supla_int16_t tTarget,
535 bool forAux =
false);
536 int evaluateCoolOutputValue(_supla_int16_t tMeasured,
537 _supla_int16_t tTarget,
538 bool forAux =
false);
539 void fixTemperatureSetpoints();
540 void storeLastWorkingMode();
542 int32_t channelFunctionToIndex(int32_t channelFunction)
const;
543 void changeTemperatureSetpointsBy(int16_t tHeat, int16_t tCool);
544 void updateTimerValue();
545 void updateWeeklyScheduleConfigTypes();
546 bool isLocalConfigChangePending(
int configType)
const;
547 void persistChannelConfigChangeState();
549 bool fixReadonlyTemperature(int32_t temperatureIndex,
552 bool registerInAggregator(int16_t channelNo);
553 void unregisterInAggregator(int16_t channelNo);
555 int16_t getClosestValidTemperature(int16_t temperature)
const;
569 bool initDone =
false;
570 bool serverChannelFunctionValid =
true;
571 bool wrapAroundTemperatureSetpoints =
false;
572 bool registeredInRelayHvacAggregator =
false;
573 bool startupDelay =
true;
574 bool forcedByAux =
false;
576 uint8_t lastManualMode = 0;
577 uint8_t previousSubfunction = 0;
578 uint8_t defaultSubfunction = 0;
579 int16_t defaultMainThermometer = -1;
580 int16_t defaultAuxThermometer = -1;
581 int16_t defaultBinarySensor = -1;
582 int16_t defaultPumpSwitch = -1;
583 int16_t defaultHeatOrColdSourceSwitch = -1;
584 int16_t defaultMasterThermostat = -1;
585 int16_t defaultChannelsFlags = 0;
587 int8_t lastProgramManualOverride = -1;
588 int8_t lastValue = -111;
589 uint8_t configFixAttempt = 0;
591 int16_t lastManualSetpointHeat = INT16_MIN;
592 int16_t lastManualSetpointCool = INT16_MIN;
593 int16_t lastTemperature = 0;
594 int16_t buttonTemperatureStep = 50;
596 uint32_t lastConfigChangeTimestampMs = 0;
597 uint32_t lastIterateTimestampMs = 0;
598 uint32_t lastOutputStateChangeTimestampMs = 0;
599 uint32_t timerUpdateTimestamp = 0;
600 uint32_t lastCountdownTimerRemainingSec = UINT32_MAX;
602 time_t countdownTimerEnds = 1;
604 int16_t defaultTemperatureRoomMin[6] = {
612 int16_t defaultTemperatureRoomMax[6] = {