From fed15f0f96427d25f6270ba5a547edf4f1fb728c Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 7 May 2026 18:44:02 +0200 Subject: [PATCH] tx-mode: auto, default bus-id 0x49 --- CHANGELOG_LATEST.md | 2 ++ interface/src/app/settings/ApplicationSettings.tsx | 1 + lib_standalone/emsuart_standalone.h | 3 ++- src/core/default_settings.h | 4 ++-- src/core/telegram.cpp | 5 ++++- src/core/telegram.h | 9 +++++++++ src/emsesp_version.h | 2 +- src/uart/emsuart_esp32.cpp | 6 ++++-- src/uart/emsuart_esp32.h | 3 ++- 9 files changed, 27 insertions(+), 8 deletions(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 9c67e875d..00772509b 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -14,6 +14,7 @@ For more details go to [emsesp.org](https://emsesp.org/). - heatpump reset [#2933](https://github.com/emsesp/EMS-ESP32/issues/2933) - 2.nd freshwater module (dhw4, dhw5) [#2991](https://github.com/emsesp/EMS-ESP32/issues/2991) - full system backup and restore +- auto-logic to set ht3/ems+ tx-mode ## Fixed @@ -36,3 +37,4 @@ For more details go to [emsesp.org](https://emsesp.org/). - move http client from stack to heap - heap optimizations [#3021](https://github.com/emsesp/EMS-ESP32/discussions/3021) - check and read 0x470 as summer2_typeids[0] only if received [#2686](https://github.com/emsesp/EMS-ESP32/issues/2686), [#3055](https://github.com/emsesp/EMS-ESP32/issues/3055) +- default bus-id: gateway1(0x49), tx-mode: auto diff --git a/interface/src/app/settings/ApplicationSettings.tsx b/interface/src/app/settings/ApplicationSettings.tsx index ce985530b..8e8e90ab7 100644 --- a/interface/src/app/settings/ApplicationSettings.tsx +++ b/interface/src/app/settings/ApplicationSettings.tsx @@ -677,6 +677,7 @@ const ApplicationSettings = () => { EMS+ HT3 {LL.HARDWARE()} + Auto diff --git a/lib_standalone/emsuart_standalone.h b/lib_standalone/emsuart_standalone.h index 4a76581db..2d576ae6b 100644 --- a/lib_standalone/emsuart_standalone.h +++ b/lib_standalone/emsuart_standalone.h @@ -22,10 +22,11 @@ #include "Arduino.h" #define EMS_TXMODE_OFF 0 -#define EMS_TXMODE_DEFAULT 1 +#define EMS_TXMODE_EMS 1 #define EMS_TXMODE_EMSPLUS 2 #define EMS_TXMODE_HT3 3 #define EMS_TXMODE_HW 4 +#define EMS_TXMODE_AUTO 5 namespace emsesp { diff --git a/src/core/default_settings.h b/src/core/default_settings.h index 0f5b72f9a..aafd35c21 100644 --- a/src/core/default_settings.h +++ b/src/core/default_settings.h @@ -26,11 +26,11 @@ #endif #ifndef EMSESP_DEFAULT_TX_MODE -#define EMSESP_DEFAULT_TX_MODE 1 // EMS1.0 +#define EMSESP_DEFAULT_TX_MODE 5 // Auto #endif #ifndef EMSESP_DEFAULT_EMS_BUS_ID -#define EMSESP_DEFAULT_EMS_BUS_ID 0x0B // service key +#define EMSESP_DEFAULT_EMS_BUS_ID 0x49 // gateway 1 #endif #ifndef EMSESP_DEFAULT_SYSLOG_ENABLED diff --git a/src/core/telegram.cpp b/src/core/telegram.cpp index 67d4bc4ad..9317882c9 100644 --- a/src/core/telegram.cpp +++ b/src/core/telegram.cpp @@ -43,6 +43,7 @@ uint8_t EMSbus::ems_mask_ = EMS_MASK_UNSET; // unset so its triggered uint8_t EMSbus::ems_bus_id_ = EMSESP_DEFAULT_EMS_BUS_ID; uint8_t EMSbus::tx_mode_ = EMSESP_DEFAULT_TX_MODE; uint8_t EMSbus::tx_state_ = Telegram::Operation::NONE; +bool EMSbus::isEMS2_ = false; uuid::log::Logger EMSbus::logger_{F_(telegram), uuid::log::Facility::CONSOLE}; @@ -206,7 +207,9 @@ void RxService::add(uint8_t * data, uint8_t length) { message_data = data + 6; message_length = length - 7; } - + if (type_id > 0x0FF && message_length > 1) { // used for auto tx_mode + set_ems2(); + } // if we're watching and "raw" print out actual telegram as bytes to the console // including the CRC at the end if (EMSESP::watch() == EMSESP::Watch::WATCH_RAW) { diff --git a/src/core/telegram.h b/src/core/telegram.h index afebb5e23..d12cb76ab 100644 --- a/src/core/telegram.h +++ b/src/core/telegram.h @@ -168,6 +168,14 @@ class EMSbus { return (ems_mask_ == EMS_MASK_HT3); } + static bool is_ems2() { + return isEMS2_; + } + + static void set_ems2() { + isEMS2_ = true;; + } + static uint8_t ems_mask() { return ems_mask_; } @@ -242,6 +250,7 @@ class EMSbus { static uint8_t ems_bus_id_; // the bus id, which configurable and stored in settings static uint8_t tx_mode_; // local copy of the tx mode static uint8_t tx_state_; // state of the Tx line (NONE or waiting on a TX_READ or TX_WRITE) + static bool isEMS2_; }; class RxService : public EMSbus { diff --git a/src/emsesp_version.h b/src/emsesp_version.h index 2f719f021..cd5b26d88 100644 --- a/src/emsesp_version.h +++ b/src/emsesp_version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.8.2-dev.21" +#define EMSESP_APP_VERSION "3.8.2-dev.22" diff --git a/src/uart/emsuart_esp32.cpp b/src/uart/emsuart_esp32.cpp index 344e991f2..73da13640 100644 --- a/src/uart/emsuart_esp32.cpp +++ b/src/uart/emsuart_esp32.cpp @@ -149,8 +149,10 @@ uint8_t EMSuart::transmit(const uint8_t * buf, const uint8_t len) { return EMS_TX_STATUS_OK; } + auto tx_mode = tx_mode_ != EMS_TXMODE_AUTO ? tx_mode_ : EMSbus::is_ht3() ? EMS_TXMODE_HT3 : EMSbus::is_ems2() ? EMS_TXMODE_EMSPLUS : EMS_TXMODE_EMS; + // TXMODE is EMS+ with long delay - if (tx_mode_ == EMS_TXMODE_EMSPLUS) { + if (tx_mode == EMS_TXMODE_EMSPLUS) { for (uint8_t i = 0; i < len; i++) { uart_write_bytes(EMSUART_NUM, &buf[i], 1); delayMicroseconds(EMSUART_TX_WAIT_PLUS); @@ -160,7 +162,7 @@ uint8_t EMSuart::transmit(const uint8_t * buf, const uint8_t len) { } // TXMODE is HT3 with 7 bittimes delay - if (tx_mode_ == EMS_TXMODE_HT3) { + if (tx_mode == EMS_TXMODE_HT3) { for (uint8_t i = 0; i < len; i++) { uart_write_bytes(EMSUART_NUM, &buf[i], 1); delayMicroseconds(EMSUART_TX_WAIT_HT3); diff --git a/src/uart/emsuart_esp32.h b/src/uart/emsuart_esp32.h index fbf011943..70498f080 100644 --- a/src/uart/emsuart_esp32.h +++ b/src/uart/emsuart_esp32.h @@ -42,10 +42,11 @@ #define EMS_TXMODE_INIT 0xFF #define EMS_TXMODE_OFF 0 -#define EMS_TXMODE_DEFAULT 1 +#define EMS_TXMODE_EMS 1 #define EMS_TXMODE_EMSPLUS 2 #define EMS_TXMODE_HT3 3 #define EMS_TXMODE_HW 4 +#define EMS_TXMODE_AUTO 5 // LEGACY #define EMSUART_TX_BIT_TIME 104 // bit time @9600 baud