From 5d3f8e5b697cd43967caa166f26281de452b4a50 Mon Sep 17 00:00:00 2001 From: Proddy Date: Wed, 14 Feb 2024 22:19:11 +0100 Subject: [PATCH 1/9] updates --- .gitignore | 1 + interface/package.json | 2 +- interface/yarn.lock | 10 +++++----- platformio.ini | 15 +++++++-------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 9086892e9..127a92df7 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,7 @@ stats.html !.yarn/versions yarn.lock interface/analyse.html +interface/vite.config.ts.timestamp* # scripts test.sh diff --git a/interface/package.json b/interface/package.json index ecca8641b..b16be7939 100644 --- a/interface/package.json +++ b/interface/package.json @@ -70,7 +70,7 @@ "prettier": "^3.2.5", "rollup-plugin-visualizer": "^5.12.0", "terser": "^5.27.0", - "vite": "^5.1.1", + "vite": "^5.1.2", "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^4.3.1" }, diff --git a/interface/yarn.lock b/interface/yarn.lock index 8320022b6..ee2137def 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -1893,7 +1893,7 @@ __metadata: terser: "npm:^5.27.0" typesafe-i18n: "npm:^5.26.2" typescript: "npm:^5.3.3" - vite: "npm:^5.1.1" + vite: "npm:^5.1.2" vite-plugin-imagemin: "npm:^0.6.1" vite-tsconfig-paths: "npm:^4.3.1" languageName: unknown @@ -8738,9 +8738,9 @@ __metadata: languageName: node linkType: hard -"vite@npm:^5.1.1": - version: 5.1.1 - resolution: "vite@npm:5.1.1" +"vite@npm:^5.1.2": + version: 5.1.2 + resolution: "vite@npm:5.1.2" dependencies: esbuild: "npm:^0.19.3" fsevents: "npm:~2.3.3" @@ -8774,7 +8774,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10/bdb8e683caddaa0a9adcbf40144ca8ea3660836b208862b07d43787ea867845919af16e58745365bd13ed3b7f66bbf9788a6869ee22cfaacac01645b59729c34 + checksum: 10/fbfc5a84ee33c01cd2c3109ba08c2f3822df9a85bee79179ba5a812757f895e2da234208881b9943291d48b0a4ef8fb90ffaa790d89888530a2ad6c70c169e12 languageName: node linkType: hard diff --git a/platformio.ini b/platformio.ini index 575a2218b..407928203 100644 --- a/platformio.ini +++ b/platformio.ini @@ -2,8 +2,8 @@ ; override any settings with your own local ones in pio_local.ini [platformio] -; default_envs = esp32_4M -default_envs = lolin_s3 +default_envs = esp32_4M +; default_envs = lolin_s3 ; default_envs = esp32_16M ; default_envs = standalone @@ -48,12 +48,11 @@ extra_scripts = scripts/rename_fw.py [espressi32_base_tasmota] -; use Tasmota's library which removes some libs (like mbedtsl) and increases available heap -; platform = https://github.com/tasmota/platform-espressif32.git ; latest development -; latest release with WiFi_secure.h, Arduino 2.0.14 -platform = https://github.com/tasmota/platform-espressif32/releases/download/2024.01.00/platform-espressif32.zip -; latest Arduino 3.0/IDF 5.1.(alpha 3): -; platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.12.10/platform-espressif32.zip +; use Tasmota's library which removes some unused libs (like mbedtsl, so no WiFi_secure.h) and increases available heap +; Tasmota Arduino Core 2.0.14 with IPv6 support, based on IDF 4.4.6 +platform = https://github.com/tasmota/platform-espressif32/releases/download/2024.01.01/platform-espressif32.zip +; Tasmota Arduino Core 3.0.0-alpha based on IDF v5.1.2 +; platform = https://github.com/tasmota/platform-espressif32/releases/download/2024.02.10/platform-espressif32.zip framework = arduino board_build.filesystem = littlefs build_flags = From 33b6ece55b7c93e6a752cc952ecab553b00ef918 Mon Sep 17 00:00:00 2001 From: Proddy Date: Tue, 20 Feb 2024 23:27:56 +0100 Subject: [PATCH 2/9] Expose EMS-ESP commands (like reset) via MQTT Discovery #1605 --- src/emsdevice.cpp | 8 ++--- src/mqtt.cpp | 82 +++++++++++++++++++++++++---------------------- 2 files changed, 47 insertions(+), 43 deletions(-) diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index 1ad7a1832..06254b663 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -1561,7 +1561,7 @@ void EMSdevice::publish_all_values() { // For each value in the device create the json object pair and add it to given json // return false if empty -// this is used to create the MQTT payloads, Console messages and Web API calls +// this is used to create the MQTT payloads, Console messages and Web API call responses bool EMSdevice::generate_values(JsonObject output, const uint8_t tag_filter, const bool nested, const uint8_t output_target) { bool has_values = false; // to see if we've added a value. it's faster than doing a json.size() at the end uint8_t old_tag = 255; // NAN @@ -1697,8 +1697,8 @@ bool EMSdevice::generate_values(JsonObject output, const uint8_t tag_filter, con } } - // commenting out - we don't want Commands in MQTT or Console - // else if (dv.type == DeviceValueType::CMD && output_target != EMSdevice::OUTPUT_TARGET::MQTT) { + // commenting out as we don't want Commands in Console ('show values') + // else if (dv.type == DeviceValueType::CMD && output_target != EMSdevice::OUTPUT_TARGET::MQTT) { // json[name] = ""; // } @@ -1748,7 +1748,7 @@ void EMSdevice::mqtt_ha_entity_config_create() { } } - if (!dv.has_state(DeviceValueState::DV_HA_CONFIG_CREATED) && (dv.type != DeviceValueType::CMD) && dv.has_state(DeviceValueState::DV_ACTIVE) + if (!dv.has_state(DeviceValueState::DV_HA_CONFIG_CREATED) && dv.has_state(DeviceValueState::DV_ACTIVE) && !dv.has_state(DeviceValueState::DV_API_MQTT_EXCLUDE)) { // create_device_config is only done once for the EMS device. It can added to any entity, so we take the first if (Mqtt::publish_ha_sensor_config(dv, name(), brand_to_char(), false, create_device_config)) { diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 0137c5c54..3a2bdf819 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -878,6 +878,7 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev readonly_sensors = false; break; case DeviceValueType::ENUM: + case DeviceValueType::CMD: // hardcoded commands are always ENUMS // select - https://www.home-assistant.io/integrations/select.mqtt snprintf(topic, sizeof(topic), "select/%s", config_topic); readonly_sensors = false; @@ -927,8 +928,8 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev } doc["cmd_t"] = command_topic; - // extend for enums, add options - if (type == DeviceValueType::ENUM) { + // extend for enums and also commands, add options + if ((type == DeviceValueType::ENUM) || (type == DeviceValueType::CMD)) { JsonArray option_list = doc["ops"].to(); if (EMSESP::system_.enum_format() == ENUM_FORMAT_INDEX) { // use index numbers @@ -943,7 +944,6 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev } snprintf(sample_val, sizeof(sample_val), "'%s'", Helpers::translated_word(options[0])); } - } else if (type != DeviceValueType::STRING && type != DeviceValueType::BOOL) { // For numeric's add the range doc["mode"] = "box"; // auto, slider or box @@ -979,11 +979,6 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev } } - // state topic - char stat_t[MQTT_TOPIC_MAX_SIZE]; - snprintf(stat_t, sizeof(stat_t), "%s/%s", Mqtt::base().c_str(), tag_to_topic(device_type, tag).c_str()); - doc["stat_t"] = stat_t; - // friendly name = char ha_name[70]; char * F_name = strdup(fullname); @@ -997,38 +992,49 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev free(F_name); // very important! doc["name"] = ha_name; - // value template - // if its nested mqtt format then use the appended entity name, otherwise take the original name - char val_obj[100]; - char val_cond[200]; - if (is_nested() && tag >= DeviceValueTAG::TAG_HC1) { - snprintf(val_obj, sizeof(val_obj), "value_json.%s.%s", EMSdevice::tag_to_mqtt(tag), entity); - snprintf(val_cond, sizeof(val_cond), "value_json.%s is defined and %s is defined", EMSdevice::tag_to_mqtt(tag), val_obj); - } else { - snprintf(val_obj, sizeof(val_obj), "value_json.%s", entity); - snprintf(val_cond, sizeof(val_cond), "%s is defined", val_obj); - } - // special case to handle booleans - // applies to both Binary Sensor (read only) and a Switch (for a command) - // has no unit of measure or icon - if (type == DeviceValueType::BOOL) { - if (EMSESP::system_.bool_format() == BOOL_FORMAT_TRUEFALSE) { - doc["pl_on"] = true; - doc["pl_off"] = false; - snprintf(sample_val, sizeof(sample_val), "false"); - } else if (EMSESP::system_.bool_format() == BOOL_FORMAT_10) { - doc["pl_on"] = 1; - doc["pl_off"] = 0; + // not needed for commands + if (type != DeviceValueType::CMD) { + // state topic, except for commands + char stat_t[MQTT_TOPIC_MAX_SIZE]; + snprintf(stat_t, sizeof(stat_t), "%s/%s", Mqtt::base().c_str(), tag_to_topic(device_type, tag).c_str()); + doc["stat_t"] = stat_t; + + // value template + // if its nested mqtt format then use the appended entity name, otherwise take the original name + char val_obj[100]; + char val_cond[200]; + if (is_nested() && tag >= DeviceValueTAG::TAG_HC1) { + snprintf(val_obj, sizeof(val_obj), "value_json.%s.%s", EMSdevice::tag_to_mqtt(tag), entity); + snprintf(val_cond, sizeof(val_cond), "value_json.%s is defined and %s is defined", EMSdevice::tag_to_mqtt(tag), val_obj); } else { - char result[12]; - doc["pl_on"] = Helpers::render_boolean(result, true); - doc["pl_off"] = Helpers::render_boolean(result, false); - snprintf(sample_val, sizeof(sample_val), "'%s'", Helpers::render_boolean(result, false)); + snprintf(val_obj, sizeof(val_obj), "value_json.%s", entity); + snprintf(val_cond, sizeof(val_cond), "%s is defined", val_obj); } - } - doc["val_tpl"] = (std::string) "{{" + val_obj + " if " + val_cond + " else " + sample_val + "}}"; + // special case to handle booleans + // applies to both Binary Sensor (read only) and a Switch (for a command) + // has no unit of measure or icon + if (type == DeviceValueType::BOOL) { + if (EMSESP::system_.bool_format() == BOOL_FORMAT_TRUEFALSE) { + doc["pl_on"] = true; + doc["pl_off"] = false; + snprintf(sample_val, sizeof(sample_val), "false"); + } else if (EMSESP::system_.bool_format() == BOOL_FORMAT_10) { + doc["pl_on"] = 1; + doc["pl_off"] = 0; + } else { + char result[12]; + doc["pl_on"] = Helpers::render_boolean(result, true); + doc["pl_off"] = Helpers::render_boolean(result, false); + snprintf(sample_val, sizeof(sample_val), "'%s'", Helpers::render_boolean(result, false)); + } + } + doc["val_tpl"] = (std::string) "{{" + val_obj + " if " + val_cond + " else " + sample_val + "}}"; + + // add the dev json object to the end, not for commands + add_ha_sections_to_doc(nullptr, stat_t, doc, false, val_cond); // no name, since the "dev" has already been adde + } // Add the state class, device class and sometimes the icon. Used only for read-only sensors like Sensor and Binary Sensor if (readonly_sensors) { @@ -1037,12 +1043,10 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev if (device_type == EMSdevice::DeviceType::SYSTEM) { doc["ent_cat"] = "diagnostic"; } - add_ha_uom(doc.as(), type, uom, entity); // add the UoM, device and state class } - doc["dev"] = dev_json; // add the dev json object to the end - add_ha_sections_to_doc(nullptr, stat_t, doc, false, val_cond); // no name, since the "dev" has already been added + doc["dev"] = dev_json; return queue_ha(topic, doc.as()); } From 2eb77b5f9705ac395d0b5fd8287299d3d79a3080 Mon Sep 17 00:00:00 2001 From: Proddy Date: Tue, 20 Feb 2024 23:28:06 +0100 Subject: [PATCH 3/9] package update --- interface/package.json | 16 ++-- interface/yarn.lock | 186 ++++++++++++++++++++--------------------- 2 files changed, 101 insertions(+), 101 deletions(-) diff --git a/interface/package.json b/interface/package.json index b16be7939..619bb82e8 100644 --- a/interface/package.json +++ b/interface/package.json @@ -31,8 +31,8 @@ "@table-library/react-table-library": "4.1.7", "@types/imagemin": "^8.0.5", "@types/lodash-es": "^4.17.12", - "@types/node": "^20.11.17", - "@types/react": "^18.2.55", + "@types/node": "^20.11.19", + "@types/react": "^18.2.57", "@types/react-dom": "^18.2.19", "@types/react-router-dom": "^5.3.3", "alova": "^2.17.0", @@ -45,7 +45,7 @@ "react-dom": "latest", "react-dropzone": "^14.2.3", "react-icons": "^5.0.1", - "react-router-dom": "^6.22.0", + "react-router-dom": "^6.22.1", "react-toastify": "^10.0.4", "sockette": "^2.0.6", "typesafe-i18n": "^5.26.2", @@ -54,8 +54,8 @@ "devDependencies": { "@preact/compat": "^17.1.2", "@preact/preset-vite": "^2.8.1", - "@typescript-eslint/eslint-plugin": "^7.0.1", - "@typescript-eslint/parser": "^7.0.1", + "@typescript-eslint/eslint-plugin": "^7.0.2", + "@typescript-eslint/parser": "^7.0.2", "concurrently": "^8.2.2", "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", @@ -66,11 +66,11 @@ "eslint-plugin-prettier": "alpha", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", - "preact": "^10.19.4", + "preact": "^10.19.5", "prettier": "^3.2.5", "rollup-plugin-visualizer": "^5.12.0", - "terser": "^5.27.0", - "vite": "^5.1.2", + "terser": "^5.27.2", + "vite": "^5.1.3", "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^4.3.1" }, diff --git a/interface/yarn.lock b/interface/yarn.lock index ee2137def..4e0accd5b 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -1299,10 +1299,10 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.15.0": - version: 1.15.0 - resolution: "@remix-run/router@npm:1.15.0" - checksum: 10/5cadae0c90874966ebd6b1b202284a337da32a68fc95af502859cd6158d3c254fbb4f76fa1844c837205dbc8a8120223360b9287a3d6aa0c747d02767c4c072c +"@remix-run/router@npm:1.15.1": + version: 1.15.1 + resolution: "@remix-run/router@npm:1.15.1" + checksum: 10/d262285d155f80779894ee1d9ef07e35421986ba2546378dfe0e3b09397ce71becb6a4677e9efcd4155e2bd3f9f7f7ecbc110cd99bacee6dd7d3e5ce51b7caa8 languageName: node linkType: hard @@ -1590,12 +1590,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^20.11.17": - version: 20.11.17 - resolution: "@types/node@npm:20.11.17" +"@types/node@npm:^20.11.19": + version: 20.11.19 + resolution: "@types/node@npm:20.11.19" dependencies: undici-types: "npm:~5.26.4" - checksum: 10/3342df87258d1c56154bcd4b85180f48675427b235971e6e6e2e037353f5a2ae9aaa05ba5df0fe1e2d2f1022c8d856fd39056b9d7f50ea30c0ca3214137cae1d + checksum: 10/c7f4705d6c84aa21679ad180c33c13ca9567f650e66e14bcee77c7c43d14619c7cd3b4d7b2458947143030b7b1930180efa6d12d999b45366abff9fed7a17472 languageName: node linkType: hard @@ -1670,14 +1670,14 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^18.2.55": - version: 18.2.55 - resolution: "@types/react@npm:18.2.55" +"@types/react@npm:^18.2.57": + version: 18.2.57 + resolution: "@types/react@npm:18.2.57" dependencies: "@types/prop-types": "npm:*" "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 10/bf8fe19e73575489e63c0726355f164157cd69e75f2a862436ad2c0586e732cb953a7255a6bc73145e8f9506ee7a723f9a569ca9a39c53984e5b12b84e1c718a + checksum: 10/beee45a8ee48862fb5101f6ebdd89ccc20c5a6df29dcd2315560bc3b57ea3af8d09a8e9bb1c58063a70f9010e0d2c7bd300819438e2ca62810285c3d7275ab5a languageName: node linkType: hard @@ -1713,15 +1713,15 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^7.0.1": - version: 7.0.1 - resolution: "@typescript-eslint/eslint-plugin@npm:7.0.1" +"@typescript-eslint/eslint-plugin@npm:^7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/eslint-plugin@npm:7.0.2" dependencies: "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:7.0.1" - "@typescript-eslint/type-utils": "npm:7.0.1" - "@typescript-eslint/utils": "npm:7.0.1" - "@typescript-eslint/visitor-keys": "npm:7.0.1" + "@typescript-eslint/scope-manager": "npm:7.0.2" + "@typescript-eslint/type-utils": "npm:7.0.2" + "@typescript-eslint/utils": "npm:7.0.2" + "@typescript-eslint/visitor-keys": "npm:7.0.2" debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" ignore: "npm:^5.2.4" @@ -1734,44 +1734,44 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/0862e8ec8677fcea794394fc9eab8dba11043c08452722790e0d296d4ee84713180676e1e3135be4203ace7bb73933c94159255cb9190c7bc13bf7f03a361915 + checksum: 10/430b2f7ca36ee73dc75c1d677088709f3c9d5bbb4fffa3cfbe1b7d63979ee397f7a4a2a1386e05a04991500fa0ab0dd5272e8603a2b20f42e4bf590603500858 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^7.0.1": - version: 7.0.1 - resolution: "@typescript-eslint/parser@npm:7.0.1" +"@typescript-eslint/parser@npm:^7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/parser@npm:7.0.2" dependencies: - "@typescript-eslint/scope-manager": "npm:7.0.1" - "@typescript-eslint/types": "npm:7.0.1" - "@typescript-eslint/typescript-estree": "npm:7.0.1" - "@typescript-eslint/visitor-keys": "npm:7.0.1" + "@typescript-eslint/scope-manager": "npm:7.0.2" + "@typescript-eslint/types": "npm:7.0.2" + "@typescript-eslint/typescript-estree": "npm:7.0.2" + "@typescript-eslint/visitor-keys": "npm:7.0.2" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10/b4ba1743ab730268a1924139f072e4a0a56959526fb6377e1b3964518b6c6851733ae446a44d29fed1cb96669e2913cca524895ce77a6205aaed8bda00e8cd5d + checksum: 10/18d6e1bda64013f7d66164164c57a10390f7979db55b265062ae9337e11e0921bffca10870e252cd0bd198f79ffa2e87a652e57110e5b1b4cc738453154c205c languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:7.0.1": - version: 7.0.1 - resolution: "@typescript-eslint/scope-manager@npm:7.0.1" +"@typescript-eslint/scope-manager@npm:7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/scope-manager@npm:7.0.2" dependencies: - "@typescript-eslint/types": "npm:7.0.1" - "@typescript-eslint/visitor-keys": "npm:7.0.1" - checksum: 10/dade6055bb853adb54de795cc3da5ab8550236d4186f108573fdb02e636ab7fc4300a55b506698ced4087ca43b143a5593931cb3195ab4790470b456d9ff8846 + "@typescript-eslint/types": "npm:7.0.2" + "@typescript-eslint/visitor-keys": "npm:7.0.2" + checksum: 10/773ea6e61f741777e69a469641f3db0d3c2301c0102667825fb235ed5a65c95f6d6b31b19e734b9a215acc0c7c576c65497635b8d5928eeddb58653ceb13d2d5 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:7.0.1": - version: 7.0.1 - resolution: "@typescript-eslint/type-utils@npm:7.0.1" +"@typescript-eslint/type-utils@npm:7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/type-utils@npm:7.0.2" dependencies: - "@typescript-eslint/typescript-estree": "npm:7.0.1" - "@typescript-eslint/utils": "npm:7.0.1" + "@typescript-eslint/typescript-estree": "npm:7.0.2" + "@typescript-eslint/utils": "npm:7.0.2" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.0.1" peerDependencies: @@ -1779,23 +1779,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/cf20a3c0e56121ac62467e48121e135798db6d2999bd4f96ed44edc39f2597812d12b1bd6a378adec54d6c5e7db75fa5f98a27ce399792a2c8a5bbd3649952f7 + checksum: 10/63bf19c9f5bbcb0f3e127f509d85dc49be4e5e51781d78f58c96786089e7c909b25d35d0248a6a758e2f7d5b5223d2262c2d597ab71f226af6beb499ae950645 languageName: node linkType: hard -"@typescript-eslint/types@npm:7.0.1": - version: 7.0.1 - resolution: "@typescript-eslint/types@npm:7.0.1" - checksum: 10/c08b2d34bab2a877a45a1e4c2923f50d03022b682b7aaba929ae2a9a5ad32db0e46265544a6616ccb98654b434250621be0e282fc5b21b8ccaf6b78741d68f67 +"@typescript-eslint/types@npm:7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/types@npm:7.0.2" + checksum: 10/2cba8a0355cc7357db142fa597d02cf39e1d1cb0ec87c80e91daaa2b87f2a794d2649def9d7b2aa435691c3810d2cbd4cdc21668b19b991863f0d54d4a22da82 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.0.1": - version: 7.0.1 - resolution: "@typescript-eslint/typescript-estree@npm:7.0.1" +"@typescript-eslint/typescript-estree@npm:7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/typescript-estree@npm:7.0.2" dependencies: - "@typescript-eslint/types": "npm:7.0.1" - "@typescript-eslint/visitor-keys": "npm:7.0.1" + "@typescript-eslint/types": "npm:7.0.2" + "@typescript-eslint/visitor-keys": "npm:7.0.2" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" @@ -1805,34 +1805,34 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/b0b0adc84502d1ffcf3a0024179e0f2780be5f8b0a18328db46d430efc4e38a7965656b4392dd47d6176bbb1ee200aec6dd8581c39b606e260750574358cde9f + checksum: 10/307080e29c22fc69f0ce7ab7101e1629e05f45a9e541c250e03d06b61336ab0ccb5f0a7354ee3da4e38d5cade4dd2fb7bb396cd7cbe74c2c4b3e29706a70abcc languageName: node linkType: hard -"@typescript-eslint/utils@npm:7.0.1": - version: 7.0.1 - resolution: "@typescript-eslint/utils@npm:7.0.1" +"@typescript-eslint/utils@npm:7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/utils@npm:7.0.2" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" "@types/json-schema": "npm:^7.0.12" "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:7.0.1" - "@typescript-eslint/types": "npm:7.0.1" - "@typescript-eslint/typescript-estree": "npm:7.0.1" + "@typescript-eslint/scope-manager": "npm:7.0.2" + "@typescript-eslint/types": "npm:7.0.2" + "@typescript-eslint/typescript-estree": "npm:7.0.2" semver: "npm:^7.5.4" peerDependencies: eslint: ^8.56.0 - checksum: 10/b7e0cb2994f73b3f416684dc175d4e1da5f8306d6c81abbad2f219fa3e4f29154063a3c9568e4a1f879a38b79c62250e596e4ed7265f7bd1ed9b3db806cb92b7 + checksum: 10/e68bac777419cd529371f7f29f534efaeca130c90ed9723bfc7aac451d61ca3fc4ebd310e2c015e29e8dc7be4734ae46258ca8755897d7f5e3bb502660d5372f languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:7.0.1": - version: 7.0.1 - resolution: "@typescript-eslint/visitor-keys@npm:7.0.1" +"@typescript-eslint/visitor-keys@npm:7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/visitor-keys@npm:7.0.2" dependencies: - "@typescript-eslint/types": "npm:7.0.1" + "@typescript-eslint/types": "npm:7.0.2" eslint-visitor-keys: "npm:^3.4.1" - checksum: 10/915c5b19302a4c76e843cd2d04a9a2b11907e658d7018c8b55c338b090d9115d3719809aa05b8af130cc1b216c77626d210c20f705b732e83d04ceae0c112f6b + checksum: 10/da6c1b0729af99216cde3a65d4e91584a81fc6c9dff7ba291089f01bf7262de375f58c4c4246e5fbc29f51258db7725d9c830f82ccbd1cda812fd13c51480cda languageName: node linkType: hard @@ -1858,12 +1858,12 @@ __metadata: "@table-library/react-table-library": "npm:4.1.7" "@types/imagemin": "npm:^8.0.5" "@types/lodash-es": "npm:^4.17.12" - "@types/node": "npm:^20.11.17" - "@types/react": "npm:^18.2.55" + "@types/node": "npm:^20.11.19" + "@types/react": "npm:^18.2.57" "@types/react-dom": "npm:^18.2.19" "@types/react-router-dom": "npm:^5.3.3" - "@typescript-eslint/eslint-plugin": "npm:^7.0.1" - "@typescript-eslint/parser": "npm:^7.0.1" + "@typescript-eslint/eslint-plugin": "npm:^7.0.2" + "@typescript-eslint/parser": "npm:^7.0.2" alova: "npm:^2.17.0" async-validator: "npm:^4.2.5" concurrently: "npm:^8.2.2" @@ -1880,20 +1880,20 @@ __metadata: jwt-decode: "npm:^4.0.0" lodash-es: "npm:^4.17.21" mime-types: "npm:^2.1.35" - preact: "npm:^10.19.4" + preact: "npm:^10.19.5" prettier: "npm:^3.2.5" react: "npm:latest" react-dom: "npm:latest" react-dropzone: "npm:^14.2.3" react-icons: "npm:^5.0.1" - react-router-dom: "npm:^6.22.0" + react-router-dom: "npm:^6.22.1" react-toastify: "npm:^10.0.4" rollup-plugin-visualizer: "npm:^5.12.0" sockette: "npm:^2.0.6" - terser: "npm:^5.27.0" + terser: "npm:^5.27.2" typesafe-i18n: "npm:^5.26.2" typescript: "npm:^5.3.3" - vite: "npm:^5.1.2" + vite: "npm:^5.1.3" vite-plugin-imagemin: "npm:^0.6.1" vite-tsconfig-paths: "npm:^4.3.1" languageName: unknown @@ -7021,10 +7021,10 @@ __metadata: languageName: node linkType: hard -"preact@npm:^10.19.4": - version: 10.19.4 - resolution: "preact@npm:10.19.4" - checksum: 10/e79051c08d61c6723a4535606c9136ea752f8bae984ae8056039e2a56f6d58d6200aa941850478dc822dca38c16469d23368e9f75d7a7e57f9ca4df70a305d0f +"preact@npm:^10.19.5": + version: 10.19.5 + resolution: "preact@npm:10.19.5" + checksum: 10/9c4c716361d7793f6c8ae475db7bbed7ef4affd4ac8eaf6ff9afd8d1218a0ae55918635b5d8842a3c8eecd22728e24f0af681c710d0ada6d81424dd991665cde languageName: node linkType: hard @@ -7192,27 +7192,27 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:^6.22.0": - version: 6.22.0 - resolution: "react-router-dom@npm:6.22.0" +"react-router-dom@npm:^6.22.1": + version: 6.22.1 + resolution: "react-router-dom@npm:6.22.1" dependencies: - "@remix-run/router": "npm:1.15.0" - react-router: "npm:6.22.0" + "@remix-run/router": "npm:1.15.1" + react-router: "npm:6.22.1" peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 10/32ba0386d400354094116fa7dd98f1d23bc7cf683b0f4509694be5f730d4957fcb8cc73e35946576fc3f48b4d36743422f1b9bcdc37ad77f04bde0bde5d9102e + checksum: 10/73ab964083bb407773a5c4ca61249ed6b0a1b47fa58c39afca08a361eb25b349be2bcbaf6d89e112b020f6e55e40e62689c9fe2beae524030ce5ccede3c7d9e3 languageName: node linkType: hard -"react-router@npm:6.22.0": - version: 6.22.0 - resolution: "react-router@npm:6.22.0" +"react-router@npm:6.22.1": + version: 6.22.1 + resolution: "react-router@npm:6.22.1" dependencies: - "@remix-run/router": "npm:1.15.0" + "@remix-run/router": "npm:1.15.1" peerDependencies: react: ">=16.8" - checksum: 10/627c25533667da0c8008587208e0d5633409173969fd579de706cde355465f6d1245e2b1a7ca2adeb96201f2858932b59ce3402482786cd20c4bf278562976dd + checksum: 10/f6e814b8e3005f16a5fb0e831f0e4352076cde65ab25448d56dba87a43fd3e102f55f9b366bdf1fbd8136fc1dc141bcec8d6b85d45f309e89180fb50f173744d languageName: node linkType: hard @@ -8312,9 +8312,9 @@ __metadata: languageName: node linkType: hard -"terser@npm:^5.27.0": - version: 5.27.0 - resolution: "terser@npm:5.27.0" +"terser@npm:^5.27.2": + version: 5.27.2 + resolution: "terser@npm:5.27.2" dependencies: "@jridgewell/source-map": "npm:^0.3.3" acorn: "npm:^8.8.2" @@ -8322,7 +8322,7 @@ __metadata: source-map-support: "npm:~0.5.20" bin: terser: bin/terser - checksum: 10/9b2c5cb00747dea5994034ca064fb3cc7efc1be6b79a35247662d51ab43bdbe9cbf002bbf29170b5f3bd068c811d0212e22d94acd2cf0d8562687b96f1bffc9f + checksum: 10/589f1112d6cd7653f6e2d4a38970e97a160de01cddb214dc924aa330c22b8c3635067a47db1233e060e613e380b979ca336c3211b17507ea13b0adff10ecbd40 languageName: node linkType: hard @@ -8738,9 +8738,9 @@ __metadata: languageName: node linkType: hard -"vite@npm:^5.1.2": - version: 5.1.2 - resolution: "vite@npm:5.1.2" +"vite@npm:^5.1.3": + version: 5.1.3 + resolution: "vite@npm:5.1.3" dependencies: esbuild: "npm:^0.19.3" fsevents: "npm:~2.3.3" @@ -8774,7 +8774,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10/fbfc5a84ee33c01cd2c3109ba08c2f3822df9a85bee79179ba5a812757f895e2da234208881b9943291d48b0a4ef8fb90ffaa790d89888530a2ad6c70c169e12 + checksum: 10/6ba2223157e2cc2fa62dff9004ccba20fc409c6baf7354c64ed0f8e4bcd853092d08d06ec4dec37143e794a96e061879a870d85bad4f1eb9ee5c6d0a13cef30f languageName: node linkType: hard From 1a08ab6a2bc19ec4c74815bb6700d69d9a0aa4aa Mon Sep 17 00:00:00 2001 From: Proddy Date: Wed, 21 Feb 2024 23:04:10 +0100 Subject: [PATCH 4/9] remove RSSI from info payload as its in the heartbeat --- src/system.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/system.cpp b/src/system.cpp index 926acef97..eabfcd09e 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -587,7 +587,6 @@ void System::send_info_mqtt() { doc["hostname"] = WiFi.getHostname(); doc["SSID"] = WiFi.SSID(); doc["BSSID"] = WiFi.BSSIDstr(); - doc["RSSI"] = WiFi.RSSI(); doc["MAC"] = WiFi.macAddress(); doc["IPv4 address"] = uuid::printable_to_string(WiFi.localIP()) + "/" + uuid::printable_to_string(WiFi.subnetMask()); doc["IPv4 gateway"] = uuid::printable_to_string(WiFi.gatewayIP()); @@ -602,13 +601,19 @@ void System::send_info_mqtt() { // create the json for heartbeat void System::heartbeat_json(JsonObject output) { - uint8_t bus_status = EMSESP::bus_status(); - if (bus_status == EMSESP::BUS_STATUS_TX_ERRORS) { + switch (EMSESP::bus_status()) { + case EMSESP::BUS_STATUS_OFFLINE: + output["bus_status"] = "connecting"; // EMS-ESP is booting... + break; + case EMSESP::BUS_STATUS_TX_ERRORS: output["bus_status"] = "txerror"; - } else if (bus_status == EMSESP::BUS_STATUS_CONNECTED) { + break; + case EMSESP::BUS_STATUS_CONNECTED: output["bus_status"] = "connected"; - } else { + break; + default: output["bus_status"] = "disconnected"; + break; } output["uptime"] = uuid::log::format_timestamp_ms(uuid::get_uptime_ms(), 3); @@ -732,6 +737,9 @@ void System::system_check() { static uint8_t last_healthcheck_ = 0; if (healthcheck_ != last_healthcheck_) { last_healthcheck_ = healthcheck_; + + EMSESP::system_.send_heartbeat(); // send MQTT heartbeat immediately when connected + // see if we're better now if (healthcheck_ == 0) { // everything is healthy, show LED permanently on or off depending on setting From 24f2d8605914b57d58b9280891da28ef5c2005cb Mon Sep 17 00:00:00 2001 From: Proddy Date: Wed, 21 Feb 2024 23:04:18 +0100 Subject: [PATCH 5/9] update packages --- interface/package.json | 2 +- interface/yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/interface/package.json b/interface/package.json index 619bb82e8..bd99c7839 100644 --- a/interface/package.json +++ b/interface/package.json @@ -70,7 +70,7 @@ "prettier": "^3.2.5", "rollup-plugin-visualizer": "^5.12.0", "terser": "^5.27.2", - "vite": "^5.1.3", + "vite": "^5.1.4", "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^4.3.1" }, diff --git a/interface/yarn.lock b/interface/yarn.lock index 4e0accd5b..8ded7482e 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -1893,7 +1893,7 @@ __metadata: terser: "npm:^5.27.2" typesafe-i18n: "npm:^5.26.2" typescript: "npm:^5.3.3" - vite: "npm:^5.1.3" + vite: "npm:^5.1.4" vite-plugin-imagemin: "npm:^0.6.1" vite-tsconfig-paths: "npm:^4.3.1" languageName: unknown @@ -8738,9 +8738,9 @@ __metadata: languageName: node linkType: hard -"vite@npm:^5.1.3": - version: 5.1.3 - resolution: "vite@npm:5.1.3" +"vite@npm:^5.1.4": + version: 5.1.4 + resolution: "vite@npm:5.1.4" dependencies: esbuild: "npm:^0.19.3" fsevents: "npm:~2.3.3" @@ -8774,7 +8774,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10/6ba2223157e2cc2fa62dff9004ccba20fc409c6baf7354c64ed0f8e4bcd853092d08d06ec4dec37143e794a96e061879a870d85bad4f1eb9ee5c6d0a13cef30f + checksum: 10/e9003b853f0784260f4fe7ce0190124b347fd8fd6bf889a07080facd0d9a9667eaff4022eddb1ba3f0283ef69d15d77f84bca832082e48874a7a62e7f6d66b08 languageName: node linkType: hard From 189ea6b23dc44f5d14306f7c0c9a746c2d903b8f Mon Sep 17 00:00:00 2001 From: Proddy Date: Wed, 21 Feb 2024 23:04:32 +0100 Subject: [PATCH 6/9] Send MQTT heartbeat immediately after connection --- CHANGELOG_LATEST.md | 1 + src/mqtt.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 9ba8bb590..c77c6f712 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -41,3 +41,4 @@ - small changes to the API for analog and temperature sensors - Length of mqtt Broker adress [#1619](https://github.com/emsesp/EMS-ESP32/issues/1619) - C++ optimizations - see +- Send MQTT heartbeat immediately after connection diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 3a2bdf819..2d736aa37 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -508,7 +508,7 @@ void Mqtt::on_connect() { resubscribe(); // publish to the last will topic (see Mqtt::start() function) to say we're alive - queue_publish_retain("status", "online", true); // with retain on + queue_publish_retain("status", "online", false); // with retain off // mqtt_publish_fails_ = 0; // reset fail count to 0 } From 34201025c39d462809188025e133b1a98f357f53 Mon Sep 17 00:00:00 2001 From: Proddy Date: Wed, 21 Feb 2024 23:10:56 +0100 Subject: [PATCH 7/9] update with #1628 --- CHANGELOG_LATEST.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index c77c6f712..eecd5a649 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -41,4 +41,4 @@ - small changes to the API for analog and temperature sensors - Length of mqtt Broker adress [#1619](https://github.com/emsesp/EMS-ESP32/issues/1619) - C++ optimizations - see -- Send MQTT heartbeat immediately after connection +- Send MQTT heartbeat immediately after connection [#1628](https://github.com/emsesp/EMS-ESP32/issues/1628) From dffc4a7c0249c0f212cab02fdb6d2f3f7907bcd3 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 22 Feb 2024 21:27:43 +0100 Subject: [PATCH 8/9] package update --- interface/package.json | 4 ++-- interface/yarn.lock | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/interface/package.json b/interface/package.json index bd99c7839..5f8471407 100644 --- a/interface/package.json +++ b/interface/package.json @@ -31,7 +31,7 @@ "@table-library/react-table-library": "4.1.7", "@types/imagemin": "^8.0.5", "@types/lodash-es": "^4.17.12", - "@types/node": "^20.11.19", + "@types/node": "^20.11.20", "@types/react": "^18.2.57", "@types/react-dom": "^18.2.19", "@types/react-router-dom": "^5.3.3", @@ -66,7 +66,7 @@ "eslint-plugin-prettier": "alpha", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", - "preact": "^10.19.5", + "preact": "^10.19.6", "prettier": "^3.2.5", "rollup-plugin-visualizer": "^5.12.0", "terser": "^5.27.2", diff --git a/interface/yarn.lock b/interface/yarn.lock index 8ded7482e..4a57a829b 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -1590,12 +1590,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^20.11.19": - version: 20.11.19 - resolution: "@types/node@npm:20.11.19" +"@types/node@npm:^20.11.20": + version: 20.11.20 + resolution: "@types/node@npm:20.11.20" dependencies: undici-types: "npm:~5.26.4" - checksum: 10/c7f4705d6c84aa21679ad180c33c13ca9567f650e66e14bcee77c7c43d14619c7cd3b4d7b2458947143030b7b1930180efa6d12d999b45366abff9fed7a17472 + checksum: 10/ff449bdc94810dadb54e0f77dd587c6505ef79ffa5a208c16eb29b223365b188f4c935a3abaf0906a01d05257c3da1f72465594a841d35bcf7b6deac7a6938fb languageName: node linkType: hard @@ -1858,7 +1858,7 @@ __metadata: "@table-library/react-table-library": "npm:4.1.7" "@types/imagemin": "npm:^8.0.5" "@types/lodash-es": "npm:^4.17.12" - "@types/node": "npm:^20.11.19" + "@types/node": "npm:^20.11.20" "@types/react": "npm:^18.2.57" "@types/react-dom": "npm:^18.2.19" "@types/react-router-dom": "npm:^5.3.3" @@ -1880,7 +1880,7 @@ __metadata: jwt-decode: "npm:^4.0.0" lodash-es: "npm:^4.17.21" mime-types: "npm:^2.1.35" - preact: "npm:^10.19.5" + preact: "npm:^10.19.6" prettier: "npm:^3.2.5" react: "npm:latest" react-dom: "npm:latest" @@ -7021,10 +7021,10 @@ __metadata: languageName: node linkType: hard -"preact@npm:^10.19.5": - version: 10.19.5 - resolution: "preact@npm:10.19.5" - checksum: 10/9c4c716361d7793f6c8ae475db7bbed7ef4affd4ac8eaf6ff9afd8d1218a0ae55918635b5d8842a3c8eecd22728e24f0af681c710d0ada6d81424dd991665cde +"preact@npm:^10.19.6": + version: 10.19.6 + resolution: "preact@npm:10.19.6" + checksum: 10/851c7d91e6899a40fdeae0ef9a792bf3217ed8365ce96f4c5630048c82b44c637fd4c0d8a4b0c3e1c8e74e243600dd9c5787520da07552d33a06c957779b4167 languageName: node linkType: hard From 0f06bfa91c5f49f7cda4eef0f21ed5c3a11dc16b Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 22 Feb 2024 21:29:04 +0100 Subject: [PATCH 9/9] 3.6.5-dev15 --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 2caf6b5af..b047d5c75 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.6.5-dev.14" +#define EMSESP_APP_VERSION "3.6.5-dev.15"