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;
65 void purgeConfig() override;
66
67 int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override;
69 bool local = false) override;
70 uint8_t handleWeeklySchedule(TSD_ChannelConfig *newWeeklySchedule,
71 bool altSchedule = false,
72 bool local = false) override;
74 TSDS_SetChannelConfigResult *result) override;
75 void handleChannelConfigFinished() override;
76
77 void handleAction(int event, int action) override;
78
79 void setTargetMode(int mode, bool keepSchedule = false);
80 void clearTemperatureSetpointHeat();
81 void clearTemperatureSetpointCool();
82 void setTemperatureSetpointHeat(int tHeat);
83 void setTemperatureSetpointCool(int tCool);
84 int getTemperatureSetpointHeat();
85 int getTemperatureSetpointCool();
86 int getMode();
87 int getDefaultManualMode();
88 bool isWeeklyScheduleEnabled();
89 bool isCountdownEnabled();
90 bool isThermostatDisabled();
91 bool isManualModeEnabled();
92
93 void saveConfig();
94 void saveWeeklySchedule();
95
96 // Below functions are used to set device capabilities.
97 void setHeatingAndCoolingSupported(bool supported);
98 void setHeatCoolSupported(bool supported);
99 void setFanSupported(bool supported);
100 void setDrySupported(bool supported);
101
102 void addAvailableAlgorithm(unsigned _supla_int16_t algorithm);
103 void removeAvailableAlgorithm(unsigned _supla_int16_t algorithm);
104 bool isOutputControlledInternally() const;
105 // use this function to set value based on local config change
106 bool setUsedAlgorithm(unsigned _supla_int16_t newAlgorithm);
107 unsigned _supla_int16_t getUsedAlgorithm() const;
108 void setButtonTemperatureStep(int16_t step);
109
110 // Local UI blocking configuration.
111 // Those options doesn't have any functional effect on HvacBase behavior.
112 // HvacBase only provides interface for setting/getting these options.
113 // If you plan to use them, please implement proper local UI logic in
114 // your application.
115 void addLocalUILockCapability(enum LocalUILock capability);
116 void removeLocalUILockCapability(enum LocalUILock capability);
117
118 enum LocalUILock getLocalUILockCapabilityAsEnum(uint8_t capability) const;
119 void setLocalUILockCapabilities(uint8_t capabilities);
120 uint8_t getLocalUILockCapabilities() const;
121 bool isLocalUILockCapabilitySupported(enum LocalUILock capability) const;
122
123 bool setLocalUILock(enum LocalUILock lock);
124 enum LocalUILock getLocalUILock() const;
125
126 void setLocalUILockTemperatureMin(int16_t min);
127 // Returns min allowed temperature setpoint via local UI.
128 // Returns INT16_MIN if configured value is not in room min/max range
129 int16_t getLocalUILockTemperatureMin() const;
130
131 void setLocalUILockTemperatureMax(int16_t max);
132 // Returns max allowed temperature setpoint via local UI.
133 // Returns INT16_MIN if configured value is not in room min/max range
134 int16_t getLocalUILockTemperatureMax() const;
135
136 // Subfunction can be set only for HVAC_THERMOSTAT channel function
137 // SUPLA_HVAC_SUBFUNCTION_*
138 void setSubfunction(uint8_t subfunction);
139 void setDefaultSubfunction(uint8_t subfunction);
140
141 // use this function to set value based on local config change
142 bool setMainThermometerChannelNo(uint8_t channelNo);
143 uint8_t getMainThermometerChannelNo() const;
144
145 // use this function to set value based on local config change
146 bool setAuxThermometerChannelNo(uint8_t channelNo);
147 uint8_t getAuxThermometerChannelNo() const;
148 // use this function to set value based on local config change
149 void setAuxThermometerType(uint8_t type);
150 uint8_t getAuxThermometerType() const;
151
152 bool setPumpSwitchChannelNo(uint8_t channelNo);
153 void clearPumpSwitchChannelNo();
154 uint8_t getPumpSwitchChannelNo() const;
155 bool isPumpSwitchSet() const;
156 bool setHeatOrColdSourceSwitchChannelNo(uint8_t channelNo);
157 void clearHeatOrColdSourceSwitchChannelNo();
158 uint8_t getHeatOrColdSourceSwitchChannelNo() const;
159 bool isHeatOrColdSourceSwitchSet() const;
160 bool setMasterThermostatChannelNo(uint8_t channelNo);
161 void clearMasterThermostatChannelNo();
162 uint8_t getMasterThermostatChannelNo() const;
163 bool isMasterThermostatSet() const;
164
165 // use this function to set value based on local config change
166 void setAntiFreezeAndHeatProtectionEnabled(bool enebled);
167 bool isAntiFreezeAndHeatProtectionEnabled() const;
168 void setAuxMinMaxSetpointEnabled(bool enabled);
169 bool isAuxMinMaxSetpointEnabled() const;
170
171 void setTemperatureSetpointChangeSwitchesToManualMode(bool enabled);
172 bool isTemperatureSetpointChangeSwitchesToManualMode() const;
173
174 // only for HEAT_COOL thremostats:
175 void setUseSeparateHeatCoolOutputs(bool enabled);
176 bool isUseSeparateHeatCoolOutputs() 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
202 // Below temperatures defines device capabilities.
203 // Configure those values before calling other setTemperature* functions.
204 void setTemperatureRoomMin(_supla_int16_t temperature);
205 void setTemperatureRoomMax(_supla_int16_t temperature);
206 void setTemperatureAuxMin(_supla_int16_t temperature);
207 void setTemperatureAuxMax(_supla_int16_t temperature);
208 void setTemperatureHisteresisMin(_supla_int16_t temperature);
209 void setTemperatureHisteresisMax(_supla_int16_t temperature);
210 void setTemperatureHeatCoolOffsetMin(_supla_int16_t temperature);
211 void setTemperatureHeatCoolOffsetMax(_supla_int16_t temperature);
212 _supla_int16_t getTemperatureRoomMin(
213 const THVACTemperatureCfg *temperatures) const;
214 _supla_int16_t getTemperatureRoomMax(
215 const THVACTemperatureCfg *temperatures) const;
216 _supla_int16_t getTemperatureAuxMin(
217 const THVACTemperatureCfg *temperatures) const;
218 _supla_int16_t getTemperatureAuxMax(
219 const THVACTemperatureCfg *temperatures) const;
220 _supla_int16_t getTemperatureHisteresisMin(
221 const THVACTemperatureCfg *temperatures) const;
222 _supla_int16_t getTemperatureHisteresisMax(
223 const THVACTemperatureCfg *temperatures) const;
224 _supla_int16_t getTemperatureHeatCoolOffsetMin(
225 const THVACTemperatureCfg *temperatures) const;
226 _supla_int16_t getTemperatureHeatCoolOffsetMax(
227 const THVACTemperatureCfg *temperatures) const;
228 _supla_int16_t getTemperatureRoomMin() const;
229 _supla_int16_t getTemperatureRoomMax() const;
230 _supla_int16_t getTemperatureAuxMin() const;
231 _supla_int16_t getTemperatureAuxMax() const;
232 _supla_int16_t getTemperatureHisteresisMin() const;
233 _supla_int16_t getTemperatureHisteresisMax() const;
234 _supla_int16_t getTemperatureHeatCoolOffsetMin() const;
235 _supla_int16_t getTemperatureHeatCoolOffsetMax() const;
236
237 // Below functions are used to set device configuration - those can
238 // be modified by user within limits defined by set* functions above.
239 // Set may fail if value is out of range defined by set* functions above.
240 // use those set functions to set value based on local input change
241 bool setTemperatureFreezeProtection(_supla_int16_t temperature);
242 bool setTemperatureHeatProtection(_supla_int16_t temperature);
243 bool setTemperatureEco(_supla_int16_t temperature);
244 bool setTemperatureComfort(_supla_int16_t temperature);
245 bool setTemperatureBoost(_supla_int16_t temperature);
246 bool setTemperatureHisteresis(_supla_int16_t temperature);
247 bool setTemperatureBelowAlarm(_supla_int16_t temperature);
248 bool setTemperatureAboveAlarm(_supla_int16_t temperature);
249 bool setTemperatureAuxMinSetpoint(_supla_int16_t temperature);
250 bool setTemperatureAuxMaxSetpoint(_supla_int16_t temperature);
251 _supla_int16_t getTemperatureFreezeProtection(
252 const THVACTemperatureCfg *temperatures) const;
253 _supla_int16_t getTemperatureHeatProtection(
254 const THVACTemperatureCfg *temperatures) const;
255 _supla_int16_t getTemperatureEco(
256 const THVACTemperatureCfg *temperatures) const;
257 _supla_int16_t getTemperatureComfort(
258 const THVACTemperatureCfg *temperatures) const;
259 _supla_int16_t getTemperatureBoost(
260 const THVACTemperatureCfg *temperatures) const;
261 _supla_int16_t getTemperatureHisteresis(
262 const THVACTemperatureCfg *temperatures) const;
263 _supla_int16_t getTemperatureBelowAlarm(
264 const THVACTemperatureCfg *temperatures) const;
265 _supla_int16_t getTemperatureAboveAlarm(
266 const THVACTemperatureCfg *temperatures) const;
267 _supla_int16_t getTemperatureAuxMinSetpoint(
268 const THVACTemperatureCfg *temperatures) const;
269 _supla_int16_t getTemperatureAuxMaxSetpoint(
270 const THVACTemperatureCfg *temperatures) const;
271 _supla_int16_t getTemperatureFreezeProtection() const;
272 _supla_int16_t getTemperatureHeatProtection() const;
273 _supla_int16_t getTemperatureEco() const;
274 _supla_int16_t getTemperatureComfort() const;
275 _supla_int16_t getTemperatureBoost() const;
276 _supla_int16_t getTemperatureHisteresis() const;
277 _supla_int16_t getTemperatureBelowAlarm() const;
278 _supla_int16_t getTemperatureAboveAlarm() const;
279 _supla_int16_t getTemperatureAuxMinSetpoint() const;
280 _supla_int16_t getTemperatureAuxMaxSetpoint() const;
281
282 // Below methods check if specific function is supported by thermostat.
283 // Even if function is supported, it doesn't mean that new mode setting will
284 // be valid, becuase this depends on configured Function.
285 bool isHeatingAndCoolingSupported() const;
286 bool isHeatCoolSupported() const;
287 bool isFanSupported() const;
288 bool isDrySupported() const;
289
290 bool isHeatingSubfunction() const;
291 bool isCoolingSubfunction() const;
292
293 bool isFunctionSupported(_supla_int_t channelFunction) const;
294 bool isConfigValid(TChannelConfig_HVAC *config) const;
295 bool isWeeklyScheduleValid(
297 bool isAltWeeklySchedule = false) const;
298 bool isChannelThermometer(uint8_t channelNo) const;
299 bool isChannelBinarySensor(uint8_t channelNo) const;
300 bool isAlgorithmValid(unsigned _supla_int16_t algorithm) const;
301 bool areTemperaturesValid(const THVACTemperatureCfg *temperatures) const;
302 void fixTempearturesConfig();
303
304 // Check if mode is supported by currently configured Function
305 bool isModeSupported(int mode) const;
306
307 static bool isTemperatureSetInStruct(const THVACTemperatureCfg *temperatures,
308 unsigned _supla_int_t index);
309 static _supla_int16_t getTemperatureFromStruct(
310 const THVACTemperatureCfg *temperatures, unsigned _supla_int_t index);
311 static void setTemperatureInStruct(THVACTemperatureCfg *temperatures,
312 unsigned _supla_int_t index,
313 _supla_int16_t temperature);
314 static void clearTemperatureInStruct(THVACTemperatureCfg *temperatures,
315 unsigned _supla_int_t index);
316
317 static int32_t getArrayIndex(int32_t bitIndex);
318
319 bool isTemperatureInRoomConstrain(_supla_int16_t temperature) const;
320 bool isTemperatureInAuxConstrain(_supla_int16_t temperature) const;
321 bool isTemperatureFreezeProtectionValid(_supla_int16_t temperature) const;
322 bool isTemperatureHeatProtectionValid(_supla_int16_t temperature) const;
323 bool isTemperatureEcoValid(_supla_int16_t temperature) const;
324 bool isTemperatureComfortValid(_supla_int16_t temperature) const;
325 bool isTemperatureBoostValid(_supla_int16_t temperature) const;
326 bool isTemperatureHisteresisValid(_supla_int16_t temperature) const;
327 bool isTemperatureBelowAlarmValid(_supla_int16_t temperature) const;
328 bool isTemperatureAboveAlarmValid(_supla_int16_t temperature) const;
329 // validates temperature against current configuration
330 bool isTemperatureAuxMinSetpointValid(
331 _supla_int16_t temperature) const;
332 // validates temperature against current configuration
333 bool isTemperatureAuxMaxSetpointValid(
334 _supla_int16_t temperature) const;
335 bool isTemperatureInHeatCoolConstrain(_supla_int16_t tHeat,
336 _supla_int16_t tCool) const;
337
338 bool isTemperatureFreezeProtectionValid(
339 const THVACTemperatureCfg *temperatures) const;
340 bool isTemperatureHeatProtectionValid(
341 const THVACTemperatureCfg *temperatures) const;
342 bool isTemperatureEcoValid(const THVACTemperatureCfg *temperatures) const;
343 bool isTemperatureComfortValid(const THVACTemperatureCfg *temperatures) const;
344 bool isTemperatureBoostValid(const THVACTemperatureCfg *temperatures) const;
345 bool isTemperatureHisteresisValid(
346 const THVACTemperatureCfg *temperatures) const;
347 bool isTemperatureBelowAlarmValid(
348 const THVACTemperatureCfg *temperatures) const;
349 bool isTemperatureAboveAlarmValid(
350 const THVACTemperatureCfg *temperatures) const;
351 // validates temperature against configuration send in parameter
352 bool isTemperatureAuxMinSetpointValid(
353 const THVACTemperatureCfg *temperatures) const;
354 // validates temperature against configuration send in parameter
355 bool isTemperatureAuxMaxSetpointValid(
356 const THVACTemperatureCfg *temperatures) const;
357
358 void clearChannelConfigChangedFlag();
359 void clearWeeklyScheduleChangedFlag();
360
361 int getWeeklyScheduleProgramId(
362 const TChannelConfig_WeeklySchedule *schedule, int index) const;
363 bool isProgramValid(const TWeeklyScheduleProgram &program,
364 bool isAltWeeklySchedule) const;
365
366 bool setProgram(int programId,
367 unsigned char mode,
368 _supla_int16_t tHeat,
369 _supla_int16_t tCool,
370 bool isAltWeeklySchedule = false);
371 // index is the number of quarter in week
372 bool setWeeklySchedule(int index,
373 int programId,
374 bool isAltWeeklySchedule = false);
375 // schedule internally works on 15 min intervals (quarters)
376 bool setWeeklySchedule(enum DayOfWeek dayOfWeek,
377 int hour,
378 int quarter,
379 int programId,
380 bool isAltWeeklySchedule = false);
381 int calculateIndex(enum DayOfWeek dayOfWeek,
382 int hour,
383 int quarter) const;
384 int getCurrentQuarter() const;
385 TWeeklyScheduleProgram getCurrentProgram() const;
386 int getCurrentProgramId() const;
387 TWeeklyScheduleProgram getProgramAt(int quarterIndex) const;
388 TWeeklyScheduleProgram getProgramById(int programId,
389 bool isAltWeeklySchedule = false) const;
390
391 void copyFixedChannelConfigTo(HvacBase *hvac) const;
392 void copyFullChannelConfigTo(TChannelConfig_HVAC *hvac) const;
393 void turnOn();
394 bool turnOnWeeklySchedlue();
395 void changeFunction(int32_t newFunction, bool changedLocally);
396 _supla_int_t getChannelFunction();
397
398 void addPrimaryOutput(Supla::Control::OutputInterface *output);
399 void addSecondaryOutput(Supla::Control::OutputInterface *output);
400
401 void enableDifferentialFunctionSupport();
402 bool isDifferentialFunctionSupported() const;
403 void enableDomesticHotWaterFunctionSupport();
404 bool isDomesticHotWaterFunctionSupported() const;
405
406 bool applyNewRuntimeSettings(int mode,
407 int16_t tHeat,
408 int16_t tCool,
409 int32_t durationSec = 0);
410
411 // keeps the temperature setpoints
412 bool applyNewRuntimeSettings(int mode,
413 int32_t durationSec = 0);
414
415 _supla_int16_t getLastTemperature();
416
417 bool setBinarySensorChannelNo(uint8_t channelNo);
418 uint8_t getBinarySensorChannelNo() const;
419
420 static void debugPrintConfigStruct(const TChannelConfig_HVAC *config, int id);
421 static void debugPrintConfigDiff(const TChannelConfig_HVAC *configCurrent,
422 const TChannelConfig_HVAC *configNew,
423 int id);
424 static const char* temperatureName(int32_t index);
425 static void debugPrintProgram(const TWeeklyScheduleProgram *program, int id);
426
427 _supla_int16_t getPrimaryTemp();
428 _supla_int16_t getSecondaryTemp();
429
430 bool isWeelkySchedulManualOverrideMode() const;
431 void clearWaitingFlags();
432
433 void allowWrapAroundTemperatureSetpoints();
434
435 void enableInitialConfig();
436
437 // returns Linux timestamp in seconds when current countdown timer will end.
438 // It return 1 if countdown timer is not set
439 time_t getCountDownTimerEnds() const;
440 int32_t getRemainingCountDownTimeSec() const;
441 void stopCountDownTimer();
442
443 bool ignoreAggregatorForRelay(int32_t relayChannelNumber) const;
444 void setIgnoreDefaultPumpForAggregator(bool);
445 void setIgnoreDefaultHeatOrColdSourceForAggregator(bool);
446
447 bool isAltWeeklySchedulePossible() const;
448
449 HvacParameterFlags parameterFlags = {};
450
451 protected:
452 // 0 = off, >= 1 enable heating, <= -1 enable cooling
453 void setOutput(int value, bool force = false);
454 void updateChannelState();
455 // Implement this method to apply additional validations and corrections
456 // to HVAC configuration. Return true when correction was done and it will
457 // be shared with server.
458 virtual bool applyAdditionalValidation(TChannelConfig_HVAC *hvacConfig);
459
460 private:
461 _supla_int16_t getTemperature(int channelNo);
462 // returns true if forced off should be set
463 bool getForcedOffSensorState();
464 bool isSensorTempValid(_supla_int16_t temperature) const;
465 bool checkOverheatProtection(_supla_int16_t t);
466 bool checkAntifreezeProtection(_supla_int16_t t);
467 bool checkAuxProtection(_supla_int16_t t);
468 bool isAuxProtectionEnabled() const;
469 bool processWeeklySchedule();
470 void setSetpointTemperaturesForCurrentMode(int16_t tHeat, int16_t tCool);
471 bool checkThermometersStatusForCurrentMode(_supla_int16_t t1,
472 _supla_int16_t t2) const;
473 int evaluateHeatOutputValue(_supla_int16_t tMeasured,
474 _supla_int16_t tTarget);
475 int evaluateCoolOutputValue(_supla_int16_t tMeasured,
476 _supla_int16_t tTarget);
477 void fixTemperatureSetpoints();
478 void clearLastOutputValue();
479 void storeLastWorkingMode();
480 void applyConfigWithoutValidation(TChannelConfig_HVAC *hvacConfig);
481 int32_t channelFunctionToIndex(int32_t channelFunction) const;
482 void changeTemperatureSetpointsBy(int16_t tHeat, int16_t tCool);
483 void updateTimerValue();
484 bool fixReadonlyParameters(TChannelConfig_HVAC *hvacConfig);
485 bool fixReadonlyTemperature(int32_t temperatureIndex,
486 THVACTemperatureCfg *newTemp);
487
488 bool registerInAggregator(int16_t channelNo);
489 void unregisterInAggregator(int16_t channelNo);
490
491 TChannelConfig_HVAC config = {};
492 TChannelConfig_HVAC *initialConfig = nullptr;
493 // primaryOutput can be used for heating or cooling (cooling is supported
494 // when secondaryOutput is not used, in such case "AUTO" mode is not
495 // available)
496 Supla::Control::OutputInterface *primaryOutput = nullptr;
497 // secondaryOutput can be used only for cooling
498 Supla::Control::OutputInterface *secondaryOutput = nullptr;
499
500 TChannelConfig_WeeklySchedule weeklySchedule = {};
501 TChannelConfig_WeeklySchedule altWeeklySchedule = {};
502
503 THVACValue lastWorkingMode = {};
504
505 bool isWeeklyScheduleConfigured = false;
506 bool configFinishedReceived = true;
507 bool defaultConfigReceived = false;
508 bool weeklyScheduleReceived = false;
509 bool altWeeklyScheduleReceived = false;
510 bool initDone = false;
511 bool serverChannelFunctionValid = true;
512 bool wrapAroundTemperatureSetpoints = false;
513 bool registeredInRelayHvacAggregator = false;
514 bool startupDelay = true;
515
516 uint8_t channelConfigChangedOffline = 0;
517 uint8_t weeklyScheduleChangedOffline = 0;
518 uint8_t lastManualMode = 0;
519 uint8_t previousSubfunction = 0;
520 uint8_t defaultSubfunction = 0;
521 uint8_t defaultMainThermometer = 0;
522 uint8_t defaultAuxThermometer = 0;
523 uint8_t defaultBinarySensor = 0;
524 int16_t defaultPumpSwitch = -1;
525 int16_t defaultHeatOrColdSourceSwitch = -1;
526 int16_t defaultMasterThermostat = -1;
527 int16_t defaultChannelsFlags = 0;
528
529 int8_t lastProgramManualOverride = -1;
530 int8_t lastValue = -111; // set out of output value range
531 uint8_t configFixAttempt = 0;
532
533 int16_t lastManualSetpointHeat = INT16_MIN;
534 int16_t lastManualSetpointCool = INT16_MIN;
535 int16_t lastTemperature = 0;
536 int16_t buttonTemperatureStep = 50; // 0.5 degrees
537
538 uint32_t lastConfigChangeTimestampMs = 0;
539 uint32_t lastIterateTimestampMs = 0;
540 uint32_t lastOutputStateChangeTimestampMs = 0;
541 uint32_t timerUpdateTimestamp = 0;
542
543 time_t countdownTimerEnds = 1;
544
545 int16_t defaultTemperatureRoomMin[6] = {
546 500, // default min temperature for all other functions or when value is
547 // set to INT16_MIN
548 500, // HVAC_THERMOSTAT (heat or cool)
549 500, // AUTO
550 -5000, // DIFFERENTIAL
551 1000, // DOMESTIC_HOT_WATER
552 };
553 int16_t defaultTemperatureRoomMax[6] = {
554 4000, // default max temperature for all other functions or when value is
555 // set to INT16_MIN
556 4000, // HVAC_THERMOSTAT (heat or cool)
557 4000, // AUTO
558 5000, // DIFFERENTIAL
559 7500, // DOMESTIC_HOT_WATER
560 };
561};
562
563} // namespace Control
564} // namespace Supla
565
566#endif // SRC_SUPLA_CONTROL_HVAC_BASE_H_
Definition SuplaDevice.h:93
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition hvac_base.cpp:431
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition hvac_base.cpp:347
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:1656
void handleSetChannelConfigResult(TSDS_SetChannelConfigResult *result) override
Handles "set channel config" reply from server.
Definition hvac_base.cpp:2611
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition hvac_base.cpp:572
void onLoadConfig(SuplaDeviceClass *) override
First method called on element in SuplaDevice.begin().
Definition hvac_base.cpp:243
bool iterateConnected() override
Method called on each SuplaDevice iteration when device is connected and registered to Supla server o...
Definition hvac_base.cpp:168
void handleChannelConfigFinished() override
Handles "channel config finished" message from server.
Definition hvac_base.cpp:556
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition hvac_base.cpp:3480
uint8_t handleChannelConfig(TSD_ChannelConfig *config, bool local=false) override
Handles "set channel config" request from server.
Definition hvac_base.cpp:904
void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc) override
Method called each time when device successfully registers to Supla server.
Definition hvac_base.cpp:530
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition hvac_base.cpp:459
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition hvac_base.cpp:5734
Definition output_interface.h:26
Definition supla_srpc.h:55
Definition proto.h:3163
Definition proto.h:3222
Definition proto.h:3004
Definition proto.h:2470
Definition proto.h:860
Definition proto.h:2928
Definition proto.h:2912
Definition proto.h:1167
Definition proto.h:2989