From 9ac1907e166c5fd636c17603b2f4e7197714dbea Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Fri, 19 Jul 2024 12:20:56 +0200 Subject: [PATCH 1/7] naming for RC220 #1871 --- src/device_library.h | 2 +- src/locale_common.h | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/device_library.h b/src/device_library.h index 41730b710..a2ae90543 100644 --- a/src/device_library.h +++ b/src/device_library.h @@ -122,7 +122,7 @@ {192, DeviceType::THERMOSTAT, "FW120", DeviceFlags::EMS_DEVICE_FLAG_JUNKERS}, // Thermostat remote - 0x38 -{ 3, DeviceType::THERMOSTAT, "RT800", DeviceFlags::EMS_DEVICE_FLAG_RC100H}, +{ 3, DeviceType::THERMOSTAT, "RT800/RC220", DeviceFlags::EMS_DEVICE_FLAG_RC100H}, {200, DeviceType::THERMOSTAT, "RC100H", DeviceFlags::EMS_DEVICE_FLAG_RC100H}, {249, DeviceType::THERMOSTAT, "TR120RF/CR20RF", DeviceFlags::EMS_DEVICE_FLAG_RC100H}, diff --git a/src/locale_common.h b/src/locale_common.h index d1f7f9b14..0426b05fe 100644 --- a/src/locale_common.h +++ b/src/locale_common.h @@ -182,8 +182,7 @@ MAKE_NOTRANSLATION(rc100, "RC100") MAKE_NOTRANSLATION(rc100h, "RC100H") MAKE_NOTRANSLATION(tc100, "TC100") MAKE_NOTRANSLATION(rc120rf, "RC120RF") -MAKE_NOTRANSLATION(rc220, "RC220") -MAKE_NOTRANSLATION(rt800, "RT800") +MAKE_NOTRANSLATION(rc220, "RC220/RT800") MAKE_NOTRANSLATION(single, "single") MAKE_NOTRANSLATION(dash, "-") MAKE_NOTRANSLATION(BLANK, "") @@ -347,7 +346,7 @@ MAKE_ENUM(enum_j_control, FL_(off), FL_(fb10), FL_(fb100)) MAKE_ENUM(enum_roomsensor, FL_(extern), FL_(intern), FL_(auto)) MAKE_ENUM(enum_roominfluence, FL_(off), FL_(intern), FL_(extern), FL_(auto)) MAKE_ENUM(enum_control1, FL_(rc310), FL_(rc200), FL_(rc100), FL_(rc100h), FL_(tc100)) -MAKE_ENUM(enum_control2, FL_(off), FL_(dash), FL_(rc100), FL_(rc100h), FL_(dash), FL_(rc120rf), FL_(rt800), FL_(single)) // BC400 +MAKE_ENUM(enum_control2, FL_(off), FL_(dash), FL_(rc100), FL_(rc100h), FL_(dash), FL_(rc120rf), FL_(rc220), FL_(single)) // BC400 MAKE_ENUM(enum_switchmode, FL_(off), FL_(eco), FL_(comfort), FL_(heat)) From b857eedab882833e9c648b9a844344fe21987769 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Fri, 19 Jul 2024 12:27:24 +0200 Subject: [PATCH 2/7] add cooling parameters #1857 --- src/devices/thermostat.cpp | 43 +++++++++++++++++++++++++++++++++++++- src/devices/thermostat.h | 9 ++++++++ src/locale_translations.h | 3 +++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index ea57ee4a7..e086adf91 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1138,7 +1138,7 @@ void Thermostat::process_RC300Summer(std::shared_ptr telegram) { has_update(telegram, hc->fastHeatup, 10); } -// types 0x471 ff +// types 0x471 ff summer2_typeids // (0x473), data: 00 11 04 01 01 1C 08 04 void Thermostat::process_RC300Summer2(std::shared_ptr telegram) { auto hc = heating_circuit(telegram); @@ -1156,6 +1156,9 @@ void Thermostat::process_RC300Summer2(std::shared_ptr telegram) has_update(telegram, hc->heatondelay, 2); has_update(telegram, hc->heatoffdelay, 3); has_update(telegram, hc->instantstart, 4); + has_update(telegram, hc->coolstart, 5); + has_update(telegram, hc->coolondelay, 6); + has_update(telegram, hc->cooloffdelay, 7); } // types 0x29B ff @@ -2248,6 +2251,35 @@ bool Thermostat::set_cooling(const char * value, const int8_t id) { return true; } +// set cooling delays +bool Thermostat::set_coolondelay(const char * value, const int8_t id) { + auto hc = heating_circuit(id); + if (hc == nullptr) { + return false; + } + + int v; + if (!Helpers::value2number(value, v)) { + return false; + } + write_command(summer2_typeids[hc->hc()], 6, v, summer2_typeids[hc->hc()]); + return true; +} + +bool Thermostat::set_cooloffdelay(const char * value, const int8_t id) { + auto hc = heating_circuit(id); + if (hc == nullptr) { + return false; + } + + int v; + if (!Helpers::value2number(value, v)) { + return false; + } + write_command(summer2_typeids[hc->hc()], 7, v, summer2_typeids[hc->hc()]); + return true; +} + // sets the thermostat ww circulation working mode, where mode is a string bool Thermostat::set_wwcircmode(const char * value, const int8_t id) { uint8_t dhw = id2dhw(id); @@ -3564,6 +3596,12 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co validate_typeid = set_typeid; factor = 1; break; + case HeatingCircuit::Mode::COOLSTART: + offset = 5; + set_typeid = summer2_typeids[hc->hc()]; + validate_typeid = set_typeid; + factor = 1; + break; case HeatingCircuit::Mode::MANUAL: if (model == EMSdevice::EMS_DEVICE_FLAG_CR120) { offset = 22; // manual offset CR120 @@ -4470,6 +4508,9 @@ void Thermostat::register_device_values_hc(std::shared_ptrinstantstart, DeviceValueType::UINT8, FL_(instantstart), DeviceValueUOM::K, MAKE_CF_CB(set_instantstart), 1, 10); register_device_value(tag, &hc->boost, DeviceValueType::BOOL, FL_(boost), DeviceValueUOM::NONE, MAKE_CF_CB(set_boost)); register_device_value(tag, &hc->boosttime, DeviceValueType::UINT8, FL_(boosttime), DeviceValueUOM::HOURS, MAKE_CF_CB(set_boosttime)); + register_device_value(tag, &hc->coolstart, DeviceValueType::UINT8, FL_(coolstart), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_coolstart), 20, 35); + register_device_value(tag, &hc->coolondelay, DeviceValueType::UINT8, FL_(coolondelay), DeviceValueUOM::HOURS, MAKE_CF_CB(set_coolondelay), 1, 48); + register_device_value(tag, &hc->cooloffdelay, DeviceValueType::UINT8, FL_(cooloffdelay), DeviceValueUOM::HOURS, MAKE_CF_CB(set_cooloffdelay), 1, 48); break; case EMSdevice::EMS_DEVICE_FLAG_CRF: diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index c1da03c52..afb7097f2 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -98,6 +98,9 @@ class Thermostat : public EMSdevice { uint8_t hpmode; uint8_t cooling; uint8_t coolingon; + uint8_t coolstart; // starttemperature 20-35°C + uint8_t coolondelay; // 1-48 hours + uint8_t cooloffdelay; // 1-48 hours // RC300 uint8_t heatoffdelay; // 1-48h uint8_t heatondelay; // 1-48h @@ -152,6 +155,7 @@ class Thermostat : public EMSdevice { DAYLOW, DAYMID, REMOTESELTEMP, + COOLSTART, UNKNOWN }; @@ -562,6 +566,9 @@ class Thermostat : public EMSdevice { inline bool set_remoteseltemp(const char * value, const int8_t id) { return set_temperature_value(value, id, HeatingCircuit::Mode::REMOTESELTEMP); } + inline bool set_coolstart(const char * value, const int8_t id) { + return set_temperature_value(value, id, HeatingCircuit::Mode::COOLSTART); + } // set functions - these don't use the id/hc, the parameters are ignored bool set_wwmode(const char * value, const int8_t id); @@ -646,6 +653,8 @@ class Thermostat : public EMSdevice { bool set_hpminflowtemp(const char * value, const int8_t id); bool set_hpmode(const char * value, const int8_t id); bool set_cooling(const char * value, const int8_t id); + bool set_coolondelay(const char * value, const int8_t id); + bool set_cooloffdelay(const char * value, const int8_t id); }; } // namespace emsesp diff --git a/src/locale_translations.h b/src/locale_translations.h index 8401a5c63..024c5b0cf 100644 --- a/src/locale_translations.h +++ b/src/locale_translations.h @@ -733,6 +733,9 @@ MAKE_TRANSLATION(dewoffset, "dewoffset", "dew point offset", "Taupunkt Differenz MAKE_TRANSLATION(roomtempdiff, "roomtempdiff", "room temp difference", "Raumtemperatur Differenz", "Verschiltemperatuur kamertemp", "", "różnica temp. pomieszczenia", "", "", "oda sıcaklığı farkı", "differenza temperatura ambiente", "rozdiel izbovej teploty") // TODO translate MAKE_TRANSLATION(hpminflowtemp, "hpminflowtemp", "HP min. flow temp.", "WP minimale Vorlauftemperatur", "Minimale aanvoertemperatuur WP", "", "pompa ciepła, min. temperatura przepływu", "", "", "yüksek güç minimum akış sıcaklığı", "temperatura minima di mandata", "VT min. teplota prietoku.") // TODO translate MAKE_TRANSLATION(hpcooling, "cooling", "cooling", "Kühlen", "Koelen", "Kyler", "chłodzenie", "kjøling", "refroidissement", "soğuma", "raffreddamento", "chladenie") +MAKE_TRANSLATION(coolstart, "coolstart", "cooling starttemp", "Kühlbetrieb ab") // TODO translate +MAKE_TRANSLATION(coolondelay, "coolondelay", "cooling on delay", "Einschaltverzögerung Kühlen") // TODO translate +MAKE_TRANSLATION(cooloffdelay, "cooloffdelay", "cooling off delay", "Ausschaltverzögerung Kühlen") // TODO translate // heatpump and RC100H MAKE_TRANSLATION(airHumidity, "airhumidity", "relative air humidity", "relative Luftfeuchte", "Relatieve luchtvochtigheid", "Relativ Luftfuktighet", "wilgotność względna w pomieszczeniu", "luftfuktighet", "humidité relative air", "havadaki bağıl nem", "umidità relativa aria", "relatívna vlhkosť vzduchu") From 559caeb30f63d652001a18e0101cc64e0110f33f Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Fri, 19 Jul 2024 12:45:27 +0200 Subject: [PATCH 3/7] schedulder enhancement url json #1806 --- src/web/WebSchedulerService.cpp | 38 +++++++++++++++++--- src/web/shuntingYard.hpp | 63 ++++++++++++++++++++++++++++++++- 2 files changed, 95 insertions(+), 6 deletions(-) diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index 88abddcb1..41f3f0d99 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -18,6 +18,7 @@ #include "emsesp.h" #include "WebSchedulerService.h" +#include namespace emsesp { @@ -330,6 +331,33 @@ bool WebSchedulerService::has_commands() { // execute scheduled command bool WebSchedulerService::command(const char * name, const char * cmd, const char * data) { + // check http commands. e.g. + // tasmota(get): http:///cm?cmnd=power%20ON + // shelly(get): http:///relais/0?turn=on + const char * c = strchr(cmd, '{'); + if (c) { // parse json + JsonDocument doc; + int httpResult = 0; + if (DeserializationError::Ok == deserializeJson(doc, c)) { + HTTPClient http; + String url = doc["url"]; + if (http.begin(url)) { + for (JsonPair p : doc["header"].as()) { + http.addHeader(p.key().c_str(), p.value().as().c_str()); + } + String value = doc["value"] | ""; + if (value.length()) { + httpResult = http.POST(value); + } else if (data && data[0] != '\0') { // post + httpResult = http.POST(String(data)); + } else { + httpResult = http.GET(); + } + http.end(); + } + } + return httpResult > 0; + } JsonDocument doc_input; JsonObject input = doc_input.to(); if (strlen(data)) { // empty data queries a value @@ -390,12 +418,12 @@ void WebSchedulerService::condition() { #ifdef EMESESP_DEBUG // emsesp::EMSESP::logger().debug("condition match: %s", match.c_str()); #endif - if (!match.empty() && match[0] == '1') { - if (scheduleItem.retry_cnt == 0xFF) { // default unswitched - scheduleItem.retry_cnt = command(scheduleItem.name.c_str(), scheduleItem.cmd.c_str(), compute(scheduleItem.value).c_str()) ? 1 : 0xFF; - } - } else if (scheduleItem.retry_cnt == 1) { + if (match.length() == 1 && match[0] == '1' && scheduleItem.retry_cnt == 0xFF) { + scheduleItem.retry_cnt = command(scheduleItem.name.c_str(), scheduleItem.cmd.c_str(), compute(scheduleItem.value).c_str()) ? 1 : 0xFF; + } else if (match.length() == 1 && match[0] == '0' && scheduleItem.retry_cnt == 1) { scheduleItem.retry_cnt = 0xFF; + } else if (match.length() != 1) { // the match is not boolean + emsesp::EMSESP::logger().debug("condition result: %s", match.c_str()); } } } diff --git a/src/web/shuntingYard.hpp b/src/web/shuntingYard.hpp index d4f3a7e25..7fcd1be93 100644 --- a/src/web/shuntingYard.hpp +++ b/src/web/shuntingYard.hpp @@ -63,6 +63,22 @@ std::deque exprToTokens(const std::string & expr) { for (const auto * p = expr.c_str(); *p; ++p) { if (isblank(*p)) { // do nothing + } else if (*p == '{') { // json is stored as string including {} + const auto * b = p; + ++p; + uint8_t i = 1; + while (*p && i > 0) { + i += (*p == '{') ? 1 : (*p == '}') ? -1 : 0; + ++p; + } + if (*p) { + ++p; + } + const auto s = std::string(b, p); + tokens.push_back(Token{Token::Type::String, s, -3}); + if (*p == '\0') { + --p; + } } else if (*p >= 'a' && *p <= 'z') { const auto * b = p; while ((*p >= 'a' && *p <= 'z') || (*p == '_')) { @@ -579,7 +595,52 @@ std::string calculate(const std::string & expr) { // check for multiple instances of ? : std::string compute(const std::string & expr) { - auto expr_new = expr; + auto expr_new = emsesp::Helpers::toLower(expr); + + // search json with url: + auto f = expr_new.find_first_of("{"); + while (f != std::string::npos) { + auto e = f + 1; + for (uint8_t i = 1; i > 0; e++) { + if (e >= expr_new.length()) { + return ""; + } else if (expr_new[e] == '}') { + i--; + } else if (expr_new[e] == '{') { + i++; + } + } + std::string cmd = expr_new.substr(f, e - f).c_str(); + JsonDocument doc; + if (DeserializationError::Ok == deserializeJson(doc, cmd)) { + HTTPClient http; + String url = doc["url"]; + if (http.begin(url)) { + int httpResult = 0; + for (JsonPair p : doc["header"].as()) { + http.addHeader(p.key().c_str(), p.value().as().c_str()); + } + String data = doc["value"] | ""; + if (data.length()) { + httpResult = http.POST(data); + } else { + httpResult = http.GET(); + } + if (httpResult > 0) { + std::string result = emsesp::Helpers::toLower(http.getString().c_str()); + String key = doc["key"] | ""; + doc.clear(); + if (key.length() && DeserializationError::Ok == deserializeJson(doc, result)) { + result = doc[key.c_str()].as(); + } + expr_new.replace(f, e - f, result.c_str()); + } + http.end(); + } + } + f = expr_new.find_first_of("{", e); + } + // positions: q-questionmark, c-colon auto q = expr_new.find_first_of("?"); while (q != std::string::npos) { From 3ad676235d8cee4344846d25dd32ae03e006dfdf Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Fri, 19 Jul 2024 12:45:40 +0200 Subject: [PATCH 4/7] update pkg --- interface/package.json | 4 +- interface/yarn.lock | 135 +++++++++++++++++++++++++++-------------- 2 files changed, 90 insertions(+), 49 deletions(-) diff --git a/interface/package.json b/interface/package.json index 6cfa89f3a..f7031d810 100644 --- a/interface/package.json +++ b/interface/package.json @@ -24,8 +24,8 @@ "dependencies": { "@alova/adapter-xhr": "^1.0.6", "@alova/scene-react": "^1.6.1", - "@emotion/react": "^11.11.4", - "@emotion/styled": "^11.11.5", + "@emotion/react": "^11.12.0", + "@emotion/styled": "^11.12.0", "@mui/icons-material": "^5.16.4", "@mui/material": "^5.16.4", "@table-library/react-table-library": "4.1.7", diff --git a/interface/yarn.lock b/interface/yarn.lock index 42ea62bac..e60cab673 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -665,22 +665,22 @@ __metadata: languageName: node linkType: hard -"@emotion/babel-plugin@npm:^11.11.0": - version: 11.11.0 - resolution: "@emotion/babel-plugin@npm:11.11.0" +"@emotion/babel-plugin@npm:^11.12.0": + version: 11.12.0 + resolution: "@emotion/babel-plugin@npm:11.12.0" dependencies: "@babel/helper-module-imports": "npm:^7.16.7" "@babel/runtime": "npm:^7.18.3" - "@emotion/hash": "npm:^0.9.1" - "@emotion/memoize": "npm:^0.8.1" - "@emotion/serialize": "npm:^1.1.2" + "@emotion/hash": "npm:^0.9.2" + "@emotion/memoize": "npm:^0.9.0" + "@emotion/serialize": "npm:^1.2.0" babel-plugin-macros: "npm:^3.1.0" convert-source-map: "npm:^1.5.0" escape-string-regexp: "npm:^4.0.0" find-root: "npm:^1.1.0" source-map: "npm:^0.5.7" stylis: "npm:4.2.0" - checksum: 10c0/89cbb6ec0e52c8ee9c2a4b9889ccd4fc3a75d28091d835bfac6d7c4565d3338621e23af0a85f3bcd133e1cae795c692e1dadada015784d4b0554aa5bb111df43 + checksum: 10c0/930ff6f8768b0c24d05896ad696be20e1c65f32ed61fb5c1488f571120a947ef0a2cf69187b17114cc76e7886f771fac150876ed7b5341324fec2377185d6573 languageName: node linkType: hard @@ -697,19 +697,32 @@ __metadata: languageName: node linkType: hard -"@emotion/hash@npm:^0.9.1": - version: 0.9.1 - resolution: "@emotion/hash@npm:0.9.1" - checksum: 10c0/cdafe5da63fc1137f3db6e232fdcde9188b2b47ee66c56c29137199642a4086f42382d866911cfb4833cae2cc00271ab45cad3946b024f67b527bb7fac7f4c9d +"@emotion/cache@npm:^11.12.0": + version: 11.12.0 + resolution: "@emotion/cache@npm:11.12.0" + dependencies: + "@emotion/memoize": "npm:^0.9.0" + "@emotion/sheet": "npm:^1.3.0" + "@emotion/utils": "npm:^1.3.0" + "@emotion/weak-memoize": "npm:^0.4.0" + stylis: "npm:4.2.0" + checksum: 10c0/b6909597a41dfc1d07ada1b8a719697d2c0155a8f71c14079b7a089e281093a4c0710933592c864185e9176621ce6eff96e5ce2eb6774ba7959235232892d3c8 languageName: node linkType: hard -"@emotion/is-prop-valid@npm:^1.2.2": - version: 1.2.2 - resolution: "@emotion/is-prop-valid@npm:1.2.2" +"@emotion/hash@npm:^0.9.2": + version: 0.9.2 + resolution: "@emotion/hash@npm:0.9.2" + checksum: 10c0/0dc254561a3cc0a06a10bbce7f6a997883fd240c8c1928b93713f803a2e9153a257a488537012efe89dbe1246f2abfe2add62cdb3471a13d67137fcb808e81c2 + languageName: node + linkType: hard + +"@emotion/is-prop-valid@npm:^1.3.0": + version: 1.3.0 + resolution: "@emotion/is-prop-valid@npm:1.3.0" dependencies: - "@emotion/memoize": "npm:^0.8.1" - checksum: 10c0/bb1530dcb4e0e5a4fabb219279f2d0bc35796baf66f6241f98b0d03db1985c890a8cafbea268e0edefd5eeda143dbd5c09a54b5fba74cee8c69b98b13194af50 + "@emotion/memoize": "npm:^0.9.0" + checksum: 10c0/4620b62aaca4b3b610202513652872756d7f4a8b84b2cea6b798dd6e8ccdfe43944b956c6a6a8cb5da0b0fe61bef6caca273d198ba32b5c658df22a6c7371b1b languageName: node linkType: hard @@ -720,37 +733,44 @@ __metadata: languageName: node linkType: hard -"@emotion/react@npm:^11.11.4": - version: 11.11.4 - resolution: "@emotion/react@npm:11.11.4" +"@emotion/memoize@npm:^0.9.0": + version: 0.9.0 + resolution: "@emotion/memoize@npm:0.9.0" + checksum: 10c0/13f474a9201c7f88b543e6ea42f55c04fb2fdc05e6c5a3108aced2f7e7aa7eda7794c56bba02985a46d8aaa914fcdde238727a98341a96e2aec750d372dadd15 + languageName: node + linkType: hard + +"@emotion/react@npm:^11.12.0": + version: 11.12.0 + resolution: "@emotion/react@npm:11.12.0" dependencies: "@babel/runtime": "npm:^7.18.3" - "@emotion/babel-plugin": "npm:^11.11.0" - "@emotion/cache": "npm:^11.11.0" - "@emotion/serialize": "npm:^1.1.3" + "@emotion/babel-plugin": "npm:^11.12.0" + "@emotion/cache": "npm:^11.12.0" + "@emotion/serialize": "npm:^1.2.0" "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.0.1" - "@emotion/utils": "npm:^1.2.1" - "@emotion/weak-memoize": "npm:^0.3.1" + "@emotion/utils": "npm:^1.3.0" + "@emotion/weak-memoize": "npm:^0.4.0" hoist-non-react-statics: "npm:^3.3.1" peerDependencies: react: ">=16.8.0" peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/6df892fd9e04b5c8c37aacfd7f461631e04e00e845edc3c5b2955ab8ad681abf5cd49584101f579427e08b82f2f88369c78d37ae2fe9360a8f68fd4e51b8e448 + checksum: 10c0/a2035e0a5788ec6748b595ae898732aa845515dea52657fcf2661288d01c7da16133588fdaa4288c05175dc4c39938546af265bb039065efca20a729c486da9b languageName: node linkType: hard -"@emotion/serialize@npm:^1.1.2, @emotion/serialize@npm:^1.1.3, @emotion/serialize@npm:^1.1.4": - version: 1.1.4 - resolution: "@emotion/serialize@npm:1.1.4" +"@emotion/serialize@npm:^1.2.0": + version: 1.2.0 + resolution: "@emotion/serialize@npm:1.2.0" dependencies: - "@emotion/hash": "npm:^0.9.1" - "@emotion/memoize": "npm:^0.8.1" - "@emotion/unitless": "npm:^0.8.1" - "@emotion/utils": "npm:^1.2.1" + "@emotion/hash": "npm:^0.9.2" + "@emotion/memoize": "npm:^0.9.0" + "@emotion/unitless": "npm:^0.9.0" + "@emotion/utils": "npm:^1.3.0" csstype: "npm:^3.0.2" - checksum: 10c0/164d936f72382594c47b9c24e67a51c7fc16b83d9a36b84eec5e4cb9bf7be029218a490ef4b44233a1b53423bdb3905d65b597cde3ebba759d40dab7a4c99121 + checksum: 10c0/bac56ccc42b4842bbb55139296bfef812ec6d26cf92db1a7adfc90dcab8d2b717706828ff474feff227ef1a5f611020c5a2443ba600ed01d28095f0201b352e2 languageName: node linkType: hard @@ -761,30 +781,37 @@ __metadata: languageName: node linkType: hard -"@emotion/styled@npm:^11.11.5": - version: 11.11.5 - resolution: "@emotion/styled@npm:11.11.5" +"@emotion/sheet@npm:^1.3.0": + version: 1.3.0 + resolution: "@emotion/sheet@npm:1.3.0" + checksum: 10c0/99ce618d426e0646f58591200619cf3cd6f452e829c0b0339f66b3e4bfd7d51773f49d0200e14334861bee9db1dfb5d46328b20eafbfdd28f857584688fad8f4 + languageName: node + linkType: hard + +"@emotion/styled@npm:^11.12.0": + version: 11.12.0 + resolution: "@emotion/styled@npm:11.12.0" dependencies: "@babel/runtime": "npm:^7.18.3" - "@emotion/babel-plugin": "npm:^11.11.0" - "@emotion/is-prop-valid": "npm:^1.2.2" - "@emotion/serialize": "npm:^1.1.4" + "@emotion/babel-plugin": "npm:^11.12.0" + "@emotion/is-prop-valid": "npm:^1.3.0" + "@emotion/serialize": "npm:^1.2.0" "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.0.1" - "@emotion/utils": "npm:^1.2.1" + "@emotion/utils": "npm:^1.3.0" peerDependencies: "@emotion/react": ^11.0.0-rc.0 react: ">=16.8.0" peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/27da6ad7f5b374d61cfe6647cc2f93ee3ceb1139a51907050576ee30da0a50a27b0bbed45f76889d560d2a8ccf8bc4a4f7126cad3f00127e107c11093dc0a801 + checksum: 10c0/f87466ade3c872c6452091969f2784b97dcec821f812f641088e1289ad039ddea7165e8b1221895911f199469d07a9ffc786434e496ae3cb62156f72a5686ad7 languageName: node linkType: hard -"@emotion/unitless@npm:^0.8.1": - version: 0.8.1 - resolution: "@emotion/unitless@npm:0.8.1" - checksum: 10c0/a1ed508628288f40bfe6dd17d431ed899c067a899fa293a13afe3aed1d70fac0412b8a215fafab0b42829360db687fecd763e5f01a64ddc4a4b58ec3112ff548 +"@emotion/unitless@npm:^0.9.0": + version: 0.9.0 + resolution: "@emotion/unitless@npm:0.9.0" + checksum: 10c0/f907d968a49315bb654b5734edf3315e52350f77c160a63f3437f14d80610dc78fd8295e759e7339055c45bd25c74c46363235c5971aae5587f7eeb969580c4c languageName: node linkType: hard @@ -804,6 +831,13 @@ __metadata: languageName: node linkType: hard +"@emotion/utils@npm:^1.3.0": + version: 1.3.0 + resolution: "@emotion/utils@npm:1.3.0" + checksum: 10c0/a42ec56b78e4fea16d120da31fb1d5ccffb9ad372e26c620eb6fe3ca5bb63f9d0d88497af01cd503e4baea9b1dd6d4fe04b897b7720c26a53eee8b993bc8000d + languageName: node + linkType: hard + "@emotion/weak-memoize@npm:^0.3.1": version: 0.3.1 resolution: "@emotion/weak-memoize@npm:0.3.1" @@ -811,6 +845,13 @@ __metadata: languageName: node linkType: hard +"@emotion/weak-memoize@npm:^0.4.0": + version: 0.4.0 + resolution: "@emotion/weak-memoize@npm:0.4.0" + checksum: 10c0/64376af11f1266042d03b3305c30b7502e6084868e33327e944b539091a472f089db307af69240f7188f8bc6b319276fd7b141a36613f1160d73d12a60f6ca1a + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/aix-ppc64@npm:0.21.5" @@ -2013,8 +2054,8 @@ __metadata: "@alova/adapter-xhr": "npm:^1.0.6" "@alova/scene-react": "npm:^1.6.1" "@babel/core": "npm:^7.24.9" - "@emotion/react": "npm:^11.11.4" - "@emotion/styled": "npm:^11.11.5" + "@emotion/react": "npm:^11.12.0" + "@emotion/styled": "npm:^11.12.0" "@eslint/js": "npm:^9.7.0" "@mui/icons-material": "npm:^5.16.4" "@mui/material": "npm:^5.16.4" From f7278ab3a940f9214ef4106ed65dd2a99635d4b4 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Fri, 19 Jul 2024 12:50:50 +0200 Subject: [PATCH 5/7] v3.7.0-dev.26, changelog --- CHANGELOG_LATEST.md | 3 +++ src/version.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 821a44efc..0006be584 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -30,6 +30,9 @@ - allow device name to be customized [#1174](https://github.com/emsesp/EMS-ESP32/issues/1174) - Modbus support by @mheyse [#1744](https://github.com/emsesp/EMS-ESP32/issues/1744) - System Message command [#1854](https://github.com/emsesp/EMS-ESP32/issues/1854) +- scheduler can use web get/post for values and commands [#1806](https://github.com/emsesp/EMS-ESP32/issues/1806) +- RT800 remote emulation [#1867](https://github.com/emsesp/EMS-ESP32/issues/1867) +- RC310 cooling parameters [#1857](https://github.com/emsesp/EMS-ESP32/issues/1857) ## Fixed diff --git a/src/version.h b/src/version.h index bfd5521a5..7ba5e93f1 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.7.0-dev.25" +#define EMSESP_APP_VERSION "3.7.0-dev.26" From 58c48584acbbfe9a6137f09704311224c5e1f56c Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Fri, 19 Jul 2024 18:40:24 +0200 Subject: [PATCH 6/7] fetch next telegram part for different offset --- src/emsesp.cpp | 2 +- src/telegram.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/emsesp.cpp b/src/emsesp.cpp index 18ff6ac2e..00cd93e1a 100644 --- a/src/emsesp.cpp +++ b/src/emsesp.cpp @@ -1489,7 +1489,7 @@ void EMSESP::incoming_telegram(uint8_t * data, const uint8_t length) { // if telegram is longer read next part with offset +25 for ems+ or +27 for ems1.0 // not for response to raw send commands without read_id set - if ((response_id_ == 0 || read_id_ > 0) && (length >= 31) && (txservice_.read_next_tx(data[3], length) == read_id_)) { + if ((response_id_ == 0 || read_id_ > 0) && (txservice_.read_next_tx(data[3], length) == read_id_)) { read_next_ = true; txservice_.send(); } else { diff --git a/src/telegram.cpp b/src/telegram.cpp index fc2183c94..3872afc64 100644 --- a/src/telegram.cpp +++ b/src/telegram.cpp @@ -642,7 +642,8 @@ uint16_t TxService::read_next_tx(const uint8_t offset, const uint8_t length) { uint8_t message_data = (UINT8_MAX - next_offset) >= next_length ? next_length : UINT8_MAX - next_offset; // check telegram, offset and overflow // some telegrams only reply with one byte less, but have higher offsets (0x10) - if (old_length >= (next_length - 1) && telegram_last_->offset == offset) { + // some reply with higher offset than requestes and have not_set values intermediate (0xEA) + if (old_length >= (next_length - 1) || telegram_last_->offset < offset) { add(Telegram::Operation::TX_READ, telegram_last_->dest, telegram_last_->type_id, next_offset, &message_data, 1, 0, true); return telegram_last_->type_id; } From c3296ccf973b984a204a9b2dffe144b36b50ee0d Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Fri, 19 Jul 2024 19:57:13 +0200 Subject: [PATCH 7/7] offset correction for next telegram --- src/telegram.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/telegram.cpp b/src/telegram.cpp index 3872afc64..45d99d2c6 100644 --- a/src/telegram.cpp +++ b/src/telegram.cpp @@ -638,7 +638,7 @@ void TxService::retry_tx(const uint8_t operation, const uint8_t * data, const ui uint16_t TxService::read_next_tx(const uint8_t offset, const uint8_t length) { uint8_t old_length = telegram_last_->type_id > 0xFF ? length - 7 : length - 5; uint8_t next_length = telegram_last_->type_id > 0xFF ? EMS_MAX_TELEGRAM_MESSAGE_LENGTH - 2 : EMS_MAX_TELEGRAM_MESSAGE_LENGTH; - uint8_t next_offset = telegram_last_->offset + old_length; + uint8_t next_offset = offset + old_length; uint8_t message_data = (UINT8_MAX - next_offset) >= next_length ? next_length : UINT8_MAX - next_offset; // check telegram, offset and overflow // some telegrams only reply with one byte less, but have higher offsets (0x10)