diff --git a/interface/package.json b/interface/package.json
index 7469a2c6a..86137b132 100644
--- a/interface/package.json
+++ b/interface/package.json
@@ -30,7 +30,7 @@
"@types/imagemin": "^8.0.5",
"@types/lodash-es": "^4.17.12",
"@types/node": "^20.10.2",
- "@types/react": "^18.2.40",
+ "@types/react": "^18.2.41",
"@types/react-dom": "^18.2.17",
"@types/react-router-dom": "^5.3.3",
"alova": "^2.15.0",
diff --git a/interface/src/framework/mqtt/MqttSettingsForm.tsx b/interface/src/framework/mqtt/MqttSettingsForm.tsx
index 1647c3f9d..6b1d1323b 100644
--- a/interface/src/framework/mqtt/MqttSettingsForm.tsx
+++ b/interface/src/framework/mqtt/MqttSettingsForm.tsx
@@ -168,20 +168,24 @@ const MqttSettingsForm: FC = () => {
- {data.rootCA !== undefined && (
-
-
-
- )}
+ {data.enableTLS !== undefined && (
+ }
+ label={LL.ENABLE_TLS()}
+ />
+ )}
+ {data.enableTLS === true && (
+
+ )}
}
diff --git a/interface/src/i18n/de/index.ts b/interface/src/i18n/de/index.ts
index 09c8cc959..7574a09f7 100644
--- a/interface/src/i18n/de/index.ts
+++ b/interface/src/i18n/de/index.ts
@@ -323,7 +323,8 @@ const de: Translation = {
WRITEABLE: 'Schreibbar',
SHOWING: 'Anzeigen von',
SEARCH: 'Suche',
- CERT: 'TLS Zertifikat (Freilassen um TLS zu deaktivieren)',
+ CERT: 'TLS Zertifikat (Freilassen für unsichere Verbindung)',
+ ENABLE_TLS: 'Aktiviere TLS',
ON: 'An',
OFF: 'Aus',
POLARITY: 'Polarität',
diff --git a/interface/src/i18n/en/index.ts b/interface/src/i18n/en/index.ts
index bb39d5469..6081254be 100644
--- a/interface/src/i18n/en/index.ts
+++ b/interface/src/i18n/en/index.ts
@@ -323,7 +323,8 @@ const en: Translation = {
WRITEABLE: 'Writeable',
SHOWING: 'Showing',
SEARCH: 'Search',
- CERT: 'TLS root certificate (leave blank to disable TLS)',
+ CERT: 'TLS root certificate (leave blank for insecure)',
+ ENABLE_TLS: 'Enable TLS',
ON: 'On',
OFF: 'Off',
POLARITY: 'Polarity',
diff --git a/interface/src/i18n/fr/index.ts b/interface/src/i18n/fr/index.ts
index f556dc261..fd40d785a 100644
--- a/interface/src/i18n/fr/index.ts
+++ b/interface/src/i18n/fr/index.ts
@@ -323,7 +323,8 @@ const fr: Translation = {
WRITEABLE: 'Writeable', // TODO translate
SHOWING: 'Showing', // TODO translate
SEARCH: 'Search', // TODO translate
- CERT: 'TLS root certificate (leave blank to disable TLS)', // TODO translate
+ CERT: 'TLS root certificate (leave blank for insecure)', // TODO translate
+ ENABLE_TLS: 'Activer TLS',
ON: 'On', // TODO translate
OFF: 'Off', // TODO translate
POLARITY: 'Polarity', // TODO translate
diff --git a/interface/src/i18n/it/index.ts b/interface/src/i18n/it/index.ts
index c303bcc00..779e3080b 100644
--- a/interface/src/i18n/it/index.ts
+++ b/interface/src/i18n/it/index.ts
@@ -325,7 +325,8 @@ const it: Translation = {
WRITEABLE: 'Scrivibile',
SHOWING: 'Visualizza',
SEARCH: 'Ricerca',
- CERT: 'TLS root certificate (leave blank to disable TLS)', // TODO translate
+ CERT: 'TLS root certificate (leave blank for insecure)', // TODO translate
+ ENABLE_TLS: 'Abilita TLS',
ON: 'On', // TODO translate
OFF: 'Off', // TODO translate
POLARITY: 'Polarity', // TODO translate
diff --git a/interface/src/i18n/nl/index.ts b/interface/src/i18n/nl/index.ts
index b8c6eef7d..cbc8b0500 100644
--- a/interface/src/i18n/nl/index.ts
+++ b/interface/src/i18n/nl/index.ts
@@ -323,7 +323,8 @@ const nl: Translation = {
WRITEABLE: 'Beschrijfbare',
SHOWING: 'Tonen',
SEARCH: 'Zoek',
- CERT: 'TLS rootcertificaat (laat leeg om TLS uit te schakelen)',
+ CERT: 'TLS rootcertificaat (laat leeg om TLS-insecure)', // TODO translate
+ ENABLE_TLS: 'Activeer TLS',
ON: 'On', // TODO translate
OFF: 'Off', // TODO translate
POLARITY: 'Polarity', // TODO translate
diff --git a/interface/src/i18n/no/index.ts b/interface/src/i18n/no/index.ts
index f660aa2d9..79a354c4a 100644
--- a/interface/src/i18n/no/index.ts
+++ b/interface/src/i18n/no/index.ts
@@ -323,7 +323,8 @@ const no: Translation = {
WRITEABLE: 'Writeable', // TODO translate
SHOWING: 'Showing', // TODO translate
SEARCH: 'Search', // TODO translate
- CERT: 'TLS root certificate (leave blank to disable TLS)', // TODO translate
+ CERT: 'TLS root certificate (leave blank for insecure)', // TODO translate
+ ENABLE_TLS: 'Aktiviser TLS',
ON: 'On', // TODO translate
OFF: 'Off', // TODO translate
POLARITY: 'Polarity', // TODO translate
diff --git a/interface/src/i18n/pl/index.ts b/interface/src/i18n/pl/index.ts
index cf3600146..0cc5a5630 100644
--- a/interface/src/i18n/pl/index.ts
+++ b/interface/src/i18n/pl/index.ts
@@ -323,7 +323,8 @@ const pl: BaseTranslation = {
WRITEABLE: 'zapisywalna',
SHOWING: 'Wyświetlane',
SEARCH: 'Szukaj',
- CERT: 'Certyfikat główny TLS (pozostaw puste zby wyłączyć TLS)',
+ CERT: 'Certyfikat główny TLS (pozostaw puste zby wyłączyć TLS-insecure)',
+ ENABLE_TLS: 'Włącz wsparcie dla TLS',
ON: 'włączony',
OFF: 'wyłączony',
POLARITY: 'Typ przekaźnika',
diff --git a/interface/src/i18n/sv/index.ts b/interface/src/i18n/sv/index.ts
index c1d2f0239..3dea8a225 100644
--- a/interface/src/i18n/sv/index.ts
+++ b/interface/src/i18n/sv/index.ts
@@ -323,7 +323,8 @@ const sv: Translation = {
WRITEABLE: 'Writeable', // TODO translate
SHOWING: 'Showing', // TODO translate
SEARCH: 'Search', // TODO translate
- CERT: 'TLS root certificate (leave blank to disable TLS)', // TODO translate
+ CERT: 'TLS root certificate (leave blank for insecure)', // TODO translate
+ ENABLE_TLS: 'Aktivera TLS',
ON: 'On', // TODO translate
OFF: 'Off', // TODO translate
POLARITY: 'Polarity', // TODO translate
diff --git a/interface/src/i18n/tr/index.ts b/interface/src/i18n/tr/index.ts
index 682c4648b..a5d7e4505 100644
--- a/interface/src/i18n/tr/index.ts
+++ b/interface/src/i18n/tr/index.ts
@@ -323,7 +323,8 @@ const tr: Translation = {
WRITEABLE: 'Writeable', // TODO translate
SHOWING: 'Showing', // TODO translate
SEARCH: 'Search', // TODO translate
- CERT: 'TLS root certificate (leave blank to disable TLS)', // TODO translate
+ CERT: 'TLS root certificate (leave blank for insecure)',
+ ENABLE_TLS: 'TLS deveye al',
ON: 'On', // TODO translate
OFF: 'Off', // TODO translate
POLARITY: 'Polarity', // TODO translate
diff --git a/interface/src/types/mqtt.ts b/interface/src/types/mqtt.ts
index df9261f4a..9b5db1458 100644
--- a/interface/src/types/mqtt.ts
+++ b/interface/src/types/mqtt.ts
@@ -25,6 +25,7 @@ export interface MqttSettings {
port: number;
base: string;
rootCA?: string;
+ enableTLS?: boolean;
username: string;
password: string;
client_id: string;
diff --git a/interface/yarn.lock b/interface/yarn.lock
index 259d4b6c7..634743ad4 100644
--- a/interface/yarn.lock
+++ b/interface/yarn.lock
@@ -1606,14 +1606,14 @@ __metadata:
languageName: node
linkType: hard
-"@types/react@npm:^18.2.40":
- version: 18.2.40
- resolution: "@types/react@npm:18.2.40"
+"@types/react@npm:^18.2.41":
+ version: 18.2.41
+ resolution: "@types/react@npm:18.2.41"
dependencies:
"@types/prop-types": "npm:*"
"@types/scheduler": "npm:*"
csstype: "npm:^3.0.2"
- checksum: 323c319461482ad17b4813fec8641a4167361f42164757b64dbe27db379ae8fd98f3811a301f4abce0c17ce53a83c549db3ba3008e54d2a422a0656bddd72440
+ checksum: 31a498a56ad3e825ae13799355fe49042c0cdbbe6f40003f39b6b9cf847ba1669393c22ba60e97b1072cf1c002b15432082cdd17e47c948430bdc1f0864829b9
languageName: node
linkType: hard
@@ -1794,7 +1794,7 @@ __metadata:
"@types/imagemin": "npm:^8.0.5"
"@types/lodash-es": "npm:^4.17.12"
"@types/node": "npm:^20.10.2"
- "@types/react": "npm:^18.2.40"
+ "@types/react": "npm:^18.2.41"
"@types/react-dom": "npm:^18.2.17"
"@types/react-router-dom": "npm:^5.3.3"
"@typescript-eslint/eslint-plugin": "npm:^6.13.1"
diff --git a/lib/framework/MqttSettingsService.cpp b/lib/framework/MqttSettingsService.cpp
index 8f96f2f15..c601950db 100644
--- a/lib/framework/MqttSettingsService.cpp
+++ b/lib/framework/MqttSettingsService.cpp
@@ -51,13 +51,13 @@ void MqttSettingsService::startClient() {
static bool isSecure = false;
if (_mqttClient != nullptr) {
// do we need to change the client?
- if ((isSecure && _state.rootCA.length() > 0) || (!isSecure && _state.rootCA.length() == 0)) {
+ if ((isSecure && _state.enableTLS) || (!isSecure && _state.enableTLS)) {
return;
}
delete _mqttClient;
}
#if CONFIG_IDF_TARGET_ESP32S3
- if (_state.rootCA.length() > 0) {
+ if (_state.enableTLS) {
isSecure = true;
_mqttClient = static_cast(new espMqttClientSecure(espMqttClientTypes::UseInternalTask::NO));
if (_state.rootCA == "insecure") {
@@ -100,7 +100,7 @@ const char * MqttSettingsService::getClientId() {
void MqttSettingsService::setWill(const char * topic) {
#if CONFIG_IDF_TARGET_ESP32S3
- if (_state.rootCA.length() > 0) {
+ if (_state.enableTLS) {
static_cast(_mqttClient)->setWill(topic, 1, true, "offline");
return;
}
@@ -110,7 +110,7 @@ void MqttSettingsService::setWill(const char * topic) {
void MqttSettingsService::onMessage(espMqttClientTypes::OnMessageCallback callback) {
#if CONFIG_IDF_TARGET_ESP32S3
- if (_state.rootCA.length() > 0) {
+ if (_state.enableTLS) {
static_cast(_mqttClient)->onMessage(callback);
return;
}
@@ -181,7 +181,7 @@ bool MqttSettingsService::configureMqtt() {
if (_state.enabled && emsesp::EMSESP::system_.network_connected() && !_state.host.isEmpty()) {
_reconfigureMqtt = false;
#if CONFIG_IDF_TARGET_ESP32S3
- if (_state.rootCA.length() > 0) {
+ if (_state.enableTLS) {
// emsesp::EMSESP::logger().info("Start secure MQTT with rootCA");
static_cast(_mqttClient)->setServer(retainCstr(_state.host.c_str(), &_retainedHost), _state.port);
if (_state.username.length() > 0) {
@@ -217,7 +217,8 @@ bool MqttSettingsService::configureMqtt() {
void MqttSettings::read(MqttSettings & settings, JsonObject & root) {
#if CONFIG_IDF_TARGET_ESP32S3
- root["rootCA"] = settings.rootCA;
+ root["enableTLS"] = settings.enableTLS;
+ root["rootCA"] = settings.rootCA;
#endif
root["enabled"] = settings.enabled;
root["host"] = settings.host;
@@ -253,7 +254,8 @@ StateUpdateResult MqttSettings::update(JsonObject & root, MqttSettings & setting
bool changed = false;
#if CONFIG_IDF_TARGET_ESP32S3
- newSettings.rootCA = root["rootCA"] | "";
+ newSettings.enableTLS = root["enableTLS"] | false;
+ newSettings.rootCA = root["rootCA"] | "";
#endif
newSettings.enabled = root["enabled"] | FACTORY_MQTT_ENABLED;
newSettings.host = root["host"] | FACTORY_MQTT_HOST;
@@ -377,10 +379,10 @@ StateUpdateResult MqttSettings::update(JsonObject & root, MqttSettings & setting
newSettings.rootCA.replace("-----BEGIN CERTIFICATE-----", "");
newSettings.rootCA.replace("-----END CERTIFICATE-----", "");
newSettings.rootCA.replace(" ", "");
- if (newSettings.rootCA.length() == 0 && newSettings.port > 8800) {
+ if (newSettings.rootCA.length() == 0 && newSettings.enableTLS) {
newSettings.rootCA = "insecure";
}
- if (newSettings.rootCA != settings.rootCA) {
+ if (newSettings.enableTLS != settings.enableTLS || newSettings.rootCA != settings.rootCA) {
changed = true;
}
#endif
diff --git a/lib/framework/MqttSettingsService.h b/lib/framework/MqttSettingsService.h
index 90d1a53c7..84df758f5 100644
--- a/lib/framework/MqttSettingsService.h
+++ b/lib/framework/MqttSettingsService.h
@@ -64,6 +64,7 @@ class MqttSettings {
String host;
uint16_t port;
String rootCA;
+ bool enableTLS;
// username and password
String username;
diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp
index a0ec1bd2d..9fb3e51a8 100644
--- a/src/devices/boiler.cpp
+++ b/src/devices/boiler.cpp
@@ -230,6 +230,10 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
DeviceValueTAG::TAG_DEVICE_DATA, &boilHystOn_, DeviceValueType::INT, FL_(boilHystOn), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_hyst_on), -20, 0);
register_device_value(
DeviceValueTAG::TAG_DEVICE_DATA, &boilHystOff_, DeviceValueType::INT, FL_(boilHystOff), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_hyst_off), 0, 20);
+ register_device_value(
+ DeviceValueTAG::TAG_DEVICE_DATA, &boil2HystOn_, DeviceValueType::INT, FL_(boil2HystOn), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_hyst2_on), -20, 0);
+ register_device_value(
+ DeviceValueTAG::TAG_DEVICE_DATA, &boil2HystOff_, DeviceValueType::INT, FL_(boil2HystOff), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_hyst2_off), 0, 20);
}
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA,
&heatingActivated_,
diff --git a/src/version.h b/src/version.h
index c145362b2..c5e1ec57c 100644
--- a/src/version.h
+++ b/src/version.h
@@ -1 +1 @@
-#define EMSESP_APP_VERSION "3.6.5-dev.2"
+#define EMSESP_APP_VERSION "3.6.5-dev.3"