From 59f43a82a812f082c8255f36cee7da83cca49f56 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 17 Apr 2023 21:48:16 +0200 Subject: [PATCH] BREAKING CHANGE: Web API Endpoint /api/devinfo/status requires GET parameter inv= Only the requested inverter is sent to the client. This reduces the size of the json response --> Less memory. It should also fix #814. --- src/WebApi_devinfo.cpp | 27 ++++++++++++++++----------- webapp/src/views/HomeView.vue | 4 ++-- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/WebApi_devinfo.cpp b/src/WebApi_devinfo.cpp index 999edcc6..31d1d0ca 100644 --- a/src/WebApi_devinfo.cpp +++ b/src/WebApi_devinfo.cpp @@ -30,22 +30,27 @@ void WebApiDevInfoClass::onDevInfoStatus(AsyncWebServerRequest* request) AsyncJsonResponse* response = new AsyncJsonResponse(); JsonObject root = response->getRoot(); - for (uint8_t i = 0; i < Hoymiles.getNumInverters(); i++) { - auto inv = Hoymiles.getInverterByPos(i); + uint64_t serial = 0; + if (request->hasParam("inv")) { + String s = request->getParam("inv")->value(); + serial = strtoll(s.c_str(), NULL, 16); + } - JsonObject devInfoObj = root[inv->serialString()].createNestedObject(); - devInfoObj["valid_data"] = inv->DevInfo()->getLastUpdate() > 0; - devInfoObj["fw_bootloader_version"] = inv->DevInfo()->getFwBootloaderVersion(); - devInfoObj["fw_build_version"] = inv->DevInfo()->getFwBuildVersion(); - devInfoObj["hw_part_number"] = inv->DevInfo()->getHwPartNumber(); - devInfoObj["hw_version"] = inv->DevInfo()->getHwVersion(); - devInfoObj["hw_model_name"] = inv->DevInfo()->getHwModelName(); - devInfoObj["max_power"] = inv->DevInfo()->getMaxPower(); + auto inv = Hoymiles.getInverterBySerial(serial); + + if (inv != nullptr) { + root["valid_data"] = inv->DevInfo()->getLastUpdate() > 0; + root["fw_bootloader_version"] = inv->DevInfo()->getFwBootloaderVersion(); + root["fw_build_version"] = inv->DevInfo()->getFwBuildVersion(); + root["hw_part_number"] = inv->DevInfo()->getHwPartNumber(); + root["hw_version"] = inv->DevInfo()->getHwVersion(); + root["hw_model_name"] = inv->DevInfo()->getHwModelName(); + root["max_power"] = inv->DevInfo()->getMaxPower(); char timebuffer[32]; const time_t t = inv->DevInfo()->getFwBuildDateTime(); std::strftime(timebuffer, sizeof(timebuffer), "%Y-%m-%d %H:%M:%S", gmtime(&t)); - devInfoObj["fw_build_datetime"] = String(timebuffer); + root["fw_build_datetime"] = String(timebuffer); } response->setLength(); diff --git a/webapp/src/views/HomeView.vue b/webapp/src/views/HomeView.vue index 1d55a158..6ea54cf6 100644 --- a/webapp/src/views/HomeView.vue +++ b/webapp/src/views/HomeView.vue @@ -544,10 +544,10 @@ export default defineComponent({ }, onShowDevInfo(serial: number) { this.devInfoLoading = true; - fetch("/api/devinfo/status", { headers: authHeader() }) + fetch("/api/devinfo/status?inv=" + serial, { headers: authHeader() }) .then((response) => handleResponse(response, this.$emitter, this.$router)) .then((data) => { - this.devInfoList = data[serial][0]; + this.devInfoList = data; this.devInfoList.serial = serial; this.devInfoLoading = false; });