From d0b9d5f3f6cd6ce904532b56131b76698baca30a Mon Sep 17 00:00:00 2001 From: Klaus Ahrenberg Date: Mon, 27 Mar 2023 07:19:13 +0200 Subject: [PATCH] 1.35 --- WThermostat_1.34.bin => WThermostat_1.35.bin | Bin 418768 -> 418944 bytes platformio.ini | 2 +- src/WClock.h | 204 +++---- ...ck.sync-conflict-20230213-231753-Z2YYRHL.h | 569 ------------------ src/WThermostat.cpp | 4 +- src/WThermostat.h | 28 +- src/WThermostat_BAC_002_ALW.h | 4 +- src/WThermostat_ME102H.h | 2 +- src/WThermostat_ME81H.h | 4 +- 9 files changed, 119 insertions(+), 698 deletions(-) rename WThermostat_1.34.bin => WThermostat_1.35.bin (55%) delete mode 100644 src/WClock.sync-conflict-20230213-231753-Z2YYRHL.h diff --git a/WThermostat_1.34.bin b/WThermostat_1.35.bin similarity index 55% rename from WThermostat_1.34.bin rename to WThermostat_1.35.bin index 731ac11c668ba07c30c5e522ffbaf69b846826ed..cc60fba3f30f40fecc4f995407ae441ba513cb26 100644 GIT binary patch delta 71130 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 delta 71022 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 diff --git a/platformio.ini b/platformio.ini index 6b24040..fff8c25 100644 --- a/platformio.ini +++ b/platformio.ini @@ -28,4 +28,4 @@ lib_deps = EEPROM NTPClient Time - Hash + Hash \ No newline at end of file diff --git a/src/WClock.h b/src/WClock.h index f110706..5b81cf2 100644 --- a/src/WClock.h +++ b/src/WClock.h @@ -12,8 +12,7 @@ #endif #include #include -#include -#include +#include "TimeLib.h" #include "WDevice.h" #include "WNetwork.h" @@ -50,17 +49,11 @@ class WClock: public WDevice { this->timeZoneServer->setReadOnly(true); this->timeZoneServer->setVisibility(this->useTimeZoneServer->getBoolean() ? MQTT : NONE); //this->ntpServer->setVisibility(MQTT); - this->addProperty(timeZoneServer); - this->epochTime = WProps::createUnsignedLongProperty("epochTime", "epochTime"); - this->epochTime->setReadOnly(true); - this->epochTime->setOnValueRequest([this](WProperty* p) { - p->setUnsignedLong(getEpochTime()); - }); - this->addProperty(epochTime); - this->epochTimeFormatted = WProps::createStringProperty("epochTimeFormatted", "epochTimeFormatted"); - this->epochTimeFormatted->setReadOnly(true); - this->epochTimeFormatted->setOnValueRequest([this](WProperty* p) {updateFormattedTime();}); - this->addProperty(epochTimeFormatted); + this->addProperty(timeZoneServer); + _epochTimeFormatted = WProps::createStringProperty("epochTimeFormatted", "epochTimeFormatted"); + _epochTimeFormatted->setReadOnly(true); + _epochTimeFormatted->setOnValueRequest([this](WProperty* p) {updateFormattedTime();}); + this->addProperty(_epochTimeFormatted); this->validTime = WProps::createOnOffProperty("validTime", "validTime"); this->validTime->setBoolean(false); this->validTime->setReadOnly(true); @@ -73,20 +66,20 @@ class WClock: public WDevice { this->timeZone = nullptr; } this->rawOffset = WProps::createIntegerProperty("raw_offset", "rawOffset"); - this->rawOffset->setInteger(0); + this->rawOffset->setInteger(3600); this->rawOffset->setVisibility(NONE); network->settings()->add(this->rawOffset); this->rawOffset->setReadOnly(true); this->addProperty(rawOffset); this->dstOffset = WProps::createIntegerProperty("dst_offset", "dstOffset"); - this->dstOffset->setInteger(0); + this->dstOffset->setInteger(3600); this->dstOffset->setVisibility(NONE); network->settings()->add(this->dstOffset); this->dstOffset->setReadOnly(true); this->addProperty(dstOffset); this->useDaySavingTimes = network->settings()->setBoolean("useDaySavingTimes", false); this->useDaySavingTimes->setVisibility(NONE); - this->dstRule = network->settings()->setByteArray("dstRule", DEFAULT_DST_RULE); + this->dstRule = network->settings()->setByteArray("dstRule", 8, DEFAULT_DST_RULE); //HtmlPages WPage* configPage = new WPage(this->id(), "Configure clock"); configPage->setPrintPage(std::bind(&WClock::printConfigPage, this, std::placeholders::_1, std::placeholders::_2)); @@ -103,18 +96,16 @@ class WClock: public WDevice { this->enableNightMode = network->settings()->setBoolean("enableNightMode", true); this->nightMode = WProps::createBooleanProperty("nightMode", "nightMode"); this->addProperty(this->nightMode); - this->nightSwitches = network->settings()->setByteArray("nightSwitches", DEFAULT_NIGHT_SWITCHES); + this->nightSwitches = network->settings()->setByteArray("nightSwitches", 4, DEFAULT_NIGHT_SWITCHES); } this->wifiClient = nullptr; } void loop(unsigned long now) { //Invalid after 3 hours - validTime->setBoolean((lastNtpSync > 0) && ((!this->useTimeZoneServer->getBoolean()) || (lastTimeZoneSync > 0)) && (now - lastTry < (3 * 60 * 60000))); - - if (((lastTry == 0) || (now - lastTry > 10000)) - && (WiFi.status() == WL_CONNECTED)) { - bool timeUpdated = false; + validTime->setBoolean((lastNtpSync > 0) && ((!this->useTimeZoneServer->getBoolean()) || (lastTimeZoneSync > 0)) && (now - lastTry < (3 * 60 * 60000))); + if (((lastTry == 0) || (now - lastTry > 10000)) && (WiFi.status() == WL_CONNECTED)) { + bool timeUpdated = false; //1. Sync ntp if ((!isValidTime()) && ((lastNtpSync == 0) || (now - lastNtpSync > 60000))) { @@ -126,7 +117,7 @@ class WClock: public WDevice { ntpTime = ntpClient.getEpochTime(); this->calculateDstStartAndEnd(); validTime->setBoolean(!this->useTimeZoneServer->getBoolean()); - network()->debug(F("NTP time synced: %s"), epochTimeFormatted->c_str()); + network()->debug(F("NTP time synced: %s"), _epochTimeFormatted->c_str()); timeUpdated = true; } else { network()->error(F("NTP sync failed. ")); @@ -158,7 +149,7 @@ class WClock: public WDevice { failedTimeZoneSync = 0; lastTimeZoneSync = millis(); validTime->setBoolean(true); - network()->debug(F("Time zone evaluated. Current local time: %s"), epochTimeFormatted->c_str()); + network()->debug(F("Time zone evaluated. Current local time: %s"), _epochTimeFormatted->c_str()); timeUpdated = true; } else { failedTimeZoneSync++; @@ -180,75 +171,98 @@ class WClock: public WDevice { this->nightSwitches->getByteArrayValue(2), this->nightSwitches->getByteArrayValue(3))); } if (timeUpdated) { - notifyOnTimeUpdate(); + _notifyOnTimeUpdate(); + } else { + _notifyOnMinuteUpdate(); } lastTry = millis(); - } + } } void setOnTimeUpdate(THandlerFunction onTimeUpdate) { - this->onTimeUpdate = onTimeUpdate; + _onTimeUpdate = onTimeUpdate; } - unsigned long getEpochTime() { - return getEpochTime(true); + void setOnMinuteTrigger(THandlerFunction onMinuteTrigger) { + _onMinuteTrigger = onMinuteTrigger; } - byte getWeekDay() { - return getWeekDay(getEpochTime()); + unsigned long epochTime() { + return _epochTime(true); } - static byte getWeekDay(unsigned long epochTime) { + byte weekDay() { + return weekDayOf(epochTime()); + } + + static byte weekDayOf(unsigned long epochTime) { //weekday from 0 to 6, 0 is Sunday return (((epochTime / 86400L) + 4) % 7); } - byte getHours() { - return getHours(getEpochTime()); + const char* weekDayNameShort() { + return weekDayNameShortOf(weekDay()); + } + + const char* weekDayNameShortOf(byte weekDay) { + switch (weekDay) { + case 1: return PSTR("Mo"); + case 2: return PSTR("Di"); + case 3: return PSTR("Mi"); + case 4: return PSTR("Do"); + case 5: return PSTR("Fr"); + case 6: return PSTR("Sa"); + case 0: return PSTR("So"); + default: return PSTR("n.a."); + } + } + + byte hours() { + return hoursOf(epochTime()); } - static byte getHours(unsigned long epochTime) { + static byte hoursOf(unsigned long epochTime) { return ((epochTime % 86400L) / 3600); } - byte getMinutes() { - return getMinutes(getEpochTime()); + byte minutes() { + return minutesOf(epochTime()); } - static byte getMinutes(unsigned long epochTime) { + static byte minutesOf(unsigned long epochTime) { return ((epochTime % 3600) / 60); } - byte getSeconds() { - return getSeconds(getEpochTime()); + byte seconds() { + return secondsOf(epochTime()); } - static byte getSeconds(unsigned long epochTime) { + static byte secondsOf(unsigned long epochTime) { return (epochTime % 60); } - int getYear() { - return getYear(getEpochTime()); + int yearOf() { + return yearOf(epochTime()); } - static int getYear(unsigned long epochTime) { + static int yearOf(unsigned long epochTime) { return year(epochTime); } - byte getMonth() { - return getMonth(getEpochTime()); + byte monthOf() { + return monthOf(epochTime()); } - static byte getMonth(unsigned long epochTime) { + static byte monthOf(unsigned long epochTime) { //month from 1 to 12 return month(epochTime); } - byte getDay() { - return getDay(getEpochTime()); + byte dayOf() { + return dayOf(epochTime()); } - static byte getDay(unsigned long epochTime) { + static byte dayOf(unsigned long epochTime) { //day from 1 to 31 return day(epochTime); } @@ -258,11 +272,11 @@ class WClock: public WDevice { } bool isTimeLaterThan(byte hours, byte minutes) { - return isTimeLaterThan(getHours(), getMinutes(), hours, minutes); + return isTimeLaterThan(this->hours(), this->minutes(), hours, minutes); } bool isTimeEarlierThan(byte hours, byte minutes) { - return ((getHours() < hours) || ((getHours() == hours) && (getMinutes() < minutes))); + return ((this->hours() < hours) || ((this->hours() == hours) && (this->minutes() < minutes))); } bool isTimeBetween(byte fromHours, byte fromMinutes, byte toHours, byte toMinutes) { @@ -276,49 +290,19 @@ class WClock: public WDevice { } void updateFormattedTime() { - WStringStream* stream = updateFormattedTime(getEpochTime()); - epochTimeFormatted->setString(stream->c_str()); + WStringStream* stream = updateFormattedTime(epochTime()); + _epochTimeFormatted->setString(stream->c_str()); delete stream; } static WStringStream* updateFormattedTime(unsigned long rawTime) { + // Format YY-MM-DD hh:mm:ss WStringStream* stream = new WStringStream(19); - char buffer[5]; - //year - int _year = year(rawTime); - itoa(_year, buffer, 10); - stream->print(buffer); - stream->print("-"); - //month - uint8_t _month = month(rawTime); - if (_month < 10) stream->print("0"); - itoa(_month, buffer, 10); - stream->print(buffer); - stream->print("-"); - //month - uint8_t _day = day(rawTime); - if (_day < 10) stream->print("0"); - itoa(_day, buffer, 10); - stream->print(buffer); - stream->print(" "); - //hours - unsigned long _hours = (rawTime % 86400L) / 3600; - if (_hours < 10) stream->print("0"); - itoa(_hours, buffer, 10); - stream->print(buffer); - stream->print(":"); - //minutes - unsigned long _minutes = (rawTime % 3600) / 60; - if (_minutes < 10) stream->print("0"); - itoa(_minutes, buffer, 10); - stream->print(buffer); - stream->print(":"); - //seconds - unsigned long _seconds = rawTime % 60; - if (_seconds < 10) stream->print("0"); - itoa(_seconds, buffer, 10); - stream->print(buffer); - + char buffer[20]; + snprintf(buffer, 20, "%02d-%02d-%02d %02d:%02d:%02d", + yearOf(rawTime), monthOf(rawTime), dayOf(rawTime), + ((rawTime % 86400L) / 3600), ((rawTime % 3600) / 60), rawTime % 60); + stream->print(buffer); return stream; } @@ -461,19 +445,18 @@ class WClock: public WDevice { } } - WProperty* getEpochTimeFormatted() { - return epochTimeFormatted; + WProperty* epochTimeFormatted() { + return _epochTimeFormatted; } WProperty* nightMode; private: - THandlerFunction onTimeUpdate; + THandlerFunction _onTimeUpdate, _onMinuteTrigger; unsigned long lastTry, lastNtpSync, lastTimeZoneSync, ntpTime; unsigned long dstStart, dstEnd; - byte failedTimeZoneSync; - WProperty* epochTime; - WProperty* epochTimeFormatted; + byte failedTimeZoneSync; + WProperty* _epochTimeFormatted; WProperty* validTime; WProperty* ntpServer; WProperty* useTimeZoneServer; @@ -487,13 +470,20 @@ class WClock: public WDevice { WProperty* nightSwitches; WiFiClient* wifiClient; - void notifyOnTimeUpdate() { - if (onTimeUpdate) { - onTimeUpdate(); - } + void _notifyOnTimeUpdate() { + if (_onTimeUpdate) { + _onTimeUpdate(); + } + _notifyOnMinuteUpdate(); + } + + void _notifyOnMinuteUpdate() { + if (_onMinuteTrigger) { + _onMinuteTrigger(); + } } - unsigned long getEpochTime(bool useDstOffset) { + unsigned long _epochTime(bool useDstOffset) { return (lastNtpSync > 0 ? ntpTime + getRawOffset() + (useDstOffset ? getDstOffset() : 0) + ((millis() - lastNtpSync) / 1000) : 0); } @@ -506,7 +496,7 @@ class WClock: public WDevice { ds.Minute = 0; ds.Second = 0; unsigned long tt = makeTime(ds); - byte iwd = getWeekDay(tt); + byte iwd = weekDayOf(tt); if (week == 0) { //last week of last month short diffwd = iwd - weekday; @@ -522,14 +512,14 @@ class WClock: public WDevice { void calculateDstStartAndEnd() { if ((!this->useTimeZoneServer->getBoolean()) && (this->useDaySavingTimes->getBoolean())) { - int year = getYear(getEpochTime(false)); + int year = WClock::yearOf(_epochTime(false)); dstStart = getEpochTime(year, dstRule->getByteArrayValue(DST_MONTH), dstRule->getByteArrayValue(DST_WEEK), dstRule->getByteArrayValue(DST_WEEKDAY), dstRule->getByteArrayValue(DST_HOUR)); WStringStream* stream = updateFormattedTime(dstStart); - network()->debug(F("DST start is: %s"), stream->c_str()); + //network()->debug(F("DST start is: %s"), stream->c_str()); delete stream; dstEnd = getEpochTime(year, dstRule->getByteArrayValue(STD_MONTH), dstRule->getByteArrayValue(STD_WEEK), dstRule->getByteArrayValue(STD_WEEKDAY), dstRule->getByteArrayValue(STD_HOUR)); stream = updateFormattedTime(dstEnd); - network()->debug(F("STD start is: %s"), stream->c_str()); + //network()->debug(F("STD start is: %s"), stream->c_str()); delete stream; } } @@ -537,8 +527,8 @@ class WClock: public WDevice { bool isDaySavingTime() { if ((!this->useTimeZoneServer->getBoolean()) && (this->useDaySavingTimes->getBoolean())) { if ((this->dstStart != 0) && (this->dstEnd != 0)) { - unsigned long now = getEpochTime(false); - if (getYear(now) != getYear(dstStart)) { + unsigned long now = _epochTime(false); + if (yearOf(now) != yearOf(dstStart)) { calculateDstStartAndEnd(); } if (dstStart < dstEnd) { diff --git a/src/WClock.sync-conflict-20230213-231753-Z2YYRHL.h b/src/WClock.sync-conflict-20230213-231753-Z2YYRHL.h deleted file mode 100644 index f2cd069..0000000 --- a/src/WClock.sync-conflict-20230213-231753-Z2YYRHL.h +++ /dev/null @@ -1,569 +0,0 @@ -#ifndef __WCLOCK_H__ -#define __WCLOCK_H__ - -#include "Arduino.h" -#ifdef ESP8266 -#include -#include -#elif ESP32 -#include -#include -#include -#endif -#include -#include -#include -#include -#include "WDevice.h" -#include "WNetwork.h" - -const char* DEFAULT_NTP_SERVER = "pool.ntp.org"; -const char* DEFAULT_TIME_ZONE_SERVER = "http://worldtimeapi.org/api/ip"; -const byte STD_MONTH = 0; -const byte STD_WEEK = 1; -const byte STD_WEEKDAY = 2; -const byte STD_HOUR = 3; -const byte DST_MONTH = 4; -const byte DST_WEEK = 5; -const byte DST_WEEKDAY = 6; -const byte DST_HOUR = 7; -const byte *DEFAULT_DST_RULE = (const byte[]){10, 0, 0, 3, 3, 0, 0, 2}; -const byte *DEFAULT_NIGHT_SWITCHES = (const byte[]){22, 00, 7, 00}; - -class WClock: public WDevice { -public: - typedef std::function THandlerFunction; - - WClock(WNetwork* network, bool supportNightMode) - : WDevice(network, "clock", "clock", DEVICE_TYPE_TEXT_DISPLAY) { - this->mainDevice = false; - this->visibility = MQTT; - this->ntpServer = network->getSettings()->setString("ntpServer", DEFAULT_NTP_SERVER); - this->ntpServer->setReadOnly(true); - this->ntpServer->setVisibility(MQTT); - this->addProperty(ntpServer); - this->useTimeZoneServer = network->getSettings()->setBoolean("useTimeZoneServer", true); - this->useTimeZoneServer->setReadOnly(true); - this->useTimeZoneServer->setVisibility(NONE); - this->addProperty(useTimeZoneServer); - this->timeZoneServer = network->getSettings()->setString("timeZoneServer", DEFAULT_TIME_ZONE_SERVER); - this->timeZoneServer->setReadOnly(true); - this->timeZoneServer->setVisibility(this->useTimeZoneServer->getBoolean() ? MQTT : NONE); - //this->ntpServer->setVisibility(MQTT); - this->addProperty(timeZoneServer); - this->epochTime = WProperty::createUnsignedLongProperty("epochTime", "epochTime"); - this->epochTime->setReadOnly(true); - this->epochTime->setOnValueRequest([this](WProperty* p) { - p->setUnsignedLong(getEpochTime()); - }); - this->addProperty(epochTime); - this->epochTimeFormatted = WProperty::createStringProperty("epochTimeFormatted", "epochTimeFormatted"); - this->epochTimeFormatted->setReadOnly(true); - this->epochTimeFormatted->setOnValueRequest([this](WProperty* p) {updateFormattedTime();}); - this->addProperty(epochTimeFormatted); - this->validTime = WProperty::createOnOffProperty("validTime", "validTime"); - this->validTime->setBoolean(false); - this->validTime->setReadOnly(true); - this->addProperty(validTime); - if (this->useTimeZoneServer->getBoolean()) { - this->timeZone = WProperty::createStringProperty("timezone", "timeZone"); - this->timeZone->setReadOnly(true); - this->addProperty(timeZone); - } else { - this->timeZone = nullptr; - } - this->rawOffset = WProperty::createIntegerProperty("raw_offset", "rawOffset"); - this->rawOffset->setInteger(0); - this->rawOffset->setVisibility(NONE); - this->network->getSettings()->add(this->rawOffset); - this->rawOffset->setReadOnly(true); - this->addProperty(rawOffset); - this->dstOffset = WProperty::createIntegerProperty("dst_offset", "dstOffset"); - this->dstOffset->setInteger(0); - this->dstOffset->setVisibility(NONE); - this->network->getSettings()->add(this->dstOffset); - this->dstOffset->setReadOnly(true); - this->addProperty(dstOffset); - this->useDaySavingTimes = network->getSettings()->setBoolean("useDaySavingTimes", false); - this->useDaySavingTimes->setVisibility(NONE); - this->dstRule = network->getSettings()->setByteArray("dstRule", DEFAULT_DST_RULE); - //HtmlPages - WPage* configPage = new WPage(this->getId(), "Configure clock"); - configPage->setPrintPage(std::bind(&WClock::printConfigPage, this, std::placeholders::_1, std::placeholders::_2)); - configPage->setSubmittedPage(std::bind(&WClock::saveConfigPage, this, std::placeholders::_1, std::placeholders::_2)); - network->addCustomPage(configPage); - - lastTry = lastNtpSync = lastTimeZoneSync = ntpTime = dstStart = dstEnd = 0; - failedTimeZoneSync = 0; - //enableNightMode - this->enableNightMode = nullptr; - this->nightMode = nullptr; - this->nightSwitches = nullptr; - if (supportNightMode) { - this->enableNightMode = network->getSettings()->setBoolean("enableNightMode", true); - this->nightMode = WProperty::createBooleanProperty("nightMode", "nightMode"); - this->addProperty(this->nightMode); - this->nightSwitches = network->getSettings()->setByteArray("nightSwitches", DEFAULT_NIGHT_SWITCHES); - } - this->wifiClient = nullptr; - } - - void loop(unsigned long now) { - //Invalid after 3 hours - validTime->setBoolean((lastNtpSync > 0) && ((!this->useTimeZoneServer->getBoolean()) || (lastTimeZoneSync > 0)) && (now - lastTry < (3 * 60 * 60000))); - - if (((lastTry == 0) || (now - lastTry > 10000)) - && (WiFi.status() == WL_CONNECTED)) { - bool timeUpdated = false; - //1. Sync ntp - if ((!isValidTime()) - && ((lastNtpSync == 0) || (now - lastNtpSync > 60000))) { - network->debug(F("Time via NTP server '%s'"), ntpServer->c_str()); - WiFiUDP ntpUDP; - NTPClient ntpClient(ntpUDP, ntpServer->c_str()); - if (ntpClient.update()) { - lastNtpSync = millis(); - ntpTime = ntpClient.getEpochTime(); - this->calculateDstStartAndEnd(); - validTime->setBoolean(!this->useTimeZoneServer->getBoolean()); - network->debug(F("NTP time synced: %s"), epochTimeFormatted->c_str()); - timeUpdated = true; - } else { - network->error(F("NTP sync failed. ")); - } - } - //2. Sync time zone - if ((!isValidTime()) - && ((lastNtpSync > 0) && ((lastTimeZoneSync == 0) || (now - lastTimeZoneSync > 60000))) - && (useTimeZoneServer->getBoolean()) - && (!timeZoneServer->equalsString(""))) { - String request = timeZoneServer->c_str(); - network->debug(F("Time zone update via '%s'"), request.c_str()); - HTTPClient http; - if (this->wifiClient == nullptr) { - this->wifiClient = new WiFiClient(); - } - http.begin(*wifiClient, request); - int httpCode = http.GET(); - if (httpCode > 0) { - WJsonParser parser; - this->timeZone->setReadOnly(false); - this->rawOffset->setReadOnly(false); - this->dstOffset->setReadOnly(false); - WProperty* property = parser.parse(http.getString().c_str(), this); - this->timeZone->setReadOnly(true); - this->rawOffset->setReadOnly(true); - this->dstOffset->setReadOnly(true); - if (property != nullptr) { - failedTimeZoneSync = 0; - lastTimeZoneSync = millis(); - validTime->setBoolean(true); - network->debug(F("Time zone evaluated. Current local time: %s"), epochTimeFormatted->c_str()); - timeUpdated = true; - } else { - failedTimeZoneSync++; - network->error(F("Time zone update failed. (%d. attempt): Wrong html response."), failedTimeZoneSync); - } - } else { - failedTimeZoneSync++; - network->error(F("Time zone update failed (%d. attempt): http code %d"), failedTimeZoneSync, httpCode); - } - http.end(); - if (failedTimeZoneSync == 3) { - failedTimeZoneSync = 0; - lastTimeZoneSync = millis(); - } - } - //check nightMode - if ((validTime) && (this->enableNightMode) && (this->enableNightMode->getBoolean())) { - this->nightMode->setBoolean(this->isTimeBetween(this->nightSwitches->getByteArrayValue(0), this->nightSwitches->getByteArrayValue(1), - this->nightSwitches->getByteArrayValue(2), this->nightSwitches->getByteArrayValue(3))); - } - if (timeUpdated) { - notifyOnTimeUpdate(); - } - lastTry = millis(); - } - } - - void setOnTimeUpdate(THandlerFunction onTimeUpdate) { - this->onTimeUpdate = onTimeUpdate; - } - - unsigned long getEpochTime() { - return getEpochTime(true); - } - - byte getWeekDay() { - return getWeekDay(getEpochTime()); - } - - static byte getWeekDay(unsigned long epochTime) { - //weekday from 0 to 6, 0 is Sunday - return (((epochTime / 86400L) + 4) % 7); - } - - byte getHours() { - return getHours(getEpochTime()); - } - - static byte getHours(unsigned long epochTime) { - return ((epochTime % 86400L) / 3600); - } - - byte getMinutes() { - return getMinutes(getEpochTime()); - } - - static byte getMinutes(unsigned long epochTime) { - return ((epochTime % 3600) / 60); - } - - byte getSeconds() { - return getSeconds(getEpochTime()); - } - - static byte getSeconds(unsigned long epochTime) { - return (epochTime % 60); - } - - int getYear() { - return getYear(getEpochTime()); - } - - static int getYear(unsigned long epochTime) { - return year(epochTime); - } - - byte getMonth() { - return getMonth(getEpochTime()); - } - - static byte getMonth(unsigned long epochTime) { - //month from 1 to 12 - return month(epochTime); - } - - byte getDay() { - return getDay(getEpochTime()); - } - - static byte getDay(unsigned long epochTime) { - //day from 1 to 31 - return day(epochTime); - } - - static bool isTimeLaterThan(byte epochTimeHours, byte epochTimeMinutes, byte hours, byte minutes) { - return ((epochTimeHours > hours) || ((epochTimeHours == hours) && (epochTimeMinutes >= minutes))); - } - - bool isTimeLaterThan(byte hours, byte minutes) { - return isTimeLaterThan(getHours(), getMinutes(), hours, minutes); - } - - bool isTimeEarlierThan(byte hours, byte minutes) { - return ((getHours() < hours) || ((getHours() == hours) && (getMinutes() < minutes))); - } - - bool isTimeBetween(byte fromHours, byte fromMinutes, byte toHours, byte toMinutes) { - if (isTimeLaterThan(fromHours, fromMinutes, toHours, toMinutes)) { - //e.g. 22:00-06:00 - return ((isTimeLaterThan(fromHours, fromMinutes)) || (isTimeEarlierThan(toHours, toMinutes))); - } else { - //e.g. 06:00-22:00 - return ((isTimeLaterThan(fromHours, fromMinutes)) && (isTimeEarlierThan(toHours, toMinutes))); - } - } - - void updateFormattedTime() { - WStringStream* stream = updateFormattedTime(getEpochTime()); - epochTimeFormatted->setString(stream->c_str()); - delete stream; - } - - static WStringStream* updateFormattedTime(unsigned long rawTime) { - WStringStream* stream = new WStringStream(19); - char buffer[5]; - //year - int _year = year(rawTime); - itoa(_year, buffer, 10); - stream->print(buffer); - stream->print("-"); - //month - uint8_t _month = month(rawTime); - if (_month < 10) stream->print("0"); - itoa(_month, buffer, 10); - stream->print(buffer); - stream->print("-"); - //month - uint8_t _day = day(rawTime); - if (_day < 10) stream->print("0"); - itoa(_day, buffer, 10); - stream->print(buffer); - stream->print(" "); - //hours - unsigned long _hours = (rawTime % 86400L) / 3600; - if (_hours < 10) stream->print("0"); - itoa(_hours, buffer, 10); - stream->print(buffer); - stream->print(":"); - //minutes - unsigned long _minutes = (rawTime % 3600) / 60; - if (_minutes < 10) stream->print("0"); - itoa(_minutes, buffer, 10); - stream->print(buffer); - stream->print(":"); - //seconds - unsigned long _seconds = rawTime % 60; - if (_seconds < 10) stream->print("0"); - itoa(_seconds, buffer, 10); - stream->print(buffer); - - return stream; - } - - bool isValidTime() { - return validTime->getBoolean(); - } - - bool isClockSynced() { - return ((lastNtpSync > 0) && (lastTimeZoneSync > 0)); - } - - int getRawOffset() { - return rawOffset->getInteger(); - } - - int getDstOffset() { - return (useTimeZoneServer->getBoolean() || isDaySavingTime() ? dstOffset->getInteger() : 0); - } - - void printConfigPage(AsyncWebServerRequest* request, Print* page) { - page->printf(HTTP_CONFIG_PAGE_BEGIN, getId()); - page->printf(HTTP_TOGGLE_GROUP_STYLE, "ga", (useTimeZoneServer->getBoolean() ? HTTP_BLOCK : HTTP_NONE), "gb", (useTimeZoneServer->getBoolean() ? HTTP_NONE : HTTP_BLOCK)); - page->printf(HTTP_TOGGLE_GROUP_STYLE, "gd", (useDaySavingTimes->getBoolean() ? HTTP_BLOCK : HTTP_NONE), "ge", HTTP_NONE); - if (this->enableNightMode) { - page->printf(HTTP_TOGGLE_GROUP_STYLE, "gn", (enableNightMode->getBoolean() ? HTTP_BLOCK : HTTP_NONE), "gm", HTTP_NONE); - } - //NTP Server - page->printf(HTTP_TEXT_FIELD, "NTP server:", "ntp", "32", ntpServer->c_str()); - - page->print(FPSTR(HTTP_DIV_BEGIN)); - page->printf(HTTP_RADIO_OPTION, "sa", "sa", HTTP_TRUE, (useTimeZoneServer->getBoolean() ? HTTP_CHECKED : ""), "tg()", "Get time zone via internet"); - page->printf(HTTP_RADIO_OPTION, "sb", "sa", HTTP_FALSE, (useTimeZoneServer->getBoolean() ? "" : HTTP_CHECKED), "tg()", "Use fixed offset to UTC time"); - page->print(FPSTR(HTTP_DIV_END)); - - page->printf(HTTP_DIV_ID_BEGIN, "ga"); - page->printf(HTTP_TEXT_FIELD, "Time zone server:", "tz", "64", timeZoneServer->c_str()); - page->print(FPSTR(HTTP_DIV_END)); - page->printf(HTTP_DIV_ID_BEGIN, "gb"); - page->printf(HTTP_TEXT_FIELD, "Fixed offset to UTC in minutes:", "ro", "5", String(rawOffset->getInteger() / 60).c_str()); - - page->printf(HTTP_CHECKBOX_OPTION, "sd", "sd", (useDaySavingTimes->getBoolean() ? HTTP_CHECKED : ""), "td()", "Calculate day saving time (summer time)"); - page->printf(HTTP_DIV_ID_BEGIN, "gd"); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("")); - page->print(F("
Standard timeDay saving time
(summer time)
Offset to standard time in minutes")); - page->printf(HTTP_INPUT_FIELD, "do", "5", String(dstOffset->getInteger() / 60).c_str()); - page->print(F("
Month [1..12]")); - page->printf(HTTP_INPUT_FIELD, "rm", "2", String(dstRule->getByteArrayValue(STD_MONTH)).c_str()); - page->print(F("")); - page->printf(HTTP_INPUT_FIELD, "dm", "2", String(dstRule->getByteArrayValue(DST_MONTH)).c_str()); - page->print(F("
Week [0: last week of month; 1..4]")); - page->printf(HTTP_INPUT_FIELD, "rw", "1", String(dstRule->getByteArrayValue(STD_WEEK)).c_str()); - page->print(F("")); - page->printf(HTTP_INPUT_FIELD, "dw", "1", String(dstRule->getByteArrayValue(DST_WEEK)).c_str()); - page->print(F("
Weekday [0:sunday .. 6:saturday]")); - page->printf(HTTP_INPUT_FIELD, "rd", "1", String(dstRule->getByteArrayValue(STD_WEEKDAY)).c_str()); - page->print(F("")); - page->printf(HTTP_INPUT_FIELD, "dd", "1", String(dstRule->getByteArrayValue(DST_WEEKDAY)).c_str()); - page->print(F("
Hour [0..23]")); - page->printf(HTTP_INPUT_FIELD, "rh", "2", String(dstRule->getByteArrayValue(STD_HOUR)).c_str()); - page->print(F("")); - page->printf(HTTP_INPUT_FIELD, "dh", "2", String(dstRule->getByteArrayValue(DST_HOUR)).c_str()); - page->print(F("
")); - page->print(FPSTR(HTTP_DIV_END)); - page->print(FPSTR(HTTP_DIV_END)); - if (this->enableNightMode) { - //nightMode - page->printf(HTTP_CHECKBOX_OPTION, "sn", "sn", (enableNightMode->getBoolean() ? HTTP_CHECKED : ""), "tn()", "Enable support for night mode"); - page->printf(HTTP_DIV_ID_BEGIN, "gn"); - page->print(F("")); - page->print(F("")); - char timeFrom[6]; - snprintf(timeFrom, 6, "%02d:%02d", this->nightSwitches->getByteArrayValue(0), this->nightSwitches->getByteArrayValue(1)); - page->print(F("")); - char timeTo[6]; - snprintf(timeTo, 6, "%02d:%02d", this->nightSwitches->getByteArrayValue(2), this->nightSwitches->getByteArrayValue(3)); - page->print(F("")); - page->print(F("")); - page->print(F("
from")); - page->printf(HTTP_INPUT_FIELD, "nf", "5", timeFrom); - page->print(F("to")); - page->printf(HTTP_INPUT_FIELD, "nt", "5", timeTo); - page->print(F("
")); - page->print(FPSTR(HTTP_DIV_END)); - page->printf(HTTP_TOGGLE_FUNCTION_SCRIPT, "tn()", "sn", "gn", "gm"); - } - page->printf(HTTP_TOGGLE_FUNCTION_SCRIPT, "tg()", "sa", "ga", "gb"); - page->printf(HTTP_TOGGLE_FUNCTION_SCRIPT, "td()", "sd", "gd", "ge"); - page->print(FPSTR(HTTP_CONFIG_SAVE_BUTTON)); - } - - void saveConfigPage(AsyncWebServerRequest* request, Print* page) { - this->ntpServer->setString(request->arg("ntp").c_str()); - this->timeZoneServer->setString(request->arg("tz").c_str()); - this->useTimeZoneServer->setBoolean(request->arg("sa") == HTTP_TRUE); - this->useDaySavingTimes->setBoolean(request->arg("sd") == HTTP_TRUE); - this->rawOffset->setInteger(atol(request->arg("ro").c_str()) * 60); - this->dstOffset->setInteger(atol(request->arg("do").c_str()) * 60); - this->dstRule->setByteArrayValue(STD_MONTH, atoi(request->arg("rm").c_str())); - this->dstRule->setByteArrayValue(STD_WEEK, atoi(request->arg("rw").c_str())); - this->dstRule->setByteArrayValue(STD_WEEKDAY, atoi(request->arg("rd").c_str())); - this->dstRule->setByteArrayValue(STD_HOUR, atoi(request->arg("rh").c_str())); - this->dstRule->setByteArrayValue(DST_MONTH, atoi(request->arg("dm").c_str())); - this->dstRule->setByteArrayValue(DST_WEEK, atoi(request->arg("dw").c_str())); - this->dstRule->setByteArrayValue(DST_WEEKDAY, atoi(request->arg("dd").c_str())); - this->dstRule->setByteArrayValue(DST_HOUR, atoi(request->arg("dh").c_str())); - if (this->enableNightMode) { - this->enableNightMode->setBoolean(request->arg("sn") == HTTP_TRUE); - processNightModeTime(0, request->arg("nf").c_str()); - processNightModeTime(2, request->arg("nt").c_str()); - } - } - - WProperty* getEpochTimeFormatted() { - return epochTimeFormatted; - } - - WProperty* nightMode; - -private: - THandlerFunction onTimeUpdate; - unsigned long lastTry, lastNtpSync, lastTimeZoneSync, ntpTime; - unsigned long dstStart, dstEnd; - byte failedTimeZoneSync; - WProperty* epochTime; - WProperty* epochTimeFormatted; - WProperty* validTime; - WProperty* ntpServer; - WProperty* useTimeZoneServer; - WProperty* timeZoneServer; - WProperty* timeZone; - WProperty* rawOffset; - WProperty* dstOffset; - WProperty* useDaySavingTimes; - WProperty* dstRule; - WProperty* enableNightMode; - WProperty* nightSwitches; - WiFiClient* wifiClient; - - void notifyOnTimeUpdate() { - if (onTimeUpdate) { - onTimeUpdate(); - } - } - - unsigned long getEpochTime(bool useDstOffset) { - return (lastNtpSync > 0 ? ntpTime + getRawOffset() + (useDstOffset ? getDstOffset() : 0) + ((millis() - lastNtpSync) / 1000) : 0); - } - - unsigned long getEpochTime(int year, byte month, byte week, byte weekday, byte hour) { - tmElements_t ds; - ds.Year = (week == 0 && month == 12 ? year + 1 : year) - 1970; - ds.Month = (week == 0 ? (month == 12 ? 1 : month + 1) : month); - ds.Day = 1; - ds.Hour = hour; - ds.Minute = 0; - ds.Second = 0; - unsigned long tt = makeTime(ds); - byte iwd = getWeekDay(tt); - if (week == 0) { - //last week of last month - short diffwd = iwd - weekday; - diffwd = (diffwd <= 0 ? diffwd + 7 : diffwd); - tt = tt - (diffwd * 60 * 60 * 24); - } else { - short diffwd = weekday - iwd; - diffwd = (diffwd < 0 ? diffwd + 7 : diffwd); - tt = tt + (((7 * (week - 1)) + diffwd) * 60 * 60 * 24); - } - return tt; - } - - void calculateDstStartAndEnd() { - if ((!this->useTimeZoneServer->getBoolean()) && (this->useDaySavingTimes->getBoolean())) { - int year = getYear(getEpochTime(false)); - dstStart = getEpochTime(year, dstRule->getByteArrayValue(DST_MONTH), dstRule->getByteArrayValue(DST_WEEK), dstRule->getByteArrayValue(DST_WEEKDAY), dstRule->getByteArrayValue(DST_HOUR)); - WStringStream* stream = updateFormattedTime(dstStart); - network->debug(F("DST start is: %s"), stream->c_str()); - delete stream; - dstEnd = getEpochTime(year, dstRule->getByteArrayValue(STD_MONTH), dstRule->getByteArrayValue(STD_WEEK), dstRule->getByteArrayValue(STD_WEEKDAY), dstRule->getByteArrayValue(STD_HOUR)); - stream = updateFormattedTime(dstEnd); - network->debug(F("STD start is: %s"), stream->c_str()); - delete stream; - } - } - - bool isDaySavingTime() { - if ((!this->useTimeZoneServer->getBoolean()) && (this->useDaySavingTimes->getBoolean())) { - if ((this->dstStart != 0) && (this->dstEnd != 0)) { - unsigned long now = getEpochTime(false); - if (getYear(now) != getYear(dstStart)) { - calculateDstStartAndEnd(); - } - if (dstStart < dstEnd) { - return ((now >= dstStart) && (now < dstEnd)); - } else { - return ((now < dstEnd) || (now >= dstStart)); - } - } else { - return false; - } - } else { - return (dstOffset->getInteger() != 0); - } - } - - void processNightModeTime(byte arrayIndex, String timeStr) { - timeStr = (timeStr.length() == 4 ? "0" + timeStr : timeStr); - if (timeStr.length() == 5) { - byte hh = timeStr.substring(0, 2).toInt(); - byte mm = timeStr.substring(3, 5).toInt(); - this->nightSwitches->setByteArrayValue(arrayIndex, hh); - this->nightSwitches->setByteArrayValue(arrayIndex + 1, mm); - } - } - -}; - -#endif diff --git a/src/WThermostat.cpp b/src/WThermostat.cpp index 6f9b314..a523e67 100644 --- a/src/WThermostat.cpp +++ b/src/WThermostat.cpp @@ -13,8 +13,8 @@ #include "WThermostat_DLX_LH01.h" #define APPLICATION "Thermostat" -#define VERSION "1.34" -#define FLAG_SETTINGS 0x34 +#define VERSION "1.35" +#define FLAG_SETTINGS 0x35 #define DEBUG false WNetwork* network; diff --git a/src/WThermostat.h b/src/WThermostat.h index 8ecf5c0..9949e51 100644 --- a/src/WThermostat.h +++ b/src/WThermostat.h @@ -86,7 +86,7 @@ public : this->addProperty(actualTemperature); this->targetTemperature = WProps::createTargetTemperatureProperty("targetTemperature", "Target"); this->targetTemperature->setMultipleOf(1.0f / this->temperatureFactor); - this->targetTemperature->setOnChange(std::bind(&WThermostat::setTargetTemperature, this, std::placeholders::_1)); + this->targetTemperature->addListener(std::bind(&WThermostat::setTargetTemperature, this, std::placeholders::_1)); this->targetTemperature->setOnValueRequest([this](WProperty* p) {updateTargetTemperature();}); this->addProperty(targetTemperature); if (byteTemperatureFloor != NOT_SUPPORTED) { @@ -100,16 +100,16 @@ public : this->deviceOn = WProps::createOnOffProperty("deviceOn", "Power"); //2021-01-24 test bht-002 bug network()->settings()->add(this->deviceOn); - this->deviceOn->setOnChange(std::bind(&WThermostat::deviceOnToMcu, this, std::placeholders::_1)); + this->deviceOn->addListener(std::bind(&WThermostat::deviceOnToMcu, this, std::placeholders::_1)); this->addProperty(deviceOn); this->schedulesMode = new WProperty("schedulesMode", "Schedules", STRING, TYPE_THERMOSTAT_MODE_PROPERTY); this->schedulesMode->addEnumString(SCHEDULES_MODE_AUTO); this->schedulesMode->addEnumString(SCHEDULES_MODE_OFF); - this->schedulesMode->setOnChange(std::bind(&WThermostat::schedulesModeToMcu, this, std::placeholders::_1)); + this->schedulesMode->addListener(std::bind(&WThermostat::schedulesModeToMcu, this, std::placeholders::_1)); this->addProperty(schedulesMode); this->switchBackToAuto = network()->settings()->setBoolean("switchBackToAuto", true); this->locked = WProps::createOnOffProperty("locked", "Lock"); - this->locked->setOnChange(std::bind(&WThermostat::lockedToMcu, this, std::placeholders::_1)); + this->locked->addListener(std::bind(&WThermostat::lockedToMcu, this, std::placeholders::_1)); this->locked->setVisibility(MQTT); this->addProperty(locked); this->completeDeviceState = network()->settings()->setBoolean("sendCompleteDeviceState", true); @@ -361,14 +361,14 @@ protected : //HEX: 55 AA 00 1C 00 08 01 13 02 0F 10 04 12 05 //DEC: 01 19 02 20 17 51 44 03 //HEX: 55 AA 00 1C 00 08 01 13 02 14 11 33 2C 03 - unsigned long epochTime = wClock->getEpochTime(); + unsigned long epochTime = wClock->epochTime(); epochTime = epochTime + (getSchedulesDayOffset() * 86400); - byte year = wClock->getYear(epochTime) % 100; - byte month = wClock->getMonth(epochTime); - byte dayOfMonth = wClock->getDay(epochTime); - byte hours = wClock->getHours(epochTime) ; - byte minutes = wClock->getMinutes(epochTime); - byte seconds = wClock->getSeconds(epochTime); + byte year = wClock->yearOf(epochTime) % 100; + byte month = wClock->monthOf(epochTime); + byte dayOfMonth = wClock->dayOf(epochTime); + byte hours = wClock->hoursOf(epochTime) ; + byte minutes = wClock->minutesOf(epochTime); + byte seconds = wClock->secondsOf(epochTime); byte dayOfWeek = getDayOfWeek(); unsigned char cancelConfigCommand[] = { 0x55, 0xaa, 0x00, 0x1c, 0x00, 0x08, 0x01, year, month, dayOfMonth, @@ -377,9 +377,9 @@ protected : } byte getDayOfWeek() { - unsigned long epochTime = wClock->getEpochTime(); + unsigned long epochTime = wClock->epochTime(); epochTime = epochTime + (getSchedulesDayOffset() * 86400); - byte dayOfWeek = wClock->getWeekDay(epochTime); + byte dayOfWeek = wClock->weekDayOf(epochTime); //make sunday a seven dayOfWeek = (dayOfWeek ==0 ? 7 : dayOfWeek); return dayOfWeek; @@ -530,7 +530,7 @@ protected : if ((receivedSchedules()) && (wClock->isValidTime())) { byte hh_Offset = byteSchedulingPosHour; byte mm_Offset = byteSchedulingPosMinute; - byte weekDay = wClock->getWeekDay(); + byte weekDay = wClock->weekDay(); weekDay += getSchedulesDayOffset(); weekDay = weekDay % 7; int startAddr = (this->byteSchedulingDays == 18 ? (weekDay == 0 ? 36 : (weekDay == 6 ? 18 : 0)) : ((weekDay == 0) || (weekDay == 6) ? 18 : 0)); diff --git a/src/WThermostat_BAC_002_ALW.h b/src/WThermostat_BAC_002_ALW.h index afca3b7..69eccc3 100644 --- a/src/WThermostat_BAC_002_ALW.h +++ b/src/WThermostat_BAC_002_ALW.h @@ -44,7 +44,7 @@ public : this->systemMode->addEnumString(SYSTEM_MODE_COOL); this->systemMode->addEnumString(SYSTEM_MODE_HEAT); this->systemMode->addEnumString(SYSTEM_MODE_FAN); - this->systemMode->setOnChange(std::bind(&WThermostat_BAC_002_ALW::systemModeToMcu, this, std::placeholders::_1)); + this->systemMode->addListener(std::bind(&WThermostat_BAC_002_ALW::systemModeToMcu, this, std::placeholders::_1)); this->addProperty(systemMode); //fanMode this->fanMode = new WProperty("fanMode", "Fan", STRING, TYPE_FAN_MODE_PROPERTY); @@ -52,7 +52,7 @@ public : this->fanMode->addEnumString(FAN_MODE_HIGH); this->fanMode->addEnumString(FAN_MODE_MEDIUM); this->fanMode->addEnumString(FAN_MODE_LOW); - this->fanMode->setOnChange(std::bind(&WThermostat_BAC_002_ALW::fanModeToMcu, this, std::placeholders::_1)); + this->fanMode->addListener(std::bind(&WThermostat_BAC_002_ALW::fanModeToMcu, this, std::placeholders::_1)); this->addProperty(fanMode); } diff --git a/src/WThermostat_ME102H.h b/src/WThermostat_ME102H.h index 5c8436c..0d12540 100644 --- a/src/WThermostat_ME102H.h +++ b/src/WThermostat_ME102H.h @@ -44,7 +44,7 @@ public : this->sensorSelection->addEnumString(SENSOR_SELECTION_FLOOR); this->sensorSelection->addEnumString(SENSOR_SELECTION_BOTH); this->sensorSelection->setVisibility(MQTT); - this->sensorSelection->setOnChange(std::bind(&WThermostat_ME102H::sensorSelectionToMcu, this, std::placeholders::_1)); + this->sensorSelection->addListener(std::bind(&WThermostat_ME102H::sensorSelectionToMcu, this, std::placeholders::_1)); this->addProperty(this->sensorSelection); } diff --git a/src/WThermostat_ME81H.h b/src/WThermostat_ME81H.h index 10b578f..8046191 100644 --- a/src/WThermostat_ME81H.h +++ b/src/WThermostat_ME81H.h @@ -39,7 +39,7 @@ public : this->systemMode->addEnumString(SYSTEM_MODE_HEAT); this->systemMode->addEnumString(SYSTEM_MODE_COOL); this->systemMode->addEnumString(SYSTEM_MODE_FAN); - this->systemMode->setOnChange(std::bind(&WThermostat_ME81H::systemModeToMcu, this, std::placeholders::_1)); + this->systemMode->addListener(std::bind(&WThermostat_ME81H::systemModeToMcu, this, std::placeholders::_1)); this->addProperty(systemMode); //sensorSelection this->sensorSelection = new WProperty("sensorSelection", "Sensor Selection", STRING, TYPE_THERMOSTAT_MODE_PROPERTY); @@ -47,7 +47,7 @@ public : this->sensorSelection->addEnumString(SENSOR_SELECTION_FLOOR); this->sensorSelection->addEnumString(SENSOR_SELECTION_BOTH); this->sensorSelection->setVisibility(MQTT); - this->sensorSelection->setOnChange(std::bind(&WThermostat_ME81H::sensorSelectionToMcu, this, std::placeholders::_1)); + this->sensorSelection->addListener(std::bind(&WThermostat_ME81H::sensorSelectionToMcu, this, std::placeholders::_1)); this->addProperty(this->sensorSelection); }