diff --git a/include/WebApi_power.h b/include/WebApi_power.h index 60cabfb..f8912c0 100644 --- a/include/WebApi_power.h +++ b/include/WebApi_power.h @@ -9,6 +9,7 @@ public: void loop(); private: + void onPowerStatus(AsyncWebServerRequest* request); void onPowerPost(AsyncWebServerRequest* request); AsyncWebServer* _server; diff --git a/src/WebApi_power.cpp b/src/WebApi_power.cpp index 319134c..cb63e00 100644 --- a/src/WebApi_power.cpp +++ b/src/WebApi_power.cpp @@ -13,6 +13,7 @@ void WebApiPowerClass::init(AsyncWebServer* server) _server = server; + _server->on("/api/power/status", HTTP_GET, std::bind(&WebApiPowerClass::onPowerStatus, this, _1)); _server->on("/api/power/config", HTTP_POST, std::bind(&WebApiPowerClass::onPowerPost, this, _1)); } @@ -20,6 +21,38 @@ void WebApiPowerClass::loop() { } +void WebApiPowerClass::onPowerStatus(AsyncWebServerRequest* request) +{ + AsyncJsonResponse* response = new AsyncJsonResponse(); + JsonObject root = response->getRoot(); + + for (uint8_t i = 0; i < Hoymiles.getNumInverters(); i++) { + auto inv = Hoymiles.getInverterByPos(i); + + // Inverter Serial is read as HEX + char buffer[sizeof(uint64_t) * 8 + 1]; + snprintf(buffer, sizeof(buffer), "%0lx%08lx", + ((uint32_t)((inv->serial() >> 32) & 0xFFFFFFFF)), + ((uint32_t)(inv->serial() & 0xFFFFFFFF))); + + LastCommandSuccess status = inv->PowerCommand()->getLastPowerCommandSuccess(); + String limitStatus = "Unknown"; + if (status == LastCommandSuccess::CMD_OK) { + limitStatus = "Ok"; + } + else if (status == LastCommandSuccess::CMD_NOK) { + limitStatus = "Failure"; + } + else if (status == LastCommandSuccess::CMD_PENDING) { + limitStatus = "Pending"; + } + root[buffer]["power_set_status"] = limitStatus; + } + + response->setLength(); + request->send(response); +} + void WebApiPowerClass::onPowerPost(AsyncWebServerRequest* request) { AsyncJsonResponse* response = new AsyncJsonResponse();