diff --git a/interface/src/framework/mqtt/MqttSettingsForm.tsx b/interface/src/framework/mqtt/MqttSettingsForm.tsx index b5956b034..984f23e7d 100644 --- a/interface/src/framework/mqtt/MqttSettingsForm.tsx +++ b/interface/src/framework/mqtt/MqttSettingsForm.tsx @@ -162,6 +162,10 @@ const MqttSettingsForm: FC = () => { + } + label={LL.MQTT_MULTIPLE_INSTANCES()} + /> } label={LL.MQTT_CLEAN_SESSION()} diff --git a/interface/src/i18n/de/index.ts b/interface/src/i18n/de/index.ts index 5837fac56..fe6c05740 100644 --- a/interface/src/i18n/de/index.ts +++ b/interface/src/i18n/de/index.ts @@ -247,6 +247,7 @@ const de: Translation = { MQTT_INT_MIXER: 'Mischermodule', MQTT_QUEUE: 'MQTT Queue', DEFAULT: 'Standard', + MQTT_MULTIPLE_INSTANCES: 'Enable Multiple Instances of EMS-ESP', MQTT_CLEAN_SESSION: 'Setze `Clean Session`', MQTT_RETAIN_FLAG: 'Setze `Retain flag` immer', INACTIVE: 'Inaktiv', diff --git a/interface/src/i18n/en/index.ts b/interface/src/i18n/en/index.ts index 4cd5e69ec..0abaf6d97 100644 --- a/interface/src/i18n/en/index.ts +++ b/interface/src/i18n/en/index.ts @@ -247,6 +247,7 @@ const en: Translation = { MQTT_INT_MIXER: 'Mixer Modules', MQTT_QUEUE: 'MQTT Queue', DEFAULT: 'Default', + MQTT_MULTIPLE_INSTANCES: 'Enable Multiple Instances of EMS-ESP', MQTT_CLEAN_SESSION: 'Set Clean Session', MQTT_RETAIN_FLAG: 'Always set Retain flag', INACTIVE: 'Inactive', diff --git a/interface/src/i18n/nl/index.ts b/interface/src/i18n/nl/index.ts index cbd1cd400..5363adcbf 100644 --- a/interface/src/i18n/nl/index.ts +++ b/interface/src/i18n/nl/index.ts @@ -247,6 +247,7 @@ const nl: Translation = { MQTT_INT_MIXER: 'Mixer Modules', MQTT_QUEUE: 'MQTT Queue', DEFAULT: 'Default', + MQTT_MULTIPLE_INSTANCES: 'Enable Multiple Instances of EMS-ESP', MQTT_CLEAN_SESSION: 'Clean Session aan', MQTT_RETAIN_FLAG: 'Retain flag aan', INACTIVE: 'Inactief', diff --git a/interface/src/i18n/no/index.ts b/interface/src/i18n/no/index.ts index 851876219..04df90fc2 100644 --- a/interface/src/i18n/no/index.ts +++ b/interface/src/i18n/no/index.ts @@ -247,6 +247,7 @@ const no: Translation = { MQTT_INT_MIXER: 'Blandeventil', MQTT_QUEUE: 'MQTT Queue', DEFAULT: 'Standard', + MQTT_MULTIPLE_INSTANCES: 'Enable Multiple Instances of EMS-ESP', MQTT_CLEAN_SESSION: 'Benytt Clean Session', MQTT_RETAIN_FLAG: 'Alltid sett Retain flag', INACTIVE: 'Innaktiv', diff --git a/interface/src/i18n/pl/index.ts b/interface/src/i18n/pl/index.ts index 413d21c66..06f58bbd9 100644 --- a/interface/src/i18n/pl/index.ts +++ b/interface/src/i18n/pl/index.ts @@ -247,6 +247,7 @@ const pl: BaseTranslation = { MQTT_INT_MIXER: 'Mieszacze', MQTT_QUEUE: 'Kolejka MQTT', DEFAULT: '{{Pozostałe|Domyślna|}}', + MQTT_MULTIPLE_INSTANCES: 'Enable Multiple Instances of EMS-ESP', MQTT_CLEAN_SESSION: 'Ustawiaj flagę "Clean session"', MQTT_RETAIN_FLAG: 'Ustawiaj flagę "Retain"', INACTIVE: 'nieaktywny', diff --git a/interface/src/i18n/se/index.ts b/interface/src/i18n/se/index.ts index 923c9617e..cddcc243d 100644 --- a/interface/src/i18n/se/index.ts +++ b/interface/src/i18n/se/index.ts @@ -247,6 +247,7 @@ const se: Translation = { MQTT_INT_MIXER: 'Blandarventiler', MQTT_QUEUE: 'MQTT Queue', DEFAULT: 'Standard', + MQTT_MULTIPLE_INSTANCES: 'Enable Multiple Instances of EMS-ESP', MQTT_CLEAN_SESSION: 'Använd "Clean Session"-flaggan', MQTT_RETAIN_FLAG: 'Använd "Always Retain"-flaggan', INACTIVE: 'Inaktiv', diff --git a/interface/src/types/mqtt.ts b/interface/src/types/mqtt.ts index 7ecf694ca..65d0a444a 100644 --- a/interface/src/types/mqtt.ts +++ b/interface/src/types/mqtt.ts @@ -29,6 +29,7 @@ export interface MqttSettings { client_id: string; keep_alive: number; clean_session: boolean; + multiple_instances: boolean; publish_time_boiler: number; publish_time_thermostat: number; publish_time_solar: number; diff --git a/lib/framework/MqttSettingsService.cpp b/lib/framework/MqttSettingsService.cpp index 952724606..9a9bfa487 100644 --- a/lib/framework/MqttSettingsService.cpp +++ b/lib/framework/MqttSettingsService.cpp @@ -145,15 +145,16 @@ void MqttSettingsService::configureMqtt() { } void MqttSettings::read(MqttSettings & settings, JsonObject & root) { - root["enabled"] = settings.enabled; - root["host"] = settings.host; - root["port"] = settings.port; - root["base"] = settings.base; - root["username"] = settings.username; - root["password"] = settings.password; - root["client_id"] = settings.clientId; - root["keep_alive"] = settings.keepAlive; - root["clean_session"] = settings.cleanSession; + root["enabled"] = settings.enabled; + root["host"] = settings.host; + root["port"] = settings.port; + root["base"] = settings.base; + root["username"] = settings.username; + root["password"] = settings.password; + root["client_id"] = settings.clientId; + root["keep_alive"] = settings.keepAlive; + root["clean_session"] = settings.cleanSession; + root["multiple_instances"] = settings.multiple_instances; // added by proddy for EMS-ESP root["publish_time_boiler"] = settings.publish_time_boiler; @@ -176,17 +177,19 @@ StateUpdateResult MqttSettings::update(JsonObject & root, MqttSettings & setting MqttSettings newSettings = {}; bool changed = false; - newSettings.enabled = root["enabled"] | FACTORY_MQTT_ENABLED; - newSettings.host = root["host"] | FACTORY_MQTT_HOST; - newSettings.port = root["port"] | FACTORY_MQTT_PORT; - newSettings.base = root["base"] | FACTORY_MQTT_BASE; - newSettings.username = root["username"] | FACTORY_MQTT_USERNAME; - newSettings.password = root["password"] | FACTORY_MQTT_PASSWORD; - newSettings.clientId = root["client_id"] | FACTORY_MQTT_CLIENT_ID; - newSettings.keepAlive = root["keep_alive"] | FACTORY_MQTT_KEEP_ALIVE; - newSettings.cleanSession = root["clean_session"] | FACTORY_MQTT_CLEAN_SESSION; - newSettings.mqtt_qos = root["mqtt_qos"] | EMSESP_DEFAULT_MQTT_QOS; - newSettings.mqtt_retain = root["mqtt_retain"] | EMSESP_DEFAULT_MQTT_RETAIN; + newSettings.enabled = root["enabled"] | FACTORY_MQTT_ENABLED; + newSettings.host = root["host"] | FACTORY_MQTT_HOST; + newSettings.port = root["port"] | FACTORY_MQTT_PORT; + newSettings.base = root["base"] | FACTORY_MQTT_BASE; + newSettings.username = root["username"] | FACTORY_MQTT_USERNAME; + newSettings.password = root["password"] | FACTORY_MQTT_PASSWORD; + newSettings.clientId = root["client_id"] | FACTORY_MQTT_CLIENT_ID; + newSettings.keepAlive = root["keep_alive"] | FACTORY_MQTT_KEEP_ALIVE; + newSettings.cleanSession = root["clean_session"] | FACTORY_MQTT_CLEAN_SESSION; + newSettings.multiple_instances = root["multiple_instances"] | FACTORY_MQTT_MULTIPLE_INSTANCES; + + newSettings.mqtt_qos = root["mqtt_qos"] | EMSESP_DEFAULT_MQTT_QOS; + newSettings.mqtt_retain = root["mqtt_retain"] | EMSESP_DEFAULT_MQTT_RETAIN; newSettings.publish_time_boiler = root["publish_time_boiler"] | EMSESP_DEFAULT_PUBLISH_TIME; newSettings.publish_time_thermostat = root["publish_time_thermostat"] | EMSESP_DEFAULT_PUBLISH_TIME; diff --git a/lib/framework/MqttSettingsService.h b/lib/framework/MqttSettingsService.h index 199c7379b..0a976ac21 100644 --- a/lib/framework/MqttSettingsService.h +++ b/lib/framework/MqttSettingsService.h @@ -57,6 +57,10 @@ static String generateClientId() { #define FACTORY_MQTT_MAX_TOPIC_LENGTH 128 #endif +#ifndef FACTORY_MQTT_MULTIPLE_INSTANCES +#define FACTORY_MQTT_MULTIPLE_INSTANCES false +#endif + class MqttSettings { public: // host and port - if enabled @@ -75,6 +79,9 @@ class MqttSettings { uint16_t keepAlive; bool cleanSession; + // multiple instances + bool multiple_instances; + // proddy EMS-ESP specific String base; uint16_t publish_time_boiler; diff --git a/lib_standalone/ESP8266React.h b/lib_standalone/ESP8266React.h index 96590bef2..4587c8817 100644 --- a/lib_standalone/ESP8266React.h +++ b/lib_standalone/ESP8266React.h @@ -81,6 +81,7 @@ class DummySettings { String username = ""; uint16_t keepAlive = 60; bool cleanSession = false; + bool multiple_instances = false; uint16_t publish_time_boiler = 10; uint16_t publish_time_thermostat = 10; diff --git a/mock-api/server.js b/mock-api/server.js index f37697551..28315dfbc 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -219,6 +219,7 @@ mqtt_settings = { client_id: 'ems-esp', keep_alive: 60, clean_session: true, + multiple_instances: false, publish_time_boiler: 10, publish_time_thermostat: 10, publish_time_solar: 10, diff --git a/src/system.cpp b/src/system.cpp index 1fbfe9aa9..47b439759 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -1153,6 +1153,7 @@ bool System::command_info(const char * value, const int8_t id, JsonObject & outp node["client id"] = settings.clientId; node["keep alive"] = settings.keepAlive; node["clean session"] = settings.cleanSession; + node["multiple instances"] = settings.multiple_instances; node["base"] = settings.base; node["discovery prefix"] = settings.discovery_prefix; node["nested format"] = settings.nested_format;