62 bool local =
false)
override;
64 bool altSchedule =
false,
65 bool local =
false)
override;
70 void handleAction(
int event,
int action)
override;
72 void setTargetMode(
int mode,
bool keepSchedule =
false);
73 void clearTemperatureSetpointHeat();
74 void clearTemperatureSetpointCool();
75 void setTemperatureSetpointHeat(
int tHeat);
76 void setTemperatureSetpointCool(
int tCool);
77 int getTemperatureSetpointHeat();
78 int getTemperatureSetpointCool();
80 int getDefaultManualMode();
81 bool isWeeklyScheduleEnabled();
82 bool isCountdownEnabled();
83 bool isThermostatDisabled();
84 bool isManualModeEnabled();
87 void saveWeeklySchedule();
90 void setHeatingAndCoolingSupported(
bool supported);
91 void setHeatCoolSupported(
bool supported);
92 void setFanSupported(
bool supported);
93 void setDrySupported(
bool supported);
95 void addAvailableAlgorithm(
unsigned _supla_int16_t algorithm);
96 void removeAvailableAlgorithm(
unsigned _supla_int16_t algorithm);
97 bool isOutputControlledInternally()
const;
99 bool setUsedAlgorithm(
unsigned _supla_int16_t newAlgorithm);
100 unsigned _supla_int16_t getUsedAlgorithm(
bool forAux =
false)
const;
101 void setButtonTemperatureStep(int16_t step);
102 int16_t getCurrentHysteresis(
bool forAux)
const;
109 void addLocalUILockCapability(
enum LocalUILock capability);
110 void removeLocalUILockCapability(
enum LocalUILock capability);
112 enum LocalUILock getLocalUILockCapabilityAsEnum(uint8_t capability)
const;
113 void setLocalUILockCapabilities(uint8_t capabilities);
114 uint8_t getLocalUILockCapabilities()
const;
115 bool isLocalUILockCapabilitySupported(
enum LocalUILock capability)
const;
117 bool setLocalUILock(
enum LocalUILock lock);
118 enum LocalUILock getLocalUILock()
const;
120 void setLocalUILockTemperatureMin(int16_t min);
123 int16_t getLocalUILockTemperatureMin()
const;
125 void setLocalUILockTemperatureMax(int16_t max);
128 int16_t getLocalUILockTemperatureMax()
const;
132 void setSubfunction(uint8_t subfunction);
133 void setDefaultSubfunction(uint8_t subfunction);
136 bool setMainThermometerChannelNo(int16_t channelNo);
137 int16_t getMainThermometerChannelNo()
const;
140 bool setAuxThermometerChannelNo(int16_t channelNo);
141 int16_t getAuxThermometerChannelNo()
const;
143 void setAuxThermometerType(uint8_t type);
144 uint8_t getAuxThermometerType()
const;
146 bool setPumpSwitchChannelNo(int16_t channelNo);
147 void clearPumpSwitchChannelNo();
148 int16_t getPumpSwitchChannelNo()
const;
149 bool isPumpSwitchSet()
const;
150 bool setHeatOrColdSourceSwitchChannelNo(int16_t channelNo);
151 void clearHeatOrColdSourceSwitchChannelNo();
152 int16_t getHeatOrColdSourceSwitchChannelNo()
const;
153 bool isHeatOrColdSourceSwitchSet()
const;
154 bool setMasterThermostatChannelNo(int16_t channelNo);
155 void clearMasterThermostatChannelNo();
156 int16_t getMasterThermostatChannelNo()
const;
157 bool isMasterThermostatSet()
const;
160 void setAntiFreezeAndHeatProtectionEnabled(
bool enebled);
161 bool isAntiFreezeAndHeatProtectionEnabled()
const;
162 void setAuxMinMaxSetpointEnabled(
bool enabled);
163 bool isAuxMinMaxSetpointEnabled()
const;
165 void setTemperatureSetpointChangeSwitchesToManualMode(
bool enabled);
166 bool isTemperatureSetpointChangeSwitchesToManualMode()
const;
169 void setUseSeparateHeatCoolOutputs(
bool enabled);
170 bool isUseSeparateHeatCoolOutputs()
const;
172 void setTemperatureControlType(uint8_t);
174 uint8_t getTemperatureControlType()
const;
175 bool isTemperatureControlTypeMain()
const;
176 bool isTemperatureControlTypeAux()
const;
179 bool setMinOnTimeS(uint16_t seconds);
180 uint16_t getMinOnTimeS()
const;
181 bool isMinOnOffTimeValid(uint16_t seconds)
const;
184 bool setMinOffTimeS(uint16_t seconds);
185 uint16_t getMinOffTimeS()
const;
188 bool setOutputValueOnError(
signed char value);
189 signed char getOutputValueOnError()
const;
191 void setDefaultTemperatureRoomMin(int32_t channelFunction,
192 _supla_int16_t temperature);
193 void setDefaultTemperatureRoomMax(int32_t channelFunction,
194 _supla_int16_t temperature);
195 _supla_int16_t getDefaultTemperatureRoomMin()
const;
196 _supla_int16_t getDefaultTemperatureRoomMax()
const;
198 void initDefaultConfig();
199 void initDefaultWeeklySchedule();
200 void initDefaultAlgorithm();
201 void suspendIterateAlways();
205 void setTemperatureRoomMin(_supla_int16_t temperature);
206 void setTemperatureRoomMax(_supla_int16_t temperature);
207 void setTemperatureAuxMin(_supla_int16_t temperature);
208 void setTemperatureAuxMax(_supla_int16_t temperature);
209 void setTemperatureHisteresisMin(_supla_int16_t temperature);
210 void setTemperatureHisteresisMax(_supla_int16_t temperature);
211 void setTemperatureHeatCoolOffsetMin(_supla_int16_t temperature);
212 void setTemperatureHeatCoolOffsetMax(_supla_int16_t temperature);
213 _supla_int16_t getTemperatureRoomMin(
215 _supla_int16_t getTemperatureRoomMax(
217 _supla_int16_t getTemperatureAuxMin(
219 _supla_int16_t getTemperatureAuxMax(
221 _supla_int16_t getTemperatureHisteresisMin(
223 _supla_int16_t getTemperatureHisteresisMax(
225 _supla_int16_t getTemperatureHeatCoolOffsetMin(
227 _supla_int16_t getTemperatureHeatCoolOffsetMax(
229 _supla_int16_t getTemperatureRoomMin()
const;
230 _supla_int16_t getTemperatureRoomMax()
const;
231 _supla_int16_t getTemperatureMainMin()
const;
232 _supla_int16_t getTemperatureMainMax()
const;
233 _supla_int16_t getTemperatureAuxMin()
const;
234 _supla_int16_t getTemperatureAuxMax()
const;
235 _supla_int16_t getTemperatureHisteresisMin()
const;
236 _supla_int16_t getTemperatureHisteresisMax()
const;
237 _supla_int16_t getTemperatureHeatCoolOffsetMin()
const;
238 _supla_int16_t getTemperatureHeatCoolOffsetMax()
const;
244 bool setTemperatureFreezeProtection(_supla_int16_t temperature);
245 bool setTemperatureHeatProtection(_supla_int16_t temperature);
246 bool setTemperatureEco(_supla_int16_t temperature);
247 bool setTemperatureComfort(_supla_int16_t temperature);
248 bool setTemperatureBoost(_supla_int16_t temperature);
249 bool setTemperatureHisteresis(_supla_int16_t temperature);
250 bool setTemperatureAuxHisteresis(_supla_int16_t temperature);
251 bool setTemperatureBelowAlarm(_supla_int16_t temperature);
252 bool setTemperatureAboveAlarm(_supla_int16_t temperature);
253 bool setTemperatureAuxMinSetpoint(_supla_int16_t temperature);
254 bool setTemperatureAuxMaxSetpoint(_supla_int16_t temperature);
255 _supla_int16_t getTemperatureFreezeProtection(
257 _supla_int16_t getTemperatureHeatProtection(
259 _supla_int16_t getTemperatureEco(
261 _supla_int16_t getTemperatureComfort(
263 _supla_int16_t getTemperatureBoost(
265 _supla_int16_t getTemperatureHisteresis(
267 _supla_int16_t getTemperatureAuxHisteresis(
269 _supla_int16_t getTemperatureBelowAlarm(
271 _supla_int16_t getTemperatureAboveAlarm(
273 _supla_int16_t getTemperatureAuxMinSetpoint(
275 _supla_int16_t getTemperatureAuxMaxSetpoint(
277 _supla_int16_t getTemperatureFreezeProtection()
const;
278 _supla_int16_t getTemperatureHeatProtection()
const;
279 _supla_int16_t getTemperatureEco()
const;
280 _supla_int16_t getTemperatureComfort()
const;
281 _supla_int16_t getTemperatureBoost()
const;
282 _supla_int16_t getTemperatureHisteresis()
const;
283 _supla_int16_t getTemperatureAuxHisteresis()
const;
284 _supla_int16_t getTemperatureBelowAlarm()
const;
285 _supla_int16_t getTemperatureAboveAlarm()
const;
286 _supla_int16_t getTemperatureAuxMinSetpoint()
const;
287 _supla_int16_t getTemperatureAuxMaxSetpoint()
const;
292 bool isHeatingAndCoolingSupported()
const;
293 bool isHeatCoolSupported()
const;
294 bool isFanSupported()
const;
295 bool isDrySupported()
const;
297 bool isHeatingSubfunction()
const;
298 bool isCoolingSubfunction()
const;
300 bool isFunctionSupported(_supla_int_t channelFunction)
const;
302 bool isWeeklyScheduleValid(
304 bool isAltWeeklySchedule =
false)
const;
305 bool isChannelThermometer(int16_t channelNo)
const;
306 bool isChannelBinarySensor(int16_t channelNo)
const;
307 bool isChannelHvac(int16_t channelNo)
const;
308 bool isAlgorithmValid(
unsigned _supla_int16_t algorithm)
const;
310 bool fixTempearturesConfig();
313 bool isModeSupported(
int mode)
const;
316 unsigned _supla_int_t index);
317 static _supla_int16_t getTemperatureFromStruct(
320 unsigned _supla_int_t index,
321 _supla_int16_t temperature);
323 unsigned _supla_int_t index);
325 static int32_t getArrayIndex(int32_t bitIndex);
327 bool isTemperatureInMainConstrain(_supla_int16_t temperature)
const;
328 bool isTemperatureInAuxConstrain(_supla_int16_t temperature)
const;
329 bool isTemperatureFreezeProtectionValid(_supla_int16_t temperature)
const;
330 bool isTemperatureHeatProtectionValid(_supla_int16_t temperature)
const;
331 bool isTemperatureEcoValid(_supla_int16_t temperature)
const;
332 bool isTemperatureComfortValid(_supla_int16_t temperature)
const;
333 bool isTemperatureBoostValid(_supla_int16_t temperature)
const;
334 bool isTemperatureHisteresisValid(_supla_int16_t temperature)
const;
335 bool isTemperatureBelowAlarmValid(_supla_int16_t temperature)
const;
336 bool isTemperatureAboveAlarmValid(_supla_int16_t temperature)
const;
338 bool isTemperatureAuxMinSetpointValid(
339 _supla_int16_t temperature)
const;
341 bool isTemperatureAuxMaxSetpointValid(
342 _supla_int16_t temperature)
const;
343 bool isTemperatureInHeatCoolConstrain(_supla_int16_t tHeat,
344 _supla_int16_t tCool)
const;
346 bool isTemperatureFreezeProtectionValid(
348 bool isTemperatureHeatProtectionValid(
353 bool isTemperatureHisteresisValid(
355 bool isTemperatureAuxHisteresisValid(
357 bool isTemperatureBelowAlarmValid(
359 bool isTemperatureAboveAlarmValid(
362 bool isTemperatureAuxMinSetpointValid(
365 bool isTemperatureAuxMaxSetpointValid(
368 void clearChannelConfigChangedFlag();
369 void clearWeeklyScheduleChangedFlag();
371 int getWeeklyScheduleProgramId(
374 bool isAltWeeklySchedule)
const;
376 bool setProgram(
int programId,
378 _supla_int16_t tHeat,
379 _supla_int16_t tCool,
380 bool isAltWeeklySchedule =
false);
382 bool setWeeklySchedule(
int index,
384 bool isAltWeeklySchedule =
false);
386 bool setWeeklySchedule(
enum DayOfWeek dayOfWeek,
390 bool isAltWeeklySchedule =
false);
391 int calculateIndex(
enum DayOfWeek dayOfWeek,
394 int getCurrentQuarter()
const;
396 int getCurrentProgramId()
const;
399 bool isAltWeeklySchedule =
false)
const;
401 void copyFixedChannelConfigTo(
HvacBase *hvac)
const;
404 bool turnOnWeeklySchedlue();
405 void changeFunction(uint32_t newFunction,
bool changedLocally);
406 _supla_int_t getChannelFunction();
411 void enableDifferentialFunctionSupport();
412 bool isDifferentialFunctionSupported()
const;
413 void enableDomesticHotWaterFunctionSupport();
414 bool isDomesticHotWaterFunctionSupported()
const;
416 bool applyNewRuntimeSettings(
int mode,
419 int32_t durationSec = 0);
422 bool applyNewRuntimeSettings(
int mode,
423 int32_t durationSec = 0);
425 _supla_int16_t getLastTemperature();
427 bool setBinarySensorChannelNo(int16_t channelNo);
428 int16_t getBinarySensorChannelNo()
const;
434 static const char* temperatureName(int32_t index);
437 _supla_int16_t getPrimaryTemp();
438 _supla_int16_t getSecondaryTemp();
440 bool isWeelkySchedulManualOverrideMode()
const;
441 void clearWaitingFlags();
443 void allowWrapAroundTemperatureSetpoints();
445 void enableInitialConfig();
449 time_t getCountDownTimerEnds()
const;
450 int32_t getRemainingCountDownTimeSec()
const;
451 void stopCountDownTimer();
453 bool ignoreAggregatorForRelay(int32_t relayChannelNumber)
const;
454 void setIgnoreDefaultPumpForAggregator(
bool);
455 void setIgnoreDefaultHeatOrColdSourceForAggregator(
bool);
457 bool isAltWeeklySchedulePossible()
const;
471 void setOutput(
int value,
bool force =
false);
472 void updateChannelState();
477 void clearLastOutputValue();
480 _supla_int16_t getTemperature(
int channelNo);
482 bool getForcedOffSensorState();
483 bool isSensorTempValid(_supla_int16_t temperature)
const;
484 bool isChannelRelay(int16_t channelNo)
const;
485 bool checkOverheatProtection(_supla_int16_t t, _supla_int16_t tAux);
486 bool checkAntifreezeProtection(_supla_int16_t t, _supla_int16_t tAux);
487 bool isAuxMinLimitReached(_supla_int16_t tAux)
const;
488 bool isAuxMaxLimitReached(_supla_int16_t tAux)
const;
491 bool checkAuxProtection(_supla_int16_t t);
492 bool isAuxProtectionEnabled()
const;
493 bool processWeeklySchedule();
494 void setSetpointTemperaturesForCurrentMode(int16_t tHeat, int16_t tCool);
495 bool checkThermometersStatusForCurrentMode(_supla_int16_t t1,
496 _supla_int16_t t2)
const;
497 int evaluateHeatOutputValue(_supla_int16_t tMeasured,
498 _supla_int16_t tTarget,
bool forAux =
false);
499 int evaluateCoolOutputValue(_supla_int16_t tMeasured,
500 _supla_int16_t tTarget,
bool forAux =
false);
501 void fixTemperatureSetpoints();
502 void storeLastWorkingMode();
504 int32_t channelFunctionToIndex(int32_t channelFunction)
const;
505 void changeTemperatureSetpointsBy(int16_t tHeat, int16_t tCool);
506 void updateTimerValue();
507 void emitCountdownTimerActionIfNeeded();
509 bool fixReadonlyTemperature(int32_t temperatureIndex,
512 bool registerInAggregator(int16_t channelNo);
513 void unregisterInAggregator(int16_t channelNo);
515 int16_t getClosestValidTemperature(int16_t temperature)
const;
531 bool isWeeklyScheduleConfigured =
false;
532 bool configFinishedReceived =
true;
533 bool defaultConfigReceived =
false;
534 bool weeklyScheduleReceived =
false;
535 bool altWeeklyScheduleReceived =
false;
536 bool initDone =
false;
537 bool serverChannelFunctionValid =
true;
538 bool wrapAroundTemperatureSetpoints =
false;
539 bool registeredInRelayHvacAggregator =
false;
540 bool startupDelay =
true;
541 bool forcedByAux =
false;
543 uint8_t channelConfigChangedOffline = 0;
544 uint8_t weeklyScheduleChangedOffline = 0;
545 uint8_t lastManualMode = 0;
546 uint8_t previousSubfunction = 0;
547 uint8_t defaultSubfunction = 0;
548 int16_t defaultMainThermometer = -1;
549 int16_t defaultAuxThermometer = -1;
550 int16_t defaultBinarySensor = -1;
551 int16_t defaultPumpSwitch = -1;
552 int16_t defaultHeatOrColdSourceSwitch = -1;
553 int16_t defaultMasterThermostat = -1;
554 int16_t defaultChannelsFlags = 0;
556 int8_t lastProgramManualOverride = -1;
557 int8_t lastValue = -111;
558 uint8_t configFixAttempt = 0;
560 int16_t lastManualSetpointHeat = INT16_MIN;
561 int16_t lastManualSetpointCool = INT16_MIN;
562 int16_t lastTemperature = 0;
563 int16_t buttonTemperatureStep = 50;
565 uint32_t lastConfigChangeTimestampMs = 0;
566 uint32_t lastIterateTimestampMs = 0;
567 uint32_t lastOutputStateChangeTimestampMs = 0;
568 uint32_t timerUpdateTimestamp = 0;
569 uint32_t lastCountdownTimerRemainingSec = UINT32_MAX;
571 time_t countdownTimerEnds = 1;
573 int16_t defaultTemperatureRoomMin[6] = {
581 int16_t defaultTemperatureRoomMax[6] = {