From c1b444541fb6da2995294948adb32743173e5514 Mon Sep 17 00:00:00 2001 From: proddy Date: Wed, 17 Dec 2025 22:09:17 +0100 Subject: [PATCH 1/7] fix HA --- src/core/analogsensor.cpp | 7 +------ src/core/temperaturesensor.cpp | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/core/analogsensor.cpp b/src/core/analogsensor.cpp index 6a7a7e3e3..bea964151 100644 --- a/src/core/analogsensor.cpp +++ b/src/core/analogsensor.cpp @@ -799,11 +799,6 @@ void AnalogSensor::publish_values(const bool force) { config["stat_cla"] = "measurement"; } - // see if we need to create the [devs] discovery section, as this needs only to be done once for all sensors - if (std::none_of(sensors_.begin(), sensors_.end(), [](const auto & sensor) { return sensor.ha_registered; })) { - Mqtt::add_ha_dev_section(config.as(), "Analog Sensors", nullptr, "EMS-ESP", EMSESP_APP_VERSION, true); - } - // add default_entity_id std::string topic_str(topic); config["def_ent_id"] = topic_str.substr(0, topic_str.find("/")) + "." + uniq_s; @@ -813,7 +808,7 @@ void AnalogSensor::publish_values(const bool force) { Mqtt::add_ha_avty_section(config.as(), stat_t, val_cond); sensor.ha_registered = Mqtt::queue_ha(topic, config.as()); - ha_dev_created = sensor.ha_registered; + ha_dev_created |= sensor.ha_registered; } } diff --git a/src/core/temperaturesensor.cpp b/src/core/temperaturesensor.cpp index 175c8bfec..6991071ec 100644 --- a/src/core/temperaturesensor.cpp +++ b/src/core/temperaturesensor.cpp @@ -552,7 +552,7 @@ void TemperatureSensor::publish_values(const bool force) { snprintf(topic, sizeof(topic), "sensor/%s/%s_%s/config", Mqtt::basename().c_str(), F_(temperaturesensor), sensor.id()); sensor.ha_registered = Mqtt::queue_ha(topic, config.as()); - ha_dev_created = sensor.ha_registered; + ha_dev_created |= sensor.ha_registered; } } } From 9c243cbe8dbad9c0eea46dad0a9c1eb1df68ef04 Mon Sep 17 00:00:00 2001 From: proddy Date: Wed, 17 Dec 2025 22:09:32 +0100 Subject: [PATCH 2/7] sort types --- .../src/app/main/SensorsAnalogDialog.tsx | 22 ++++++++++--------- interface/src/app/main/types.ts | 4 ++-- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/interface/src/app/main/SensorsAnalogDialog.tsx b/interface/src/app/main/SensorsAnalogDialog.tsx index c6af79319..032bd1605 100644 --- a/interface/src/app/main/SensorsAnalogDialog.tsx +++ b/interface/src/app/main/SensorsAnalogDialog.tsx @@ -108,16 +108,18 @@ const SensorsAnalogDialog = ({ // Memoize menu items to avoid recreation on each render const analogTypeMenuItems = useMemo( () => - AnalogTypeNames.map((val, i) => ( - - {val} - - )), - [] + AnalogTypeNames.map((val, i) => ({ name: val, value: i + 1 })) + .sort((a, b) => a.name.localeCompare(b.name)) + .map(({ name, value }) => ( + + {name} + + )), + [disabledTypeList] ); const uomMenuItems = useMemo( diff --git a/interface/src/app/main/types.ts b/interface/src/app/main/types.ts index ff71dca0a..67b88d10e 100644 --- a/interface/src/app/main/types.ts +++ b/interface/src/app/main/types.ts @@ -262,7 +262,7 @@ export const AnalogTypeNames = [ 'PWM 0', // 7 'PWM 1', // 8 'PWM 2', // 9 - 'NTC Temp.', // 10 + 'NTC Temp', // 10 'RGB Led', // 11 'Pulse', // 12 'Freq 0', // 13 @@ -270,7 +270,7 @@ export const AnalogTypeNames = [ 'Freq 2', // 15 'Counter 0', // 16 'Counter 1', // 17 - 'Counter2' // 18 + 'Counter 2' // 18 ] as const; export const BOARD_PROFILES = { From 90ad2dde5481dca83b013b32d91308cfd8e736b6 Mon Sep 17 00:00:00 2001 From: proddy Date: Wed, 17 Dec 2025 22:09:55 +0100 Subject: [PATCH 3/7] minor optimization --- interface/src/app/settings/TZ.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/interface/src/app/settings/TZ.tsx b/interface/src/app/settings/TZ.tsx index a78beb2f5..c734f1809 100644 --- a/interface/src/app/settings/TZ.tsx +++ b/interface/src/app/settings/TZ.tsx @@ -2,9 +2,7 @@ import { useMemo } from 'react'; import { MenuItem } from '@mui/material'; -type TimeZones = Record; - -export const TIME_ZONES: Readonly = { +export const TIME_ZONES: Record = { 'Africa/Abidjan': 'GMT0', 'Africa/Accra': 'GMT0', 'Africa/Addis_Ababa': 'EAT-3', From a81e56e3bfbc0a58ebc51bf32b345ffd274241e6 Mon Sep 17 00:00:00 2001 From: proddy Date: Wed, 17 Dec 2025 22:10:05 +0100 Subject: [PATCH 4/7] package update --- interface/package.json | 2 +- interface/pnpm-lock.yaml | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/interface/package.json b/interface/package.json index b28b1e529..d458f87d5 100644 --- a/interface/package.json +++ b/interface/package.json @@ -41,7 +41,7 @@ "react": "^19.2.3", "react-dom": "^19.2.3", "react-icons": "^5.5.0", - "react-router": "^7.10.1", + "react-router": "^7.11.0", "react-toastify": "^11.0.5", "typesafe-i18n": "^5.26.2", "typescript": "^5.9.3" diff --git a/interface/pnpm-lock.yaml b/interface/pnpm-lock.yaml index 69e099b82..d66e262a2 100644 --- a/interface/pnpm-lock.yaml +++ b/interface/pnpm-lock.yaml @@ -63,8 +63,8 @@ importers: specifier: ^5.5.0 version: 5.5.0(react@19.2.3) react-router: - specifier: ^7.10.1 - version: 7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^7.11.0 + version: 7.11.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react-toastify: specifier: ^11.0.5 version: 11.0.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -1027,8 +1027,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.9.8: - resolution: {integrity: sha512-Y1fOuNDowLfgKOypdc9SPABfoWXuZHBOyCS4cD52IeZBhr4Md6CLLs6atcxVrzRmQ06E7hSlm5bHHApPKR/byA==} + baseline-browser-mapping@2.9.9: + resolution: {integrity: sha512-V8fbOCSeOFvlDj7LLChUcqbZrdKD9RU/VR260piF1790vT0mfLSwGc/Qzxv3IqiTukOpNtItePa0HBpMAj7MDg==} hasBin: true bin-build@3.0.0: @@ -2525,8 +2525,8 @@ packages: react-is@19.2.3: resolution: {integrity: sha512-qJNJfu81ByyabuG7hPFEbXqNcWSU3+eVus+KJs+0ncpGfMyYdvSmxiJxbWR65lYi1I+/0HBcliO029gc4F+PnA==} - react-router@7.10.1: - resolution: {integrity: sha512-gHL89dRa3kwlUYtRQ+m8NmxGI6CgqN+k4XyGjwcFoQwwCWF6xXpOCUlDovkXClS0d0XJN/5q7kc5W3kiFEd0Yw==} + react-router@7.11.0: + resolution: {integrity: sha512-uI4JkMmjbWCZc01WVP2cH7ZfSzH91JAZUDd7/nIprDgWxBV1TkkmLToFh7EbMTcMak8URFRa2YoBL/W8GWnCTQ==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -3958,7 +3958,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.9.8: {} + baseline-browser-mapping@2.9.9: {} bin-build@3.0.0: dependencies: @@ -4015,7 +4015,7 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.9.8 + baseline-browser-mapping: 2.9.9 caniuse-lite: 1.0.30001760 electron-to-chromium: 1.5.267 node-releases: 2.0.27 @@ -5525,7 +5525,7 @@ snapshots: react-is@19.2.3: {} - react-router@7.10.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-router@7.11.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: cookie: 1.1.1 react: 19.2.3 From 89fa5947bdf2e618bc9763579c227cf0f4ccb3a3 Mon Sep 17 00:00:00 2001 From: proddy Date: Wed, 17 Dec 2025 22:10:17 +0100 Subject: [PATCH 5/7] fix standalone --- mock-api/restServer.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mock-api/restServer.ts b/mock-api/restServer.ts index b2129a961..5ee3e539c 100644 --- a/mock-api/restServer.ts +++ b/mock-api/restServer.ts @@ -1048,7 +1048,9 @@ const emsesp_sensordata = { } ], analog_enabled: true, - available_gpios: [] as number[] + available_gpios: [] as number[], + exclude_types: [] as number[], + platform: 'ESP32' }; const activity = { From 2a16cb6e64fbd5d9179835d9fbb23d01fd4e0671 Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 18 Dec 2025 06:45:25 +0100 Subject: [PATCH 6/7] 3.7.3-dev.38 --- src/emsesp_version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/emsesp_version.h b/src/emsesp_version.h index 20ec83fc6..e3ec4e341 100644 --- a/src/emsesp_version.h +++ b/src/emsesp_version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.7.3-dev.37" +#define EMSESP_APP_VERSION "3.7.3-dev.38" From 14ad1239db5fe9b2b4600cda951f98d296e35f31 Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 18 Dec 2025 06:45:48 +0100 Subject: [PATCH 7/7] don't need to add name to ids each time for HA --- src/core/mqtt.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/core/mqtt.cpp b/src/core/mqtt.cpp index 5005d2a7c..a201fdc54 100644 --- a/src/core/mqtt.cpp +++ b/src/core/mqtt.cpp @@ -1451,7 +1451,7 @@ void Mqtt::add_ha_dev_section(JsonObject doc, const char * name, const char * mo // create dev section JsonObject dev_json = doc["dev"].to(); - // add ids and name - with capitalize first letter + // add ids and name - capitalize first letter of the name JsonArray ids = dev_json["ids"].to(); // ids, it is an array with a single element if (name != nullptr) { // for ids, replace all spaces with - @@ -1464,8 +1464,7 @@ void Mqtt::add_ha_dev_section(JsonObject doc, const char * name, const char * mo dev_json["name"] = Mqtt::basename() + " " + cap_name; free(cap_name); } else { - ids.add(Mqtt::basename()); - dev_json["name"] = Mqtt::basename(); + ids.add(Mqtt::basename()); // no name, assign it to the main EMS-ESP device in HA } // create the model, manufacturer and version