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 = () => {
+
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