From a5e68ef0964802d44a42f20b66c8fb4abae8a3b8 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 28 Sep 2022 18:40:52 +0200 Subject: [PATCH] Fixed several issues in the web api to set the limit --- src/WebApi_limit.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/WebApi_limit.cpp b/src/WebApi_limit.cpp index b22bc7a..fe85179 100644 --- a/src/WebApi_limit.cpp +++ b/src/WebApi_limit.cpp @@ -90,19 +90,37 @@ void WebApiLimitClass::onLimitPost(AsyncWebServerRequest* request) return; } - if (root[F("limit_value")].as() == 0 || root[F("limit_value")].as() > 1500) { + if (root[F("limit_value")].as() == 0 || root[F("limit_value")].as() > 1500) { retMsg[F("message")] = F("Limit must between 1 and 1500!"); response->setLength(); request->send(response); return; } + if (!((root[F("limit_type")].as() == PowerLimitControlType::AbsolutNonPersistent) + || (root[F("limit_type")].as() == PowerLimitControlType::AbsolutPersistent) + || (root[F("limit_type")].as() == PowerLimitControlType::RelativNonPersistent) + || (root[F("limit_type")].as() == PowerLimitControlType::RelativPersistent))) { + + retMsg[F("message")] = F("Invalid type specified!"); + response->setLength(); + request->send(response); + return; + } + uint64_t serial = strtoll(root[F("serial")].as().c_str(), NULL, 16); - uint64_t limit = root[F("serial")].as(); + uint16_t limit = root[F("limit_value")].as(); + PowerLimitControlType type = root[F("limit_type")].as(); auto inv = Hoymiles.getInverterBySerial(serial); + if (inv == nullptr) { + retMsg[F("message")] = F("Invalid inverter specified!"); + response->setLength(); + request->send(response); + return; + } - inv->sendActivePowerControlRequest(Hoymiles.getRadio(), limit, PowerLimitControlType::RelativNonPersistent); + inv->sendActivePowerControlRequest(Hoymiles.getRadio(), limit, type); retMsg[F("type")] = F("success"); retMsg[F("message")] = F("Settings saved!");