Skip to content

Commit c0946f1

Browse files
authored
Merge branch 'dev' into dev
2 parents 44e6bb7 + 575fdcb commit c0946f1

19 files changed

+70
-58
lines changed

interface/src/framework/mqtt/MqttSettingsForm.tsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -236,17 +236,18 @@ const MqttSettingsForm: FC = () => {
236236
</Grid>
237237
<Grid item>
238238
<ValidatedTextField
239-
name="multiple_instances"
239+
name="entity_format"
240240
label={LL.MQTT_ENTITY_FORMAT()}
241-
value={data.multiple_instances}
241+
value={data.entity_format}
242242
fullWidth
243243
variant="outlined"
244244
onChange={updateFormValue}
245245
margin="normal"
246246
select
247247
>
248-
<MenuItem value={false as any}>{LL.MQTT_ENTITY_FORMAT_0()}</MenuItem>
249-
<MenuItem value={true as any}>{LL.MQTT_ENTITY_FORMAT_1()}</MenuItem>
248+
<MenuItem value={0}>{LL.MQTT_ENTITY_FORMAT_0()}</MenuItem>
249+
<MenuItem value={1}>{LL.MQTT_ENTITY_FORMAT_1()}</MenuItem>
250+
<MenuItem value={2}>{LL.MQTT_ENTITY_FORMAT_2()}</MenuItem>
250251
</ValidatedTextField>
251252
</Grid>
252253
</Grid>

interface/src/i18n/de/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,8 @@ const de: Translation = {
250250
MQTT_QUEUE: 'MQTT Queue',
251251
DEFAULT: 'Standard',
252252
MQTT_ENTITY_FORMAT: 'Entitäts-ID Format',
253-
MQTT_ENTITY_FORMAT_0: 'Einzelinstanz, Langname (veraltet)',
253+
MQTT_ENTITY_FORMAT_0: 'Einzelinstanz, Langname (v3.4)',
254+
MQTT_ENTITY_FORMAT_1: 'Einzelinstanz, MQTT-Namen',
254255
MQTT_ENTITY_FORMAT_1: 'Mehrfachinstanzen, MQTT-Namen',
255256
MQTT_CLEAN_SESSION: 'Setze `Clean Session`',
256257
MQTT_RETAIN_FLAG: 'Setze `Retain flag` immer',

interface/src/i18n/en/index.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,9 @@ const en: Translation = {
249249
MQTT_QUEUE: 'MQTT Queue',
250250
DEFAULT: 'Default',
251251
MQTT_ENTITY_FORMAT: 'Entity ID format',
252-
MQTT_ENTITY_FORMAT_0: 'Single instance, long name (depreciated)',
253-
MQTT_ENTITY_FORMAT_1: 'Multiple instances, short name',
252+
MQTT_ENTITY_FORMAT_0: 'Single instance, long name (v3.4)',
253+
MQTT_ENTITY_FORMAT_1: 'Single instance, short name',
254+
MQTT_ENTITY_FORMAT_2: 'Multiple instances, short name',
254255
MQTT_CLEAN_SESSION: 'Set Clean Session',
255256
MQTT_RETAIN_FLAG: 'Always set Retain flag',
256257
INACTIVE: 'Inactive',

interface/src/i18n/fr/index.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,9 @@ const fr: Translation = {
249249
MQTT_QUEUE: 'Queue MQTT',
250250
DEFAULT: 'Défaut',
251251
MQTT_ENTITY_FORMAT: 'Entity ID format',
252-
MQTT_ENTITY_FORMAT_0: 'Single instance, long name (depreciated)',
253-
MQTT_ENTITY_FORMAT_1: 'Multiple instances, short name',
252+
MQTT_ENTITY_FORMAT_0: 'Single instance, long name (v3.4)',
253+
MQTT_ENTITY_FORMAT_1: 'Single instance, short name',
254+
MQTT_ENTITY_FORMAT_2: 'Multiple instances, short name',
254255
MQTT_CLEAN_SESSION: 'Flag Clean Session',
255256
MQTT_RETAIN_FLAG: 'Toujours activer le Retain Flag',
256257
INACTIVE: 'Inactif',

interface/src/i18n/nl/index.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,9 @@ const nl: Translation = {
249249
MQTT_QUEUE: 'MQTT Queue',
250250
DEFAULT: 'Default',
251251
MQTT_ENTITY_FORMAT: 'Entity ID format',
252-
MQTT_ENTITY_FORMAT_0: 'Single instance, long name (depreciated)',
253-
MQTT_ENTITY_FORMAT_1: 'Multiple instances, short name',
252+
MQTT_ENTITY_FORMAT_0: 'Single instance, long name (v3.4)',
253+
MQTT_ENTITY_FORMAT_1: 'Single instance, short name',
254+
MQTT_ENTITY_FORMAT_2: 'Multiple instances, short name',
254255
MQTT_CLEAN_SESSION: 'Clean Session aan',
255256
MQTT_RETAIN_FLAG: 'Retain flag aan',
256257
INACTIVE: 'Inactief',

interface/src/i18n/no/index.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,9 @@ const no: Translation = {
249249
MQTT_QUEUE: 'MQTT Queue',
250250
DEFAULT: 'Standard',
251251
MQTT_ENTITY_FORMAT: 'Entity ID format',
252-
MQTT_ENTITY_FORMAT_0: 'Single instance, long name (depreciated)',
253-
MQTT_ENTITY_FORMAT_1: 'Multiple instances, short name',
252+
MQTT_ENTITY_FORMAT_0: 'Single instance, long name (v3.4)',
253+
MQTT_ENTITY_FORMAT_1: 'Single instance, short name',
254+
MQTT_ENTITY_FORMAT_2: 'Multiple instances, short name',
254255
MQTT_CLEAN_SESSION: 'Benytt Clean Session',
255256
MQTT_RETAIN_FLAG: 'Alltid sett Retain flag',
256257
INACTIVE: 'Innaktiv',

interface/src/i18n/pl/index.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,9 @@ const pl: BaseTranslation = {
249249
MQTT_QUEUE: 'Kolejka MQTT',
250250
DEFAULT: '{{Pozostałe|Domyślna|}}',
251251
MQTT_ENTITY_FORMAT: 'Entity ID format',
252-
MQTT_ENTITY_FORMAT_0: 'Single instance, long name (depreciated)',
253-
MQTT_ENTITY_FORMAT_1: 'Multiple instances, short name',
252+
MQTT_ENTITY_FORMAT_0: 'Single instance, long name (v3.4)',
253+
MQTT_ENTITY_FORMAT_1: 'Single instance, short name',
254+
MQTT_ENTITY_FORMAT_2: 'Multiple instances, short name',
254255
MQTT_CLEAN_SESSION: 'Ustawiaj flagę "Clean session"',
255256
MQTT_RETAIN_FLAG: 'Ustawiaj flagę "Retain"',
256257
INACTIVE: 'nieaktywny',

interface/src/i18n/se/index.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,9 @@ const se: Translation = {
249249
MQTT_QUEUE: 'MQTT Queue',
250250
DEFAULT: 'Standard',
251251
MQTT_ENTITY_FORMAT: 'Entity ID format',
252-
MQTT_ENTITY_FORMAT_0: 'Single instance, long name (depreciated)',
253-
MQTT_ENTITY_FORMAT_1: 'Multiple instances, short name',
252+
MQTT_ENTITY_FORMAT_0: 'Single instance, long name (v3.4)',
253+
MQTT_ENTITY_FORMAT_1: 'Single instance, short name',
254+
MQTT_ENTITY_FORMAT_2: 'Multiple instances, short name',
254255
MQTT_CLEAN_SESSION: 'Använd "Clean Session"-flaggan',
255256
MQTT_RETAIN_FLAG: 'Använd "Always Retain"-flaggan',
256257
INACTIVE: 'Inaktiv',

interface/src/types/mqtt.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export interface MqttSettings {
2929
client_id: string;
3030
keep_alive: number;
3131
clean_session: boolean;
32-
multiple_instances: boolean;
32+
entity_format: number;
3333
publish_time_boiler: number;
3434
publish_time_thermostat: number;
3535
publish_time_solar: number;

lib/framework/MqttSettingsService.cpp

+23-23
Original file line numberDiff line numberDiff line change
@@ -145,16 +145,16 @@ void MqttSettingsService::configureMqtt() {
145145
}
146146

147147
void MqttSettings::read(MqttSettings & settings, JsonObject & root) {
148-
root["enabled"] = settings.enabled;
149-
root["host"] = settings.host;
150-
root["port"] = settings.port;
151-
root["base"] = settings.base;
152-
root["username"] = settings.username;
153-
root["password"] = settings.password;
154-
root["client_id"] = settings.clientId;
155-
root["keep_alive"] = settings.keepAlive;
156-
root["clean_session"] = settings.cleanSession;
157-
root["multiple_instances"] = settings.multiple_instances;
148+
root["enabled"] = settings.enabled;
149+
root["host"] = settings.host;
150+
root["port"] = settings.port;
151+
root["base"] = settings.base;
152+
root["username"] = settings.username;
153+
root["password"] = settings.password;
154+
root["client_id"] = settings.clientId;
155+
root["keep_alive"] = settings.keepAlive;
156+
root["clean_session"] = settings.cleanSession;
157+
root["entity_format"] = settings.entity_format;
158158

159159
// added by proddy for EMS-ESP
160160
root["publish_time_boiler"] = settings.publish_time_boiler;
@@ -178,18 +178,18 @@ StateUpdateResult MqttSettings::update(JsonObject & root, MqttSettings & setting
178178
MqttSettings newSettings = {};
179179
bool changed = false;
180180

181-
newSettings.enabled = root["enabled"] | FACTORY_MQTT_ENABLED;
182-
newSettings.host = root["host"] | FACTORY_MQTT_HOST;
183-
newSettings.port = root["port"] | FACTORY_MQTT_PORT;
184-
newSettings.base = root["base"] | FACTORY_MQTT_BASE;
185-
newSettings.username = root["username"] | FACTORY_MQTT_USERNAME;
186-
newSettings.password = root["password"] | FACTORY_MQTT_PASSWORD;
187-
newSettings.clientId = root["client_id"] | FACTORY_MQTT_CLIENT_ID;
188-
newSettings.keepAlive = root["keep_alive"] | FACTORY_MQTT_KEEP_ALIVE;
189-
newSettings.cleanSession = root["clean_session"] | FACTORY_MQTT_CLEAN_SESSION;
190-
newSettings.multiple_instances = root["multiple_instances"] | FACTORY_MQTT_MULTIPLE_INSTANCES;
191-
newSettings.mqtt_qos = root["mqtt_qos"] | EMSESP_DEFAULT_MQTT_QOS;
192-
newSettings.mqtt_retain = root["mqtt_retain"] | EMSESP_DEFAULT_MQTT_RETAIN;
181+
newSettings.enabled = root["enabled"] | FACTORY_MQTT_ENABLED;
182+
newSettings.host = root["host"] | FACTORY_MQTT_HOST;
183+
newSettings.port = root["port"] | FACTORY_MQTT_PORT;
184+
newSettings.base = root["base"] | FACTORY_MQTT_BASE;
185+
newSettings.username = root["username"] | FACTORY_MQTT_USERNAME;
186+
newSettings.password = root["password"] | FACTORY_MQTT_PASSWORD;
187+
newSettings.clientId = root["client_id"] | FACTORY_MQTT_CLIENT_ID;
188+
newSettings.keepAlive = root["keep_alive"] | FACTORY_MQTT_KEEP_ALIVE;
189+
newSettings.cleanSession = root["clean_session"] | FACTORY_MQTT_CLEAN_SESSION;
190+
newSettings.entity_format = root["entity_format"] | FACTORY_MQTT_ENTITY_FORMAT;
191+
newSettings.mqtt_qos = root["mqtt_qos"] | EMSESP_DEFAULT_MQTT_QOS;
192+
newSettings.mqtt_retain = root["mqtt_retain"] | EMSESP_DEFAULT_MQTT_RETAIN;
193193

194194
newSettings.publish_time_boiler = root["publish_time_boiler"] | EMSESP_DEFAULT_PUBLISH_TIME;
195195
newSettings.publish_time_thermostat = root["publish_time_thermostat"] | EMSESP_DEFAULT_PUBLISH_TIME;
@@ -223,7 +223,7 @@ StateUpdateResult MqttSettings::update(JsonObject & root, MqttSettings & setting
223223
changed = true;
224224
}
225225

226-
if (newSettings.multiple_instances != settings.multiple_instances) {
226+
if (newSettings.entity_format != settings.entity_format) {
227227
changed = true;
228228
}
229229

lib/framework/MqttSettingsService.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ static String generateClientId() {
5757
#define FACTORY_MQTT_MAX_TOPIC_LENGTH 128
5858
#endif
5959

60-
#ifndef FACTORY_MQTT_MULTIPLE_INSTANCES
61-
#define FACTORY_MQTT_MULTIPLE_INSTANCES true
60+
#ifndef FACTORY_MQTT_ENTITY_FORMAT
61+
#define FACTORY_MQTT_ENTITY_FORMAT 1 // use shortnames
6262
#endif
6363

6464
class MqttSettings {
@@ -80,7 +80,7 @@ class MqttSettings {
8080
bool cleanSession;
8181

8282
// multiple instances
83-
bool multiple_instances;
83+
bool entity_format;
8484

8585
// proddy EMS-ESP specific
8686
String base;

lib_standalone/ESP8266React.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class DummySettings {
8181
String username = "";
8282
uint16_t keepAlive = 60;
8383
bool cleanSession = false;
84-
bool multiple_instances = false;
84+
uint8_t entity_format = 1;
8585

8686
uint16_t publish_time_boiler = 10;
8787
uint16_t publish_time_thermostat = 10;

mock-api/server.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ mqtt_settings = {
223223
client_id: 'ems-esp',
224224
keep_alive: 60,
225225
clean_session: true,
226-
multiple_instances: true,
226+
entity_format: 1,
227227
publish_time_boiler: 10,
228228
publish_time_thermostat: 10,
229229
publish_time_solar: 10,

src/analogsensor.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ void AnalogSensor::publish_values(const bool force) {
452452
config["val_tpl"] = str;
453453

454454
char uniq_s[70];
455-
if (Mqtt::multiple_instances()) {
455+
if (Mqtt::entity_format() == 2) {
456456
snprintf(uniq_s, sizeof(uniq_s), "%s_analogsensor_%d", Mqtt::basename().c_str(), sensor.gpio());
457457
} else {
458458
snprintf(uniq_s, sizeof(uniq_s), "analogsensor_%d", sensor.gpio());

src/dallassensor.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ void DallasSensor::publish_values(const bool force) {
519519
config["val_tpl"] = str;
520520

521521
char uniq_s[70];
522-
if (Mqtt::multiple_instances()) {
522+
if (Mqtt::entity_format() == 2) {
523523
snprintf(uniq_s, sizeof(uniq_s), "%s_dallassensor_%s", Mqtt::basename().c_str(), sensor.id().c_str());
524524
} else {
525525
snprintf(uniq_s, sizeof(uniq_s), "dallassensor_%s", sensor.id().c_str());

src/mqtt.cpp

+9-5
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ uint32_t Mqtt::publish_time_sensor_;
3838
uint32_t Mqtt::publish_time_other_;
3939
uint32_t Mqtt::publish_time_heartbeat_;
4040
bool Mqtt::mqtt_enabled_;
41-
bool Mqtt::multiple_instances_;
41+
uint8_t Mqtt::entity_format_;
4242
bool Mqtt::ha_enabled_;
4343
uint8_t Mqtt::nested_format_;
4444
std::string Mqtt::discovery_prefix_;
@@ -430,7 +430,7 @@ void Mqtt::load_settings() {
430430
publish_single2cmd_ = mqttSettings.publish_single2cmd;
431431
send_response_ = mqttSettings.send_response;
432432
discovery_prefix_ = mqttSettings.discovery_prefix.c_str();
433-
multiple_instances_ = mqttSettings.multiple_instances;
433+
entity_format_ = mqttSettings.entity_format;
434434

435435
// convert to milliseconds
436436
publish_time_boiler_ = mqttSettings.publish_time_boiler * 1000;
@@ -609,7 +609,7 @@ void Mqtt::ha_status() {
609609
StaticJsonDocument<EMSESP_JSON_SIZE_HA_CONFIG> doc;
610610

611611
char uniq[70];
612-
if (Mqtt::multiple_instances()) {
612+
if (Mqtt::entity_format() == 2) {
613613
snprintf(uniq, sizeof(uniq), "%s_system_status", mqtt_basename_.c_str());
614614
} else {
615615
strcpy(uniq, "system_status");
@@ -991,10 +991,14 @@ void Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev
991991

992992
// build unique identifier also used as object_id and becomes the Entity ID in HA
993993
char uniq_id[70];
994-
if (Mqtt::multiple_instances()) {
994+
if (Mqtt::entity_format() == 2) {
995995
// prefix base name to each uniq_id and use the shortname
996996
snprintf(uniq_id, sizeof(uniq_id), "%s_%s_%s", mqtt_basename_.c_str(), device_name, entity_with_tag);
997+
} else if (Mqtt::entity_format() == 1) {
998+
// shortname, no mqtt base
999+
snprintf(uniq_id, sizeof(uniq_id), "%s_%s", device_name, entity_with_tag);
9971000
} else {
1001+
// entity_format is 0
9981002
// old v3.4 style
9991003
// take en_name and replace all spaces and lowercase it
10001004
char uniq_s[40];
@@ -1308,7 +1312,7 @@ void Mqtt::publish_ha_climate_config(const uint8_t tag, const bool has_roomtemp,
13081312

13091313
snprintf(name_s, sizeof(name_s), "Hc%d", hc_num);
13101314

1311-
if (Mqtt::multiple_instances()) {
1315+
if (Mqtt::entity_format() == 2) {
13121316
snprintf(uniq_id_s, sizeof(uniq_id_s), "%s_thermostat_hc%d", mqtt_basename_.c_str(), hc_num); // add basename
13131317
} else {
13141318
snprintf(uniq_id_s, sizeof(uniq_id_s), "thermostat_hc%d", hc_num); // backward compatible with v3.4

src/mqtt.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,8 @@ class Mqtt {
181181
return nested_format_ == NestedFormat::NESTED;
182182
}
183183

184-
static bool multiple_instances() {
185-
return multiple_instances_;
184+
static uint8_t entity_format() {
185+
return entity_format_;
186186
}
187187

188188
static void nested_format(uint8_t nested_format) {
@@ -322,7 +322,7 @@ class Mqtt {
322322
static bool mqtt_enabled_;
323323
static bool ha_enabled_;
324324
static uint8_t nested_format_;
325-
static bool multiple_instances_;
325+
static uint8_t entity_format_;
326326
static std::string discovery_prefix_;
327327
static bool publish_single_;
328328
static bool publish_single2cmd_;

src/shower.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ void Shower::set_shower_state(bool state, bool force) {
155155
doc["name"] = "Shower Active";
156156

157157
char str[70];
158-
if (Mqtt::multiple_instances()) {
158+
if (Mqtt::entity_format() == 2) {
159159
snprintf(str, sizeof(str), "%s_shower_active", Mqtt::basename().c_str());
160160
} else {
161161
snprintf(str, sizeof(str), "shower_active"); // v3.4 compatible

src/system.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1152,7 +1152,7 @@ bool System::command_info(const char * value, const int8_t id, JsonObject & outp
11521152
node["client id"] = settings.clientId;
11531153
node["keep alive"] = settings.keepAlive;
11541154
node["clean session"] = settings.cleanSession;
1155-
node["multiple instances"] = settings.multiple_instances;
1155+
node["entity format"] = settings.entity_format;
11561156
node["base"] = settings.base;
11571157
node["discovery prefix"] = settings.discovery_prefix;
11581158
node["nested format"] = settings.nested_format;

0 commit comments

Comments
 (0)