From 77a8857e2fcbe23bffd80eaea47ee18755b42b47 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 26 May 2022 12:42:38 +0200 Subject: [PATCH 01/24] fix #522, device-flag for IVT controller --- src/device_library.h | 2 +- src/devices/controller.cpp | 6 ++++-- src/emsdevice.h | 3 +++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/device_library.h b/src/device_library.h index 21fd47917..acbbc514c 100644 --- a/src/device_library.h +++ b/src/device_library.h @@ -68,7 +68,7 @@ {224, DeviceType::CONTROLLER, F("9000i"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 {229, DeviceType::CONTROLLER, F("8700i"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 {230, DeviceType::CONTROLLER, F("BC Base"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 -{240, DeviceType::CONTROLLER, F("Rego 3000"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 +{240, DeviceType::CONTROLLER, F("Rego 3000"), DeviceFlags::EMS_DEVICE_FLAG_IVT}, // 0x09 {241, DeviceType::CONTROLLER, F("Condens 5000i"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 // Thermostat - not currently supporting write operations, like the Easy/100 types - 0x18 diff --git a/src/devices/controller.cpp b/src/devices/controller.cpp index f7b0b952f..a60912629 100644 --- a/src/devices/controller.cpp +++ b/src/devices/controller.cpp @@ -25,8 +25,10 @@ REGISTER_FACTORY(Controller, EMSdevice::DeviceType::CONTROLLER); Controller::Controller(uint8_t device_type, uint8_t device_id, uint8_t product_id, const char * version, const std::string & name, uint8_t flags, uint8_t brand) : EMSdevice(device_type, device_id, product_id, version, name, flags, brand) { // IVT broadcasts Thermostat time from controller (0x09) if display is off. - register_telegram_type(0x06, F("RCTime"), false, MAKE_PF_CB(process_dateTime)); - register_device_value(DeviceValueTAG::TAG_NONE, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); + if ((flags & 0x0F) == EMS_DEVICE_FLAG_IVT) { + register_telegram_type(0x06, F("RCTime"), false, MAKE_PF_CB(process_dateTime)); + register_device_value(DeviceValueTAG::TAG_NONE, &dateTime_, DeviceValueType::STRING, nullptr, FL_(dateTime), DeviceValueUOM::NONE); + } } // process_dateTime - type 0x06 - date and time from a thermostat - 14 bytes long, IVT only diff --git a/src/emsdevice.h b/src/emsdevice.h index 3da12a4e3..567cfd8f8 100644 --- a/src/emsdevice.h +++ b/src/emsdevice.h @@ -315,6 +315,9 @@ class EMSdevice { // device flags: The lower 4 bits hold the unique identifier, the upper 4 bits are used for specific flags static constexpr uint8_t EMS_DEVICE_FLAG_NONE = 0; + // Controller + static constexpr uint8_t EMS_DEVICE_FLAG_IVT = 1; + // Boiler static constexpr uint8_t EMS_DEVICE_FLAG_EMS = 1; static constexpr uint8_t EMS_DEVICE_FLAG_EMSPLUS = 2; From d2609e429174f997c1d6bf3182616bd63b3e93a7 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 26 May 2022 12:42:55 +0200 Subject: [PATCH 02/24] fix #523, rename 'climate' to more explaning name --- src/locale_EN.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locale_EN.h b/src/locale_EN.h index 5ddf6dc1e..c6f0eb096 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -616,7 +616,7 @@ MAKE_PSTR_LIST(wwDailyHeating, F("wwdailyheating"), F("daily heating")) MAKE_PSTR_LIST(wwDailyHeatTime, F("wwdailyheattime"), F("daily heating time")) MAKE_PSTR_LIST(wwWhenModeOff, F("wwwhenmodeoff"), F("when thermostat mode off")) // thermostat hc -MAKE_PSTR_LIST(climate, F("climate")) +MAKE_PSTR_LIST(climate, F("ha_climate_config_creation")) // no full-name, hidden, only for creation MAKE_PSTR_LIST(selRoomTemp, F("seltemp"), F("selected room temperature")) MAKE_PSTR_LIST(roomTemp, F("currtemp"), F("current room temperature")) MAKE_PSTR_LIST(mode, F("mode"), F("mode")) From 34cb3ad375f0c2719526b5882bfa2ea7cdb5a3da Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 26 May 2022 12:43:10 +0200 Subject: [PATCH 03/24] fix #524, free memory of json response --- src/web/WebAPIService.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/web/WebAPIService.cpp b/src/web/WebAPIService.cpp index 5ab041987..407e33fb2 100644 --- a/src/web/WebAPIService.cpp +++ b/src/web/WebAPIService.cpp @@ -132,6 +132,7 @@ void WebAPIService::parse(AsyncWebServerRequest * request, JsonObject & input) { JsonVariant data = output["api_data"]; request->send(200, "text/plain; charset=utf-8", data.as()); api_count_++; + delete response; return; } From 89b07114645e3c7ff64a57de0e2a536c8e7ebea5 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 26 May 2022 13:05:37 +0200 Subject: [PATCH 04/24] changelog --- CHANGELOG_LATEST.md | 83 +++------------------------------------------ 1 file changed, 4 insertions(+), 79 deletions(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 0ec10fa91..cae9e2969 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -1,91 +1,16 @@ # Changelog -## [3.4.0] +## [3.4.1] ### Added -- WebUI optimizations, updated look&feel and better performance [#124](https://github.com/emsesp/EMS-ESP32/issues/124) -- Auto refresh of WebUI after successful firmware upload [#178](https://github.com/emsesp/EMS-ESP32/issues/178) -- New Customization Service in WebUI. First feature is the ability to enable/disabled Enitites (device values) from EMS devices [#206](https://github.com/emsesp/EMS-ESP32/issues/206) -- Option to disable Telnet Console [#209](https://github.com/emsesp/EMS-ESP32/issues/209) -- Added Hide SSID, Max Clients and Preferred Channel to Access Point -- Merged in MichaelDvP's changes like Fahrenheit conversion, publish single (for IOBroker) and a few other critical optimizations -- Enabled bi-directional read/write with Home Assistant, so values can be changed automatically from the UI without scripting [#265](https://github.com/emsesp/EMS-ESP32/issues/265) -- Added GC7000F Boiler [#270](https://github.com/emsesp/EMS-ESP32/issues/270) -- Revised LED flash sequence on boot up to show system health (1 flash=no ems, 2 flashes=no wifi) [#224](https://github.com/emsesp/EMS-ESP32/issues/224) -- Analog Sensor support [#271](https://github.com/emsesp/EMS-ESP32/issues/271) -- Solar cylinder priority [#247](https://github.com/emsesp/EMS-ESP32/issues/247) -- Read only mode in Settings, where EMS Tx/Write commands are blocked [#286](https://github.com/emsesp/EMS-ESP32/issues/286) -- Added 8700i Boiler device -- Added Cascade CM10 Controller device -- Add Olimex ESP32-POE-ISO to board profiles plus settings to customize Ethernet modules [#301](https://github.com/emsesp/EMS-ESP32/issues/301) -- Help text for string commands in WebUI [#320](https://github.com/emsesp/EMS-ESP32/issues/320) -- Germany translations (at compile time) -- #entities added to system/info` endpoint [#322](https://github.com/emsesp/EMS-ESP32/issues/322) -- analog outputs digital/pwm/dac -- remove MQTT retained configs if discovery is disabled -- timeout 10 min for MQTT-QoS wait -- Moduline 300 auto-temperatures T1-T4, RC300 romminfluencefactor -- RC35 parameters [#392](https://github.com/emsesp/EMS-ESP32/issues/392), [#398](https://github.com/emsesp/EMS-ESP32/issues/398) -- sync time with thermostat [#386](https://github.com/emsesp/EMS-ESP32/issues/386), [#408](https://github.com/emsesp/EMS-ESP32/issues/408) -- set mode has immediate effect [#395](https://github.com/emsesp/EMS-ESP32/issues/395) -- min/max in web value setting -- Extend customization to select if an entity is to be shown in the WebUI or forced as read-only [#317](https://github.com/emsesp/EMS-ESP32/issues/317) -- Added Moduline 400 installation parameters [PR #449 by @kwertie01](https://github.com/emsesp/EMS-ESP32/pull/449) -- Read time from IVT-controller [#439](https://github.com/emsesp/EMS-ESP32/issues/439) -- Hybrid Heatpump product-id 168 [#459](https://github.com/emsesp/EMS-ESP32/issues/459), thermostat settings -- Junkers ISM2 and IPM in warm water mode [#437](https://github.com/emsesp/EMS-ESP32/issues/437) -- Added Shower Alert trigger time and cold shot time [#436](https://github.com/emsesp/EMS-ESP32/issues/436) -- Improved Table layout in Web UI (searching, filtering, sorting, exporting to CSV) -- API fetch individual attributes from an entity [#462](https://github.com/emsesp/EMS-ESP32/issues/462) -- Option to disable mDNS -- Option for rendering booleans on dashboard [#456](https://github.com/emsesp/EMS-ESP32/issues/456) -- Upload customization settings from a file [#256](https://github.com/emsesp/EMS-ESP32/issues/256) - ### Fixed -- lastcode broke MQTT JSON structure [#228](https://github.com/emsesp/EMS-ESP32/issues/228) -- fixed issue with overlapping while reading sequence of EMS1.0 telegrams -- fixed redundant telegram readings (because of offset overflow) -- added missing RC30/Moduline 400 [#243](https://github.com/emsesp/EMS-ESP32/issues/243) -- Correct modes for RC25 [#106](https://github.com/emsesp/EMS-ESP32/issues/106) -- Clean up old HA config's in MQTT before publishing data. This will prevent HA giving the 'dict' warnings [#229](https://github.com/emsesp/EMS-ESP32/issues/229) -- RC25 temperature setting [#272](https://github.com/emsesp/EMS-ESP32/issues/272) -- Buderus RC25 - "hc1 mode type" incorrect value [#273](https://github.com/emsesp/EMS-ESP32/issues/273) -- Increased number of Mixers and Heating Circuits [#294](https://github.com/emsesp/EMS-ESP32/issues/294) -- Check receive status before removing a telegram fetch [#268](https://github.com/emsesp/EMS-ESP32/issues/268), [#282](https://github.com/emsesp/EMS-ESP32/issues/282) -- Fix uploading firmware on OSX [#345](https://github.com/emsesp/EMS-ESP32/issues/345) -- Non-nested MQTT would corrupt the json [#354](https://github.com/emsesp/EMS-ESP32/issues/354) -- Burner selected max power can have a value higher than 100% [#314](https://github.com/emsesp/EMS-ESP32/issues/314) -- some missing fahrenheit calculations -- limited number of exclusions [#339](https://github.com/emsesp/EMS-ESP32/issues/339) -- MQTT sometimes would not reconnect after a WiFi outage +- fix memory leak in api [#524](https://github.com/emsesp/EMS-ESP32/issues/524) ### Changed -- Use flash system to show system health (1 flash=no ems, 2 flashes=no wifi) [#224](https://github.com/emsesp/EMS-ESP32/issues/224) -- Renamed Dallas Sensor to Temperature Sensor in UI -- Dallas Format removed. Use the name to give each sensor an alias -- No longer MQTT subscribes to topic `/thermostat_hc` as it supports a path similar to the API endpoint construct -- Show Sensors quality in WebUI -- Controller not shown in WebUI dashboard -- renamed "Home Assistant Integration" to "MQTT Discovery" in MQTT Settings [#290](https://github.com/emsesp/EMS-ESP32/issues/290) -- Show ems tx reads and writes separately -- Show ems device handlers separated for received, fetched and pending handlers. -- Wired renamed to Ethernet -- removed system/pin command, new commands in analogsensors -- system/info device-info split to name/version/brand -- exclude list uses short-names, possible flags for web/api/mqtt excludes, readonly and favorite (selection not yet implemented) -- thermostat clock formate date-time: dd.mm.yyyy hh:mm -- RC300 summermode as other thermostats `winter/summer` instead of `off/on` +- controller data in web-ui only for IVT [#522](https://github.com/emsesp/EMS-ESP32/issues/522) +- rename hidden `climate` to a more explaining name [#523](https://github.com/emsesp/EMS-ESP32/issues/523) ## **BREAKING CHANGES:** - -- Settings: - - order of Boolean Format has changed in Application Settings - check your settings - - Dallas Format setting removed. Now customize name of each Dallas sensor via the UI -- MQTT/API - - Boiler `wwheat` renamed to `ww3wayon` [#211](https://github.com/emsesp/EMS-ESP32/issues/211) - - Boiler `ww` tag renamed to `dhw`. Any custom Home Assistant lovelace dashboards will need updating. - - Renamed description of `wwtapactivated` to "turn on/off DHW". Otherwise would have looked like "boiler_dhw_turn_on_off_dhw" in HA. - - `/api/system/info` endpoint has updated keys. Now lowercase, no underscores and not capitalized. Replace "handlers" with "handlers received", "handlers fetched" and "handlers pending". From 2d50f18dcfa8176183d40a351d89ebe6055006e8 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 26 May 2022 13:11:13 +0200 Subject: [PATCH 05/24] changelog from 3.4.0 --- CHANGELOG.md | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf8fd774f..080b6687e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,96 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +# [3.4.0] May 23 2022 + +## Added + +- WebUI optimizations, updated look&feel and better performance [#124](https://github.com/emsesp/EMS-ESP32/issues/124) +- Auto refresh of WebUI after successful firmware upload [#178](https://github.com/emsesp/EMS-ESP32/issues/178) +- New Customization Service in WebUI. First feature is the ability to enable/disabled Enitites (device values) from EMS devices [#206](https://github.com/emsesp/EMS-ESP32/issues/206) +- Option to disable Telnet Console [#209](https://github.com/emsesp/EMS-ESP32/issues/209) +- Added Hide SSID, Max Clients and Preferred Channel to Access Point +- Merged in MichaelDvP's changes like Fahrenheit conversion, publish single (for IOBroker) and a few other critical optimizations +- Enabled bi-directional read/write with Home Assistant, so values can be changed automatically from the UI without scripting [#265](https://github.com/emsesp/EMS-ESP32/issues/265) +- Added GC7000F Boiler [#270](https://github.com/emsesp/EMS-ESP32/issues/270) +- Revised LED flash sequence on boot up to show system health (1 flash=no ems, 2 flashes=no wifi) [#224](https://github.com/emsesp/EMS-ESP32/issues/224) +- Analog Sensor support [#271](https://github.com/emsesp/EMS-ESP32/issues/271) +- Solar cylinder priority [#247](https://github.com/emsesp/EMS-ESP32/issues/247) +- Read only mode in Settings, where EMS Tx/Write commands are blocked [#286](https://github.com/emsesp/EMS-ESP32/issues/286) +- Added 8700i Boiler device +- Added Cascade CM10 Controller device +- Add Olimex ESP32-POE-ISO to board profiles plus settings to customize Ethernet modules [#301](https://github.com/emsesp/EMS-ESP32/issues/301) +- Help text for string commands in WebUI [#320](https://github.com/emsesp/EMS-ESP32/issues/320) +- Germany translations (at compile time) +- #entities added to system/info` endpoint [#322](https://github.com/emsesp/EMS-ESP32/issues/322) +- analog outputs digital/pwm/dac +- remove MQTT retained configs if discovery is disabled +- timeout 10 min for MQTT-QoS wait +- Moduline 300 auto-temperatures T1-T4, RC300 romminfluencefactor +- RC35 parameters [#392](https://github.com/emsesp/EMS-ESP32/issues/392), [#398](https://github.com/emsesp/EMS-ESP32/issues/398) +- sync time with thermostat [#386](https://github.com/emsesp/EMS-ESP32/issues/386), [#408](https://github.com/emsesp/EMS-ESP32/issues/408) +- set mode has immediate effect [#395](https://github.com/emsesp/EMS-ESP32/issues/395) +- min/max in web value setting +- Extend customization to select if an entity is to be shown in the WebUI or forced as read-only [#317](https://github.com/emsesp/EMS-ESP32/issues/317) +- Added Moduline 400 installation parameters [PR #449 by @kwertie01](https://github.com/emsesp/EMS-ESP32/pull/449) +- Read time from IVT-controller [#439](https://github.com/emsesp/EMS-ESP32/issues/439) +- Hybrid Heatpump product-id 168 [#459](https://github.com/emsesp/EMS-ESP32/issues/459), thermostat settings +- Junkers ISM2 and IPM in warm water mode [#437](https://github.com/emsesp/EMS-ESP32/issues/437) +- Added Shower Alert trigger time and cold shot time [#436](https://github.com/emsesp/EMS-ESP32/issues/436) +- Improved Table layout in Web UI (searching, filtering, sorting, exporting to CSV) +- API fetch individual attributes from an entity [#462](https://github.com/emsesp/EMS-ESP32/issues/462) +- Option to disable mDNS +- Option for rendering booleans on dashboard [#456](https://github.com/emsesp/EMS-ESP32/issues/456) +- Upload customization settings from a file [#256](https://github.com/emsesp/EMS-ESP32/issues/256) + +## Fixed + +- lastcode broke MQTT JSON structure [#228](https://github.com/emsesp/EMS-ESP32/issues/228) +- fixed issue with overlapping while reading sequence of EMS1.0 telegrams +- fixed redundant telegram readings (because of offset overflow) +- added missing RC30/Moduline 400 [#243](https://github.com/emsesp/EMS-ESP32/issues/243) +- Correct modes for RC25 [#106](https://github.com/emsesp/EMS-ESP32/issues/106) +- Clean up old HA config's in MQTT before publishing data. This will prevent HA giving the 'dict' warnings [#229](https://github.com/emsesp/EMS-ESP32/issues/229) +- RC25 temperature setting [#272](https://github.com/emsesp/EMS-ESP32/issues/272) +- Buderus RC25 - "hc1 mode type" incorrect value [#273](https://github.com/emsesp/EMS-ESP32/issues/273) +- Increased number of Mixers and Heating Circuits [#294](https://github.com/emsesp/EMS-ESP32/issues/294) +- Check receive status before removing a telegram fetch [#268](https://github.com/emsesp/EMS-ESP32/issues/268), [#282](https://github.com/emsesp/EMS-ESP32/issues/282) +- Fix uploading firmware on OSX [#345](https://github.com/emsesp/EMS-ESP32/issues/345) +- Non-nested MQTT would corrupt the json [#354](https://github.com/emsesp/EMS-ESP32/issues/354) +- Burner selected max power can have a value higher than 100% [#314](https://github.com/emsesp/EMS-ESP32/issues/314) +- some missing fahrenheit calculations +- limited number of exclusions [#339](https://github.com/emsesp/EMS-ESP32/issues/339) +- MQTT sometimes would not reconnect after a WiFi outage + +## Changed + +- Use flash system to show system health (1 flash=no ems, 2 flashes=no wifi) [#224](https://github.com/emsesp/EMS-ESP32/issues/224) +- Renamed Dallas Sensor to Temperature Sensor in UI +- Dallas Format removed. Use the name to give each sensor an alias +- No longer MQTT subscribes to topic `/thermostat_hc` as it supports a path similar to the API endpoint construct +- Show Sensors quality in WebUI +- Controller not shown in WebUI dashboard +- renamed "Home Assistant Integration" to "MQTT Discovery" in MQTT Settings [#290](https://github.com/emsesp/EMS-ESP32/issues/290) +- Show ems tx reads and writes separately +- Show ems device handlers separated for received, fetched and pending handlers. +- Wired renamed to Ethernet +- removed system/pin command, new commands in analogsensors +- system/info device-info split to name/version/brand +- exclude list uses short-names, possible flags for web/api/mqtt excludes, readonly and favorite (selection not yet implemented) +- thermostat clock formate date-time: dd.mm.yyyy hh:mm +- RC300 summermode as other thermostats `winter/summer` instead of `off/on` + +## **BREAKING CHANGES:** + +- Settings: + - order of Boolean Format has changed in Application Settings - check your settings + - Dallas Format setting removed. Now customize name of each Dallas sensor via the UI +- MQTT/API + - Boiler `wwheat` renamed to `ww3wayon` [#211](https://github.com/emsesp/EMS-ESP32/issues/211) + - Boiler `ww` tag renamed to `dhw`. Any custom Home Assistant lovelace dashboards will need updating. + - Renamed description of `wwtapactivated` to "turn on/off DHW". Otherwise would have looked like "boiler_dhw_turn_on_off_dhw" in HA. + - `/api/system/info` endpoint has updated keys. Now lowercase, no underscores and not capitalized. Replace "handlers" with "handlers received", "handlers fetched" and "handlers pending". + # [3.3.1] January 20 2022 - lastcode broke MQTT JSON structure [#228](https://github.com/emsesp/EMS-ESP32/issues/228) From c4cfabfbaf510ddf5e3e7aec3f3d7baceef7a53a Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:46:51 +0200 Subject: [PATCH 06/24] update test data for customizations --- mock-api/server.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mock-api/server.js b/mock-api/server.js index d6bc9fefc..5be39abe3 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -473,7 +473,7 @@ const emsesp_devicedata_1 = { const emsesp_devicedata_2 = { label: 'Boiler: Nefit GBx72/Trendline/Cerapur/Greenstar Si/27i', data: [ - { v: 0, u: 0, id: '08reset', c: 'reset', l: ['-', 'maintenance', 'error'] }, + { v: '', u: 0, id: '08reset', c: 'reset', l: ['-', 'maintenance', 'error'] }, { v: 'false', u: 0, id: '08heating active' }, { v: 'false', u: 0, id: '04tapwater active' }, { v: 5, u: 1, id: '04selected flow temperature', c: 'selflowtemp' }, @@ -590,6 +590,13 @@ const emsesp_deviceentities_1 = [ m: 0, w: false, }, + { + v: 'roomTemp', + id: 'hc1/HA climate config creation', + s: 'hc1/HA climate config creation', + m: 0, + w: false, + }, { v: 18.2, id: 'hc1 selected room temperature', @@ -614,10 +621,11 @@ const emsesp_deviceentities_1 = [ ] const emsesp_deviceentities_2 = [ - { v: false, id: 'heating active', s: 'heatingactive', m: 0, w: false }, - { v: false, id: 'tapwater active', s: 'tapwateractive', m: 0, w: false }, - { v: 5, id: 'selected flow temperature', s: 'selflowtemp', m: 0, w: true }, - { v: 0, id: 'burner selected max power', s: 'selburnpow', m: 0, w: true }, + { u: 0, id: 'reset', s: 'reset', m: 8, w: false }, + { v: false, id: 'heating active', s: 'heatingactive', m: 8, w: false }, + { v: false, id: 'tapwater active', s: 'tapwateractive', m: 4, w: false }, + { v: 5, id: 'selected flow temperature', s: 'selflowtemp', m: 4, w: true }, + { v: 0, id: 'burner selected max power', s: 'selburnpow', m: 14, w: true }, { v: 0, id: 'heating pump modulation', s: 'heatingpumpmod', m: 0, w: false }, { id: 'heating pump 2 modulation', s: 'heatingpump2mod', m: 0, w: false }, { id: 'outside temperature', s: 'outdoortemp', m: 0, w: false }, From 31627bb704838e3dc84f76fd635b719fd7e2734e Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:47:04 +0200 Subject: [PATCH 07/24] remove debug_flags --- pio_local.ini_example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pio_local.ini_example b/pio_local.ini_example index 9d7c4cd8d..9c2db40f8 100644 --- a/pio_local.ini_example +++ b/pio_local.ini_example @@ -32,5 +32,5 @@ build_type = debug monitor_filters = esp32_exception_decoder debug_tool = esp-prog debug_init_break = tbreak setup -build_flags = ${factory_settings.build_flags} ${common.debug_flags} -DONEWIRE_CRC16=0 -DNO_GLOBAL_ARDUINOOTA -DARDUINOJSON_ENABLE_STD_STRING=1 -DESP32=1 -DARDUINO_ARCH_ESP32=1 +build_flags = ${factory_settings.build_flags} -DONEWIRE_CRC16=0 -DNO_GLOBAL_ARDUINOOTA -DARDUINOJSON_ENABLE_STD_STRING=1 -DESP32=1 -DARDUINO_ARCH_ESP32=1 extra_scripts = pre:scripts/build_interface.py From a9064baefc14a1ee26c17fd196eb5c534239f2b3 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:47:15 +0200 Subject: [PATCH 08/24] 3.4.1b1 --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 7ab149645..46af4d0ea 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.4.1b0" +#define EMSESP_APP_VERSION "3.4.1b1" From cba081379ef0999ed37fe842b4aba727e33ee37b Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:48:01 +0200 Subject: [PATCH 09/24] rename generate_values_web_customization --- src/emsdevice.h | 2 +- src/test/test.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/emsdevice.h b/src/emsdevice.h index 567cfd8f8..603e353c8 100644 --- a/src/emsdevice.h +++ b/src/emsdevice.h @@ -200,7 +200,7 @@ class EMSdevice { enum OUTPUT_TARGET : uint8_t { API_VERBOSE, API_SHORTNAMES, MQTT, CONSOLE }; bool generate_values(JsonObject & output, const uint8_t tag_filter, const bool nested, const uint8_t output_target); void generate_values_web(JsonObject & output); - void generate_values_web_all(JsonArray & output); + void generate_values_web_customization(JsonArray & output); void register_device_value(uint8_t tag, void * value_p, diff --git a/src/test/test.cpp b/src/test/test.cpp index 3d320bb47..2b77622f1 100644 --- a/src/test/test.cpp +++ b/src/test/test.cpp @@ -418,7 +418,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const // emsdevice->generate_values_web(root); JsonArray output = doc.to(); - emsdevice->generate_values_web_all(output); + emsdevice->generate_values_web_customization(output); Serial.print(COLOR_BRIGHT_MAGENTA); serializeJson(doc, Serial); From af7cd7b009c58c48527440cccfdda6bb6ca850a3 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:48:10 +0200 Subject: [PATCH 10/24] rename generate_values_web_customization --- src/web/WebCustomizationService.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/WebCustomizationService.cpp b/src/web/WebCustomizationService.cpp index 2634030fd..9c9f16f20 100644 --- a/src/web/WebCustomizationService.cpp +++ b/src/web/WebCustomizationService.cpp @@ -196,7 +196,7 @@ void WebCustomizationService::device_entities(AsyncWebServerRequest * request, J if (emsdevice->unique_id() == json["id"]) { #ifndef EMSESP_STANDALONE JsonArray output = response->getRoot(); - emsdevice->generate_values_web_all(output); + emsdevice->generate_values_web_customization(output); #endif response->setLength(); request->send(response); From 2c468c7225a373c848d36bdd6130442b5d751e0a Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:48:18 +0200 Subject: [PATCH 11/24] formatting --- src/devices/controller.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/devices/controller.cpp b/src/devices/controller.cpp index a60912629..e8e7af228 100644 --- a/src/devices/controller.cpp +++ b/src/devices/controller.cpp @@ -37,7 +37,7 @@ void Controller::process_dateTime(std::shared_ptr telegram) { return; } char newdatetime[sizeof(dateTime_)]; - // publich as dd.mm.yyyy hh:mmF + // publish as dd.mm.yyyy hh:mmF snprintf(newdatetime, sizeof(dateTime_), "%02d.%02d.%04d %02d:%02d", @@ -49,5 +49,4 @@ void Controller::process_dateTime(std::shared_ptr telegram) { has_update(dateTime_, newdatetime, sizeof(dateTime_)); } - } // namespace emsesp \ No newline at end of file From 6ec67f741709fd031bfc793c39332ae3a3fadaf4 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:48:34 +0200 Subject: [PATCH 12/24] rename ha_climate_config_creation --- src/locale_EN.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locale_EN.h b/src/locale_EN.h index c6f0eb096..72ea00698 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -616,7 +616,7 @@ MAKE_PSTR_LIST(wwDailyHeating, F("wwdailyheating"), F("daily heating")) MAKE_PSTR_LIST(wwDailyHeatTime, F("wwdailyheattime"), F("daily heating time")) MAKE_PSTR_LIST(wwWhenModeOff, F("wwwhenmodeoff"), F("when thermostat mode off")) // thermostat hc -MAKE_PSTR_LIST(climate, F("ha_climate_config_creation")) // no full-name, hidden, only for creation +MAKE_PSTR_LIST(climate, F("HA climate config creation")) // no full-name, hidden, only for creation MAKE_PSTR_LIST(selRoomTemp, F("seltemp"), F("selected room temperature")) MAKE_PSTR_LIST(roomTemp, F("currtemp"), F("current room temperature")) MAKE_PSTR_LIST(mode, F("mode"), F("mode")) From be844a5184941798268b4e548c293c3db15884d6 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:49:04 +0200 Subject: [PATCH 13/24] if no fullname, use shortname in customizations json --- src/emsdevice.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index 29d2759a2..429190e0e 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -775,7 +775,7 @@ void EMSdevice::generate_values_web(JsonObject & output) { // as generate_values_web() but stripped down to only show all entities and their state // this is used only for WebCustomizationService::device_entities() -void EMSdevice::generate_values_web_all(JsonArray & output) { +void EMSdevice::generate_values_web_customization(JsonArray & output) { for (const auto & dv : devicevalues_) { // also show commands and entities that have an empty full name JsonObject obj = output.createNestedObject(); @@ -832,11 +832,19 @@ void EMSdevice::generate_values_web_all(JsonArray & output) { } } } else { - // must always have v for sorting to work in web - obj["v"] = ""; + obj["v"] = ""; // must always have v for sorting to work in web } - // add name, prefixing the tag if it exists as the id (key for table sorting) + // shortname + std::string shortname; + if (dv.tag >= DeviceValueTAG::TAG_HC1) { + shortname = tag_to_string(dv.tag) + "/" + read_flash_string(dv.short_name); + } else { + shortname = read_flash_string(dv.short_name); + } + obj["s"] = shortname; + + // id is the fullname, or the shortname (it must exist for the web table to work) if (dv.full_name) { if ((dv.tag == DeviceValueTAG::TAG_NONE) || tag_to_string(dv.tag).empty()) { obj["id"] = dv.full_name; @@ -846,14 +854,7 @@ void EMSdevice::generate_values_web_all(JsonArray & output) { obj["id"] = name; } } else { - obj["id"] = ""; - } - - // shortname - if (dv.tag >= DeviceValueTAG::TAG_HC1) { - obj["s"] = tag_to_string(dv.tag) + "/" + read_flash_string(dv.short_name); - } else { - obj["s"] = dv.short_name; + obj["id"] = shortname; // fullname/id is same as shortname } obj["m"] = dv.state >> 4; // send back the mask state. We're only interested in the high nibble From f8bf6b5cc8bda6c89a387073e6af9f530ed44737 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:49:25 +0200 Subject: [PATCH 14/24] fix isCmdOnly() function for commands like reset --- interface/src/project/DashboardData.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/interface/src/project/DashboardData.tsx b/interface/src/project/DashboardData.tsx index 5b4bd827d..5d8ae278c 100644 --- a/interface/src/project/DashboardData.tsx +++ b/interface/src/project/DashboardData.tsx @@ -384,7 +384,10 @@ const DashboardData: FC = () => { const handleDownloadCsv = () => { const columns = [ { accessor: (dv: any) => dv.id.slice(2), name: 'Entity' }, - { accessor: (dv: any) => (typeof dv.v === 'number') ? new Intl.NumberFormat().format(dv.v) : dv.v, name: 'Value' }, + { + accessor: (dv: any) => (typeof dv.v === 'number' ? new Intl.NumberFormat().format(dv.v) : dv.v), + name: 'Value' + }, { accessor: (dv: any) => DeviceValueUOM_s[dv.u], name: 'UoM' } ]; downloadAsCsv( @@ -449,7 +452,7 @@ const DashboardData: FC = () => { } }; - const isCmdOnly = (dv: DeviceValue) => dv.v === undefined && dv.c; + const isCmdOnly = (dv: DeviceValue) => dv.v === '' && dv.c; function formatValue(value: any, uom: number) { if (value === undefined) { From 8824f4f3da0f04066ab57373360d8a08041f6442 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 26 May 2022 17:49:43 +0200 Subject: [PATCH 15/24] added formatName so hidden entities render nicely --- .../src/project/SettingsCustomization.tsx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/interface/src/project/SettingsCustomization.tsx b/interface/src/project/SettingsCustomization.tsx index a5cac3aae..3a06e5f0d 100644 --- a/interface/src/project/SettingsCustomization.tsx +++ b/interface/src/project/SettingsCustomization.tsx @@ -199,6 +199,13 @@ const SettingsCustomization: FC = () => { return value; } + function formatName(de: DeviceEntity) { + if (de.id == de.s) { + return de.s; + } + return de.id + ' (' + de.s + ')'; + } + const getMaskNumber = (newMask: string[]) => { var new_mask = 0; for (let entry of newMask) { @@ -403,7 +410,7 @@ const SettingsCustomization: FC = () => { : - + - + @@ -471,16 +485,16 @@ const SettingsCustomization: FC = () => { setMasks(['']); }} > - + - + - + - + diff --git a/mock-api/server.js b/mock-api/server.js index bcecc0df7..b6e57ff3f 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -593,6 +593,13 @@ const emsesp_deviceentities_1 = [ m: 0, w: false, }, + { + v: 'test data', + n: 'test', + id: 'test', + m: 0, + w: false, + }, { v: 'roomTemp', id: 'hc1/HA climate config creation', From 55133b028a54e0d2a18df153945187d0d39faf30 Mon Sep 17 00:00:00 2001 From: Proddy Date: Fri, 27 May 2022 17:18:50 +0200 Subject: [PATCH 18/24] typo --- interface/src/project/SettingsCustomization.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/project/SettingsCustomization.tsx b/interface/src/project/SettingsCustomization.tsx index 2bcac3fa2..d7b2d2f23 100644 --- a/interface/src/project/SettingsCustomization.tsx +++ b/interface/src/project/SettingsCustomization.tsx @@ -322,7 +322,7 @@ const SettingsCustomization: FC = () => { =enable/disable write action   - =include/excluded from MQTT and API outputs   + =include/exclude from MQTT and API outputs   =show/hide from Web Dashboard From 356390c92baead4f080a306594fb54bf549d7ac9 Mon Sep 17 00:00:00 2001 From: Proddy Date: Sat, 28 May 2022 15:27:08 +0200 Subject: [PATCH 19/24] fix standalone server for handling customizations --- mock-api/server.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mock-api/server.js b/mock-api/server.js index b6e57ff3f..3acbe9f8f 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -929,13 +929,13 @@ rest_server.post(EMSESP_DEVICEENTITIES_ENDPOINT, (req, res) => { }) function updateMask(entity, de, dd) { - const name = entity.slice(2) + const shortname = entity.slice(2) const new_mask = parseInt(entity.slice(0, 2), 16) - objIndex = de.findIndex((obj) => obj.s == name) + objIndex = de.findIndex((obj) => obj.id == shortname) if (objIndex !== -1) { de[objIndex].m = new_mask - const fullname = de[objIndex].id + const fullname = de[objIndex].n objIndex = dd.data.findIndex((obj) => obj.id.slice(2) == fullname) if (objIndex !== -1) { // see if the mask has changed @@ -947,7 +947,7 @@ function updateMask(entity, de, dd) { } } } else { - console.log("can't locate record for id " + id) + console.log("can't locate record for name " + shortname) } } From e4447ee1b9e19a4f77eb3a642936b3e6d89ae990 Mon Sep 17 00:00:00 2001 From: Proddy Date: Sat, 28 May 2022 20:23:16 +0200 Subject: [PATCH 20/24] improved icon toggling --- interface/src/project/OptionIcon.tsx | 39 +++++++ .../src/project/SettingsCustomization.tsx | 103 ++++++++++-------- mock-api/server.js | 2 +- src/emsdevice.cpp | 2 + 4 files changed, 100 insertions(+), 46 deletions(-) create mode 100644 interface/src/project/OptionIcon.tsx diff --git a/interface/src/project/OptionIcon.tsx b/interface/src/project/OptionIcon.tsx new file mode 100644 index 000000000..71be44969 --- /dev/null +++ b/interface/src/project/OptionIcon.tsx @@ -0,0 +1,39 @@ +import { FC } from 'react'; +import { SvgIconProps } from '@mui/material'; + +import EditOutlinedIcon from '@mui/icons-material/EditOutlined'; +import EditOffOutlinedIcon from '@mui/icons-material/EditOffOutlined'; + +import StarIcon from '@mui/icons-material/Star'; +import StarOutlineIcon from '@mui/icons-material/StarOutline'; + +import VisibilityOffOutlinedIcon from '@mui/icons-material/VisibilityOffOutlined'; +import VisibilityOutlinedIcon from '@mui/icons-material/VisibilityOutlined'; + +import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined'; +import InsertCommentOutlinedIcon from '@mui/icons-material/InsertCommentOutlined'; + +type OptionType = 'readonly' | 'web_exclude' | 'api_mqtt_exclude' | 'favorite'; + +const OPTION_ICONS: { [type in OptionType]: [React.ComponentType, React.ComponentType] } = { + readonly: [EditOffOutlinedIcon, EditOutlinedIcon], + web_exclude: [VisibilityOffOutlinedIcon, VisibilityOutlinedIcon], + api_mqtt_exclude: [CommentsDisabledOutlinedIcon, InsertCommentOutlinedIcon], + favorite: [StarIcon, StarOutlineIcon] +}; + +interface OptionIconProps { + type: OptionType; + isSet: boolean; +} + +const OptionIcon: FC = ({ type, isSet }) => { + const Icon = OPTION_ICONS[type][isSet ? 0 : 1]; + return isSet ? ( + + ) : ( + + ); +}; + +export default OptionIcon; diff --git a/interface/src/project/SettingsCustomization.tsx b/interface/src/project/SettingsCustomization.tsx index d7b2d2f23..f1527a6dc 100644 --- a/interface/src/project/SettingsCustomization.tsx +++ b/interface/src/project/SettingsCustomization.tsx @@ -25,10 +25,12 @@ import { useSnackbar } from 'notistack'; import SaveIcon from '@mui/icons-material/Save'; import CancelIcon from '@mui/icons-material/Cancel'; -import EditOffOutlinedIcon from '@mui/icons-material/EditOffOutlined'; -import StarIcon from '@mui/icons-material/Star'; -import VisibilityOffOutlinedIcon from '@mui/icons-material/VisibilityOffOutlined'; -import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined'; + +// import EditOffOutlinedIcon from '@mui/icons-material/EditOffOutlined'; +// import StarIcon from '@mui/icons-material/Star'; +// import VisibilityOffOutlinedIcon from '@mui/icons-material/VisibilityOffOutlined'; +// import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined'; + import SettingsBackupRestoreIcon from '@mui/icons-material/SettingsBackupRestore'; import KeyboardArrowUpOutlinedIcon from '@mui/icons-material/KeyboardArrowUpOutlined'; import KeyboardArrowDownOutlinedIcon from '@mui/icons-material/KeyboardArrowDownOutlined'; @@ -36,6 +38,8 @@ import UnfoldMoreOutlinedIcon from '@mui/icons-material/UnfoldMoreOutlined'; import SearchIcon from '@mui/icons-material/Search'; import FilterListIcon from '@mui/icons-material/FilterList'; +import OptionIcon from './OptionIcon'; + import { ButtonRow, FormLoader, ValidatedTextField, SectionContent } from '../components'; import * as EMSESP from './api'; @@ -202,14 +206,12 @@ const SettingsCustomization: FC = () => { function formatName(de: DeviceEntity) { if (de.n === undefined || de.n === de.id) { return de.id; + } else if (de.n === '') { + return 'Command: ' + de.id; } return de.n + ' (' + de.id + ')'; } - function isCmd(de: DeviceEntity) { - return de.n === undefined; - } - const getMaskNumber = (newMask: string[]) => { var new_mask = 0; for (let entry of newMask) { @@ -317,14 +319,14 @@ const SettingsCustomization: FC = () => { Select a device and customize each of its entities using the options: - - =mark/unmark as a favorite   - - =enable/disable write action   - - =include/exclude from MQTT and API outputs   - - =show/hide from Web Dashboard + + =mark as a favorite   + + =disable write action   + + =exclude from MQTT and API outputs   + + =hide from Web Dashboard { }} /> - - : - + + + : + + { }} > - - - + - - - + - - - + - - - + @@ -428,9 +424,9 @@ const SettingsCustomization: FC = () => { color="inherit" onClick={() => maskDisabled(false)} > - set  - - + set all  + + @@ -443,9 +439,9 @@ const SettingsCustomization: FC = () => { color="inherit" onClick={() => maskDisabled(true)} > - unset  - - + set all  + + @@ -479,23 +475,40 @@ const SettingsCustomization: FC = () => { value={getMaskString(de.m)} onChange={(event, mask) => { de.m = getMaskNumber(mask); + if (de.n === '' && de.m & DeviceEntityMask.DV_READONLY) { + de.m = de.m | DeviceEntityMask.DV_WEB_EXCLUDE; + } if (de.m & DeviceEntityMask.DV_WEB_EXCLUDE) { de.m = de.m & ~DeviceEntityMask.DV_FAVORITE; } setMasks(['']); }} > - - + + - - + + - - + + - - + + diff --git a/mock-api/server.js b/mock-api/server.js index 3acbe9f8f..0802ddcce 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -630,7 +630,7 @@ const emsesp_deviceentities_1 = [ ] const emsesp_deviceentities_2 = [ - { u: 0, id: 'reset', m: 8, w: false }, + { u: 0, n: '', id: 'reset', m: 8, w: false }, { v: false, n: 'heating active', id: 'heatingactive', m: 8, w: false }, { v: false, n: 'tapwater active', id: 'tapwateractive', m: 4, w: false }, { v: 5, n: 'selected flow temperature', id: 'selflowtemp', m: 4, w: true }, diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index a46ffe89f..92561391a 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -850,6 +850,8 @@ void EMSdevice::generate_values_web_customization(JsonArray & output) { obj["n"] = name; } } + } else { + obj["n"] = ""; } obj["m"] = dv.state >> 4; // send back the mask state. We're only interested in the high nibble From c693ef63079b4016ea2f3ca1105d648774272a0d Mon Sep 17 00:00:00 2001 From: Proddy Date: Sun, 29 May 2022 13:57:54 +0200 Subject: [PATCH 21/24] update packages --- interface/package-lock.json | 83 ++++++++++++++++++------------------- interface/package.json | 4 +- mock-api/package-lock.json | 14 +++---- mock-api/package.json | 2 +- 4 files changed, 51 insertions(+), 52 deletions(-) diff --git a/interface/package-lock.json b/interface/package-lock.json index 1f1e0d019..ec5446a98 100644 --- a/interface/package-lock.json +++ b/interface/package-lock.json @@ -13,9 +13,9 @@ "@msgpack/msgpack": "^2.7.2", "@mui/icons-material": "^5.8.0", "@mui/material": "^5.8.1", - "@table-library/react-table-library": "^3.1.2", + "@table-library/react-table-library": "^3.1.4", "@types/lodash": "^4.14.182", - "@types/node": "^17.0.35", + "@types/node": "^17.0.36", "@types/react": "^18.0.9", "@types/react-dom": "^18.0.5", "@types/react-router-dom": "^5.3.3", @@ -3689,16 +3689,15 @@ } }, "node_modules/@table-library/react-table-library": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.2.tgz", - "integrity": "sha512-zfjIvcEP114KFh5WyZzbPQHtaxiSr0LHHgm+A8El6YG/SQ7D+i88RUdwiBu3uuKXTY7OV+5v/GESEiioZo150w==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.4.tgz", + "integrity": "sha512-6JgQJLWgkMkdVzB/gGU/7BuMRGhQkkbg150YXiq+2U2ICyV773JPW5oxE5QaQJZUsDGlcS1FuaK/UFJVLZWs4A==", "dependencies": { "clsx": "1.1.1", "react-virtualized-auto-sizer": "1.0.6", - "react-window": "1.8.6" + "react-window": "1.8.7" }, "peerDependencies": { - "@emotion/react": ">= 11", "react": ">=16.8.0", "react-dom": ">=16.8.0" } @@ -3715,22 +3714,6 @@ "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0" } }, - "node_modules/@table-library/react-table-library/node_modules/react-window": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.6.tgz", - "integrity": "sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "memoize-one": ">=3.1.1 <6" - }, - "engines": { - "node": ">8.0.0" - }, - "peerDependencies": { - "react": "^15.0.0 || ^16.0.0 || ^17.0.0", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -3930,9 +3913,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "node_modules/@types/node": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", - "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==" + "version": "17.0.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.36.tgz", + "integrity": "sha512-V3orv+ggDsWVHP99K3JlwtH20R7J4IhI1Kksgc+64q5VxgfRkQG8Ws3MFm/FZOKDYGy9feGFlZ70/HpCNe9QaA==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -15026,6 +15009,22 @@ "react-dom": ">=16.6.0" } }, + "node_modules/react-window": { + "version": "1.8.7", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.7.tgz", + "integrity": "sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "memoize-one": ">=3.1.1 <6" + }, + "engines": { + "node": ">8.0.0" + }, + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -20452,13 +20451,13 @@ } }, "@table-library/react-table-library": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.2.tgz", - "integrity": "sha512-zfjIvcEP114KFh5WyZzbPQHtaxiSr0LHHgm+A8El6YG/SQ7D+i88RUdwiBu3uuKXTY7OV+5v/GESEiioZo150w==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@table-library/react-table-library/-/react-table-library-3.1.4.tgz", + "integrity": "sha512-6JgQJLWgkMkdVzB/gGU/7BuMRGhQkkbg150YXiq+2U2ICyV773JPW5oxE5QaQJZUsDGlcS1FuaK/UFJVLZWs4A==", "requires": { "clsx": "1.1.1", "react-virtualized-auto-sizer": "1.0.6", - "react-window": "1.8.6" + "react-window": "1.8.7" }, "dependencies": { "react-virtualized-auto-sizer": { @@ -20466,15 +20465,6 @@ "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.6.tgz", "integrity": "sha512-7tQ0BmZqfVF6YYEWcIGuoR3OdYe8I/ZFbNclFlGOC3pMqunkYF/oL30NCjSGl9sMEb17AnzixDz98Kqc3N76HQ==", "requires": {} - }, - "react-window": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.6.tgz", - "integrity": "sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg==", - "requires": { - "@babel/runtime": "^7.0.0", - "memoize-one": ">=3.1.1 <6" - } } } }, @@ -20671,9 +20661,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "@types/node": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", - "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==" + "version": "17.0.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.36.tgz", + "integrity": "sha512-V3orv+ggDsWVHP99K3JlwtH20R7J4IhI1Kksgc+64q5VxgfRkQG8Ws3MFm/FZOKDYGy9feGFlZ70/HpCNe9QaA==" }, "@types/parse-json": { "version": "4.0.0", @@ -28628,6 +28618,15 @@ "prop-types": "^15.6.2" } }, + "react-window": { + "version": "1.8.7", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.7.tgz", + "integrity": "sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA==", + "requires": { + "@babel/runtime": "^7.0.0", + "memoize-one": ">=3.1.1 <6" + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", diff --git a/interface/package.json b/interface/package.json index b4bf9d9c3..bfee5c32d 100644 --- a/interface/package.json +++ b/interface/package.json @@ -9,9 +9,9 @@ "@msgpack/msgpack": "^2.7.2", "@mui/icons-material": "^5.8.0", "@mui/material": "^5.8.1", - "@table-library/react-table-library": "^3.1.2", + "@table-library/react-table-library": "^3.1.4", "@types/lodash": "^4.14.182", - "@types/node": "^17.0.35", + "@types/node": "^17.0.36", "@types/react": "^18.0.9", "@types/react-dom": "^18.0.5", "@types/react-router-dom": "^5.3.3", diff --git a/mock-api/package-lock.json b/mock-api/package-lock.json index e7dd05f0a..5620b6cf0 100644 --- a/mock-api/package-lock.json +++ b/mock-api/package-lock.json @@ -14,7 +14,7 @@ "express": "^4.18.1", "express-sse": "^0.5.3", "nodemon": "^2.0.16", - "ws": "^8.6.0" + "ws": "^8.7.0" } }, "node_modules/@msgpack/msgpack": { @@ -1811,9 +1811,9 @@ } }, "node_modules/ws": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", - "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "engines": { "node": ">=10.0.0" }, @@ -3169,9 +3169,9 @@ } }, "ws": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", - "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "requires": {} }, "xdg-basedir": { diff --git a/mock-api/package.json b/mock-api/package.json index bdc44b1c3..b41cb5039 100644 --- a/mock-api/package.json +++ b/mock-api/package.json @@ -16,6 +16,6 @@ "express": "^4.18.1", "express-sse": "^0.5.3", "nodemon": "^2.0.16", - "ws": "^8.6.0" + "ws": "^8.7.0" } } From 3e7b743dfaa76b6dcf9842b516650dab93ddd511 Mon Sep 17 00:00:00 2001 From: Proddy Date: Sun, 29 May 2022 13:58:01 +0200 Subject: [PATCH 22/24] updated changelog for 3.4.1 --- CHANGELOG_LATEST.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index cae9e2969..8be0d7d92 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -12,5 +12,6 @@ - controller data in web-ui only for IVT [#522](https://github.com/emsesp/EMS-ESP32/issues/522) - rename hidden `climate` to a more explaining name [#523](https://github.com/emsesp/EMS-ESP32/issues/523) +- Minor changes to the Customizations web page [#527](https://github.com/emsesp/EMS-ESP32/pull/527) ## **BREAKING CHANGES:** From 435218888a698e38057dba4579fcff51141eb875 Mon Sep 17 00:00:00 2001 From: Proddy Date: Sun, 29 May 2022 14:36:13 +0200 Subject: [PATCH 23/24] #513 --- .github/workflows/sonar_check.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/sonar_check.yml b/.github/workflows/sonar_check.yml index c0ea0e1bb..b638df864 100644 --- a/.github/workflows/sonar_check.yml +++ b/.github/workflows/sonar_check.yml @@ -9,9 +9,10 @@ jobs: build: name: Build runs-on: ubuntu-latest + if: github.repository_owner == 'emsesp' + # if: github.repository == 'emsesp/EMS-ESP32' env: # https://binaries.sonarsource.com/?prefix=Distribution/sonar-scanner-cli/ - # SONAR_SCANNER_VERSION: 4.6.1.2450 SONAR_SCANNER_VERSION: 4.7.0.2747 SONAR_SERVER_URL: "https://sonarcloud.io" BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory From 072fe526ea153e159cefab3bc4c8c2e1b28b27e9 Mon Sep 17 00:00:00 2001 From: Proddy Date: Sun, 29 May 2022 16:19:55 +0200 Subject: [PATCH 24/24] 3.4.2b2 --- CHANGELOG.md | 12 ++++++++++++ CHANGELOG_LATEST.md | 14 ++++---------- src/version.h | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 080b6687e..e2c8260d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +# [3.4.1] May 29 2022 + +## Fixed + +- Fix memory leak in api [#524](https://github.com/emsesp/EMS-ESP32/issues/524) + +## Changed + +- Controller data in web-ui only for IVT [#522](https://github.com/emsesp/EMS-ESP32/issues/522) +- Rename hidden `climate` to a more explaining name [#523](https://github.com/emsesp/EMS-ESP32/issues/523) +- Minor changes to the Customizations web page [#527](https://github.com/emsesp/EMS-ESP32/pull/527) + # [3.4.0] May 23 2022 ## Added diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 8be0d7d92..3ae33a8ad 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -1,17 +1,11 @@ # Changelog -## [3.4.1] +# [3.4.2] -### Added +## Added -### Fixed +## Fixed -- fix memory leak in api [#524](https://github.com/emsesp/EMS-ESP32/issues/524) - -### Changed - -- controller data in web-ui only for IVT [#522](https://github.com/emsesp/EMS-ESP32/issues/522) -- rename hidden `climate` to a more explaining name [#523](https://github.com/emsesp/EMS-ESP32/issues/523) -- Minor changes to the Customizations web page [#527](https://github.com/emsesp/EMS-ESP32/pull/527) +## Changed ## **BREAKING CHANGES:** diff --git a/src/version.h b/src/version.h index 46af4d0ea..e56f315d3 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.4.1b1" +#define EMSESP_APP_VERSION "3.4.2b1"