From d12879b07b532d047401f350d5b7004a487a39a2 Mon Sep 17 00:00:00 2001 From: Proddy Date: Sun, 24 Jul 2022 13:39:52 +0200 Subject: [PATCH 1/5] link to device entity details from customization page --- .../src/project/SettingsCustomization.tsx | 62 ++++++++----------- interface/src/project/types.ts | 5 +- mock-api/server.js | 5 +- src/web/WebCustomizationService.cpp | 13 ++-- 4 files changed, 41 insertions(+), 44 deletions(-) diff --git a/interface/src/project/SettingsCustomization.tsx b/interface/src/project/SettingsCustomization.tsx index 3e74419e7..cdaeec26d 100644 --- a/interface/src/project/SettingsCustomization.tsx +++ b/interface/src/project/SettingsCustomization.tsx @@ -13,7 +13,8 @@ import { ToggleButtonGroup, Tooltip, Grid, - TextField + TextField, + Link } from '@mui/material'; import { Table } from '@table-library/react-table-library/table'; @@ -26,11 +27,6 @@ import { useSnackbar } from 'notistack'; import SaveIcon from '@mui/icons-material/Save'; import CancelIcon from '@mui/icons-material/Cancel'; -// import EditOffOutlinedIcon from '@mui/icons-material/EditOffOutlined'; -// import StarIcon from '@mui/icons-material/Star'; -// import VisibilityOffOutlinedIcon from '@mui/icons-material/VisibilityOffOutlined'; -// import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined'; - import SettingsBackupRestoreIcon from '@mui/icons-material/SettingsBackupRestore'; import KeyboardArrowUpOutlinedIcon from '@mui/icons-material/KeyboardArrowUpOutlined'; import KeyboardArrowDownOutlinedIcon from '@mui/icons-material/KeyboardArrowDownOutlined'; @@ -48,13 +44,15 @@ import { extractErrorMessage } from '../utils'; import { DeviceShort, Devices, DeviceEntity, DeviceEntityMask } from './types'; +export const APIURL = window.location.origin + '/api/'; + const SettingsCustomization: FC = () => { const { enqueueSnackbar } = useSnackbar(); const [deviceEntities, setDeviceEntities] = useState([{ id: '', v: 0, n: '', m: 0, w: false }]); const [devices, setDevices] = useState(); const [errorMessage, setErrorMessage] = useState(); - const [selectedDevice, setSelectedDevice] = useState(0); + const [selectedDevice, setSelectedDevice] = useState(-1); const [confirmReset, setConfirmReset] = useState(false); const [selectedFilters, setSelectedFilters] = useState(0); const [search, setSearch] = useState(''); @@ -94,7 +92,6 @@ const SettingsCustomization: FC = () => { Row: ` background-color: #1e1e1e; position: relative; - cursor: pointer; .td { border-top: 1px solid #565656; @@ -107,11 +104,6 @@ const SettingsCustomization: FC = () => { font-weight: normal; } - &:hover .td { - border-top: 1px solid #177ac9; - border-bottom: 1px solid #177ac9; - } - &:nth-of-type(odd) .td { background-color: #303030; } @@ -194,7 +186,15 @@ const SettingsCustomization: FC = () => { } else if (de.n === '') { return 'Command: ' + de.id; } - return de.n + ' (' + de.id + ')'; + return ( + <> + {de.n} ( + + {de.id} + + ) + + ); } const getMaskNumber = (newMask: string[]) => { @@ -239,20 +239,12 @@ const SettingsCustomization: FC = () => { ); }; - function compareDevices(a: DeviceShort, b: DeviceShort) { - if (a.s < b.s) { - return -1; - } - if (a.s > b.s) { - return 1; - } - return 0; - } - const changeSelectedDevice = (event: React.ChangeEvent) => { - const selected_device = parseInt(event.target.value, 10); - setSelectedDevice(selected_device); - fetchDeviceEntities(selected_device); + if (devices) { + const selected_device = parseInt(event.target.value, 10); + setSelectedDevice(selected_device); + fetchDeviceEntities(devices?.devices[selected_device].i); + } }; const resetCustomization = async () => { @@ -267,7 +259,7 @@ const SettingsCustomization: FC = () => { }; const saveCustomization = async () => { - if (deviceEntities && selectedDevice) { + if (devices && deviceEntities && selectedDevice !== -1) { const masked_entities = deviceEntities .filter((de) => de.m !== de.om) .map((new_de) => new_de.m.toString(16).padStart(2, '0') + new_de.id); @@ -279,7 +271,7 @@ const SettingsCustomization: FC = () => { try { const response = await EMSESP.writeMaskedEntities({ - id: selectedDevice, + id: devices?.devices[selectedDevice].i, entity_ids: masked_entities }); if (response.status === 200) { @@ -305,13 +297,13 @@ const SettingsCustomization: FC = () => { Select a device and customize each of its entities using the options: - =mark as a favorite   + =mark as favorite   =disable write action   - =exclude from MQTT and API outputs   + =exclude from MQTT and API   - =hide from Web Dashboard + =hide from Dashboard { margin="normal" select > - + Select a device... - {devices.devices.sort(compareDevices).map((device: DeviceShort, index) => ( - + {devices.devices.map((device: DeviceShort, index) => ( + {device.s} ))} diff --git a/interface/src/project/types.ts b/interface/src/project/types.ts index a3bd4b53c..0d5a1834b 100644 --- a/interface/src/project/types.ts +++ b/interface/src/project/types.ts @@ -104,9 +104,10 @@ export interface CoreData { export interface DeviceShort { i: number; // id - d: number; // deviceid - p: number; // productid + d?: number; // deviceid + p?: number; // productid s: string; // shortname + t?: string; // device type name } export interface Devices { diff --git a/mock-api/server.js b/mock-api/server.js index 96fdb18a3..1e6ebef3a 100644 --- a/mock-api/server.js +++ b/mock-api/server.js @@ -347,18 +347,21 @@ const emsesp_devices = { d: 23, p: 77, s: 'Thermostat (RC20/Moduline 300)', + t: 'thermostat1', }, { i: 2, d: 8, p: 123, s: 'Boiler (Nefit GBx72/Trendline/Cerapur/Greenstar Si/27i)', + t: 'boiler', }, { i: 4, d: 16, p: 165, s: 'Thermostat (RC100/Moduline 1000/1010)', + t: 'thermostat2', }, ], } @@ -1224,8 +1227,8 @@ rest_server.get(GET_CUSTOMIZATIONS_ENDPOINT, (req, res) => { // start server const expressServer = rest_server.listen(port, () => + console.log(`EMS-ESP REST API server running on http://localhost:${port}/api`), ) -console.log(`EMS-ESP Rest API listening to http://localhost:${port}/api`) // start websocket server const websocketServer = new WebSocket.Server({ diff --git a/src/web/WebCustomizationService.cpp b/src/web/WebCustomizationService.cpp index 1b37c830e..36dfb2e16 100644 --- a/src/web/WebCustomizationService.cpp +++ b/src/web/WebCustomizationService.cpp @@ -165,22 +165,23 @@ void WebCustomizationService::devices(AsyncWebServerRequest * request) { auto * response = new AsyncJsonResponse(false, EMSESP_JSON_SIZE_LARGE_DYN); JsonObject root = response->getRoot(); + // list is already sorted by device type + // controller is ignored since it doesn't have any associated entities JsonArray devices = root.createNestedArray("devices"); for (const auto & emsdevice : EMSESP::emsdevices) { if (emsdevice->has_entities()) { JsonObject obj = devices.createNestedObject(); - obj["i"] = emsdevice->unique_id(); // a unique id + obj["i"] = emsdevice->unique_id(); // its unique id + obj["s"] = emsdevice->device_type_name() + " (" + emsdevice->name() + ")"; // shortname - /* + // device type name. We may have one than one (e.g. multiple thermostats) so postfix name with index uint8_t device_index = EMSESP::device_index(emsdevice->device_type(), emsdevice->unique_id()); if (device_index) { char s[10]; - obj["s"] = emsdevice->device_type_name() + Helpers::smallitoa(s, device_index) + " (" + emsdevice->name() + ")"; // shortname - we prefix the count to make it unique + obj["t"] = Helpers::toLower(emsdevice->device_type_name()) + Helpers::smallitoa(s, device_index); } else { - obj["s"] = emsdevice->device_type_name() + " (" + emsdevice->name() + ")"; + obj["t"] = Helpers::toLower(emsdevice->device_type_name()); } - */ - obj["s"] = emsdevice->device_type_name() + " (" + emsdevice->name() + ")"; } } From d0a779b1851cc57e7394a612b0a05796788d572a Mon Sep 17 00:00:00 2001 From: Proddy Date: Sun, 24 Jul 2022 13:40:08 +0200 Subject: [PATCH 2/5] minor formatting --- src/emsdevice.cpp | 2 +- src/locale_DE.h | 4 ++-- src/web/WebAPIService.cpp | 2 -- src/web/WebDataService.cpp | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index 7584d3753..c3ab9e431 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -114,7 +114,7 @@ std::string EMSdevice::device_type_2_device_name(const uint8_t device_type) { // returns device_type from a string uint8_t EMSdevice::device_name_2_device_type(const char * topic) { if (!topic) { - return DeviceType::UNKNOWN; // nullptr + return DeviceType::UNKNOWN; } // convert topic to lowercase and compare diff --git a/src/locale_DE.h b/src/locale_DE.h index 0899d40c4..859e4937d 100644 --- a/src/locale_DE.h +++ b/src/locale_DE.h @@ -269,7 +269,7 @@ MAKE_PSTR(bufferedflow, "Durchlaufspeicher") MAKE_PSTR(layeredbuffer, "Schichtspeicher") MAKE_PSTR(maintenance, "Wartung") MAKE_PSTR(heating, "Heizen") -MAKE_PSTR(cooling, "Kühlen") +MAKE_PSTR(cooling, "K�hlen") // boiler lists MAKE_PSTR_LIST(tpl_date, F("Format: < dd.mm.yyyy >")) // template for text input @@ -312,7 +312,7 @@ MAKE_PSTR(winter, "Winter") MAKE_PSTR(outdoor, "Aussentemperatur") MAKE_PSTR_WORD(mpc) MAKE_PSTR(room, "Raum") -MAKE_PSTR(room_outdoor, "Raum+Außen") +MAKE_PSTR(room_outdoor, "Raum+Au�en") MAKE_PSTR(power, "Leistung") MAKE_PSTR(constant, "konstant") MAKE_PSTR(simple, "einfach") diff --git a/src/web/WebAPIService.cpp b/src/web/WebAPIService.cpp index 73df7ee19..0ae29df9b 100644 --- a/src/web/WebAPIService.cpp +++ b/src/web/WebAPIService.cpp @@ -16,8 +16,6 @@ * along with this program. If not, see . */ -// SUrlParser from https://github.com/Mad-ness/simple-url-parser - #include "emsesp.h" using namespace std::placeholders; // for `_1` etc diff --git a/src/web/WebDataService.cpp b/src/web/WebDataService.cpp index c32bed325..fc60055dc 100644 --- a/src/web/WebDataService.cpp +++ b/src/web/WebDataService.cpp @@ -74,10 +74,10 @@ void WebDataService::core_data(AsyncWebServerRequest * request) { JsonObject root = response->getRoot(); // list is already sorted by device type - // Ignore Contoller JsonArray devices = root.createNestedArray("devices"); char buffer[3]; for (const auto & emsdevice : EMSESP::emsdevices) { + // ignore controller if (emsdevice && (emsdevice->device_type() != EMSdevice::DeviceType::CONTROLLER || emsdevice->count_entities() > 0)) { JsonObject obj = devices.createNestedObject(); obj["id"] = Helpers::smallitoa(buffer, emsdevice->unique_id()); // a unique id as a string From ba2ded1a5a6fa8c32ee12a370edb192f88b3a195 Mon Sep 17 00:00:00 2001 From: Proddy Date: Sun, 24 Jul 2022 15:20:23 +0200 Subject: [PATCH 3/5] wifi disconnect if Warning log --- src/web/WebStatusService.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/WebStatusService.cpp b/src/web/WebStatusService.cpp index 3ff433886..42c91e983 100644 --- a/src/web/WebStatusService.cpp +++ b/src/web/WebStatusService.cpp @@ -34,7 +34,7 @@ WebStatusService::WebStatusService(AsyncWebServer * server, SecurityManager * se void WebStatusService::WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info) { switch (event) { case ARDUINO_EVENT_WIFI_STA_DISCONNECTED: - EMSESP::logger().info(F("WiFi disconnected. Reason code=%d"), info.wifi_sta_disconnected.reason); // IDF 4.0 + EMSESP::logger().warning(F("WiFi disconnected. Reason code=%d"), info.wifi_sta_disconnected.reason); // IDF 4.0 WiFi.disconnect(true); break; @@ -82,7 +82,7 @@ void WebStatusService::WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info) { break; case ARDUINO_EVENT_ETH_DISCONNECTED: - EMSESP::logger().info(F("Ethernet disconnected")); + EMSESP::logger().warning(F("Ethernet disconnected")); EMSESP::system_.ethernet_connected(false); break; From cdc04f987c79de695be5f3ed50a9b36ce0037db0 Mon Sep 17 00:00:00 2001 From: Proddy Date: Mon, 25 Jul 2022 17:16:49 +0200 Subject: [PATCH 4/5] update packages --- interface/package-lock.json | 84 ++++++++++++++++++------------------- interface/package.json | 4 +- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/interface/package-lock.json b/interface/package-lock.json index d51f76129..51a44ccfb 100644 --- a/interface/package-lock.json +++ b/interface/package-lock.json @@ -12,10 +12,10 @@ "@emotion/styled": "^11.9.3", "@msgpack/msgpack": "^2.7.2", "@mui/icons-material": "^5.8.4", - "@mui/material": "^5.9.1", + "@mui/material": "^5.9.2", "@table-library/react-table-library": "4.0.10", "@types/lodash": "^4.14.182", - "@types/node": "^18.0.6", + "@types/node": "^18.6.1", "@types/react": "^18.0.15", "@types/react-dom": "^18.0.6", "@types/react-router-dom": "^5.3.3", @@ -3044,13 +3044,13 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-alpha.90", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.90.tgz", - "integrity": "sha512-hNKwzr+RkiuGsGrakz8Q2i5ezr4Dz4b4Qsdipt9SiMrhuFAra/i501VSaEIzwec9LC4G+vtW4fE7yJBB0XaAYw==", + "version": "5.0.0-alpha.91", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.91.tgz", + "integrity": "sha512-/W5amPDz+Lout4FtX5HOyx2Q+YL/EtZciFrx2DDRuUm4M/pWnjfDZAtM+0aqimEvuk3FU+/PuFc7IAyhCSX4Cg==", "dependencies": { "@babel/runtime": "^7.17.2", "@emotion/is-prop-valid": "^1.1.3", - "@mui/types": "^7.1.4", + "@mui/types": "^7.1.5", "@mui/utils": "^5.9.1", "@popperjs/core": "^2.11.5", "clsx": "^1.2.1", @@ -3101,14 +3101,14 @@ } }, "node_modules/@mui/material": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.9.1.tgz", - "integrity": "sha512-c09SbaMm7Rl7Df9JRkXwPWNbnfrutmHERTJC46OJ9OMAM9+HGQihIbGln1k2Xj65jb3E+G498FZFAoSrrBDvwQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.9.2.tgz", + "integrity": "sha512-FItBuj9bPdVier2g5OBG2HHlQLou4JuH3gdnY43tpJOrCpmWrbDVJZqrSufKJFO00qjvTYaGlJedIu+vXn79qw==", "dependencies": { "@babel/runtime": "^7.17.2", - "@mui/base": "5.0.0-alpha.90", - "@mui/system": "^5.9.1", - "@mui/types": "^7.1.4", + "@mui/base": "5.0.0-alpha.91", + "@mui/system": "^5.9.2", + "@mui/types": "^7.1.5", "@mui/utils": "^5.9.1", "@types/react-transition-group": "^4.4.5", "clsx": "^1.2.1", @@ -3201,14 +3201,14 @@ } }, "node_modules/@mui/system": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.9.1.tgz", - "integrity": "sha512-ZixTmc2+sYp++avoYJ38eM70nfwwudN06vYCU4kfwa4nQPiH+bhLYZnfYkcXRKiDR/hfT0dptbOOfQGZqBYczQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.9.2.tgz", + "integrity": "sha512-iOvt9tVeFapHL7f7M6BSIiKGMx6RTRvAmc8ipMnQ/MR5Qsxwnyv7qKtNC/K11Rk13Xx0VPaPAhyvBcsr3KdpHA==", "dependencies": { "@babel/runtime": "^7.17.2", "@mui/private-theming": "^5.9.1", "@mui/styled-engine": "^5.8.7", - "@mui/types": "^7.1.4", + "@mui/types": "^7.1.5", "@mui/utils": "^5.9.1", "clsx": "^1.2.1", "csstype": "^3.1.0", @@ -3240,9 +3240,9 @@ } }, "node_modules/@mui/types": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.1.4.tgz", - "integrity": "sha512-uveM3byMbthO+6tXZ1n2zm0W3uJCQYtwt/v5zV5I77v2v18u0ITkb8xwhsDD2i3V2Kye7SaNR6FFJ6lMuY/WqQ==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.1.5.tgz", + "integrity": "sha512-HnRXrxgHJYJcT8ZDdDCQIlqk0s0skOKD7eWs9mJgBUu70hyW4iA6Kiv3yspJR474RFH8hysKR65VVSzUSzkuwA==", "peerDependencies": { "@types/react": "*" }, @@ -3954,9 +3954,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "node_modules/@types/node": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.6.tgz", - "integrity": "sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==" + "version": "18.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.1.tgz", + "integrity": "sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -19908,13 +19908,13 @@ "integrity": "sha512-rYEi46+gIzufyYUAoHDnRzkWGxajpD9vVXFQ3g1vbjrBm6P7MBmm+s/fqPa46sxa+8FOUdEuRQKaugo5a4JWpw==" }, "@mui/base": { - "version": "5.0.0-alpha.90", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.90.tgz", - "integrity": "sha512-hNKwzr+RkiuGsGrakz8Q2i5ezr4Dz4b4Qsdipt9SiMrhuFAra/i501VSaEIzwec9LC4G+vtW4fE7yJBB0XaAYw==", + "version": "5.0.0-alpha.91", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.91.tgz", + "integrity": "sha512-/W5amPDz+Lout4FtX5HOyx2Q+YL/EtZciFrx2DDRuUm4M/pWnjfDZAtM+0aqimEvuk3FU+/PuFc7IAyhCSX4Cg==", "requires": { "@babel/runtime": "^7.17.2", "@emotion/is-prop-valid": "^1.1.3", - "@mui/types": "^7.1.4", + "@mui/types": "^7.1.5", "@mui/utils": "^5.9.1", "@popperjs/core": "^2.11.5", "clsx": "^1.2.1", @@ -19931,14 +19931,14 @@ } }, "@mui/material": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.9.1.tgz", - "integrity": "sha512-c09SbaMm7Rl7Df9JRkXwPWNbnfrutmHERTJC46OJ9OMAM9+HGQihIbGln1k2Xj65jb3E+G498FZFAoSrrBDvwQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.9.2.tgz", + "integrity": "sha512-FItBuj9bPdVier2g5OBG2HHlQLou4JuH3gdnY43tpJOrCpmWrbDVJZqrSufKJFO00qjvTYaGlJedIu+vXn79qw==", "requires": { "@babel/runtime": "^7.17.2", - "@mui/base": "5.0.0-alpha.90", - "@mui/system": "^5.9.1", - "@mui/types": "^7.1.4", + "@mui/base": "5.0.0-alpha.91", + "@mui/system": "^5.9.2", + "@mui/types": "^7.1.5", "@mui/utils": "^5.9.1", "@types/react-transition-group": "^4.4.5", "clsx": "^1.2.1", @@ -19970,14 +19970,14 @@ } }, "@mui/system": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.9.1.tgz", - "integrity": "sha512-ZixTmc2+sYp++avoYJ38eM70nfwwudN06vYCU4kfwa4nQPiH+bhLYZnfYkcXRKiDR/hfT0dptbOOfQGZqBYczQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.9.2.tgz", + "integrity": "sha512-iOvt9tVeFapHL7f7M6BSIiKGMx6RTRvAmc8ipMnQ/MR5Qsxwnyv7qKtNC/K11Rk13Xx0VPaPAhyvBcsr3KdpHA==", "requires": { "@babel/runtime": "^7.17.2", "@mui/private-theming": "^5.9.1", "@mui/styled-engine": "^5.8.7", - "@mui/types": "^7.1.4", + "@mui/types": "^7.1.5", "@mui/utils": "^5.9.1", "clsx": "^1.2.1", "csstype": "^3.1.0", @@ -19985,9 +19985,9 @@ } }, "@mui/types": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.1.4.tgz", - "integrity": "sha512-uveM3byMbthO+6tXZ1n2zm0W3uJCQYtwt/v5zV5I77v2v18u0ITkb8xwhsDD2i3V2Kye7SaNR6FFJ6lMuY/WqQ==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.1.5.tgz", + "integrity": "sha512-HnRXrxgHJYJcT8ZDdDCQIlqk0s0skOKD7eWs9mJgBUu70hyW4iA6Kiv3yspJR474RFH8hysKR65VVSzUSzkuwA==", "requires": {} }, "@mui/utils": { @@ -20491,9 +20491,9 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "@types/node": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.6.tgz", - "integrity": "sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==" + "version": "18.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.1.tgz", + "integrity": "sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg==" }, "@types/parse-json": { "version": "4.0.0", diff --git a/interface/package.json b/interface/package.json index 837a28e57..7fce15790 100644 --- a/interface/package.json +++ b/interface/package.json @@ -8,10 +8,10 @@ "@emotion/styled": "^11.9.3", "@msgpack/msgpack": "^2.7.2", "@mui/icons-material": "^5.8.4", - "@mui/material": "^5.9.1", + "@mui/material": "^5.9.2", "@table-library/react-table-library": "4.0.10", "@types/lodash": "^4.14.182", - "@types/node": "^18.0.6", + "@types/node": "^18.6.1", "@types/react": "^18.0.15", "@types/react-dom": "^18.0.6", "@types/react-router-dom": "^5.3.3", From a3a29132ab80f5591a4892d0e89e56f56554238a Mon Sep 17 00:00:00 2001 From: Proddy Date: Mon, 25 Jul 2022 17:17:10 +0200 Subject: [PATCH 5/5] no need to add uique id to end of device type since it's unique anyway --- src/web/WebCustomizationService.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/web/WebCustomizationService.cpp b/src/web/WebCustomizationService.cpp index 36dfb2e16..5673d285d 100644 --- a/src/web/WebCustomizationService.cpp +++ b/src/web/WebCustomizationService.cpp @@ -175,6 +175,8 @@ void WebCustomizationService::devices(AsyncWebServerRequest * request) { obj["s"] = emsdevice->device_type_name() + " (" + emsdevice->name() + ")"; // shortname // device type name. We may have one than one (e.g. multiple thermostats) so postfix name with index + // code block not needed - see https://github.com/emsesp/EMS-ESP32/pull/586#issuecomment-1193779668 + /* uint8_t device_index = EMSESP::device_index(emsdevice->device_type(), emsdevice->unique_id()); if (device_index) { char s[10]; @@ -182,6 +184,8 @@ void WebCustomizationService::devices(AsyncWebServerRequest * request) { } else { obj["t"] = Helpers::toLower(emsdevice->device_type_name()); } + */ + obj["t"] = Helpers::toLower(emsdevice->device_type_name()); } }