From f3696f60cd19752c9bd1f409521df88964d55405 Mon Sep 17 00:00:00 2001 From: misa1515 <61636045+misa1515@users.noreply.github.com> Date: Wed, 22 Jan 2025 23:32:31 +0100 Subject: [PATCH 1/5] Update locale_translations.h --- src/core/locale_translations.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/locale_translations.h b/src/core/locale_translations.h index bb6fcaa9c..9b17016d9 100644 --- a/src/core/locale_translations.h +++ b/src/core/locale_translations.h @@ -762,10 +762,10 @@ MAKE_TRANSLATION(vacations5, "vacations5", "vacation dates 5", "Urlaubstage 5", MAKE_TRANSLATION(vacations6, "vacations6", "vacation dates 6", "Urlaubstage 6", "Vakantiedagen 6", "Semesterdatum 6", "urlop 6", "feriedager 6", "dates vacances 6", "izin günleri 6", "date vacanze 6", "termíny dovolenky 6", "data prázdnin 6") MAKE_TRANSLATION(vacations7, "vacations7", "vacation dates 7", "Urlaubstage 7", "Vakantiedagen 7", "Semesterdatum 7", "urlop 7", "feriedager 7", "dates vacances 7", "izin günleri 7", "date vacanze 7", "termíny dovolenky 7", "data prázdnin 7") MAKE_TRANSLATION(vacations8, "vacations8", "vacation dates 8", "Urlaubstage 8", "Vakantiedagen 8", "Semesterdatum 8", "urlop 8", "feriedager 8", "dates vacances 8", "izin günleri 8", "date vacanze 8", "termíny dovolenky 8", "data prázdnin 8") -MAKE_TRANSLATION(absent, "absent", "absent", "Abwesend", "", "Frånvarande", "", "", "", "", "", "chýnajúci", "") // TODO translate +MAKE_TRANSLATION(absent, "absent", "absent", "Abwesend", "", "Frånvarande", "", "", "", "", "", "chýbajúci", "") // TODO translate MAKE_TRANSLATION(redthreshold, "redthreshold", "reduction threshold", "Absenkschwelle", "", "Tröskel för sänkning", "", "", "", "", "", "zníženie tresholdu", "") // TODO translate -MAKE_TRANSLATION(solarinfl, "solarinfl", "solar influence", "Solareinfluß", "", "", "", "", "", "", "", "", "") // TODO translate -MAKE_TRANSLATION(currsolarinfl, "currsolarinfl", "curent solar influence", "akt. Solareinfluß", "", "", "", "", "", "", "", "", "") // TODO translate +MAKE_TRANSLATION(solarinfl, "solarinfl", "solar influence", "Solareinfluß", "", "", "", "", "", "", "", "slnečný vplyv", "") // TODO translate +MAKE_TRANSLATION(currsolarinfl, "currsolarinfl", "curent solar influence", "akt. Solareinfluß", "", "", "", "", "", "", "", "aktuálny slnečný vplyv", "") // TODO translate MAKE_TRANSLATION(hpmode, "hpmode", "HP Mode", "WP-Modus", "Modus warmtepomp", "Värmepumpsläge", "tryb pracy pompy ciepła", "", "", "yüksek güç modu", "Modalità Termopompa", "Režim TČ", "režim tepelného čerpadla") // TODO translate MAKE_TRANSLATION(dewoffset, "dewoffset", "dew point offset", "Taupunktdifferenz", "Offset dauwpunt", "Daggpunktsförskjutning", "przesunięcie punktu rosy", "", "", "çiğ noktası göreli", "differenza del punto di rugiada", "posun rosného bodu", "offset rosného bodu") // TODO translate @@ -940,4 +940,4 @@ MAKE_TRANSLATION(setting3, "setting3", "unknown setting 3", "", "", "okänd inst MAKE_TRANSLATION(setting4, "setting4", "unknown setting 4", "", "", "okänd inställning 4", "nieznane ustawienie 4", "", "", "", "", "neznáme dátové pole 4", "") // TODO translate */ -// clang-format on \ No newline at end of file +// clang-format on From eb59b37251985e6e884f37784eba646fca327612 Mon Sep 17 00:00:00 2001 From: misa1515 <61636045+misa1515@users.noreply.github.com> Date: Wed, 22 Jan 2025 23:36:48 +0100 Subject: [PATCH 2/5] Update index.ts --- interface/src/i18n/sk/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/interface/src/i18n/sk/index.ts b/interface/src/i18n/sk/index.ts index da2af27d6..234d1c3ee 100644 --- a/interface/src/i18n/sk/index.ts +++ b/interface/src/i18n/sk/index.ts @@ -343,10 +343,10 @@ const sk: Translation = { DEVELOPER_MODE: 'Režim vývojára', DUPLICATE: 'Duplicitné', UPGRADE: 'Inovovať', - DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate - NO_DATA_1: 'No favourite EMS entities found. Use the', // TODO translate - NO_DATA_2: 'module to mark them.', // TODO translate - NO_DATA_3: 'To see all available entities go to' // TODO translate + DASHBOARD_1: 'Všetky entity EMS, ktoré sú aktívne a označené ako obľúbené, plus všetky vlastné entity, plány a údaje externých senzorov sú zobrazené nižšie.', + NO_DATA_1: 'Nenašli sa žiadne obľúbené entity EMS. Použite', + NO_DATA_2: 'modul na ich označenie.', + NO_DATA_3: 'Ak chcete zobraziť všetky dostupné entity, prejdite na' }; export default sk; From 581f19462db4b1db42621dfb4ab000bf385501b0 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Fri, 24 Jan 2025 19:22:20 +0100 Subject: [PATCH 3/5] don't show double log entries after startup --- interface/src/app/status/SystemLog.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/interface/src/app/status/SystemLog.tsx b/interface/src/app/status/SystemLog.tsx index 3c5a0bb58..f8178532e 100644 --- a/interface/src/app/status/SystemLog.tsx +++ b/interface/src/app/status/SystemLog.tsx @@ -101,6 +101,7 @@ const SystemLog = () => { const [readOpen, setReadOpen] = useState(false); const [logEntries, setLogEntries] = useState([]); const [autoscroll, setAutoscroll] = useState(true); + const [lastId, setLastId] = useState(-1); const ALPHA_NUMERIC_DASH_REGEX = /^[a-fA-F0-9 ]+$/; @@ -118,7 +119,10 @@ const SystemLog = () => { .onMessage((message: { data: string }) => { const rawData = message.data; const logentry = JSON.parse(rawData) as LogEntry; - setLogEntries((log) => [...log, logentry]); + if (lastId < logentry.i) { + setLogEntries((log) => [...log, logentry]); + setLastId(logentry.i); + } }) .onError(() => { toast.error('No connection to Log service'); From e5f852a7edb2775e9de6508cb9712ab95e335209 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Fri, 24 Jan 2025 19:22:49 +0100 Subject: [PATCH 4/5] fix C3 board settings --- boards/c3_mini_4M.json | 1 + platformio.ini | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/boards/c3_mini_4M.json b/boards/c3_mini_4M.json index 7f19d1662..a9533e498 100644 --- a/boards/c3_mini_4M.json +++ b/boards/c3_mini_4M.json @@ -5,6 +5,7 @@ }, "core": "esp32", "extra_flags": [ + "-DTASMOTA_SDK", "-DARDUINO_LOLIN_C3_MINI", "-DARDUINO_USB_MODE=1", "-DARDUINO_USB_CDC_ON_BOOT=1" diff --git a/platformio.ini b/platformio.ini index e75b3b384..e02248eb9 100644 --- a/platformio.ini +++ b/platformio.ini @@ -176,10 +176,7 @@ extends = espressif32_base_T_4M board = c3_mini_4M build_flags = ${common.build_flags} - -DTASMOTA_SDK -DBOARD_C3_MINI_V1 - -DARDUINO_USB_MODE=1 - -DARDUINO_USB_CDC_ON_BOOT=1 ; ; Building and testing natively, standalone without an ESP32. From 73ccff341257b9f34fea815c4f65196f348e0fc1 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Fri, 24 Jan 2025 19:23:19 +0100 Subject: [PATCH 5/5] add RGB Led to board profile --- interface/src/app/main/types.ts | 2 + .../src/app/settings/ApplicationSettings.tsx | 17 +++ src/core/system.cpp | 132 ++++++++---------- src/core/system.h | 1 + src/web/WebSettingsService.cpp | 25 +++- src/web/WebSettingsService.h | 1 + 6 files changed, 100 insertions(+), 78 deletions(-) diff --git a/interface/src/app/main/types.ts b/interface/src/app/main/types.ts index 3b31b8b0b..b2fc93525 100644 --- a/interface/src/app/main/types.ts +++ b/interface/src/app/main/types.ts @@ -21,6 +21,7 @@ export interface Settings { dallas_gpio: number; dallas_parasite: boolean; led_gpio: number; + led_type: number; hide_led: boolean; low_clock: boolean; notoken_api: boolean; @@ -262,6 +263,7 @@ export const BOARD_PROFILES: BoardProfiles = { export interface BoardProfile { board_profile: string; led_gpio: number; + led_type: number; dallas_gpio: number; rx_gpio: number; tx_gpio: number; diff --git a/interface/src/app/settings/ApplicationSettings.tsx b/interface/src/app/settings/ApplicationSettings.tsx index ae2e369ba..7ff37415c 100644 --- a/interface/src/app/settings/ApplicationSettings.tsx +++ b/interface/src/app/settings/ApplicationSettings.tsx @@ -550,6 +550,23 @@ const ApplicationSettings = () => { margin="normal" /> + {data.led_gpio !== 0 && ( + + + LED + RGB-LED + + + )} & data, const std::string & board_profile) { if (board_profile == "S32") { - data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // BBQKees Gateway S32 + data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0, 0}; // BBQKees Gateway S32 } else if (board_profile == "E32") { - data = {2, 4, 5, 17, 33, PHY_type::PHY_TYPE_LAN8720, 16, 1, 0}; // BBQKees Gateway E32 + data = {2, 4, 5, 17, 33, PHY_type::PHY_TYPE_LAN8720, 16, 1, 0, 0}; // BBQKees Gateway E32 } else if (board_profile == "E32V2") { - data = {2, 14, 4, 5, 34, PHY_type::PHY_TYPE_LAN8720, 15, 0, 1}; // BBQKees Gateway E32 V2 + data = {2, 14, 4, 5, 34, PHY_type::PHY_TYPE_LAN8720, 15, 0, 1, 0}; // BBQKees Gateway E32 V2 } else if (board_profile == "MH-ET") { - data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // MH-ET Live D1 Mini + data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0, 0}; // MH-ET Live D1 Mini } else if (board_profile == "NODEMCU") { - data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // NodeMCU 32S + data = {2, 18, 23, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0, 0}; // NodeMCU 32S } else if (board_profile == "LOLIN") { - data = {2, 18, 17, 16, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // Lolin D32 + data = {2, 18, 17, 16, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0, 0}; // Lolin D32 } else if (board_profile == "OLIMEX") { - data = {0, 0, 36, 4, 34, PHY_type::PHY_TYPE_LAN8720, -1, 0, 0}; // Olimex ESP32-EVB (uses U1TXD/U1RXD/BUTTON, no LED or Temperature sensor) + data = {0, 0, 36, 4, 34, PHY_type::PHY_TYPE_LAN8720, -1, 0, 0, 0}; // Olimex ESP32-EVB (uses U1TXD/U1RXD/BUTTON, no LED or Temperature sensor) } else if (board_profile == "OLIMEXPOE") { - data = {0, 0, 36, 4, 34, PHY_type::PHY_TYPE_LAN8720, 12, 0, 3}; // Olimex ESP32-POE + data = {0, 0, 36, 4, 34, PHY_type::PHY_TYPE_LAN8720, 12, 0, 3, 0}; // Olimex ESP32-POE } else if (board_profile == "C3MINI") { - data = {7, 1, 4, 5, 9, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // Lolin C3 Mini +#if defined(BOARD_C3_MINI_V1) + data = {7, 1, 4, 5, 9, PHY_type::PHY_TYPE_NONE, 0, 0, 0, 0}; // Lolin C3 Mini V1 +#else + data = {7, 1, 4, 5, 9, PHY_type::PHY_TYPE_NONE, 0, 0, 0, 1}; // Lolin C3 Mini with RGB Led +#endif } else if (board_profile == "S2MINI") { - data = {15, 7, 11, 12, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // Lolin S2 Mini + data = {15, 7, 11, 12, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0, 0}; // Lolin S2 Mini } else if (board_profile == "S3MINI") { - data = {17, 18, 8, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // Liligo S3 + data = {17, 18, 8, 5, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0, 0}; // Liligo S3 } else if (board_profile == "S32S3") { - data = {2, 18, 5, 17, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0}; // BBQKees Gateway S3 + data = {2, 18, 5, 17, 0, PHY_type::PHY_TYPE_NONE, 0, 0, 0, 0}; // BBQKees Gateway S3 } else if (board_profile == "CUSTOM") { // send back current values data = {(int8_t)EMSESP::system_.led_gpio_, @@ -1870,7 +1859,8 @@ bool System::load_board_profile(std::vector & data, const std::string & (int8_t)EMSESP::system_.phy_type_, EMSESP::system_.eth_power_, (int8_t)EMSESP::system_.eth_phy_addr_, - (int8_t)EMSESP::system_.eth_clock_mode_}; + (int8_t)EMSESP::system_.eth_clock_mode_, + (int8_t)EMSESP::system_.led_type_}; } else { LOG_DEBUG("Couldn't identify board profile %s", board_profile.c_str()); return false; // unknown, return false @@ -2064,9 +2054,7 @@ bool System::uploadFirmwareURL(const char * url) { // TODO do we need to stop the UART first with EMSuart::stop() ? // set a callback so we can monitor progress in the WebUI - Update.onProgress([](size_t progress, size_t total) { - EMSESP::system_.systemStatus(SYSTEM_STATUS::SYSTEM_STATUS_UPLOADING+(progress * 100 / total)); - }); + Update.onProgress([](size_t progress, size_t total) { EMSESP::system_.systemStatus(SYSTEM_STATUS::SYSTEM_STATUS_UPLOADING + (progress * 100 / total)); }); // get tcp stream and send it to Updater WiFiClient * stream = http.getStreamPtr(); diff --git a/src/core/system.h b/src/core/system.h index 8573bee20..96daa20eb 100644 --- a/src/core/system.h +++ b/src/core/system.h @@ -394,6 +394,7 @@ class System { std::string hostname_; String locale_; bool hide_led_; + uint8_t led_type_; uint8_t led_gpio_; bool analog_enabled_; bool low_clock_; diff --git a/src/web/WebSettingsService.cpp b/src/web/WebSettingsService.cpp index 0b7f8780b..7781bf0f4 100644 --- a/src/web/WebSettingsService.cpp +++ b/src/web/WebSettingsService.cpp @@ -59,6 +59,7 @@ void WebSettings::read(WebSettings & settings, JsonObject root) { root["dallas_parasite"] = settings.dallas_parasite; root["led_gpio"] = settings.led_gpio; root["hide_led"] = settings.hide_led; + root["led_type"] = settings.led_type; root["low_clock"] = settings.low_clock; root["telnet_enabled"] = settings.telnet_enabled; root["notoken_api"] = settings.notoken_api; @@ -103,6 +104,7 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) { #endif // get the current board profile saved in the settings file + String org_board_profile = settings.board_profile; settings.board_profile = root["board_profile"] | EMSESP_DEFAULT_BOARD_PROFILE; // this is set at compile time in platformio.ini, other it's "default" String old_board_profile = settings.board_profile; @@ -133,7 +135,12 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) { (int8_t)(root["phy_type"] | PHY_type::PHY_TYPE_NONE), (int8_t)(root["eth_power"] | 0), (int8_t)(root["eth_phy_addr"] | 0), - (int8_t)(root["eth_clock_mode"] | 0)}; + (int8_t)(root["eth_clock_mode"] | 0), +#if defined(ARDUINO_LOLIN_C3_MINI) && !defined(BOARD_C3_MINI_V1) + (int8_t)(root["led_type"] | 1)}; +#else + (int8_t)(root["led_type"] | 0)}; +#endif } // check valid pins in this board profile if (!System::is_valid_gpio(data[0], psram) || !System::is_valid_gpio(data[1], psram) || !System::is_valid_gpio(data[2], psram) @@ -180,11 +187,11 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) { // override if we know the target from the build config like C3, S2, S3 etc.. #elif CONFIG_IDF_TARGET_ESP32C3 - settings.board_profile = "C3MINI"; + settings.board_profile = "C3MINI"; #elif CONFIG_IDF_TARGET_ESP32S2 - settings.board_profile = "S2MINI"; + settings.board_profile = "S2MINI"; #elif CONFIG_IDF_TARGET_ESP32S3 - settings.board_profile = "S32S3"; // BBQKees Gateway S3 + settings.board_profile = "S32S3"; // BBQKees Gateway S3 #endif // apply the new board profile setting @@ -194,8 +201,9 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) { if (old_board_profile != settings.board_profile) { // see if need to override the set board profile (e.g. forced by NVS boot string) EMSESP::logger().info("Setting new Board profile %s (was %s)", settings.board_profile.c_str(), old_board_profile.c_str()); - } else { - EMSESP::logger().info("Board profile set to %s", settings.board_profile.c_str()); + } else if (org_board_profile != settings.board_profile) { + // EMSESP::logger().info("Board profile set to %s", settings.board_profile.c_str()); + EMSESP::logger().info("Setting new Board profile %s (was %s)", settings.board_profile.c_str(), org_board_profile.c_str()); } int prev; @@ -229,6 +237,9 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) { prev = settings.eth_clock_mode; settings.eth_clock_mode = data[8]; check_flag(prev, settings.eth_clock_mode, ChangeFlags::RESTART); + prev = settings.led_type; + settings.led_type = data[9]; + check_flag(prev, settings.led_type, ChangeFlags::LED); // tx_mode, rx and tx pins prev = settings.tx_mode; @@ -304,6 +315,7 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) { settings.low_clock = root["low_clock"]; check_flag(prev, settings.low_clock, ChangeFlags::RESTART); + // Modbus settings prev = settings.modbus_enabled; settings.modbus_enabled = root["modbus_enabled"] | EMSESP_DEFAULT_MODBUS_ENABLED; check_flag(prev, settings.modbus_enabled, ChangeFlags::RESTART); @@ -455,6 +467,7 @@ void WebSettingsService::board_profile(AsyncWebServerRequest * request) { root["eth_power"] = data[6]; root["eth_phy_addr"] = data[7]; root["eth_clock_mode"] = data[8]; + root["led_type"] = data[9]; response->setLength(); request->send(response); diff --git a/src/web/WebSettingsService.h b/src/web/WebSettingsService.h index 07797bf24..ba1e9abc4 100644 --- a/src/web/WebSettingsService.h +++ b/src/web/WebSettingsService.h @@ -54,6 +54,7 @@ class WebSettings { bool dallas_parasite; uint8_t led_gpio; bool hide_led; + uint8_t led_type; bool low_clock; bool telnet_enabled; bool notoken_api;