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