supla-device
Loading...
Searching...
No Matches
hvac_base.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_CONTROL_HVAC_BASE_H_
5#define SRC_SUPLA_CONTROL_HVAC_BASE_H_
6
7#include <supla/channel_element.h>
8#include <supla/action_handler.h>
9#include <time.h>
10
11#define HVAC_BASE_FLAG_IGNORE_DEFAULT_PUMP (1 << 0)
12#define HVAC_BASE_FLAG_IGNORE_DEFAULT_HEAT_OR_COLD (1 << 1)
13
14namespace Supla {
15
16enum DayOfWeek {
17 DayOfWeek_Sunday = 0,
18 DayOfWeek_Monday = 1,
19 DayOfWeek_Tuesday = 2,
20 DayOfWeek_Wednesday = 3,
21 DayOfWeek_Thursday = 4,
22 DayOfWeek_Friday = 5,
23 DayOfWeek_Saturday = 6
24};
25
26enum class LocalUILock : uint8_t {
27 None = 0,
28 Full = 1,
29 Temperature = 2,
30 NotSupported = 255
31};
32
33namespace Control {
34
35class OutputInterface;
36
37class HvacBase : public ChannelElement, public ActionHandler {
38 public:
39 explicit HvacBase(Supla::Control::OutputInterface *primaryOutput = nullptr,
40 Supla::Control::OutputInterface *secondaryOutput = nullptr);
41 virtual ~HvacBase();
42
43 void onLoadConfig(SuplaDeviceClass *) override;
44 void onLoadState() override;
45 void onInit() override;
46 void onSaveState() override;
47 void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc) override;
48 void iterateAlways() override;
49 bool iterateConnected() override;
57 bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const override;
58 void purgeConfig() override;
59
60 int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override;
62 bool local = false) override;
63 uint8_t handleWeeklySchedule(TSD_ChannelConfig *newWeeklySchedule,
64 bool altSchedule = false,
65 bool local = false) override;
67 TSDS_SetChannelConfigResult *result) override;
68 void handleChannelConfigFinished() override;
69
70 void handleAction(int event, int action) override;
71
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();
79 int getMode();
80 int getDefaultManualMode();
81 bool isWeeklyScheduleEnabled();
82 bool isCountdownEnabled();
83 bool isThermostatDisabled();
84 bool isManualModeEnabled();
85
86 void saveConfig();
87 void saveWeeklySchedule();
88
89 // Below functions are used to set device capabilities.
90 void setHeatingAndCoolingSupported(bool supported);
91 void setHeatCoolSupported(bool supported);
92 void setFanSupported(bool supported);
93 void setDrySupported(bool supported);
94
95 void addAvailableAlgorithm(unsigned _supla_int16_t algorithm);
96 void removeAvailableAlgorithm(unsigned _supla_int16_t algorithm);
97 bool isOutputControlledInternally() const;
98 // use this function to set value based on local config change
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;
103
104 // Local UI blocking configuration.
105 // Those options doesn't have any functional effect on HvacBase behavior.
106 // HvacBase only provides interface for setting/getting these options.
107 // If you plan to use them, please implement proper local UI logic in
108 // your application.
109 void addLocalUILockCapability(enum LocalUILock capability);
110 void removeLocalUILockCapability(enum LocalUILock capability);
111
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;
116
117 bool setLocalUILock(enum LocalUILock lock);
118 enum LocalUILock getLocalUILock() const;
119
120 void setLocalUILockTemperatureMin(int16_t min);
121 // Returns min allowed temperature setpoint via local UI.
122 // Returns INT16_MIN if configured value is not in room min/max range
123 int16_t getLocalUILockTemperatureMin() const;
124
125 void setLocalUILockTemperatureMax(int16_t max);
126 // Returns max allowed temperature setpoint via local UI.
127 // Returns INT16_MIN if configured value is not in room min/max range
128 int16_t getLocalUILockTemperatureMax() const;
129
130 // Subfunction can be set only for HVAC_THERMOSTAT channel function
131 // SUPLA_HVAC_SUBFUNCTION_*
132 void setSubfunction(uint8_t subfunction);
133 void setDefaultSubfunction(uint8_t subfunction);
134
135 // use this function to set value based on local config change
136 bool setMainThermometerChannelNo(int16_t channelNo);
137 int16_t getMainThermometerChannelNo() const;
138
139 // use this function to set value based on local config change
140 bool setAuxThermometerChannelNo(int16_t channelNo);
141 int16_t getAuxThermometerChannelNo() const;
142 // use this function to set value based on local config change
143 void setAuxThermometerType(uint8_t type);
144 uint8_t getAuxThermometerType() const;
145
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;
158
159 // use this function to set value based on local config change
160 void setAntiFreezeAndHeatProtectionEnabled(bool enebled);
161 bool isAntiFreezeAndHeatProtectionEnabled() const;
162 void setAuxMinMaxSetpointEnabled(bool enabled);
163 bool isAuxMinMaxSetpointEnabled() const;
164
165 void setTemperatureSetpointChangeSwitchesToManualMode(bool enabled);
166 bool isTemperatureSetpointChangeSwitchesToManualMode() const;
167
168 // only for HEAT_COOL thremostats:
169 void setUseSeparateHeatCoolOutputs(bool enabled);
170 bool isUseSeparateHeatCoolOutputs() const;
171
172 void setTemperatureControlType(uint8_t);
173
174 uint8_t getTemperatureControlType() const;
175 bool isTemperatureControlTypeMain() const;
176 bool isTemperatureControlTypeAux() const;
177
178 // use this function to set value based on local config change
179 bool setMinOnTimeS(uint16_t seconds);
180 uint16_t getMinOnTimeS() const;
181 bool isMinOnOffTimeValid(uint16_t seconds) const;
182
183 // use this function to set value based on local config change
184 bool setMinOffTimeS(uint16_t seconds);
185 uint16_t getMinOffTimeS() const;
186
187 // use this function to set value based on local config change
188 bool setOutputValueOnError(signed char value);
189 signed char getOutputValueOnError() const;
190
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;
197
198 void initDefaultConfig();
199 void initDefaultWeeklySchedule();
200 void initDefaultAlgorithm();
201 void suspendIterateAlways();
202
203 // Below temperatures defines device capabilities.
204 // Configure those values before calling other setTemperature* functions.
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(
214 const THVACTemperatureCfg *temperatures) const;
215 _supla_int16_t getTemperatureRoomMax(
216 const THVACTemperatureCfg *temperatures) const;
217 _supla_int16_t getTemperatureAuxMin(
218 const THVACTemperatureCfg *temperatures) const;
219 _supla_int16_t getTemperatureAuxMax(
220 const THVACTemperatureCfg *temperatures) const;
221 _supla_int16_t getTemperatureHisteresisMin(
222 const THVACTemperatureCfg *temperatures) const;
223 _supla_int16_t getTemperatureHisteresisMax(
224 const THVACTemperatureCfg *temperatures) const;
225 _supla_int16_t getTemperatureHeatCoolOffsetMin(
226 const THVACTemperatureCfg *temperatures) const;
227 _supla_int16_t getTemperatureHeatCoolOffsetMax(
228 const THVACTemperatureCfg *temperatures) const;
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;
239
240 // Below functions are used to set device configuration - those can
241 // be modified by user within limits defined by set* functions above.
242 // Set may fail if value is out of range defined by set* functions above.
243 // use those set functions to set value based on local input change
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(
256 const THVACTemperatureCfg *temperatures) const;
257 _supla_int16_t getTemperatureHeatProtection(
258 const THVACTemperatureCfg *temperatures) const;
259 _supla_int16_t getTemperatureEco(
260 const THVACTemperatureCfg *temperatures) const;
261 _supla_int16_t getTemperatureComfort(
262 const THVACTemperatureCfg *temperatures) const;
263 _supla_int16_t getTemperatureBoost(
264 const THVACTemperatureCfg *temperatures) const;
265 _supla_int16_t getTemperatureHisteresis(
266 const THVACTemperatureCfg *temperatures) const;
267 _supla_int16_t getTemperatureAuxHisteresis(
268 const THVACTemperatureCfg *temperatures) const;
269 _supla_int16_t getTemperatureBelowAlarm(
270 const THVACTemperatureCfg *temperatures) const;
271 _supla_int16_t getTemperatureAboveAlarm(
272 const THVACTemperatureCfg *temperatures) const;
273 _supla_int16_t getTemperatureAuxMinSetpoint(
274 const THVACTemperatureCfg *temperatures) const;
275 _supla_int16_t getTemperatureAuxMaxSetpoint(
276 const THVACTemperatureCfg *temperatures) const;
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;
288
289 // Below methods check if specific function is supported by thermostat.
290 // Even if function is supported, it doesn't mean that new mode setting will
291 // be valid, becuase this depends on configured Function.
292 bool isHeatingAndCoolingSupported() const;
293 bool isHeatCoolSupported() const;
294 bool isFanSupported() const;
295 bool isDrySupported() const;
296
297 bool isHeatingSubfunction() const;
298 bool isCoolingSubfunction() const;
299
300 bool isFunctionSupported(_supla_int_t channelFunction) const;
301 bool isConfigValid(TChannelConfig_HVAC *config) 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;
309 bool areTemperaturesValid(const THVACTemperatureCfg *temperatures) const;
310 bool fixTempearturesConfig();
311
312 // Check if mode is supported by currently configured Function
313 bool isModeSupported(int mode) const;
314
315 static bool isTemperatureSetInStruct(const THVACTemperatureCfg *temperatures,
316 unsigned _supla_int_t index);
317 static _supla_int16_t getTemperatureFromStruct(
318 const THVACTemperatureCfg *temperatures, unsigned _supla_int_t index);
319 static void setTemperatureInStruct(THVACTemperatureCfg *temperatures,
320 unsigned _supla_int_t index,
321 _supla_int16_t temperature);
322 static void clearTemperatureInStruct(THVACTemperatureCfg *temperatures,
323 unsigned _supla_int_t index);
324
325 static int32_t getArrayIndex(int32_t bitIndex);
326
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;
337 // validates temperature against current configuration
338 bool isTemperatureAuxMinSetpointValid(
339 _supla_int16_t temperature) const;
340 // validates temperature against current configuration
341 bool isTemperatureAuxMaxSetpointValid(
342 _supla_int16_t temperature) const;
343 bool isTemperatureInHeatCoolConstrain(_supla_int16_t tHeat,
344 _supla_int16_t tCool) const;
345
346 bool isTemperatureFreezeProtectionValid(
347 const THVACTemperatureCfg *temperatures) const;
348 bool isTemperatureHeatProtectionValid(
349 const THVACTemperatureCfg *temperatures) const;
350 bool isTemperatureEcoValid(const THVACTemperatureCfg *temperatures) const;
351 bool isTemperatureComfortValid(const THVACTemperatureCfg *temperatures) const;
352 bool isTemperatureBoostValid(const THVACTemperatureCfg *temperatures) const;
353 bool isTemperatureHisteresisValid(
354 const THVACTemperatureCfg *temperatures) const;
355 bool isTemperatureAuxHisteresisValid(
356 const THVACTemperatureCfg *temperatures) const;
357 bool isTemperatureBelowAlarmValid(
358 const THVACTemperatureCfg *temperatures) const;
359 bool isTemperatureAboveAlarmValid(
360 const THVACTemperatureCfg *temperatures) const;
361 // validates temperature against configuration send in parameter
362 bool isTemperatureAuxMinSetpointValid(
363 const THVACTemperatureCfg *temperatures) const;
364 // validates temperature against configuration send in parameter
365 bool isTemperatureAuxMaxSetpointValid(
366 const THVACTemperatureCfg *temperatures) const;
367
368 void clearChannelConfigChangedFlag();
369 void clearWeeklyScheduleChangedFlag();
370
371 int getWeeklyScheduleProgramId(
372 const TChannelConfig_WeeklySchedule *schedule, int index) const;
373 bool isProgramValid(const TWeeklyScheduleProgram &program,
374 bool isAltWeeklySchedule) const;
375
376 bool setProgram(int programId,
377 unsigned char mode,
378 _supla_int16_t tHeat,
379 _supla_int16_t tCool,
380 bool isAltWeeklySchedule = false);
381 // index is the number of quarter in week
382 bool setWeeklySchedule(int index,
383 int programId,
384 bool isAltWeeklySchedule = false);
385 // schedule internally works on 15 min intervals (quarters)
386 bool setWeeklySchedule(enum DayOfWeek dayOfWeek,
387 int hour,
388 int quarter,
389 int programId,
390 bool isAltWeeklySchedule = false);
391 int calculateIndex(enum DayOfWeek dayOfWeek,
392 int hour,
393 int quarter) const;
394 int getCurrentQuarter() const;
395 TWeeklyScheduleProgram getCurrentProgram() const;
396 int getCurrentProgramId() const;
397 TWeeklyScheduleProgram getProgramAt(int quarterIndex) const;
398 TWeeklyScheduleProgram getProgramById(int programId,
399 bool isAltWeeklySchedule = false) const;
400
401 void copyFixedChannelConfigTo(HvacBase *hvac) const;
402 void copyFullChannelConfigTo(TChannelConfig_HVAC *hvac) const;
403 void turnOn();
404 bool turnOnWeeklySchedlue();
405 void changeFunction(uint32_t newFunction, bool changedLocally);
406 _supla_int_t getChannelFunction();
407
408 void addPrimaryOutput(Supla::Control::OutputInterface *output);
409 void addSecondaryOutput(Supla::Control::OutputInterface *output);
410
411 void enableDifferentialFunctionSupport();
412 bool isDifferentialFunctionSupported() const;
413 void enableDomesticHotWaterFunctionSupport();
414 bool isDomesticHotWaterFunctionSupported() const;
415
416 bool applyNewRuntimeSettings(int mode,
417 int16_t tHeat,
418 int16_t tCool,
419 int32_t durationSec = 0);
420
421 // keeps the temperature setpoints
422 bool applyNewRuntimeSettings(int mode,
423 int32_t durationSec = 0);
424
425 _supla_int16_t getLastTemperature();
426
427 bool setBinarySensorChannelNo(int16_t channelNo);
428 int16_t getBinarySensorChannelNo() const;
429
430 static void debugPrintConfigStruct(const TChannelConfig_HVAC *config, int id);
431 static void debugPrintConfigDiff(const TChannelConfig_HVAC *configCurrent,
432 const TChannelConfig_HVAC *configNew,
433 int id);
434 static const char* temperatureName(int32_t index);
435 static void debugPrintProgram(const TWeeklyScheduleProgram *program, int id);
436
437 _supla_int16_t getPrimaryTemp();
438 _supla_int16_t getSecondaryTemp();
439
440 bool isWeelkySchedulManualOverrideMode() const;
441 void clearWaitingFlags();
442
443 void allowWrapAroundTemperatureSetpoints();
444
445 void enableInitialConfig();
446
447 // returns Linux timestamp in seconds when current countdown timer will end.
448 // It return 1 if countdown timer is not set
449 time_t getCountDownTimerEnds() const;
450 int32_t getRemainingCountDownTimeSec() const;
451 void stopCountDownTimer();
452
453 bool ignoreAggregatorForRelay(int32_t relayChannelNumber) const;
454 void setIgnoreDefaultPumpForAggregator(bool);
455 void setIgnoreDefaultHeatOrColdSourceForAggregator(bool);
456
457 bool isAltWeeklySchedulePossible() const;
458
465 bool isHvacFlagForcedOffBySensor() const;
466
467 HvacParameterFlags parameterFlags = {};
468
469 protected:
470 // 0 = off, >= 1 enable heating, <= -1 enable cooling
471 void setOutput(int value, bool force = false);
472 void updateChannelState();
473 // Implement this method to apply additional validations and corrections
474 // to HVAC configuration. Return true when correction was done and it will
475 // be shared with server.
476 virtual bool applyAdditionalValidation(TChannelConfig_HVAC *hvacConfig);
477 void clearLastOutputValue();
478
479 private:
480 _supla_int16_t getTemperature(int channelNo);
481 // returns true if forced off should be set
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;
489 // This only handles normal auxiliary regulation. Its return value ends the
490 // normal-control phase, not the higher-priority protection/user handling.
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();
503 void applyConfigWithoutValidation(TChannelConfig_HVAC *hvacConfig);
504 int32_t channelFunctionToIndex(int32_t channelFunction) const;
505 void changeTemperatureSetpointsBy(int16_t tHeat, int16_t tCool);
506 void updateTimerValue();
507 void emitCountdownTimerActionIfNeeded();
508 bool fixReadonlyParameters(TChannelConfig_HVAC *hvacConfig);
509 bool fixReadonlyTemperature(int32_t temperatureIndex,
510 THVACTemperatureCfg *newTemp);
511
512 bool registerInAggregator(int16_t channelNo);
513 void unregisterInAggregator(int16_t channelNo);
514
515 int16_t getClosestValidTemperature(int16_t temperature) const;
516
517 TChannelConfig_HVAC config = {};
518 TChannelConfig_HVAC *initialConfig = nullptr;
519 // primaryOutput can be used for heating or cooling (cooling is supported
520 // when secondaryOutput is not used, in such case "AUTO" mode is not
521 // available)
522 Supla::Control::OutputInterface *primaryOutput = nullptr;
523 // secondaryOutput can be used only for cooling
524 Supla::Control::OutputInterface *secondaryOutput = nullptr;
525
526 TChannelConfig_WeeklySchedule weeklySchedule = {};
527 TChannelConfig_WeeklySchedule altWeeklySchedule = {};
528
529 THVACValue lastWorkingMode = {};
530
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;
542
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;
555
556 int8_t lastProgramManualOverride = -1;
557 int8_t lastValue = -111; // set out of output value range
558 uint8_t configFixAttempt = 0;
559
560 int16_t lastManualSetpointHeat = INT16_MIN;
561 int16_t lastManualSetpointCool = INT16_MIN;
562 int16_t lastTemperature = 0;
563 int16_t buttonTemperatureStep = 50; // 0.5 degrees
564
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;
570
571 time_t countdownTimerEnds = 1;
572
573 int16_t defaultTemperatureRoomMin[6] = {
574 500, // default min temperature for all other functions or when value is
575 // set to INT16_MIN
576 500, // HVAC_THERMOSTAT (heat or cool)
577 500, // AUTO
578 -5000, // DIFFERENTIAL
579 1000, // DOMESTIC_HOT_WATER
580 };
581 int16_t defaultTemperatureRoomMax[6] = {
582 4000, // default max temperature for all other functions or when value is
583 // set to INT16_MIN
584 4000, // HVAC_THERMOSTAT (heat or cool)
585 4000, // AUTO
586 5000, // DIFFERENTIAL
587 7500, // DOMESTIC_HOT_WATER
588 };
589};
590
591} // namespace Control
592} // namespace Supla
593
594#endif // SRC_SUPLA_CONTROL_HVAC_BASE_H_
Definition SuplaDevice.h:167
Definition action_handler.h:8
Definition channel_element.h:15
Definition hvac_base.h:37
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition hvac_base.cpp:421
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition hvac_base.cpp:338
bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const override
Returns remaining countdown timer time in seconds for an active HVAC countdown timer.
Definition hvac_base.cpp:5193
uint8_t handleWeeklySchedule(TSD_ChannelConfig *newWeeklySchedule, bool altSchedule=false, bool local=false) override
Handles "set channel config" with "weekly schedule" type request from server.
Definition hvac_base.cpp:1766
void handleSetChannelConfigResult(TSDS_SetChannelConfigResult *result) override
Handles "set channel config" reply from server.
Definition hvac_base.cpp:2763
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition hvac_base.cpp:587
void onLoadConfig(SuplaDeviceClass *) override
First method called on element in SuplaDevice.begin().
Definition hvac_base.cpp:234
bool iterateConnected() override
Method called on each SuplaDevice iteration when device is connected and registered to Supla server o...
Definition hvac_base.cpp:152
void handleChannelConfigFinished() override
Handles "channel config finished" message from server.
Definition hvac_base.cpp:571
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition hvac_base.cpp:3678
uint8_t handleChannelConfig(TSD_ChannelConfig *config, bool local=false) override
Handles "set channel config" request from server.
Definition hvac_base.cpp:923
void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc) override
Method called each time when device successfully registers to Supla server.
Definition hvac_base.cpp:545
bool isHvacFlagForcedOffBySensor() const
Returns true if thermostat output is disabled by binary sensor state (i.e.
Definition hvac_base.cpp:6336
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition hvac_base.cpp:449
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition hvac_base.cpp:6109
Definition output_interface.h:11
Definition supla_srpc.h:47
Definition proto.h:3431
Definition proto.h:3490
Definition proto.h:3253
Definition proto.h:2584
Definition proto.h:916
Definition proto.h:3175
Definition proto.h:3159
Definition proto.h:1228
Definition proto.h:3236