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