supla-device
Loading...
Searching...
No Matches
hvac_base.h
1/*
2 * Copyright (C) AC SOFTWARE SP. Z O.O
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */
18
19#ifndef SRC_SUPLA_CONTROL_HVAC_BASE_H_
20#define SRC_SUPLA_CONTROL_HVAC_BASE_H_
21
22#include <supla/channel_element.h>
23#include <supla/action_handler.h>
24#include <time.h>
25
26#define HVAC_BASE_FLAG_IGNORE_DEFAULT_PUMP (1 << 0)
27#define HVAC_BASE_FLAG_IGNORE_DEFAULT_HEAT_OR_COLD (1 << 1)
28
29namespace Supla {
30
31enum DayOfWeek {
32 DayOfWeek_Sunday = 0,
33 DayOfWeek_Monday = 1,
34 DayOfWeek_Tuesday = 2,
35 DayOfWeek_Wednesday = 3,
36 DayOfWeek_Thursday = 4,
37 DayOfWeek_Friday = 5,
38 DayOfWeek_Saturday = 6
39};
40
41enum class LocalUILock : uint8_t {
42 None = 0,
43 Full = 1,
44 Temperature = 2,
45 NotSupported = 255
46};
47
48namespace Control {
49
50class OutputInterface;
51
52class HvacBase : public ChannelElement, public ActionHandler {
53 public:
54 explicit HvacBase(Supla::Control::OutputInterface *primaryOutput = nullptr,
55 Supla::Control::OutputInterface *secondaryOutput = nullptr);
56 virtual ~HvacBase();
57
58 void onLoadConfig(SuplaDeviceClass *) override;
59 void onLoadState() override;
60 void onInit() override;
61 void onSaveState() override;
62 void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc) override;
63 void iterateAlways() override;
64 bool iterateConnected() override;
72 bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const override;
73 void purgeConfig() override;
74
75 int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override;
77 bool local = false) override;
78 uint8_t handleWeeklySchedule(TSD_ChannelConfig *newWeeklySchedule,
79 bool altSchedule = false,
80 bool local = false) override;
82 TSDS_SetChannelConfigResult *result) override;
83 void handleChannelConfigFinished() override;
84
85 void handleAction(int event, int action) override;
86
87 void setTargetMode(int mode, bool keepSchedule = false);
88 void clearTemperatureSetpointHeat();
89 void clearTemperatureSetpointCool();
90 void setTemperatureSetpointHeat(int tHeat);
91 void setTemperatureSetpointCool(int tCool);
92 int getTemperatureSetpointHeat();
93 int getTemperatureSetpointCool();
94 int getMode();
95 int getDefaultManualMode();
96 bool isWeeklyScheduleEnabled();
97 bool isCountdownEnabled();
98 bool isThermostatDisabled();
99 bool isManualModeEnabled();
100
101 void saveConfig();
102 void saveWeeklySchedule();
103
104 // Below functions are used to set device capabilities.
105 void setHeatingAndCoolingSupported(bool supported);
106 void setHeatCoolSupported(bool supported);
107 void setFanSupported(bool supported);
108 void setDrySupported(bool supported);
109
110 void addAvailableAlgorithm(unsigned _supla_int16_t algorithm);
111 void removeAvailableAlgorithm(unsigned _supla_int16_t algorithm);
112 bool isOutputControlledInternally() const;
113 // use this function to set value based on local config change
114 bool setUsedAlgorithm(unsigned _supla_int16_t newAlgorithm);
115 unsigned _supla_int16_t getUsedAlgorithm(bool forAux = false) const;
116 void setButtonTemperatureStep(int16_t step);
117 int16_t getCurrentHysteresis(bool forAux) const;
118
119 // Local UI blocking configuration.
120 // Those options doesn't have any functional effect on HvacBase behavior.
121 // HvacBase only provides interface for setting/getting these options.
122 // If you plan to use them, please implement proper local UI logic in
123 // your application.
124 void addLocalUILockCapability(enum LocalUILock capability);
125 void removeLocalUILockCapability(enum LocalUILock capability);
126
127 enum LocalUILock getLocalUILockCapabilityAsEnum(uint8_t capability) const;
128 void setLocalUILockCapabilities(uint8_t capabilities);
129 uint8_t getLocalUILockCapabilities() const;
130 bool isLocalUILockCapabilitySupported(enum LocalUILock capability) const;
131
132 bool setLocalUILock(enum LocalUILock lock);
133 enum LocalUILock getLocalUILock() const;
134
135 void setLocalUILockTemperatureMin(int16_t min);
136 // Returns min allowed temperature setpoint via local UI.
137 // Returns INT16_MIN if configured value is not in room min/max range
138 int16_t getLocalUILockTemperatureMin() const;
139
140 void setLocalUILockTemperatureMax(int16_t max);
141 // Returns max allowed temperature setpoint via local UI.
142 // Returns INT16_MIN if configured value is not in room min/max range
143 int16_t getLocalUILockTemperatureMax() const;
144
145 // Subfunction can be set only for HVAC_THERMOSTAT channel function
146 // SUPLA_HVAC_SUBFUNCTION_*
147 void setSubfunction(uint8_t subfunction);
148 void setDefaultSubfunction(uint8_t subfunction);
149
150 // use this function to set value based on local config change
151 bool setMainThermometerChannelNo(int16_t channelNo);
152 int16_t getMainThermometerChannelNo() const;
153
154 // use this function to set value based on local config change
155 bool setAuxThermometerChannelNo(int16_t channelNo);
156 int16_t getAuxThermometerChannelNo() const;
157 // use this function to set value based on local config change
158 void setAuxThermometerType(uint8_t type);
159 uint8_t getAuxThermometerType() const;
160
161 bool setPumpSwitchChannelNo(uint8_t channelNo);
162 void clearPumpSwitchChannelNo();
163 int16_t getPumpSwitchChannelNo() const;
164 bool isPumpSwitchSet() const;
165 bool setHeatOrColdSourceSwitchChannelNo(uint8_t channelNo);
166 void clearHeatOrColdSourceSwitchChannelNo();
167 int16_t getHeatOrColdSourceSwitchChannelNo() const;
168 bool isHeatOrColdSourceSwitchSet() const;
169 bool setMasterThermostatChannelNo(uint8_t channelNo);
170 void clearMasterThermostatChannelNo();
171 int16_t getMasterThermostatChannelNo() const;
172 bool isMasterThermostatSet() const;
173
174 // use this function to set value based on local config change
175 void setAntiFreezeAndHeatProtectionEnabled(bool enebled);
176 bool isAntiFreezeAndHeatProtectionEnabled() const;
177 void setAuxMinMaxSetpointEnabled(bool enabled);
178 bool isAuxMinMaxSetpointEnabled() const;
179
180 void setTemperatureSetpointChangeSwitchesToManualMode(bool enabled);
181 bool isTemperatureSetpointChangeSwitchesToManualMode() const;
182
183 // only for HEAT_COOL thremostats:
184 void setUseSeparateHeatCoolOutputs(bool enabled);
185 bool isUseSeparateHeatCoolOutputs() const;
186
187 void setTemperatureControlType(uint8_t);
188
189 uint8_t getTemperatureControlType() const;
190 bool isTemperatureControlTypeMain() const;
191 bool isTemperatureControlTypeAux() const;
192
193 // use this function to set value based on local config change
194 bool setMinOnTimeS(uint16_t seconds);
195 uint16_t getMinOnTimeS() const;
196 bool isMinOnOffTimeValid(uint16_t seconds) const;
197
198 // use this function to set value based on local config change
199 bool setMinOffTimeS(uint16_t seconds);
200 uint16_t getMinOffTimeS() const;
201
202 // use this function to set value based on local config change
203 bool setOutputValueOnError(signed char value);
204 signed char getOutputValueOnError() const;
205
206 void setDefaultTemperatureRoomMin(int32_t channelFunction,
207 _supla_int16_t temperature);
208 void setDefaultTemperatureRoomMax(int32_t channelFunction,
209 _supla_int16_t temperature);
210 _supla_int16_t getDefaultTemperatureRoomMin() const;
211 _supla_int16_t getDefaultTemperatureRoomMax() const;
212
213 void initDefaultConfig();
214 void initDefaultWeeklySchedule();
215 void initDefaultAlgorithm();
216 void suspendIterateAlways();
217
218 // Below temperatures defines device capabilities.
219 // Configure those values before calling other setTemperature* functions.
220 void setTemperatureRoomMin(_supla_int16_t temperature);
221 void setTemperatureRoomMax(_supla_int16_t temperature);
222 void setTemperatureAuxMin(_supla_int16_t temperature);
223 void setTemperatureAuxMax(_supla_int16_t temperature);
224 void setTemperatureHisteresisMin(_supla_int16_t temperature);
225 void setTemperatureHisteresisMax(_supla_int16_t temperature);
226 void setTemperatureHeatCoolOffsetMin(_supla_int16_t temperature);
227 void setTemperatureHeatCoolOffsetMax(_supla_int16_t temperature);
228 _supla_int16_t getTemperatureRoomMin(
229 const THVACTemperatureCfg *temperatures) const;
230 _supla_int16_t getTemperatureRoomMax(
231 const THVACTemperatureCfg *temperatures) const;
232 _supla_int16_t getTemperatureAuxMin(
233 const THVACTemperatureCfg *temperatures) const;
234 _supla_int16_t getTemperatureAuxMax(
235 const THVACTemperatureCfg *temperatures) const;
236 _supla_int16_t getTemperatureHisteresisMin(
237 const THVACTemperatureCfg *temperatures) const;
238 _supla_int16_t getTemperatureHisteresisMax(
239 const THVACTemperatureCfg *temperatures) const;
240 _supla_int16_t getTemperatureHeatCoolOffsetMin(
241 const THVACTemperatureCfg *temperatures) const;
242 _supla_int16_t getTemperatureHeatCoolOffsetMax(
243 const THVACTemperatureCfg *temperatures) const;
244 _supla_int16_t getTemperatureRoomMin() const;
245 _supla_int16_t getTemperatureRoomMax() const;
246 _supla_int16_t getTemperatureMainMin() const;
247 _supla_int16_t getTemperatureMainMax() const;
248 _supla_int16_t getTemperatureAuxMin() const;
249 _supla_int16_t getTemperatureAuxMax() const;
250 _supla_int16_t getTemperatureHisteresisMin() const;
251 _supla_int16_t getTemperatureHisteresisMax() const;
252 _supla_int16_t getTemperatureHeatCoolOffsetMin() const;
253 _supla_int16_t getTemperatureHeatCoolOffsetMax() const;
254
255 // Below functions are used to set device configuration - those can
256 // be modified by user within limits defined by set* functions above.
257 // Set may fail if value is out of range defined by set* functions above.
258 // use those set functions to set value based on local input change
259 bool setTemperatureFreezeProtection(_supla_int16_t temperature);
260 bool setTemperatureHeatProtection(_supla_int16_t temperature);
261 bool setTemperatureEco(_supla_int16_t temperature);
262 bool setTemperatureComfort(_supla_int16_t temperature);
263 bool setTemperatureBoost(_supla_int16_t temperature);
264 bool setTemperatureHisteresis(_supla_int16_t temperature);
265 bool setTemperatureAuxHisteresis(_supla_int16_t temperature);
266 bool setTemperatureBelowAlarm(_supla_int16_t temperature);
267 bool setTemperatureAboveAlarm(_supla_int16_t temperature);
268 bool setTemperatureAuxMinSetpoint(_supla_int16_t temperature);
269 bool setTemperatureAuxMaxSetpoint(_supla_int16_t temperature);
270 _supla_int16_t getTemperatureFreezeProtection(
271 const THVACTemperatureCfg *temperatures) const;
272 _supla_int16_t getTemperatureHeatProtection(
273 const THVACTemperatureCfg *temperatures) const;
274 _supla_int16_t getTemperatureEco(
275 const THVACTemperatureCfg *temperatures) const;
276 _supla_int16_t getTemperatureComfort(
277 const THVACTemperatureCfg *temperatures) const;
278 _supla_int16_t getTemperatureBoost(
279 const THVACTemperatureCfg *temperatures) const;
280 _supla_int16_t getTemperatureHisteresis(
281 const THVACTemperatureCfg *temperatures) const;
282 _supla_int16_t getTemperatureAuxHisteresis(
283 const THVACTemperatureCfg *temperatures) const;
284 _supla_int16_t getTemperatureBelowAlarm(
285 const THVACTemperatureCfg *temperatures) const;
286 _supla_int16_t getTemperatureAboveAlarm(
287 const THVACTemperatureCfg *temperatures) const;
288 _supla_int16_t getTemperatureAuxMinSetpoint(
289 const THVACTemperatureCfg *temperatures) const;
290 _supla_int16_t getTemperatureAuxMaxSetpoint(
291 const THVACTemperatureCfg *temperatures) const;
292 _supla_int16_t getTemperatureFreezeProtection() const;
293 _supla_int16_t getTemperatureHeatProtection() const;
294 _supla_int16_t getTemperatureEco() const;
295 _supla_int16_t getTemperatureComfort() const;
296 _supla_int16_t getTemperatureBoost() const;
297 _supla_int16_t getTemperatureHisteresis() const;
298 _supla_int16_t getTemperatureAuxHisteresis() const;
299 _supla_int16_t getTemperatureBelowAlarm() const;
300 _supla_int16_t getTemperatureAboveAlarm() const;
301 _supla_int16_t getTemperatureAuxMinSetpoint() const;
302 _supla_int16_t getTemperatureAuxMaxSetpoint() const;
303
304 // Below methods check if specific function is supported by thermostat.
305 // Even if function is supported, it doesn't mean that new mode setting will
306 // be valid, becuase this depends on configured Function.
307 bool isHeatingAndCoolingSupported() const;
308 bool isHeatCoolSupported() const;
309 bool isFanSupported() const;
310 bool isDrySupported() const;
311
312 bool isHeatingSubfunction() const;
313 bool isCoolingSubfunction() const;
314
315 bool isFunctionSupported(_supla_int_t channelFunction) const;
316 bool isConfigValid(TChannelConfig_HVAC *config) const;
317 bool isWeeklyScheduleValid(
319 bool isAltWeeklySchedule = false) const;
320 bool isChannelThermometer(int16_t channelNo) const;
321 bool isChannelBinarySensor(int16_t channelNo) const;
322 bool isAlgorithmValid(unsigned _supla_int16_t algorithm) const;
323 bool areTemperaturesValid(const THVACTemperatureCfg *temperatures) const;
324 bool fixTempearturesConfig();
325
326 // Check if mode is supported by currently configured Function
327 bool isModeSupported(int mode) const;
328
329 static bool isTemperatureSetInStruct(const THVACTemperatureCfg *temperatures,
330 unsigned _supla_int_t index);
331 static _supla_int16_t getTemperatureFromStruct(
332 const THVACTemperatureCfg *temperatures, unsigned _supla_int_t index);
333 static void setTemperatureInStruct(THVACTemperatureCfg *temperatures,
334 unsigned _supla_int_t index,
335 _supla_int16_t temperature);
336 static void clearTemperatureInStruct(THVACTemperatureCfg *temperatures,
337 unsigned _supla_int_t index);
338
339 static int32_t getArrayIndex(int32_t bitIndex);
340
341 bool isTemperatureInMainConstrain(_supla_int16_t temperature) const;
342 bool isTemperatureInAuxConstrain(_supla_int16_t temperature) const;
343 bool isTemperatureFreezeProtectionValid(_supla_int16_t temperature) const;
344 bool isTemperatureHeatProtectionValid(_supla_int16_t temperature) const;
345 bool isTemperatureEcoValid(_supla_int16_t temperature) const;
346 bool isTemperatureComfortValid(_supla_int16_t temperature) const;
347 bool isTemperatureBoostValid(_supla_int16_t temperature) const;
348 bool isTemperatureHisteresisValid(_supla_int16_t temperature) const;
349 bool isTemperatureBelowAlarmValid(_supla_int16_t temperature) const;
350 bool isTemperatureAboveAlarmValid(_supla_int16_t temperature) const;
351 // validates temperature against current configuration
352 bool isTemperatureAuxMinSetpointValid(
353 _supla_int16_t temperature) const;
354 // validates temperature against current configuration
355 bool isTemperatureAuxMaxSetpointValid(
356 _supla_int16_t temperature) const;
357 bool isTemperatureInHeatCoolConstrain(_supla_int16_t tHeat,
358 _supla_int16_t tCool) const;
359
360 bool isTemperatureFreezeProtectionValid(
361 const THVACTemperatureCfg *temperatures) const;
362 bool isTemperatureHeatProtectionValid(
363 const THVACTemperatureCfg *temperatures) const;
364 bool isTemperatureEcoValid(const THVACTemperatureCfg *temperatures) const;
365 bool isTemperatureComfortValid(const THVACTemperatureCfg *temperatures) const;
366 bool isTemperatureBoostValid(const THVACTemperatureCfg *temperatures) const;
367 bool isTemperatureHisteresisValid(
368 const THVACTemperatureCfg *temperatures) const;
369 bool isTemperatureAuxHisteresisValid(
370 const THVACTemperatureCfg *temperatures) const;
371 bool isTemperatureBelowAlarmValid(
372 const THVACTemperatureCfg *temperatures) const;
373 bool isTemperatureAboveAlarmValid(
374 const THVACTemperatureCfg *temperatures) const;
375 // validates temperature against configuration send in parameter
376 bool isTemperatureAuxMinSetpointValid(
377 const THVACTemperatureCfg *temperatures) const;
378 // validates temperature against configuration send in parameter
379 bool isTemperatureAuxMaxSetpointValid(
380 const THVACTemperatureCfg *temperatures) const;
381
382 void clearChannelConfigChangedFlag();
383 void clearWeeklyScheduleChangedFlag();
384
385 int getWeeklyScheduleProgramId(
386 const TChannelConfig_WeeklySchedule *schedule, int index) const;
387 bool isProgramValid(const TWeeklyScheduleProgram &program,
388 bool isAltWeeklySchedule) const;
389
390 bool setProgram(int programId,
391 unsigned char mode,
392 _supla_int16_t tHeat,
393 _supla_int16_t tCool,
394 bool isAltWeeklySchedule = false);
395 // index is the number of quarter in week
396 bool setWeeklySchedule(int index,
397 int programId,
398 bool isAltWeeklySchedule = false);
399 // schedule internally works on 15 min intervals (quarters)
400 bool setWeeklySchedule(enum DayOfWeek dayOfWeek,
401 int hour,
402 int quarter,
403 int programId,
404 bool isAltWeeklySchedule = false);
405 int calculateIndex(enum DayOfWeek dayOfWeek,
406 int hour,
407 int quarter) const;
408 int getCurrentQuarter() const;
409 TWeeklyScheduleProgram getCurrentProgram() const;
410 int getCurrentProgramId() const;
411 TWeeklyScheduleProgram getProgramAt(int quarterIndex) const;
412 TWeeklyScheduleProgram getProgramById(int programId,
413 bool isAltWeeklySchedule = false) const;
414
415 void copyFixedChannelConfigTo(HvacBase *hvac) const;
416 void copyFullChannelConfigTo(TChannelConfig_HVAC *hvac) const;
417 void turnOn();
418 bool turnOnWeeklySchedlue();
419 void changeFunction(uint32_t newFunction, bool changedLocally);
420 _supla_int_t getChannelFunction();
421
422 void addPrimaryOutput(Supla::Control::OutputInterface *output);
423 void addSecondaryOutput(Supla::Control::OutputInterface *output);
424
425 void enableDifferentialFunctionSupport();
426 bool isDifferentialFunctionSupported() const;
427 void enableDomesticHotWaterFunctionSupport();
428 bool isDomesticHotWaterFunctionSupported() const;
429
430 bool applyNewRuntimeSettings(int mode,
431 int16_t tHeat,
432 int16_t tCool,
433 int32_t durationSec = 0);
434
435 // keeps the temperature setpoints
436 bool applyNewRuntimeSettings(int mode,
437 int32_t durationSec = 0);
438
439 _supla_int16_t getLastTemperature();
440
441 bool setBinarySensorChannelNo(int16_t channelNo);
442 int16_t getBinarySensorChannelNo() const;
443
444 static void debugPrintConfigStruct(const TChannelConfig_HVAC *config, int id);
445 static void debugPrintConfigDiff(const TChannelConfig_HVAC *configCurrent,
446 const TChannelConfig_HVAC *configNew,
447 int id);
448 static const char* temperatureName(int32_t index);
449 static void debugPrintProgram(const TWeeklyScheduleProgram *program, int id);
450
451 _supla_int16_t getPrimaryTemp();
452 _supla_int16_t getSecondaryTemp();
453
454 bool isWeelkySchedulManualOverrideMode() const;
455 void clearWaitingFlags();
456
457 void allowWrapAroundTemperatureSetpoints();
458
459 void enableInitialConfig();
460
461 // returns Linux timestamp in seconds when current countdown timer will end.
462 // It return 1 if countdown timer is not set
463 time_t getCountDownTimerEnds() const;
464 int32_t getRemainingCountDownTimeSec() const;
465 void stopCountDownTimer();
466
467 bool ignoreAggregatorForRelay(int32_t relayChannelNumber) const;
468 void setIgnoreDefaultPumpForAggregator(bool);
469 void setIgnoreDefaultHeatOrColdSourceForAggregator(bool);
470
471 bool isAltWeeklySchedulePossible() const;
472
479 bool isHvacFlagForcedOffBySensor() const;
480
481 HvacParameterFlags parameterFlags = {};
482
483 protected:
484 // 0 = off, >= 1 enable heating, <= -1 enable cooling
485 void setOutput(int value, bool force = false);
486 void updateChannelState();
487 // Implement this method to apply additional validations and corrections
488 // to HVAC configuration. Return true when correction was done and it will
489 // be shared with server.
490 virtual bool applyAdditionalValidation(TChannelConfig_HVAC *hvacConfig);
491 void clearLastOutputValue();
492
493 private:
494 _supla_int16_t getTemperature(int channelNo);
495 // returns true if forced off should be set
496 bool getForcedOffSensorState();
497 bool isSensorTempValid(_supla_int16_t temperature) const;
498 bool checkOverheatProtection(_supla_int16_t t);
499 bool checkAntifreezeProtection(_supla_int16_t t);
500 bool checkAuxProtection(_supla_int16_t t);
501 bool isAuxProtectionEnabled() const;
502 bool processWeeklySchedule();
503 void setSetpointTemperaturesForCurrentMode(int16_t tHeat, int16_t tCool);
504 bool checkThermometersStatusForCurrentMode(_supla_int16_t t1,
505 _supla_int16_t t2) const;
506 int evaluateHeatOutputValue(_supla_int16_t tMeasured,
507 _supla_int16_t tTarget, bool forAux = false);
508 int evaluateCoolOutputValue(_supla_int16_t tMeasured,
509 _supla_int16_t tTarget, bool forAux = false);
510 void fixTemperatureSetpoints();
511 void storeLastWorkingMode();
512 void applyConfigWithoutValidation(TChannelConfig_HVAC *hvacConfig);
513 int32_t channelFunctionToIndex(int32_t channelFunction) const;
514 void changeTemperatureSetpointsBy(int16_t tHeat, int16_t tCool);
515 void updateTimerValue();
516 void emitCountdownTimerActionIfNeeded();
517 bool fixReadonlyParameters(TChannelConfig_HVAC *hvacConfig);
518 bool fixReadonlyTemperature(int32_t temperatureIndex,
519 THVACTemperatureCfg *newTemp);
520
521 bool registerInAggregator(int16_t channelNo);
522 void unregisterInAggregator(int16_t channelNo);
523
524 int16_t getClosestValidTemperature(int16_t temperature) const;
525
526 TChannelConfig_HVAC config = {};
527 TChannelConfig_HVAC *initialConfig = nullptr;
528 // primaryOutput can be used for heating or cooling (cooling is supported
529 // when secondaryOutput is not used, in such case "AUTO" mode is not
530 // available)
531 Supla::Control::OutputInterface *primaryOutput = nullptr;
532 // secondaryOutput can be used only for cooling
533 Supla::Control::OutputInterface *secondaryOutput = nullptr;
534
535 TChannelConfig_WeeklySchedule weeklySchedule = {};
536 TChannelConfig_WeeklySchedule altWeeklySchedule = {};
537
538 THVACValue lastWorkingMode = {};
539
540 bool isWeeklyScheduleConfigured = false;
541 bool configFinishedReceived = true;
542 bool defaultConfigReceived = false;
543 bool weeklyScheduleReceived = false;
544 bool altWeeklyScheduleReceived = false;
545 bool initDone = false;
546 bool serverChannelFunctionValid = true;
547 bool wrapAroundTemperatureSetpoints = false;
548 bool registeredInRelayHvacAggregator = false;
549 bool startupDelay = true;
550 bool forcedByAux = false;
551
552 uint8_t channelConfigChangedOffline = 0;
553 uint8_t weeklyScheduleChangedOffline = 0;
554 uint8_t lastManualMode = 0;
555 uint8_t previousSubfunction = 0;
556 uint8_t defaultSubfunction = 0;
557 int16_t defaultMainThermometer = -1;
558 int16_t defaultAuxThermometer = -1;
559 int16_t defaultBinarySensor = -1;
560 int16_t defaultPumpSwitch = -1;
561 int16_t defaultHeatOrColdSourceSwitch = -1;
562 int16_t defaultMasterThermostat = -1;
563 int16_t defaultChannelsFlags = 0;
564
565 int8_t lastProgramManualOverride = -1;
566 int8_t lastValue = -111; // set out of output value range
567 uint8_t configFixAttempt = 0;
568
569 int16_t lastManualSetpointHeat = INT16_MIN;
570 int16_t lastManualSetpointCool = INT16_MIN;
571 int16_t lastTemperature = 0;
572 int16_t buttonTemperatureStep = 50; // 0.5 degrees
573
574 uint32_t lastConfigChangeTimestampMs = 0;
575 uint32_t lastIterateTimestampMs = 0;
576 uint32_t lastOutputStateChangeTimestampMs = 0;
577 uint32_t timerUpdateTimestamp = 0;
578 uint32_t lastCountdownTimerRemainingSec = UINT32_MAX;
579
580 time_t countdownTimerEnds = 1;
581
582 int16_t defaultTemperatureRoomMin[6] = {
583 500, // default min temperature for all other functions or when value is
584 // set to INT16_MIN
585 500, // HVAC_THERMOSTAT (heat or cool)
586 500, // AUTO
587 -5000, // DIFFERENTIAL
588 1000, // DOMESTIC_HOT_WATER
589 };
590 int16_t defaultTemperatureRoomMax[6] = {
591 4000, // default max temperature for all other functions or when value is
592 // set to INT16_MIN
593 4000, // HVAC_THERMOSTAT (heat or cool)
594 4000, // AUTO
595 5000, // DIFFERENTIAL
596 7500, // DOMESTIC_HOT_WATER
597 };
598};
599
600} // namespace Control
601} // namespace Supla
602
603#endif // SRC_SUPLA_CONTROL_HVAC_BASE_H_
Definition SuplaDevice.h:177
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition hvac_base.cpp:436
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition hvac_base.cpp:353
bool getRemainingCountdownTimerSec(uint32_t *remainingSec) const override
Returns remaining countdown timer time in seconds for an active HVAC countdown timer.
Definition hvac_base.cpp:5060
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:1673
void handleSetChannelConfigResult(TSDS_SetChannelConfigResult *result) override
Handles "set channel config" reply from server.
Definition hvac_base.cpp:2677
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition hvac_base.cpp:577
void onLoadConfig(SuplaDeviceClass *) override
First method called on element in SuplaDevice.begin().
Definition hvac_base.cpp:249
bool iterateConnected() override
Method called on each SuplaDevice iteration when device is connected and registered to Supla server o...
Definition hvac_base.cpp:167
void handleChannelConfigFinished() override
Handles "channel config finished" message from server.
Definition hvac_base.cpp:561
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition hvac_base.cpp:3544
uint8_t handleChannelConfig(TSD_ChannelConfig *config, bool local=false) override
Handles "set channel config" request from server.
Definition hvac_base.cpp:897
void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc) override
Method called each time when device successfully registers to Supla server.
Definition hvac_base.cpp:535
bool isHvacFlagForcedOffBySensor() const
Returns true if thermostat output is disabled by binary sensor state (i.e.
Definition hvac_base.cpp:6149
void onInit() override
Third method called on element in SuplaDevice.begin().
Definition hvac_base.cpp:464
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition hvac_base.cpp:5922
Definition output_interface.h:26
Definition supla_srpc.h:61
Definition proto.h:3683
Definition proto.h:3742
Definition proto.h:3506
Definition proto.h:2860
Definition proto.h:915
Definition proto.h:3428
Definition proto.h:3412
Definition proto.h:1227
Definition proto.h:3489