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
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) => (
-
- )),
- []
+ AnalogTypeNames.map((val, i) => ({ name: val, value: i + 1 }))
+ .sort((a, b) => a.name.localeCompare(b.name))
+ .map(({ name, value }) => (
+
+ )),
+ [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 = {
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',
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 = {
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